diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-20 13:40:20 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-22 12:41:23 +0000 |
commit | 7961cea6d1041e3e454dae6a1da660b453efd238 (patch) | |
tree | c0eeb4a9ff9ba32986289c1653d9608e53ccb444 /chromium/net/http | |
parent | b7034d0803538058e5c9d904ef03cf5eab34f6ef (diff) | |
download | qtwebengine-chromium-7961cea6d1041e3e454dae6a1da660b453efd238.tar.gz |
BASELINE: Update Chromium to 78.0.3904.130
Change-Id: If185e0c0061b3437531c97c9c8c78f239352a68b
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/net/http')
84 files changed, 10328 insertions, 7313 deletions
diff --git a/chromium/net/http/BUILD.gn b/chromium/net/http/BUILD.gn index 3799a9fcbe3..22ec5deed01 100644 --- a/chromium/net/http/BUILD.gn +++ b/chromium/net/http/BUILD.gn @@ -73,6 +73,7 @@ source_set("transport_security_state_generated_files") { ] deps = [ + "//build:branding_buildflags", "//net:net_deps", "//net:net_public_deps", "//net/dns", diff --git a/chromium/net/http/alternative_service.cc b/chromium/net/http/alternative_service.cc new file mode 100644 index 00000000000..c35a3968c2d --- /dev/null +++ b/chromium/net/http/alternative_service.cc @@ -0,0 +1,239 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/http/alternative_service.h" + +#include "base/logging.h" +#include "base/metrics/histogram_macros.h" +#include "base/strings/stringprintf.h" + +namespace net { + +namespace { + +enum AlternativeProxyUsage { + // Alternative Proxy was used without racing a normal connection. + ALTERNATIVE_PROXY_USAGE_NO_RACE = 0, + // Alternative Proxy was used by winning a race with a normal connection. + ALTERNATIVE_PROXY_USAGE_WON_RACE = 1, + // Alternative Proxy was not used by losing a race with a normal connection. + ALTERNATIVE_PROXY_USAGE_LOST_RACE = 2, + // Maximum value for the enum. + ALTERNATIVE_PROXY_USAGE_MAX, +}; + +AlternativeProxyUsage ConvertProtocolUsageToProxyUsage( + AlternateProtocolUsage usage) { + switch (usage) { + case ALTERNATE_PROTOCOL_USAGE_NO_RACE: + return ALTERNATIVE_PROXY_USAGE_NO_RACE; + case ALTERNATE_PROTOCOL_USAGE_WON_RACE: + return ALTERNATIVE_PROXY_USAGE_WON_RACE; + case ALTERNATE_PROTOCOL_USAGE_LOST_RACE: + return ALTERNATIVE_PROXY_USAGE_LOST_RACE; + default: + NOTREACHED(); + return ALTERNATIVE_PROXY_USAGE_MAX; + } +} + +quic::ParsedQuicVersion ParsedQuicVersionFromAlpn( + base::StringPiece str, + quic::ParsedQuicVersionVector supported_versions) { + for (const quic::ParsedQuicVersion version : supported_versions) { + if (AlpnForVersion(version) == str) + return version; + } + return {quic::PROTOCOL_UNSUPPORTED, quic::QUIC_VERSION_UNSUPPORTED}; +} + +} // anonymous namespace + +void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage, + bool proxy_server_used) { + if (proxy_server_used) { + DCHECK_LE(usage, ALTERNATE_PROTOCOL_USAGE_LOST_RACE); + UMA_HISTOGRAM_ENUMERATION("Net.QuicAlternativeProxy.Usage", + ConvertProtocolUsageToProxyUsage(usage), + ALTERNATIVE_PROXY_USAGE_MAX); + } else { + UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolUsage", usage, + ALTERNATE_PROTOCOL_USAGE_MAX); + } +} + +void HistogramBrokenAlternateProtocolLocation( + BrokenAlternateProtocolLocation location) { + UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolBrokenLocation", location, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX); +} + +bool IsAlternateProtocolValid(NextProto protocol) { + switch (protocol) { + case kProtoUnknown: + return false; + case kProtoHTTP11: + return false; + case kProtoHTTP2: + return true; + case kProtoQUIC: + return true; + } + NOTREACHED(); + return false; +} + +bool IsProtocolEnabled(NextProto protocol, + bool is_http2_enabled, + bool is_quic_enabled) { + switch (protocol) { + case kProtoUnknown: + NOTREACHED(); + return false; + case kProtoHTTP11: + return true; + case kProtoHTTP2: + return is_http2_enabled; + case kProtoQUIC: + return is_quic_enabled; + } + NOTREACHED(); + return false; +} + +// static +AlternativeServiceInfo +AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + const AlternativeService& alternative_service, + base::Time expiration) { + DCHECK_EQ(alternative_service.protocol, kProtoHTTP2); + return AlternativeServiceInfo(alternative_service, expiration, + quic::ParsedQuicVersionVector()); +} + +// static +AlternativeServiceInfo AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + const AlternativeService& alternative_service, + base::Time expiration, + const quic::ParsedQuicVersionVector& advertised_versions) { + DCHECK_EQ(alternative_service.protocol, kProtoQUIC); + return AlternativeServiceInfo(alternative_service, expiration, + advertised_versions); +} + +AlternativeServiceInfo::AlternativeServiceInfo() : alternative_service_() {} + +AlternativeServiceInfo::~AlternativeServiceInfo() = default; + +AlternativeServiceInfo::AlternativeServiceInfo( + const AlternativeService& alternative_service, + base::Time expiration, + const quic::ParsedQuicVersionVector& advertised_versions) + : alternative_service_(alternative_service), expiration_(expiration) { + if (alternative_service_.protocol == kProtoQUIC) { + advertised_versions_ = advertised_versions; + std::sort(advertised_versions_.begin(), advertised_versions_.end(), + TransportVersionLessThan); + } +} + +AlternativeServiceInfo::AlternativeServiceInfo( + const AlternativeServiceInfo& alternative_service_info) = default; + +AlternativeServiceInfo& AlternativeServiceInfo::operator=( + const AlternativeServiceInfo& alternative_service_info) = default; + +std::string AlternativeService::ToString() const { + return base::StringPrintf("%s %s:%d", NextProtoToString(protocol), + host.c_str(), port); +} + +std::string AlternativeServiceInfo::ToString() const { + base::Time::Exploded exploded; + expiration_.LocalExplode(&exploded); + return base::StringPrintf( + "%s, expires %04d-%02d-%02d %02d:%02d:%02d", + alternative_service_.ToString().c_str(), exploded.year, exploded.month, + exploded.day_of_month, exploded.hour, exploded.minute, exploded.second); +} + +// static +bool AlternativeServiceInfo::TransportVersionLessThan( + const quic::ParsedQuicVersion& lhs, + const quic::ParsedQuicVersion& rhs) { + return lhs.transport_version < rhs.transport_version; +} + +std::ostream& operator<<(std::ostream& os, + const AlternativeService& alternative_service) { + os << alternative_service.ToString(); + return os; +} + +AlternativeServiceInfoVector ProcessAlternativeServices( + const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector& + alternative_service_vector, + bool is_http2_enabled, + bool is_quic_enabled, + const quic::ParsedQuicVersionVector& supported_quic_versions, + bool support_ietf_format_quic_altsvc) { + // Convert spdy::SpdyAltSvcWireFormat::AlternativeService entries + // to net::AlternativeServiceInfo. + AlternativeServiceInfoVector alternative_service_info_vector; + for (const spdy::SpdyAltSvcWireFormat::AlternativeService& + alternative_service_entry : alternative_service_vector) { + if (!IsPortValid(alternative_service_entry.port)) + continue; + + NextProto protocol = + NextProtoFromString(alternative_service_entry.protocol_id); + // Check if QUIC version is supported. Filter supported QUIC versions. + quic::ParsedQuicVersionVector advertised_versions; + if (protocol == kProtoQUIC) { + if (!IsProtocolEnabled(protocol, is_http2_enabled, is_quic_enabled)) + continue; + if (!alternative_service_entry.version.empty()) { + advertised_versions = FilterSupportedAltSvcVersions( + alternative_service_entry, supported_quic_versions, + support_ietf_format_quic_altsvc); + if (advertised_versions.empty()) + continue; + } + } else if (!IsAlternateProtocolValid(protocol)) { + quic::ParsedQuicVersion version = ParsedQuicVersionFromAlpn( + alternative_service_entry.protocol_id, supported_quic_versions); + if (version.handshake_protocol == quic::PROTOCOL_UNSUPPORTED || + version.transport_version == quic::QUIC_VERSION_UNSUPPORTED) { + continue; + } + protocol = kProtoQUIC; + advertised_versions = {version}; + } + if (!IsAlternateProtocolValid(protocol) || + !IsProtocolEnabled(protocol, is_http2_enabled, is_quic_enabled)) { + continue; + } + + AlternativeService alternative_service(protocol, + alternative_service_entry.host, + alternative_service_entry.port); + base::Time expiration = + base::Time::Now() + + base::TimeDelta::FromSeconds(alternative_service_entry.max_age); + AlternativeServiceInfo alternative_service_info; + if (protocol == kProtoQUIC) { + alternative_service_info = + AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + alternative_service, expiration, advertised_versions); + } else { + alternative_service_info = + AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + alternative_service, expiration); + } + alternative_service_info_vector.push_back(alternative_service_info); + } + return alternative_service_info_vector; +} + +} // namespace net diff --git a/chromium/net/http/alternative_service.h b/chromium/net/http/alternative_service.h new file mode 100644 index 00000000000..5e2374c0c00 --- /dev/null +++ b/chromium/net/http/alternative_service.h @@ -0,0 +1,227 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_HTTP_ALTERNATIVE_SERVICE_H_ +#define NET_HTTP_ALTERNATIVE_SERVICE_H_ + +#include <stdint.h> + +#include <algorithm> +#include <ostream> +#include <string> + +#include "base/time/time.h" +#include "net/base/host_port_pair.h" +#include "net/base/net_export.h" +#include "net/base/port_util.h" +#include "net/quic/quic_http_utils.h" +#include "net/socket/next_proto.h" +#include "net/third_party/quiche/src/quic/core/quic_versions.h" +#include "net/third_party/quiche/src/spdy/core/spdy_protocol.h" + +namespace net { + +enum AlternateProtocolUsage { + // Alternate Protocol was used without racing a normal connection. + ALTERNATE_PROTOCOL_USAGE_NO_RACE = 0, + // Alternate Protocol was used by winning a race with a normal connection. + ALTERNATE_PROTOCOL_USAGE_WON_RACE = 1, + // Alternate Protocol was not used by losing a race with a normal connection. + ALTERNATE_PROTOCOL_USAGE_LOST_RACE = 2, + // Alternate Protocol was not used because no Alternate-Protocol information + // was available when the request was issued, but an Alternate-Protocol header + // was present in the response. + ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING = 3, + // Alternate Protocol was not used because it was marked broken. + ALTERNATE_PROTOCOL_USAGE_BROKEN = 4, + // Maximum value for the enum. + ALTERNATE_PROTOCOL_USAGE_MAX, +}; + +// Log a histogram to reflect |usage|. +NET_EXPORT void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage, + bool proxy_server_used); + +enum BrokenAlternateProtocolLocation { + BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB = 0, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY = 1, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_ALT = 2, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_MAIN = 3, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_HTTP_STREAM = 4, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_NETWORK_TRANSACTION = 5, + BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX, +}; + +// Log a histogram to reflect |location|. +NET_EXPORT void HistogramBrokenAlternateProtocolLocation( + BrokenAlternateProtocolLocation location); + +// Returns true if |protocol| is a valid protocol. +NET_EXPORT bool IsAlternateProtocolValid(NextProto protocol); + +// Returns true if |protocol| is enabled, based on |is_http2_enabled| +// and |is_quic_enabled|.. +NET_EXPORT bool IsProtocolEnabled(NextProto protocol, + bool is_http2_enabled, + bool is_quic_enabled); + +// (protocol, host, port) triple as defined in +// https://tools.ietf.org/id/draft-ietf-httpbis-alt-svc-06.html +// +// TODO(mmenke): Seems like most of this stuff should be de-inlined. +struct NET_EXPORT AlternativeService { + AlternativeService() : protocol(kProtoUnknown), host(), port(0) {} + + AlternativeService(NextProto protocol, const std::string& host, uint16_t port) + : protocol(protocol), host(host), port(port) {} + + AlternativeService(NextProto protocol, const HostPortPair& host_port_pair) + : protocol(protocol), + host(host_port_pair.host()), + port(host_port_pair.port()) {} + + AlternativeService(const AlternativeService& alternative_service) = default; + AlternativeService& operator=(const AlternativeService& alternative_service) = + default; + + HostPortPair host_port_pair() const { return HostPortPair(host, port); } + + bool operator==(const AlternativeService& other) const { + return protocol == other.protocol && host == other.host && + port == other.port; + } + + bool operator!=(const AlternativeService& other) const { + return !this->operator==(other); + } + + bool operator<(const AlternativeService& other) const { + return std::tie(protocol, host, port) < + std::tie(other.protocol, other.host, other.port); + } + + // Output format: "protocol host:port", e.g. "h2 www.google.com:1234". + std::string ToString() const; + + NextProto protocol; + std::string host; + uint16_t port; +}; + +NET_EXPORT_PRIVATE std::ostream& operator<<( + std::ostream& os, + const AlternativeService& alternative_service); + +struct AlternativeServiceHash { + size_t operator()(const net::AlternativeService& entry) const { + return entry.protocol ^ std::hash<std::string>()(entry.host) ^ entry.port; + } +}; + +class NET_EXPORT_PRIVATE AlternativeServiceInfo { + public: + static AlternativeServiceInfo CreateHttp2AlternativeServiceInfo( + const AlternativeService& alternative_service, + base::Time expiration); + + static AlternativeServiceInfo CreateQuicAlternativeServiceInfo( + const AlternativeService& alternative_service, + base::Time expiration, + const quic::ParsedQuicVersionVector& advertised_versions); + + AlternativeServiceInfo(); + ~AlternativeServiceInfo(); + + AlternativeServiceInfo( + const AlternativeServiceInfo& alternative_service_info); + + AlternativeServiceInfo& operator=( + const AlternativeServiceInfo& alternative_service_info); + + bool operator==(const AlternativeServiceInfo& other) const { + return alternative_service_ == other.alternative_service() && + expiration_ == other.expiration() && + advertised_versions_ == other.advertised_versions(); + } + + bool operator!=(const AlternativeServiceInfo& other) const { + return !this->operator==(other); + } + + std::string ToString() const; + + void set_alternative_service(const AlternativeService& alternative_service) { + alternative_service_ = alternative_service; + } + + void set_protocol(const NextProto& protocol) { + alternative_service_.protocol = protocol; + } + + void set_host(const std::string& host) { alternative_service_.host = host; } + + void set_port(uint16_t port) { alternative_service_.port = port; } + + void set_expiration(const base::Time& expiration) { + expiration_ = expiration; + } + + void set_advertised_versions( + const quic::ParsedQuicVersionVector& advertised_versions) { + if (alternative_service_.protocol != kProtoQUIC) + return; + + advertised_versions_ = advertised_versions; + std::sort(advertised_versions_.begin(), advertised_versions_.end(), + TransportVersionLessThan); + } + + const AlternativeService& alternative_service() const { + return alternative_service_; + } + + NextProto protocol() const { return alternative_service_.protocol; } + + HostPortPair host_port_pair() const { + return alternative_service_.host_port_pair(); + } + + base::Time expiration() const { return expiration_; } + + const quic::ParsedQuicVersionVector& advertised_versions() const { + return advertised_versions_; + } + + private: + AlternativeServiceInfo( + const AlternativeService& alternative_service, + base::Time expiration, + const quic::ParsedQuicVersionVector& advertised_versions); + + static bool TransportVersionLessThan(const quic::ParsedQuicVersion& lhs, + const quic::ParsedQuicVersion& rhs); + + AlternativeService alternative_service_; + base::Time expiration_; + + // Lists all the QUIC versions that are advertised by the server and supported + // by Chrome. If empty, defaults to versions used by the current instance of + // the netstack. + // This list MUST be sorted in ascending order. + quic::ParsedQuicVersionVector advertised_versions_; +}; + +using AlternativeServiceInfoVector = std::vector<AlternativeServiceInfo>; + +NET_EXPORT_PRIVATE AlternativeServiceInfoVector ProcessAlternativeServices( + const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector& + alternative_service_vector, + bool is_http2_enabled, + bool is_quic_enabled, + const quic::ParsedQuicVersionVector& supported_quic_versions, + bool support_ietf_format_quic_altsvc); + +} // namespace net + +#endif // NET_HTTP_ALTERNATIVE_SERVICE_H_ diff --git a/chromium/net/http/alternative_service_unittest.cc b/chromium/net/http/alternative_service_unittest.cc new file mode 100644 index 00000000000..c788980b3bd --- /dev/null +++ b/chromium/net/http/alternative_service_unittest.cc @@ -0,0 +1,46 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/http/alternative_service.h" + +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { +namespace { + +TEST(AlternativeServicesTest, IsProtocolEnabledHttp11) { + EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/false, + /*is_quic_enabled=*/false)); + EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/false, + /*is_quic_enabled=*/true)); + EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/true, + /*is_quic_enabled=*/false)); + EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP11, /*is_http2_enabled=*/true, + /*is_quic_enabled=*/true)); +} + +TEST(AlternativeServicesTest, IsProtocolEnabledHttp2) { + EXPECT_FALSE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/false, + /*is_quic_enabled=*/false)); + EXPECT_FALSE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/false, + /*is_quic_enabled=*/true)); + EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/true, + /*is_quic_enabled=*/false)); + EXPECT_TRUE(IsProtocolEnabled(kProtoHTTP2, /*is_http2_enabled=*/true, + /*is_quic_enabled=*/true)); +} + +TEST(AlternativeServicesTest, IsProtocolEnabledQuic) { + EXPECT_FALSE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/false, + /*is_quic_enabled=*/false)); + EXPECT_TRUE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/false, + /*is_quic_enabled=*/true)); + EXPECT_FALSE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/true, + /*is_quic_enabled=*/false)); + EXPECT_TRUE(IsProtocolEnabled(kProtoQUIC, /*is_http2_enabled=*/true, + /*is_quic_enabled=*/true)); +} + +} // namespace +} // namespace net diff --git a/chromium/net/http/bidirectional_stream.cc b/chromium/net/http/bidirectional_stream.cc index 867f7678191..e70c7d75f3d 100644 --- a/chromium/net/http/bidirectional_stream.cc +++ b/chromium/net/http/bidirectional_stream.cc @@ -113,7 +113,6 @@ BidirectionalStream::BidirectionalStream( } SSLConfig ssl_config; - session->ssl_config_service()->GetSSLConfig(&ssl_config); session->GetAlpnProtos(&ssl_config.alpn_protos); StartRequest(ssl_config); @@ -265,7 +264,7 @@ void BidirectionalStream::OnHeadersReceived( load_timing_info_.receive_headers_end = base::TimeTicks::Now(); read_end_time_ = load_timing_info_.receive_headers_end; session_->http_stream_factory()->ProcessAlternativeServices( - session_, response_info.headers.get(), + session_, net::NetworkIsolationKey(), response_info.headers.get(), url::SchemeHostPort(request_info_->url)); delegate_->OnHeadersReceived(response_headers); } @@ -419,11 +418,8 @@ void BidirectionalStream::OnNeedsClientAuth(const SSLConfig& used_ssl_config, // BidirectionalStream doesn't support client auth. It ignores client auth // requests with null client cert and key. SSLConfig ssl_config = used_ssl_config; - ssl_config.send_client_cert = true; - ssl_config.client_cert = nullptr; - ssl_config.client_private_key = nullptr; - session_->ssl_client_auth_cache()->Add(cert_info->host_and_port, nullptr, - nullptr); + session_->ssl_client_context()->SetClientCertificate(cert_info->host_and_port, + nullptr, nullptr); stream_request_ = nullptr; StartRequest(ssl_config); } diff --git a/chromium/net/http/bidirectional_stream_unittest.cc b/chromium/net/http/bidirectional_stream_unittest.cc index cb02bd3bdd5..34136bc6bd3 100644 --- a/chromium/net/http/bidirectional_stream_unittest.cc +++ b/chromium/net/http/bidirectional_stream_unittest.cc @@ -40,7 +40,7 @@ #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/url_request/url_request_test_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -399,7 +399,7 @@ class MockTimer : public base::MockOneShotTimer { } // namespace -class BidirectionalStreamTest : public TestWithScopedTaskEnvironment { +class BidirectionalStreamTest : public TestWithTaskEnvironment { public: BidirectionalStreamTest() : default_url_(kDefaultUrl), @@ -646,7 +646,7 @@ TEST_F(BidirectionalStreamTest, ClientAuthRequestIgnored) { // Ensure the certificate was added to the client auth cache. scoped_refptr<X509Certificate> client_cert; scoped_refptr<SSLPrivateKey> client_private_key; - ASSERT_TRUE(http_session_->ssl_client_auth_cache()->Lookup( + ASSERT_TRUE(http_session_->ssl_client_context()->GetClientCertificate( host_port_pair_, &client_cert, &client_private_key)); ASSERT_FALSE(client_cert); ASSERT_FALSE(client_private_key); @@ -1740,7 +1740,7 @@ TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { AlternativeServiceInfoVector alternative_service_info_vector = http_session_->http_server_properties()->GetAlternativeServiceInfos( - url::SchemeHostPort(default_url_)); + url::SchemeHostPort(default_url_), NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); AlternativeService alternative_service(kProtoQUIC, "www.example.org", 443); EXPECT_EQ(alternative_service, diff --git a/chromium/net/http/broken_alternative_services.cc b/chromium/net/http/broken_alternative_services.cc index fcb9548f9f7..bacfc3d8851 100644 --- a/chromium/net/http/broken_alternative_services.cc +++ b/chromium/net/http/broken_alternative_services.cc @@ -8,7 +8,7 @@ #include "base/memory/singleton.h" #include "base/time/tick_clock.h" #include "base/time/time.h" -#include "net/http/http_server_properties_impl.h" +#include "net/http/http_server_properties.h" namespace net { @@ -32,9 +32,13 @@ base::TimeDelta ComputeBrokenAlternativeServiceExpirationDelay( } // namespace BrokenAlternativeServices::BrokenAlternativeServices( + int max_recently_broken_alternative_service_entries, Delegate* delegate, const base::TickClock* clock) - : delegate_(delegate), clock_(clock) { + : delegate_(delegate), + clock_(clock), + recently_broken_alternative_services_( + max_recently_broken_alternative_service_entries) { DCHECK(delegate_); DCHECK(clock_); } @@ -321,7 +325,7 @@ void BrokenAlternativeServices :: expiration_timer_.Stop(); expiration_timer_.Start( FROM_HERE, delay, - base::Bind( + base::BindOnce( &BrokenAlternativeServices ::ExpireBrokenAlternateProtocolMappings, weak_ptr_factory_.GetWeakPtr())); } diff --git a/chromium/net/http/broken_alternative_services.h b/chromium/net/http/broken_alternative_services.h index 2d93fb4901a..776c0f2bed5 100644 --- a/chromium/net/http/broken_alternative_services.h +++ b/chromium/net/http/broken_alternative_services.h @@ -9,9 +9,11 @@ #include <set> #include <unordered_map> +#include "base/containers/mru_cache.h" #include "base/memory/weak_ptr.h" +#include "base/time/time.h" #include "base/timer/timer.h" -#include "net/http/http_server_properties.h" +#include "net/http/alternative_service.h" namespace base { class TickClock; @@ -19,12 +21,28 @@ class TickClock; namespace net { +// Stores broken alternative services and when their brokenness expires. +typedef std::list<std::pair<AlternativeService, base::TimeTicks>> + BrokenAlternativeServiceList; + +// Stores how many times an alternative service has been marked broken. +class RecentlyBrokenAlternativeServices + : public base::MRUCache<AlternativeService, int> { + public: + RecentlyBrokenAlternativeServices( + int max_recently_broken_alternative_service_entries) + : base::MRUCache<AlternativeService, int>( + max_recently_broken_alternative_service_entries) {} +}; + // This class tracks HTTP alternative services that have been marked as broken. // The brokenness of an alt-svc will expire after some time according to an // exponential back-off formula: each time an alt-svc is marked broken, the // expiration delay will be some constant multiple of its previous expiration // delay. This prevents broken alt-svcs from being retried too often by the // network stack. +// +// Intended solely for use by HttpServerProperties. class NET_EXPORT_PRIVATE BrokenAlternativeServices { public: // Delegate to be used by owner so it can be notified when the brokenness of @@ -42,7 +60,9 @@ class NET_EXPORT_PRIVATE BrokenAlternativeServices { // |clock| is used for setting expiration times and scheduling the // expiration of broken alternative services. It must not be null. // |delegate| and |clock| are both unowned and must outlive this. - BrokenAlternativeServices(Delegate* delegate, const base::TickClock* clock); + BrokenAlternativeServices(int max_recently_broken_alternative_service_entries, + Delegate* delegate, + const base::TickClock* clock); BrokenAlternativeServices(const BrokenAlternativeServices&) = delete; void operator=(const BrokenAlternativeServices&) = delete; @@ -114,9 +134,9 @@ class NET_EXPORT_PRIVATE BrokenAlternativeServices { recently_broken_alternative_services() const; private: - // TODO (wangyix): modify HttpServerPropertiesImpl unit tests so this - // friendness is no longer required. - friend class HttpServerPropertiesImplPeer; + // TODO (wangyix): modify HttpServerProperties unit tests so this friendness + // is no longer required. + friend class HttpServerPropertiesPeer; struct AlternativeServiceHash { size_t operator()(const net::AlternativeService& entry) const { diff --git a/chromium/net/http/broken_alternative_services_unittest.cc b/chromium/net/http/broken_alternative_services_unittest.cc index bff016e9094..bff1d195e53 100644 --- a/chromium/net/http/broken_alternative_services_unittest.cc +++ b/chromium/net/http/broken_alternative_services_unittest.cc @@ -26,7 +26,7 @@ class BrokenAlternativeServicesTest : test_task_runner_(new base::TestMockTimeTaskRunner()), test_task_runner_context_(test_task_runner_), broken_services_clock_(test_task_runner_->GetMockTickClock()), - broken_services_(this, broken_services_clock_) {} + broken_services_(50, this, broken_services_clock_) {} // BrokenAlternativeServices::Delegate implementation void OnExpireBrokenAlternativeService( @@ -640,7 +640,7 @@ TEST_F(BrokenAlternativeServicesTest, SetBrokenAlternativeServices) { {alternative_service1, broken_services_clock_->NowTicks() + delay1}); std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map = - std::make_unique<RecentlyBrokenAlternativeServices>(); + std::make_unique<RecentlyBrokenAlternativeServices>(10); recently_broken_map->Put(alternative_service1, 1); recently_broken_map->Put(alternative_service2, 2); @@ -701,7 +701,7 @@ TEST_F(BrokenAlternativeServicesTest, broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)}); std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map = - std::make_unique<RecentlyBrokenAlternativeServices>(); + std::make_unique<RecentlyBrokenAlternativeServices>(10); recently_broken_map->Put(alternative_service1, 1); recently_broken_map->Put(alternative_service3, 1); @@ -822,7 +822,7 @@ TEST_F(BrokenAlternativeServicesTest, Clear) { broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)}); std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map = - std::make_unique<RecentlyBrokenAlternativeServices>(); + std::make_unique<RecentlyBrokenAlternativeServices>(10); recently_broken_map->Put(alternative_service2, 2); broken_services_.SetBrokenAndRecentlyBrokenAlternativeServices( diff --git a/chromium/net/http/failing_http_transaction_factory.cc b/chromium/net/http/failing_http_transaction_factory.cc index 4d3a609b2cc..2446690280e 100644 --- a/chromium/net/http/failing_http_transaction_factory.cc +++ b/chromium/net/http/failing_http_transaction_factory.cc @@ -54,7 +54,6 @@ class FailingHttpTransaction : public HttpTransaction { int buf_len, CompletionOnceCallback callback) override; void StopCaching() override; - bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override; int64_t GetTotalReceivedBytes() const override; int64_t GetTotalSentBytes() const override; void DoneReading() override; @@ -125,11 +124,6 @@ int FailingHttpTransaction::Read(IOBuffer* buf, void FailingHttpTransaction::StopCaching() {} -bool FailingHttpTransaction::GetFullRequestHeaders( - HttpRequestHeaders* headers) const { - return false; -} - int64_t FailingHttpTransaction::GetTotalReceivedBytes() const { return 0; } diff --git a/chromium/net/http/http_auth_controller.cc b/chromium/net/http/http_auth_controller.cc index 9f7923bb524..2442e7b726a 100644 --- a/chromium/net/http/http_auth_controller.cc +++ b/chromium/net/http/http_auth_controller.cc @@ -141,12 +141,14 @@ HttpAuthController::HttpAuthController( const GURL& auth_url, HttpAuthCache* http_auth_cache, HttpAuthHandlerFactory* http_auth_handler_factory, - HostResolver* host_resolver) + HostResolver* host_resolver, + HttpAuthPreferences::DefaultCredentials allow_default_credentials) : target_(target), auth_url_(auth_url), auth_origin_(auth_url.GetOrigin()), auth_path_(auth_url.path()), embedded_identity_used_(false), + allow_default_credentials_(allow_default_credentials), default_credentials_used_(false), http_auth_cache_(http_auth_cache), http_auth_handler_factory_(http_auth_handler_factory), @@ -528,12 +530,17 @@ bool HttpAuthController::SelectNextAuthIdentityToTry() { return true; } - // Use default credentials (single sign on) if this is the first attempt - // at identity. Do not allow multiple times as it will infinite loop. - // We use default credentials after checking the auth cache so that if - // single sign-on doesn't work, we won't try default credentials for future - // transactions. - if (!default_credentials_used_ && handler_->AllowsDefaultCredentials()) { + // Use default credentials (single sign-on) if they're allowed and this is the + // first attempt at using an identity. Do not allow multiple times as it will + // infinite loop. We use default credentials after checking the auth cache so + // that if single sign-on doesn't work, we won't try default credentials for + // future transactions. + if (!default_credentials_used_ && handler_->AllowsDefaultCredentials() && + // TODO(https://crbug.com/458508): Refactor |AllowsDefaultCredentials| + // to internally process |allow_default_credentials_| once it is + // passed along with the other |HttpAuthPreferences|. + allow_default_credentials_ == + HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS) { identity_.source = HttpAuth::IDENT_SRC_DEFAULT_CREDENTIALS; identity_.invalid = false; default_credentials_used_ = true; diff --git a/chromium/net/http/http_auth_controller.h b/chromium/net/http/http_auth_controller.h index e868520b953..414554f4510 100644 --- a/chromium/net/http/http_auth_controller.h +++ b/chromium/net/http/http_auth_controller.h @@ -15,6 +15,7 @@ #include "net/base/completion_once_callback.h" #include "net/base/net_export.h" #include "net/http/http_auth.h" +#include "net/http/http_auth_preferences.h" #include "net/log/net_log_with_source.h" #include "url/gurl.h" @@ -74,11 +75,16 @@ class NET_EXPORT_PRIVATE HttpAuthController // * |host_resolver| is used for determining the canonical hostname given a // possibly non-canonical host name. Name canonicalization is used for // NTLM and Negotiate HTTP authentication schemes. - HttpAuthController(HttpAuth::Target target, - const GURL& auth_url, - HttpAuthCache* http_auth_cache, - HttpAuthHandlerFactory* http_auth_handler_factory, - HostResolver* host_resolver); + // + // * |allow_default_credentials| is used for determining if the current + // context allows ambient authentication using default credentials. + HttpAuthController( + HttpAuth::Target target, + const GURL& auth_url, + HttpAuthCache* http_auth_cache, + HttpAuthHandlerFactory* http_auth_handler_factory, + HostResolver* host_resolver, + HttpAuthPreferences::DefaultCredentials allow_default_credentials); // Generate an authentication token for |target| if necessary. The return // value is a net error code. |OK| will be returned both in the case that @@ -213,6 +219,13 @@ class NET_EXPORT_PRIVATE HttpAuthController // preventing an infinite auth restart loop. bool embedded_identity_used_; + // If the current context allows ambient authentication using default + // credentials. + // TODO(https://crbug.com/458508): Refactor |allow_default_credentials_| + // to be passed along with the other |HttpAuthPreferences|, rather then being + // passed directly to |HttpAuthController|. + HttpAuthPreferences::DefaultCredentials allow_default_credentials_; + // True if default credentials have already been tried for this transaction // in response to an HTTP authentication challenge. bool default_credentials_used_; diff --git a/chromium/net/http/http_auth_controller_unittest.cc b/chromium/net/http/http_auth_controller_unittest.cc index 90fa3a8c2e0..7e654baaf82 100644 --- a/chromium/net/http/http_auth_controller_unittest.cc +++ b/chromium/net/http/http_auth_controller_unittest.cc @@ -8,7 +8,7 @@ #include <utility> #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" #include "net/dns/mock_host_resolver.h" @@ -77,7 +77,8 @@ void RunSingleRoundAuthTest( scoped_refptr<HttpAuthController> controller(new HttpAuthController( HttpAuth::AUTH_PROXY, GURL("http://example.com"), &dummy_auth_cache, - &auth_handler_factory, host_resolver.get())); + &auth_handler_factory, host_resolver.get(), + HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS)); SSLInfo null_ssl_info; ASSERT_EQ(OK, controller->HandleAuthChallenge(headers, null_ssl_info, false, false, net_log)); @@ -102,7 +103,7 @@ void RunSingleRoundAuthTest( // permanent error, the HttpAuthController should disable the scheme // used and retry the request. TEST(HttpAuthControllerTest, PermanentErrors) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; // Run a synchronous handler that returns // ERR_UNEXPECTED_SECURITY_LIBRARY_STATUS. We expect a return value @@ -133,7 +134,7 @@ TEST(HttpAuthControllerTest, PermanentErrors) { // Verify that the controller logs appropriate lifetime events. TEST(HttpAuthControllerTest, Logging) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; BoundTestNetLog net_log; RunSingleRoundAuthTest(RUN_HANDLER_SYNC, OK, OK, SCHEME_IS_ENABLED, @@ -259,7 +260,8 @@ TEST(HttpAuthControllerTest, NoExplicitCredentialsAllowed) { scoped_refptr<HttpAuthController> controller(new HttpAuthController( HttpAuth::AUTH_SERVER, GURL("http://example.com"), &dummy_auth_cache, - &auth_handler_factory, host_resolver.get())); + &auth_handler_factory, host_resolver.get(), + HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS)); SSLInfo null_ssl_info; ASSERT_EQ(OK, controller->HandleAuthChallenge(headers, null_ssl_info, false, false, dummy_log)); diff --git a/chromium/net/http/http_auth_filter.cc b/chromium/net/http/http_auth_filter.cc index d5efb6dd634..33f0eac3409 100644 --- a/chromium/net/http/http_auth_filter.cc +++ b/chromium/net/http/http_auth_filter.cc @@ -8,23 +8,20 @@ namespace net { -// Using a std::set<> has the benefit of removing duplicates automatically. -typedef std::set<base::string16> RegistryWhitelist; - -// TODO(ahendrickson) -- Determine if we want separate whitelists for HTTP and +// TODO(ahendrickson) -- Determine if we want separate allowlists for HTTP and // HTTPS, one for both, or only an HTTP one. My understanding is that the HTTPS // entries in the registry mean that you are only allowed to connect to the site // via HTTPS and still be considered 'safe'. -HttpAuthFilterWhitelist::HttpAuthFilterWhitelist( - const std::string& server_whitelist) { - SetWhitelist(server_whitelist); +HttpAuthFilterAllowlist::HttpAuthFilterAllowlist( + const std::string& server_allowlist) { + SetAllowlist(server_allowlist); } -HttpAuthFilterWhitelist::~HttpAuthFilterWhitelist() = default; +HttpAuthFilterAllowlist::~HttpAuthFilterAllowlist() = default; -// Add a new domain |filter| to the whitelist, if it's not already there -bool HttpAuthFilterWhitelist::AddFilter(const std::string& filter, +// Add a new domain |filter| to the allowlist, if it's not already there +bool HttpAuthFilterAllowlist::AddFilter(const std::string& filter, HttpAuth::Target target) { if ((target != HttpAuth::AUTH_SERVER) && (target != HttpAuth::AUTH_PROXY)) return false; @@ -35,7 +32,7 @@ bool HttpAuthFilterWhitelist::AddFilter(const std::string& filter, return true; } -bool HttpAuthFilterWhitelist::IsValid(const GURL& url, +bool HttpAuthFilterAllowlist::IsValid(const GURL& url, HttpAuth::Target target) const { if ((target != HttpAuth::AUTH_SERVER) && (target != HttpAuth::AUTH_PROXY)) return false; @@ -45,14 +42,14 @@ bool HttpAuthFilterWhitelist::IsValid(const GURL& url, return rules_.Matches(url); } -void HttpAuthFilterWhitelist::SetWhitelist( - const std::string& server_whitelist) { +void HttpAuthFilterAllowlist::SetAllowlist( + const std::string& server_allowlist) { // TODO(eroman): Is this necessary? The issue is that - // HttpAuthFilterWhitelist is trying to use ProxyBypassRules as a generic + // HttpAuthFilterAllowlist is trying to use ProxyBypassRules as a generic // URL filter. However internally it has some implicit rules for localhost // and linklocal addresses. rules_.ParseFromString(ProxyBypassRules::GetRulesToSubtractImplicit() + ";" + - server_whitelist); + server_allowlist); } } // namespace net diff --git a/chromium/net/http/http_auth_filter.h b/chromium/net/http/http_auth_filter.h index 4ebe897d35f..45515fcd5d4 100644 --- a/chromium/net/http/http_auth_filter.h +++ b/chromium/net/http/http_auth_filter.h @@ -28,15 +28,15 @@ class NET_EXPORT_PRIVATE HttpAuthFilter { virtual bool IsValid(const GURL& url, HttpAuth::Target target) const = 0; }; -// Whitelist HTTP authentication filter. -// Explicit whitelists of domains are set via SetWhitelist(). +// Allowlist HTTP authentication filter. +// Explicit allowlists of domains are set via SetAllowlist(). // -// Uses the ProxyBypassRules class to do whitelisting for servers. +// Uses the ProxyBypassRules class to do allowlisting for servers. // All proxies are allowed. -class NET_EXPORT HttpAuthFilterWhitelist : public HttpAuthFilter { +class NET_EXPORT HttpAuthFilterAllowlist : public HttpAuthFilter { public: - explicit HttpAuthFilterWhitelist(const std::string& server_whitelist); - ~HttpAuthFilterWhitelist() override; + explicit HttpAuthFilterAllowlist(const std::string& server_allowlist); + ~HttpAuthFilterAllowlist() override; // Adds an individual URL |filter| to the list, of the specified |target|. bool AddFilter(const std::string& filter, HttpAuth::Target target); @@ -47,15 +47,15 @@ class NET_EXPORT HttpAuthFilterWhitelist : public HttpAuthFilter { bool IsValid(const GURL& url, HttpAuth::Target target) const override; private: - // Installs the whitelist. - // |server_whitelist| is parsed by ProxyBypassRules. - void SetWhitelist(const std::string& server_whitelist); + // Installs the allowlist. + // |server_allowlist| is parsed by ProxyBypassRules. + void SetAllowlist(const std::string& server_allowlist); // We are using ProxyBypassRules because they have the functionality that we // want, but we are not using it for proxy bypass. ProxyBypassRules rules_; - DISALLOW_COPY_AND_ASSIGN(HttpAuthFilterWhitelist); + DISALLOW_COPY_AND_ASSIGN(HttpAuthFilterAllowlist); }; } // namespace net diff --git a/chromium/net/http/http_auth_filter_unittest.cc b/chromium/net/http/http_auth_filter_unittest.cc index bf7261600e3..17f93542ff7 100644 --- a/chromium/net/http/http_auth_filter_unittest.cc +++ b/chromium/net/http/http_auth_filter_unittest.cc @@ -15,16 +15,10 @@ namespace net { namespace { -static const char* const server_whitelist_array[] = { - "google.com", - "linkedin.com", - "book.com", - ".chromium.org", - ".gag", - "gog" -}; +static const char* const server_allowlist_array[] = { + "google.com", "linkedin.com", "book.com", ".chromium.org", ".gag", "gog"}; -enum { ALL_SERVERS_MATCH = (1 << base::size(server_whitelist_array)) - 1 }; +enum { ALL_SERVERS_MATCH = (1 << base::size(server_allowlist_array)) - 1 }; struct UrlData { GURL url; @@ -71,7 +65,7 @@ static const UrlData urls[] = { TEST(HttpAuthFilterTest, EmptyFilter) { // Create an empty filter - HttpAuthFilterWhitelist filter((std::string())); + HttpAuthFilterAllowlist filter((std::string())); for (size_t i = 0; i < base::size(urls); i++) { EXPECT_EQ(urls[i].target == HttpAuth::AUTH_PROXY, filter.IsValid(urls[i].url, urls[i].target)) @@ -81,14 +75,14 @@ TEST(HttpAuthFilterTest, EmptyFilter) { TEST(HttpAuthFilterTest, NonEmptyFilter) { // Create an non-empty filter - std::string server_whitelist_filter_string; - for (size_t i = 0; i < base::size(server_whitelist_array); ++i) { - if (!server_whitelist_filter_string.empty()) - server_whitelist_filter_string += ","; - server_whitelist_filter_string += "*"; - server_whitelist_filter_string += server_whitelist_array[i]; + std::string server_allowlist_filter_string; + for (size_t i = 0; i < base::size(server_allowlist_array); ++i) { + if (!server_allowlist_filter_string.empty()) + server_allowlist_filter_string += ","; + server_allowlist_filter_string += "*"; + server_allowlist_filter_string += server_allowlist_array[i]; } - HttpAuthFilterWhitelist filter(server_whitelist_filter_string); + HttpAuthFilterAllowlist filter(server_allowlist_filter_string); for (size_t i = 0; i < base::size(urls); i++) { EXPECT_EQ(urls[i].matches, filter.IsValid(urls[i].url, urls[i].target)) << " " << i << ": " << urls[i].url; diff --git a/chromium/net/http/http_auth_gssapi_posix.cc b/chromium/net/http/http_auth_gssapi_posix.cc index f8efa9f7a2d..ad7ecad9ac2 100644 --- a/chromium/net/http/http_auth_gssapi_posix.cc +++ b/chromium/net/http/http_auth_gssapi_posix.cc @@ -261,9 +261,11 @@ base::Value GetDisplayNameValue(GSSAPILibrary* gssapi_lib, } base::Value ContextFlagsToValue(OM_uint32 flags) { - // TODO(asanka): This should break down known flags. At least the - // GSS_C_DELEG_FLAG. - return base::Value(base::StringPrintf("%08x", flags)); + base::Value rv{base::Value::Type::DICTIONARY}; + rv.SetStringKey("value", base::StringPrintf("0x%08x", flags)); + rv.SetBoolKey("delegated", (flags & GSS_C_DELEG_FLAG) == GSS_C_DELEG_FLAG); + rv.SetBoolKey("mutual", (flags & GSS_C_MUTUAL_FLAG) == GSS_C_MUTUAL_FLAG); + return rv; } base::Value GetContextStateAsValue(GSSAPILibrary* gssapi_lib, diff --git a/chromium/net/http/http_auth_gssapi_posix_unittest.cc b/chromium/net/http/http_auth_gssapi_posix_unittest.cc index 7ae41f76c82..27dbfab3f6a 100644 --- a/chromium/net/http/http_auth_gssapi_posix_unittest.cc +++ b/chromium/net/http/http_auth_gssapi_posix_unittest.cc @@ -632,7 +632,11 @@ TEST(HttpAuthGSSAPITest, GetContextStateAsValue_ValidContext) { "mechanism": { "oid": "<Empty OID>" }, - "flags": "00000000", + "flags": { + "value": "0x00000000", + "delegated": false, + "mutual": false + }, "open": false } )"); diff --git a/chromium/net/http/http_auth_handler_negotiate.cc b/chromium/net/http/http_auth_handler_negotiate.cc index 83e88725560..c9980c1e619 100644 --- a/chromium/net/http/http_auth_handler_negotiate.cc +++ b/chromium/net/http/http_auth_handler_negotiate.cc @@ -191,7 +191,7 @@ bool HttpAuthHandlerNegotiate::Init(HttpAuthChallengeTokenizer* challenge, } // GSSAPI does not provide a way to enter username/password to // obtain a TGT. If the default credentials are not allowed for - // a particular site (based on whitelist), fall back to a + // a particular site (based on allowlist), fall back to a // different scheme. if (!AllowsDefaultCredentials()) return false; diff --git a/chromium/net/http/http_auth_handler_negotiate_unittest.cc b/chromium/net/http/http_auth_handler_negotiate_unittest.cc index e4111c8acfa..52011cd0ec0 100644 --- a/chromium/net/http/http_auth_handler_negotiate_unittest.cc +++ b/chromium/net/http/http_auth_handler_negotiate_unittest.cc @@ -21,7 +21,7 @@ #include "net/net_buildflags.h" #include "net/ssl/ssl_info.h" #include "net/test/gtest_util.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -48,7 +48,7 @@ namespace net { constexpr char kFakeToken[] = "FakeToken"; class HttpAuthHandlerNegotiateTest : public PlatformTest, - public WithScopedTaskEnvironment { + public WithTaskEnvironment { public: void SetUp() override { auth_library_ = new MockAuthLibrary(); diff --git a/chromium/net/http/http_auth_handler_unittest.cc b/chromium/net/http/http_auth_handler_unittest.cc index bb25c16f103..aeca24a1f1d 100644 --- a/chromium/net/http/http_auth_handler_unittest.cc +++ b/chromium/net/http/http_auth_handler_unittest.cc @@ -6,7 +6,7 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" #include "net/http/http_auth_challenge_tokenizer.h" @@ -22,7 +22,7 @@ namespace net { TEST(HttpAuthHandlerTest, NetLog) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; GURL origin("http://www.example.com"); std::string challenge = "Mock asdf"; diff --git a/chromium/net/http/http_auth_preferences.cc b/chromium/net/http/http_auth_preferences.cc index 0672f2c7bd0..15ab440c0df 100644 --- a/chromium/net/http/http_auth_preferences.cc +++ b/chromium/net/http/http_auth_preferences.cc @@ -63,20 +63,20 @@ DelegationType HttpAuthPreferences::GetDelegationType( return DelegationType::kUnconstrained; } -void HttpAuthPreferences::SetServerWhitelist( - const std::string& server_whitelist) { - std::unique_ptr<HttpAuthFilter> whitelist; - if (!server_whitelist.empty()) - whitelist = std::make_unique<HttpAuthFilterWhitelist>(server_whitelist); - security_manager_->SetDefaultWhitelist(std::move(whitelist)); +void HttpAuthPreferences::SetServerAllowlist( + const std::string& server_allowlist) { + std::unique_ptr<HttpAuthFilter> allowlist; + if (!server_allowlist.empty()) + allowlist = std::make_unique<HttpAuthFilterAllowlist>(server_allowlist); + security_manager_->SetDefaultAllowlist(std::move(allowlist)); } -void HttpAuthPreferences::SetDelegateWhitelist( - const std::string& delegate_whitelist) { - std::unique_ptr<HttpAuthFilter> whitelist; - if (!delegate_whitelist.empty()) - whitelist = std::make_unique<HttpAuthFilterWhitelist>(delegate_whitelist); - security_manager_->SetDelegateWhitelist(std::move(whitelist)); +void HttpAuthPreferences::SetDelegateAllowlist( + const std::string& delegate_allowlist) { + std::unique_ptr<HttpAuthFilter> allowlist; + if (!delegate_allowlist.empty()) + allowlist = std::make_unique<HttpAuthFilterAllowlist>(delegate_allowlist); + security_manager_->SetDelegateAllowlist(std::move(allowlist)); } } // namespace net diff --git a/chromium/net/http/http_auth_preferences.h b/chromium/net/http/http_auth_preferences.h index 06a30e61929..8045bdd6f81 100644 --- a/chromium/net/http/http_auth_preferences.h +++ b/chromium/net/http/http_auth_preferences.h @@ -24,6 +24,13 @@ class URLSecurityManager; // them accessible from the IO thread. class NET_EXPORT HttpAuthPreferences { public: + // |DefaultCredentials| influences the behavior of codepaths that use + // IdentitySource::IDENT_SRC_DEFAULT_CREDENTIALS in |HttpAuthController| + enum DefaultCredentials { + DISALLOW_DEFAULT_CREDENTIALS = 0, + ALLOW_DEFAULT_CREDENTIALS = 1, + }; + HttpAuthPreferences(); virtual ~HttpAuthPreferences(); @@ -68,9 +75,9 @@ class NET_EXPORT HttpAuthPreferences { } #endif - void SetServerWhitelist(const std::string& server_whitelist); + void SetServerAllowlist(const std::string& server_allowlist); - void SetDelegateWhitelist(const std::string& delegate_whitelist); + void SetDelegateAllowlist(const std::string& delegate_allowlist); #if defined(OS_ANDROID) void set_auth_android_negotiate_account_type( diff --git a/chromium/net/http/http_auth_preferences_unittest.cc b/chromium/net/http/http_auth_preferences_unittest.cc index 9395212632e..7418b132d65 100644 --- a/chromium/net/http/http_auth_preferences_unittest.cc +++ b/chromium/net/http/http_auth_preferences_unittest.cc @@ -59,11 +59,11 @@ TEST(HttpAuthPreferencesTest, AllowGssapiLibraryLoad) { } #endif -TEST(HttpAuthPreferencesTest, AuthServerWhitelist) { +TEST(HttpAuthPreferencesTest, AuthServerAllowlist) { HttpAuthPreferences http_auth_preferences; // Check initial value EXPECT_FALSE(http_auth_preferences.CanUseDefaultCredentials(GURL("abc"))); - http_auth_preferences.SetServerWhitelist("*"); + http_auth_preferences.SetServerAllowlist("*"); EXPECT_TRUE(http_auth_preferences.CanUseDefaultCredentials(GURL("abc"))); } @@ -74,7 +74,7 @@ TEST(HttpAuthPreferencesTest, DelegationType) { EXPECT_EQ(DelegationType::kNone, http_auth_preferences.GetDelegationType(GURL("abc"))); - http_auth_preferences.SetDelegateWhitelist("*"); + http_auth_preferences.SetDelegateAllowlist("*"); EXPECT_EQ(DelegationType::kUnconstrained, http_auth_preferences.GetDelegationType(GURL("abc"))); @@ -82,7 +82,7 @@ TEST(HttpAuthPreferencesTest, DelegationType) { EXPECT_EQ(DelegationType::kByKdcPolicy, http_auth_preferences.GetDelegationType(GURL("abc"))); - http_auth_preferences.SetDelegateWhitelist(""); + http_auth_preferences.SetDelegateAllowlist(""); EXPECT_EQ(DelegationType::kNone, http_auth_preferences.GetDelegationType(GURL("abc"))); } diff --git a/chromium/net/http/http_auth_sspi_win.cc b/chromium/net/http/http_auth_sspi_win.cc index 8bc2665f9d8..754d4d954bd 100644 --- a/chromium/net/http/http_auth_sspi_win.cc +++ b/chromium/net/http/http_auth_sspi_win.cc @@ -9,11 +9,18 @@ #include "base/base64.h" #include "base/logging.h" +#include "base/strings/string_piece.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/values.h" #include "net/base/net_errors.h" #include "net/http/http_auth.h" #include "net/http/http_auth_multi_round_parse.h" +#include "net/log/net_log.h" +#include "net/log/net_log_event_type.h" +#include "net/log/net_log_values.h" +#include "net/log/net_log_with_source.h" namespace net { @@ -21,18 +28,95 @@ using DelegationType = HttpAuth::DelegationType; namespace { -int MapAcquireCredentialsStatusToError(SECURITY_STATUS status, - const SEC_WCHAR* package) { - VLOG(1) << "AcquireCredentialsHandle returned 0x" << std::hex << status; +base::Value SecurityStatusToValue(Error mapped_error, SECURITY_STATUS status) { + base::Value params{base::Value::Type::DICTIONARY}; + params.SetIntKey("net_error", mapped_error); + params.SetIntKey("security_status", status); + return params; +} + +base::Value AcquireCredentialsHandleParams(const base::string16* domain, + const base::string16* user, + Error result, + SECURITY_STATUS status) { + base::Value params{base::Value::Type::DICTIONARY}; + if (domain && user) { + params.SetStringKey("domain", base::UTF16ToUTF8(*domain)); + params.SetStringKey("user", base::UTF16ToUTF8(*user)); + } + params.SetKey("status", SecurityStatusToValue(result, status)); + return params; +} + +base::Value ContextFlagsToValue(DWORD flags) { + base::Value params{base::Value::Type::DICTIONARY}; + params.SetStringKey("value", base::StringPrintf("0x%08lx", flags)); + params.SetBoolKey("delegated", + (flags & ISC_RET_DELEGATE) == ISC_RET_DELEGATE); + params.SetBoolKey("mutual", + (flags & ISC_RET_MUTUAL_AUTH) == ISC_RET_MUTUAL_AUTH); + return params; +} + +base::Value ContextAttributesToValue(SSPILibrary* library, + PCtxtHandle handle, + DWORD attributes) { + base::Value params{base::Value::Type::DICTIONARY}; + + SecPkgContext_NativeNames native_names = {0}; + auto qc_result = library->QueryContextAttributesEx( + handle, SECPKG_ATTR_NATIVE_NAMES, &native_names, sizeof(native_names)); + if (qc_result == SEC_E_OK && native_names.sClientName && + native_names.sServerName) { + params.SetStringKey("source", base::as_u16cstr(native_names.sClientName)); + params.SetStringKey("target", base::as_u16cstr(native_names.sServerName)); + } + + SecPkgContext_NegotiationInfo negotiation_info = {0}; + qc_result = library->QueryContextAttributesEx( + handle, SECPKG_ATTR_NEGOTIATION_INFO, &negotiation_info, + sizeof(negotiation_info)); + if (qc_result == SEC_E_OK && negotiation_info.PackageInfo && + negotiation_info.PackageInfo->Name) { + params.SetStringKey("mechanism", + base::as_u16cstr(negotiation_info.PackageInfo->Name)); + params.SetBoolKey("open", negotiation_info.NegotiationState != + SECPKG_NEGOTIATION_COMPLETE); + } + + SecPkgContext_Authority authority = {0}; + qc_result = library->QueryContextAttributesEx(handle, SECPKG_ATTR_AUTHORITY, + &authority, sizeof(authority)); + if (qc_result == SEC_E_OK && authority.sAuthorityName) { + params.SetStringKey("authority", + base::as_u16cstr(authority.sAuthorityName)); + } + + params.SetKey("flags", ContextFlagsToValue(attributes)); + return params; +} + +base::Value InitializeSecurityContextParams(SSPILibrary* library, + PCtxtHandle handle, + Error result, + SECURITY_STATUS status, + DWORD attributes) { + base::Value params{base::Value::Type::DICTIONARY}; + params.SetKey("status", SecurityStatusToValue(result, status)); + if (result == OK) + params.SetKey("context", + ContextAttributesToValue(library, handle, attributes)); + return params; +} + +Error MapAcquireCredentialsStatusToError(SECURITY_STATUS status, + const SEC_WCHAR* package) { switch (status) { case SEC_E_OK: return OK; case SEC_E_INSUFFICIENT_MEMORY: return ERR_OUT_OF_MEMORY; case SEC_E_INTERNAL_ERROR: - LOG(WARNING) - << "AcquireCredentialsHandle returned unexpected status 0x" - << std::hex << status; return ERR_UNEXPECTED_SECURITY_LIBRARY_STATUS; case SEC_E_NO_CREDENTIALS: case SEC_E_NOT_OWNER: @@ -42,19 +126,17 @@ int MapAcquireCredentialsStatusToError(SECURITY_STATUS status, // This indicates that the SSPI configuration does not match expectations return ERR_UNSUPPORTED_AUTH_SCHEME; default: - LOG(WARNING) - << "AcquireCredentialsHandle returned undocumented status 0x" - << std::hex << status; return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS; } } -int AcquireExplicitCredentials(SSPILibrary* library, - const SEC_WCHAR* package, - const base::string16& domain, - const base::string16& user, - const base::string16& password, - CredHandle* cred) { +Error AcquireExplicitCredentials(SSPILibrary* library, + const SEC_WCHAR* package, + const base::string16& domain, + const base::string16& user, + const base::string16& password, + const NetLogWithSource& net_log, + CredHandle* cred) { SEC_WINNT_AUTH_IDENTITY identity; identity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; identity.User = reinterpret_cast<unsigned short*>( @@ -69,6 +151,8 @@ int AcquireExplicitCredentials(SSPILibrary* library, TimeStamp expiry; + net_log.BeginEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS); + // Pass the username/password to get the credentials handle. SECURITY_STATUS status = library->AcquireCredentialsHandle( nullptr, // pszPrincipal @@ -81,12 +165,19 @@ int AcquireExplicitCredentials(SSPILibrary* library, cred, // phCredential &expiry); // ptsExpiry - return MapAcquireCredentialsStatusToError(status, package); + auto result = MapAcquireCredentialsStatusToError(status, package); + net_log.EndEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS, [&] { + return AcquireCredentialsHandleParams(&domain, &user, result, status); + }); + return result; } -int AcquireDefaultCredentials(SSPILibrary* library, const SEC_WCHAR* package, - CredHandle* cred) { +Error AcquireDefaultCredentials(SSPILibrary* library, + const SEC_WCHAR* package, + const NetLogWithSource& net_log, + CredHandle* cred) { TimeStamp expiry; + net_log.BeginEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS); // Pass the username/password to get the credentials handle. // Note: Since the 5th argument is nullptr, it uses the default @@ -103,11 +194,14 @@ int AcquireDefaultCredentials(SSPILibrary* library, const SEC_WCHAR* package, cred, // phCredential &expiry); // ptsExpiry - return MapAcquireCredentialsStatusToError(status, package); + auto result = MapAcquireCredentialsStatusToError(status, package); + net_log.EndEvent(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS, [&] { + return AcquireCredentialsHandleParams(nullptr, nullptr, result, status); + }); + return result; } -int MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) { - VLOG(1) << "InitializeSecurityContext returned 0x" << std::hex << status; +Error MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) { switch (status) { case SEC_E_OK: case SEC_I_CONTINUE_NEEDED: @@ -120,9 +214,6 @@ int MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) { // These are return codes reported by InitializeSecurityContext // but not expected by Chrome (for example, INCOMPLETE_CREDENTIALS // and INCOMPLETE_MESSAGE are intended for schannel). - LOG(WARNING) - << "InitializeSecurityContext returned unexpected status 0x" - << std::hex << status; return ERR_UNEXPECTED_SECURITY_LIBRARY_STATUS; case SEC_E_INSUFFICIENT_MEMORY: return ERR_OUT_OF_MEMORY; @@ -143,15 +234,11 @@ int MapInitializeSecurityContextStatusToError(SECURITY_STATUS status) { case SEC_E_TARGET_UNKNOWN: return ERR_MISCONFIGURED_AUTH_ENVIRONMENT; default: - LOG(WARNING) - << "InitializeSecurityContext returned undocumented status 0x" - << std::hex << status; return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS; } } -int MapQuerySecurityPackageInfoStatusToError(SECURITY_STATUS status) { - VLOG(1) << "QuerySecurityPackageInfo returned 0x" << std::hex << status; +Error MapQuerySecurityPackageInfoStatusToError(SECURITY_STATUS status) { switch (status) { case SEC_E_OK: return OK; @@ -160,15 +247,11 @@ int MapQuerySecurityPackageInfoStatusToError(SECURITY_STATUS status) { // during testing. return ERR_UNSUPPORTED_AUTH_SCHEME; default: - LOG(WARNING) - << "QuerySecurityPackageInfo returned undocumented status 0x" - << std::hex << status; return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS; } } -int MapFreeContextBufferStatusToError(SECURITY_STATUS status) { - VLOG(1) << "FreeContextBuffer returned 0x" << std::hex << status; +Error MapFreeContextBufferStatusToError(SECURITY_STATUS status) { switch (status) { case SEC_E_OK: return OK; @@ -178,9 +261,6 @@ int MapFreeContextBufferStatusToError(SECURITY_STATUS status) { // only mentions that a non-zero (or non-SEC_E_OK) value is returned // if the function fails, and does not indicate what the failure // conditions are. - LOG(WARNING) - << "FreeContextBuffer returned undocumented status 0x" - << std::hex << status; return ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS; } } @@ -197,9 +277,9 @@ SECURITY_STATUS SSPILibraryDefault::AcquireCredentialsHandle( void* pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry) { - return ::AcquireCredentialsHandle(pszPrincipal, pszPackage, fCredentialUse, - pvLogonId, pvAuthData, pGetKeyFn, - pvGetKeyArgument, phCredential, ptsExpiry); + return ::AcquireCredentialsHandleW(pszPrincipal, pszPackage, fCredentialUse, + pvLogonId, pvAuthData, pGetKeyFn, + pvGetKeyArgument, phCredential, ptsExpiry); } SECURITY_STATUS SSPILibraryDefault::InitializeSecurityContext( @@ -215,16 +295,28 @@ SECURITY_STATUS SSPILibraryDefault::InitializeSecurityContext( PSecBufferDesc pOutput, unsigned long* contextAttr, PTimeStamp ptsExpiry) { - return ::InitializeSecurityContext(phCredential, phContext, pszTargetName, - fContextReq, Reserved1, TargetDataRep, - pInput, Reserved2, phNewContext, pOutput, - contextAttr, ptsExpiry); + return ::InitializeSecurityContextW(phCredential, phContext, pszTargetName, + fContextReq, Reserved1, TargetDataRep, + pInput, Reserved2, phNewContext, pOutput, + contextAttr, ptsExpiry); +} + +SECURITY_STATUS SSPILibraryDefault::QueryContextAttributesEx( + PCtxtHandle phContext, + ULONG ulAttribute, + PVOID pBuffer, + ULONG cbBuffer) { + // TODO(https://crbug.com/992779): QueryContextAttributesExW is not included + // in Secur32.Lib in 10.0.18362.0 SDK. This symbol requires switching to using + // Windows SDK API sets in mincore.lib or OneCore.Lib. Switch to using + // QueryContextAttributesEx when the switch is made. + return ::QueryContextAttributes(phContext, ulAttribute, pBuffer); } SECURITY_STATUS SSPILibraryDefault::QuerySecurityPackageInfo( LPWSTR pszPackageName, PSecPkgInfoW* pkgInfo) { - return ::QuerySecurityPackageInfo(pszPackageName, pkgInfo); + return ::QuerySecurityPackageInfoW(pszPackageName, pkgInfo); } SECURITY_STATUS SSPILibraryDefault::FreeCredentialsHandle( @@ -300,11 +392,14 @@ int HttpAuthSSPI::GenerateAuthToken(const AuthCredentials* credentials, const std::string& spn, const std::string& channel_bindings, std::string* auth_token, - const NetLogWithSource&, + const NetLogWithSource& net_log, CompletionOnceCallback /*callback*/) { // Initial challenge. if (!SecIsValidHandle(&cred_)) { - int rv = OnFirstRound(credentials); + // ParseChallenge fails early if a non-empty token is received on the first + // challenge. + DCHECK(decoded_server_auth_token_.empty()); + int rv = OnFirstRound(credentials, net_log); if (rv != OK) return rv; } @@ -315,7 +410,7 @@ int HttpAuthSSPI::GenerateAuthToken(const AuthCredentials* credentials, int rv = GetNextSecurityToken( spn, channel_bindings, static_cast<void*>(const_cast<char*>(decoded_server_auth_token_.c_str())), - decoded_server_auth_token_.length(), &out_buf, &out_buf_len); + decoded_server_auth_token_.length(), net_log, &out_buf, &out_buf_len); if (rv != OK) return rv; @@ -329,19 +424,21 @@ int HttpAuthSSPI::GenerateAuthToken(const AuthCredentials* credentials, return OK; } -int HttpAuthSSPI::OnFirstRound(const AuthCredentials* credentials) { +int HttpAuthSSPI::OnFirstRound(const AuthCredentials* credentials, + const NetLogWithSource& net_log) { DCHECK(!SecIsValidHandle(&cred_)); int rv = OK; if (credentials) { base::string16 domain; base::string16 user; SplitDomainAndUser(credentials->username(), &domain, &user); - rv = AcquireExplicitCredentials(library_, security_package_, domain, - user, credentials->password(), &cred_); + rv = AcquireExplicitCredentials(library_, security_package_, domain, user, + credentials->password(), net_log, &cred_); if (rv != OK) return rv; } else { - rv = AcquireDefaultCredentials(library_, security_package_, &cred_); + rv = + AcquireDefaultCredentials(library_, security_package_, net_log, &cred_); if (rv != OK) return rv; } @@ -353,6 +450,7 @@ int HttpAuthSSPI::GetNextSecurityToken(const std::string& spn, const std::string& channel_bindings, const void* in_token, int in_token_len, + const NetLogWithSource& net_log, void** out_token, int* out_token_len) { CtxtHandle* ctxt_ptr = nullptr; @@ -422,8 +520,10 @@ int HttpAuthSSPI::GetNextSecurityToken(const std::string& spn, if (delegation_type_ != DelegationType::kNone) context_flags |= (ISC_REQ_DELEGATE | ISC_REQ_MUTUAL_AUTH); + net_log.BeginEvent(NetLogEventType::AUTH_LIBRARY_INIT_SEC_CTX); + // This returns a token that is passed to the remote server. - DWORD context_attribute; + DWORD context_attributes = 0; base::string16 spn16 = base::ASCIIToUTF16(spn); SECURITY_STATUS status = library_->InitializeSecurityContext( &cred_, // phCredential @@ -436,9 +536,14 @@ int HttpAuthSSPI::GetNextSecurityToken(const std::string& spn, 0, // Reserved2 (must be 0) &ctxt_, // phNewContext &out_buffer_desc, // pOutput - &context_attribute, // pfContextAttr + &context_attributes, // pfContextAttr nullptr); // ptsExpiry - int rv = MapInitializeSecurityContextStatusToError(status); + Error rv = MapInitializeSecurityContextStatusToError(status); + net_log.EndEvent(NetLogEventType::AUTH_LIBRARY_INIT_SEC_CTX, [&] { + return InitializeSecurityContextParams(library_, &ctxt_, rv, status, + context_attributes); + }); + if (rv != OK) { ResetSecurityContext(); free(out_buffer.pvBuffer); diff --git a/chromium/net/http/http_auth_sspi_win.h b/chromium/net/http/http_auth_sspi_win.h index 408ac5931d7..798673e7f54 100644 --- a/chromium/net/http/http_auth_sspi_win.h +++ b/chromium/net/http/http_auth_sspi_win.h @@ -59,6 +59,11 @@ class SSPILibrary { unsigned long* contextAttr, PTimeStamp ptsExpiry) = 0; + virtual SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext, + ULONG ulAttribute, + PVOID pBuffer, + ULONG cbBuffer) = 0; + virtual SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName, PSecPkgInfoW *pkgInfo) = 0; @@ -97,6 +102,11 @@ class SSPILibraryDefault : public SSPILibrary { unsigned long* contextAttr, PTimeStamp ptsExpiry) override; + SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext, + ULONG ulAttribute, + PVOID pBuffer, + ULONG cbBuffer) override; + SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName, PSecPkgInfoW* pkgInfo) override; @@ -130,12 +140,14 @@ class NET_EXPORT_PRIVATE HttpAuthSSPI : public HttpNegotiateAuthSystem { void SetDelegation(HttpAuth::DelegationType delegation_type) override; private: - int OnFirstRound(const AuthCredentials* credentials); + int OnFirstRound(const AuthCredentials* credentials, + const NetLogWithSource& net_log); int GetNextSecurityToken(const std::string& spn, const std::string& channing_bindings, const void* in_token, int in_token_len, + const NetLogWithSource& net_log, void** out_token, int* out_token_len); diff --git a/chromium/net/http/http_auth_sspi_win_unittest.cc b/chromium/net/http/http_auth_sspi_win_unittest.cc index d9031fa7e28..3856bb85bbc 100644 --- a/chromium/net/http/http_auth_sspi_win_unittest.cc +++ b/chromium/net/http/http_auth_sspi_win_unittest.cc @@ -4,11 +4,18 @@ #include "net/http/http_auth_sspi_win.h" +#include <vector> + +#include "base/base64.h" #include "base/bind.h" +#include "base/json/json_reader.h" #include "net/base/net_errors.h" #include "net/http/http_auth_challenge_tokenizer.h" #include "net/http/mock_sspi_library_win.h" +#include "net/log/net_log_entry.h" +#include "net/log/net_log_event_type.h" #include "net/log/net_log_with_source.h" +#include "net/log/test_net_log.h" #include "net/test/gtest_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -171,4 +178,135 @@ TEST(HttpAuthSSPITest, ParseChallenge_NonBase64EncodedToken) { auth_sspi.ParseChallenge(&second_challenge)); } +// Runs through a full handshake against the MockSSPILibrary. +TEST(HttpAuthSSPITest, GenerateAuthToken_FullHandshake_AmbientCreds) { + MockSSPILibrary mock_library; + HttpAuthSSPI auth_sspi(&mock_library, "Negotiate", NEGOSSP_NAME, + kMaxTokenLength); + std::string first_challenge_text = "Negotiate"; + HttpAuthChallengeTokenizer first_challenge(first_challenge_text.begin(), + first_challenge_text.end()); + ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT, + auth_sspi.ParseChallenge(&first_challenge)); + + std::string auth_token; + ASSERT_EQ(OK, + auth_sspi.GenerateAuthToken( + nullptr, "HTTP/intranet.google.com", std::string(), &auth_token, + NetLogWithSource(), base::BindOnce(&UnexpectedCallback))); + EXPECT_EQ("Negotiate ", auth_token.substr(0, 10)); + + std::string decoded_token; + ASSERT_TRUE(base::Base64Decode(auth_token.substr(10), &decoded_token)); + + // This token string indicates that HttpAuthSSPI correctly established the + // security context using the default credentials. + EXPECT_EQ("<Default>'s token #1 for HTTP/intranet.google.com", decoded_token); + + // The server token is arbitrary. + std::string second_challenge_text = "Negotiate UmVzcG9uc2U="; + HttpAuthChallengeTokenizer second_challenge(second_challenge_text.begin(), + second_challenge_text.end()); + ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT, + auth_sspi.ParseChallenge(&second_challenge)); + + ASSERT_EQ(OK, + auth_sspi.GenerateAuthToken( + nullptr, "HTTP/intranet.google.com", std::string(), &auth_token, + NetLogWithSource(), base::BindOnce(&UnexpectedCallback))); + ASSERT_EQ("Negotiate ", auth_token.substr(0, 10)); + ASSERT_TRUE(base::Base64Decode(auth_token.substr(10), &decoded_token)); + EXPECT_EQ("<Default>'s token #2 for HTTP/intranet.google.com", decoded_token); +} + +// Test NetLogs produced while going through a full Negotiate handshake. +TEST(HttpAuthSSPITest, GenerateAuthToken_FullHandshake_AmbientCreds_Logging) { + BoundTestNetLog net_log; + MockSSPILibrary mock_library; + HttpAuthSSPI auth_sspi(&mock_library, "Negotiate", NEGOSSP_NAME, + kMaxTokenLength); + std::string first_challenge_text = "Negotiate"; + HttpAuthChallengeTokenizer first_challenge(first_challenge_text.begin(), + first_challenge_text.end()); + ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT, + auth_sspi.ParseChallenge(&first_challenge)); + + std::string auth_token; + ASSERT_EQ(OK, + auth_sspi.GenerateAuthToken( + nullptr, "HTTP/intranet.google.com", std::string(), &auth_token, + net_log.bound(), base::BindOnce(&UnexpectedCallback))); + + // The token is the ASCII string "Response" in base64. + std::string second_challenge_text = "Negotiate UmVzcG9uc2U="; + HttpAuthChallengeTokenizer second_challenge(second_challenge_text.begin(), + second_challenge_text.end()); + ASSERT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT, + auth_sspi.ParseChallenge(&second_challenge)); + ASSERT_EQ(OK, + auth_sspi.GenerateAuthToken( + nullptr, "HTTP/intranet.google.com", std::string(), &auth_token, + net_log.bound(), base::BindOnce(&UnexpectedCallback))); + + auto entries = + net_log.GetEntriesWithType(NetLogEventType::AUTH_LIBRARY_ACQUIRE_CREDS); + ASSERT_EQ(2u, entries.size()); // BEGIN and END. + auto expected = base::JSONReader::Read(R"( + { + "status": { + "net_error": 0, + "security_status": 0 + } + } + )"); + EXPECT_EQ(expected, entries[1].params); + + entries = + net_log.GetEntriesWithType(NetLogEventType::AUTH_LIBRARY_INIT_SEC_CTX); + ASSERT_EQ(4u, entries.size()); + + expected = base::JSONReader::Read(R"( + { + "context": { + "authority": "Dodgy Server", + "flags": { + "delegated": false, + "mutual": false, + "value": "0x00000000" + }, + "mechanism": "Itsa me Kerberos!!", + "open": true, + "source": "\u003CDefault>", + "target": "HTTP/intranet.google.com" + }, + "status": { + "net_error": 0, + "security_status": 0 + } + } + )"); + EXPECT_EQ(expected, entries[1].params); + + expected = base::JSONReader::Read(R"( + { + "context": { + "authority": "Dodgy Server", + "flags": { + "delegated": false, + "mutual": false, + "value": "0x00000000" + }, + "mechanism": "Itsa me Kerberos!!", + "open": false, + "source": "\u003CDefault>", + "target": "HTTP/intranet.google.com" + }, + "status": { + "net_error": 0, + "security_status": 0 + } + } + )"); + EXPECT_EQ(expected, entries[3].params); +} } // namespace net diff --git a/chromium/net/http/http_cache.cc b/chromium/net/http/http_cache.cc index b6803dc9c7c..b46df639e30 100644 --- a/chromium/net/http/http_cache.cc +++ b/chromium/net/http/http_cache.cc @@ -140,7 +140,8 @@ bool HttpCache::ActiveEntry::TransactionInReaders( // This structure keeps track of work items that are attempting to create or // open cache entries or the backend itself. struct HttpCache::PendingOp { - PendingOp() : callback_will_delete(false) {} + PendingOp() + : entry(nullptr), entry_opened(false), callback_will_delete(false) {} ~PendingOp() = default; // Returns the estimate of dynamically allocated memory in bytes. @@ -151,7 +152,8 @@ struct HttpCache::PendingOp { base::trace_event::EstimateMemoryUsage(pending_queue); } - disk_cache::EntryWithOpened disk_entry_struct; + disk_cache::Entry* entry; + bool entry_opened; // rather than created. std::unique_ptr<disk_cache::Backend> backend; std::unique_ptr<WorkItem> writer; @@ -692,8 +694,8 @@ HttpCache::PendingOp* HttpCache::GetPendingOp(const std::string& key) { void HttpCache::DeletePendingOp(PendingOp* pending_op) { std::string key; - if (pending_op->disk_entry_struct.entry) - key = pending_op->disk_entry_struct.entry->GetKey(); + if (pending_op->entry) + key = pending_op->entry->GetKey(); if (!key.empty()) { auto it = pending_ops_.find(key); @@ -723,18 +725,19 @@ int HttpCache::OpenOrCreateEntry(const std::string& key, if (rv != OK) return rv; - rv = disk_cache_->OpenOrCreateEntry( - key, transaction->priority(), &(pending_op->disk_entry_struct), - base::BindOnce(&HttpCache::OnPendingOpComplete, GetWeakPtr(), + disk_cache::EntryResult entry_result = disk_cache_->OpenOrCreateEntry( + key, transaction->priority(), + base::BindOnce(&HttpCache::OnPendingCreationOpComplete, GetWeakPtr(), pending_op)); - + rv = entry_result.net_error(); if (rv == ERR_IO_PENDING) { pending_op->callback_will_delete = true; - return rv; + return ERR_IO_PENDING; } pending_op->writer->ClearTransaction(); - OnPendingOpComplete(GetWeakPtr(), pending_op, rv); + OnPendingCreationOpComplete(GetWeakPtr(), pending_op, + std::move(entry_result)); return rv; } @@ -748,21 +751,19 @@ int HttpCache::OpenEntry(const std::string& key, if (rv != OK) return rv; - rv = disk_cache_->OpenEntry(key, transaction->priority(), - &(pending_op->disk_entry_struct.entry), - base::BindOnce(&HttpCache::OnPendingOpComplete, - GetWeakPtr(), pending_op)); - // Manually set the opened flag as disk_cache::OpenEntry() doesn't use - // EntryWithOpened struct. - pending_op->disk_entry_struct.opened = true; - + disk_cache::EntryResult entry_result = disk_cache_->OpenEntry( + key, transaction->priority(), + base::BindOnce(&HttpCache::OnPendingCreationOpComplete, GetWeakPtr(), + pending_op)); + rv = entry_result.net_error(); if (rv == ERR_IO_PENDING) { pending_op->callback_will_delete = true; - return rv; + return ERR_IO_PENDING; } pending_op->writer->ClearTransaction(); - OnPendingOpComplete(GetWeakPtr(), pending_op, rv); + OnPendingCreationOpComplete(GetWeakPtr(), pending_op, + std::move(entry_result)); return rv; } @@ -779,21 +780,19 @@ int HttpCache::CreateEntry(const std::string& key, if (rv != OK) return rv; - rv = disk_cache_->CreateEntry(key, transaction->priority(), - &(pending_op->disk_entry_struct.entry), - base::BindOnce(&HttpCache::OnPendingOpComplete, - GetWeakPtr(), pending_op)); - // Manually set the opened flag as disk_cache::CreateEntry() doesn't use - // EntryWithOpened struct. - pending_op->disk_entry_struct.opened = false; - + disk_cache::EntryResult entry_result = disk_cache_->CreateEntry( + key, transaction->priority(), + base::BindOnce(&HttpCache::OnPendingCreationOpComplete, GetWeakPtr(), + pending_op)); + rv = entry_result.net_error(); if (rv == ERR_IO_PENDING) { pending_op->callback_will_delete = true; - return rv; + return ERR_IO_PENDING; } pending_op->writer->ClearTransaction(); - OnPendingOpComplete(GetWeakPtr(), pending_op, rv); + OnPendingCreationOpComplete(GetWeakPtr(), pending_op, + std::move(entry_result)); return rv; } @@ -1317,16 +1316,15 @@ void HttpCache::OnIOComplete(int result, PendingOp* pending_op) { // Anything after a Doom has to be restarted. try_restart_requests = true; } else if (item->IsValid()) { - key = pending_op->disk_entry_struct.entry->GetKey(); - entry = ActivateEntry(pending_op->disk_entry_struct.entry, - pending_op->disk_entry_struct.opened); + key = pending_op->entry->GetKey(); + entry = ActivateEntry(pending_op->entry, pending_op->entry_opened); } else { // The writer transaction is gone. - if (!pending_op->disk_entry_struct.opened) - pending_op->disk_entry_struct.entry->Doom(); + if (!pending_op->entry_opened) + pending_op->entry->Doom(); - pending_op->disk_entry_struct.entry->Close(); - pending_op->disk_entry_struct.entry = nullptr; + pending_op->entry->Close(); + pending_op->entry = nullptr; try_restart_requests = true; } } @@ -1417,6 +1415,26 @@ void HttpCache::OnPendingOpComplete(const base::WeakPtr<HttpCache>& cache, } } +// static +void HttpCache::OnPendingCreationOpComplete( + const base::WeakPtr<HttpCache>& cache, + PendingOp* pending_op, + disk_cache::EntryResult result) { + if (!cache.get()) { + // The callback was cancelled so we should delete the pending_op that + // was used with this callback. If |result| contains a fresh entry + // it will close it automatically, since we don't release it here. + delete pending_op; + return; + } + + int rv = result.net_error(); + pending_op->entry_opened = result.opened(); + pending_op->entry = result.ReleaseEntry(); + pending_op->callback_will_delete = false; + cache->OnIOComplete(rv, pending_op); +} + void HttpCache::OnBackendCreated(int result, PendingOp* pending_op) { std::unique_ptr<WorkItem> item = std::move(pending_op->writer); WorkItemOperation op = item->operation(); diff --git a/chromium/net/http/http_cache.h b/chromium/net/http/http_cache.h index 371786c56a2..f85bd499d4c 100644 --- a/chromium/net/http/http_cache.h +++ b/chromium/net/http/http_cache.h @@ -50,6 +50,7 @@ class ApplicationStatusListener; namespace disk_cache { class Backend; class Entry; +class EntryResult; } // namespace disk_cache namespace net { @@ -618,6 +619,11 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory { PendingOp* pending_op, int result); + // Variant for Open/Create method family, which has a different signature. + static void OnPendingCreationOpComplete(const base::WeakPtr<HttpCache>& cache, + PendingOp* pending_op, + disk_cache::EntryResult result); + // Processes the backend creation notification. void OnBackendCreated(int result, PendingOp* pending_op); diff --git a/chromium/net/http/http_cache_lookup_manager_unittest.cc b/chromium/net/http/http_cache_lookup_manager_unittest.cc index ac7dec90824..35f1dbbcb65 100644 --- a/chromium/net/http/http_cache_lookup_manager_unittest.cc +++ b/chromium/net/http/http_cache_lookup_manager_unittest.cc @@ -6,7 +6,7 @@ #include <string> #include "base/run_loop.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" #include "net/http/http_cache_lookup_manager.h" @@ -84,7 +84,7 @@ void PopulateCacheEntry(HttpCache* cache, const GURL& request_url) { } // namespace TEST(HttpCacheLookupManagerTest, ServerPushMissCache) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockHttpCache mock_cache; HttpCacheLookupManager push_delegate(mock_cache.http_cache()); GURL request_url("http://www.example.com/pushed.jpg"); @@ -105,7 +105,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushMissCache) { } TEST(HttpCacheLookupManagerTest, ServerPushDoNotCreateCacheEntry) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockHttpCache mock_cache; HttpCacheLookupManager push_delegate(mock_cache.http_cache()); GURL request_url("http://www.example.com/pushed.jpg"); @@ -135,7 +135,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushDoNotCreateCacheEntry) { } TEST(HttpCacheLookupManagerTest, ServerPushHitCache) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockHttpCache mock_cache; HttpCacheLookupManager push_delegate(mock_cache.http_cache()); GURL request_url("http://www.example.com/pushed.jpg"); @@ -173,7 +173,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushHitCache) { // pending lookup transaction for the same URL, the new server push will not // send a new lookup transaction and should not be canceled. TEST(HttpCacheLookupManagerTest, ServerPushPendingLookup) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockHttpCache mock_cache; HttpCacheLookupManager push_delegate(mock_cache.http_cache()); GURL request_url("http://www.example.com/pushed.jpg"); @@ -218,7 +218,7 @@ TEST(HttpCacheLookupManagerTest, ServerPushPendingLookup) { // Test the server push lookup is based on the full url. TEST(HttpCacheLookupManagerTest, ServerPushLookupOnUrl) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockHttpCache mock_cache; HttpCacheLookupManager push_delegate(mock_cache.http_cache()); GURL request_url("http://www.example.com/pushed.jpg?u=0"); diff --git a/chromium/net/http/http_cache_transaction.cc b/chromium/net/http/http_cache_transaction.cc index 68ed6135ea1..b1249dfda91 100644 --- a/chromium/net/http/http_cache_transaction.cc +++ b/chromium/net/http/http_cache_transaction.cc @@ -33,6 +33,7 @@ #include "base/trace_event/trace_event.h" #include "base/values.h" #include "net/base/auth.h" +#include "net/base/cache_metrics.h" #include "net/base/features.h" #include "net/base/load_flags.h" #include "net/base/load_timing_info.h" @@ -196,6 +197,8 @@ HttpCache::Transaction::Transaction(RequestPriority priority, HttpCache* cache) HttpCache::Transaction::~Transaction() { TRACE_EVENT0("io", "HttpCacheTransaction::~Transaction"); + RecordHistograms(); + // We may have to issue another IO, but we should never invoke the callback_ // after this point. callback_.Reset(); @@ -439,20 +442,6 @@ void HttpCache::Transaction::StopCaching() { } } -bool HttpCache::Transaction::GetFullRequestHeaders( - HttpRequestHeaders* headers) const { - const HttpTransaction* transaction = GetOwnedOrMovedNetworkTransaction(); - if (transaction) { - return transaction->GetFullRequestHeaders(headers); - } else if (!network_transaction_info_.full_request_headers.IsEmpty()) { - *headers = network_transaction_info_.full_request_headers; - return true; - } - - // TODO(juliatuttle): Read headers from cache. - return false; -} - int64_t HttpCache::Transaction::GetTotalReceivedBytes() const { int64_t total_received_bytes = network_transaction_info_.total_received_bytes; const HttpTransaction* transaction = GetOwnedOrMovedNetworkTransaction(); @@ -629,8 +618,6 @@ size_t HttpCache::Transaction::EstimateMemoryUsage() const { } void HttpCache::Transaction::WriterAboutToBeRemovedFromEntry(int result) { - RecordHistograms(); - // Since the transaction can no longer access the network transaction, save // all network related info now. if (moved_network_transaction_to_writers_ && @@ -781,9 +768,9 @@ void HttpCache::Transaction::MaybeSetParallelWritingPatternForMetrics( // UpdateCachedResponse. // // 12. Prefetch, cached entry: -// Like examples 2-4, only CacheToggleUnusedSincePrefetch* is inserted between -// CacheReadResponse* and CacheDispatchValidation if the unused_since_prefetch -// bit is unset. +// Like examples 2-4, only CacheWriteUpdatedPrefetchResponse* is inserted +// between CacheReadResponse* and CacheDispatchValidation if the +// unused_since_prefetch bit is unset. // // 13. Cached entry less than 5 minutes old, unused_since_prefetch is true: // Skip validation, similar to example 2. @@ -860,12 +847,12 @@ int HttpCache::Transaction::DoLoop(int result) { case STATE_CACHE_READ_RESPONSE_COMPLETE: rv = DoCacheReadResponseComplete(rv); break; - case STATE_TOGGLE_UNUSED_SINCE_PREFETCH: + case STATE_WRITE_UPDATED_PREFETCH_RESPONSE: DCHECK_EQ(OK, rv); - rv = DoCacheToggleUnusedSincePrefetch(); + rv = DoCacheWriteUpdatedPrefetchResponse(rv); break; - case STATE_TOGGLE_UNUSED_SINCE_PREFETCH_COMPLETE: - rv = DoCacheToggleUnusedSincePrefetchComplete(rv); + case STATE_WRITE_UPDATED_PREFETCH_RESPONSE_COMPLETE: + rv = DoCacheWriteUpdatedPrefetchResponseComplete(rv); break; case STATE_CACHE_DISPATCH_VALIDATION: DCHECK_EQ(OK, rv); @@ -1512,12 +1499,33 @@ int HttpCache::Transaction::DoCacheReadResponseComplete(int result) { } } + if (response_.restricted_prefetch && + !(request_->load_flags & LOAD_CAN_USE_RESTRICTED_PREFETCH)) { + TransitionToState(STATE_SEND_REQUEST); + return OK; + } + + // When a restricted prefetch is reused, we lift its reuse restriction. + bool restricted_prefetch_reuse = + response_.restricted_prefetch && + request_->load_flags & LOAD_CAN_USE_RESTRICTED_PREFETCH; + DCHECK(!restricted_prefetch_reuse || response_.unused_since_prefetch); + if (response_.unused_since_prefetch != !!(request_->load_flags & LOAD_PREFETCH)) { // Either this is the first use of an entry since it was prefetched XOR // this is a prefetch. The value of response.unused_since_prefetch is // valid for this transaction but the bit needs to be flipped in storage. - TransitionToState(STATE_TOGGLE_UNUSED_SINCE_PREFETCH); + DCHECK(!updated_prefetch_response_); + updated_prefetch_response_ = std::make_unique<HttpResponseInfo>(response_); + updated_prefetch_response_->unused_since_prefetch = + !response_.unused_since_prefetch; + if (response_.restricted_prefetch && + request_->load_flags & LOAD_CAN_USE_RESTRICTED_PREFETCH) { + updated_prefetch_response_->restricted_prefetch = false; + } + + TransitionToState(STATE_WRITE_UPDATED_PREFETCH_RESPONSE); return OK; } @@ -1525,32 +1533,35 @@ int HttpCache::Transaction::DoCacheReadResponseComplete(int result) { return OK; } -int HttpCache::Transaction::DoCacheToggleUnusedSincePrefetch() { - TRACE_EVENT0("io", "HttpCacheTransaction::DoCacheToggleUnusedSincePrefetch"); - // Write back the toggled value for the next use of this entry. - response_.unused_since_prefetch = !response_.unused_since_prefetch; - +int HttpCache::Transaction::DoCacheWriteUpdatedPrefetchResponse(int result) { + TRACE_EVENT0(NetTracingCategory(), + "HttpCacheTransaction::DoCacheWriteUpdatedPrefetchResponse"); + DCHECK(updated_prefetch_response_); // TODO(jkarlin): If DoUpdateCachedResponse is also called for this // transaction then metadata will be written to cache twice. If prefetching // becomes more common, consider combining the writes. - - TransitionToState(STATE_TOGGLE_UNUSED_SINCE_PREFETCH_COMPLETE); - return WriteResponseInfoToEntry(false); + TransitionToState(STATE_WRITE_UPDATED_PREFETCH_RESPONSE_COMPLETE); + return WriteResponseInfoToEntry(*updated_prefetch_response_.get(), false); } -int HttpCache::Transaction::DoCacheToggleUnusedSincePrefetchComplete( +int HttpCache::Transaction::DoCacheWriteUpdatedPrefetchResponseComplete( int result) { TRACE_EVENT0( NetTracingCategory(), - "HttpCacheTransaction::DoCacheToggleUnusedSincePrefetchComplete"); - // Restore the original value for this transaction. - response_.unused_since_prefetch = !response_.unused_since_prefetch; + "HttpCacheTransaction::DoCacheWriteUpdatedPrefetchResponseComplete"); + updated_prefetch_response_.reset(); TransitionToState(STATE_CACHE_DISPATCH_VALIDATION); return OnWriteResponseInfoToEntryComplete(result); } int HttpCache::Transaction::DoCacheDispatchValidation() { TRACE_EVENT0("io", "HttpCacheTransaction::DoCacheDispatchValidation"); + if (!entry_) { + // Entry got destroyed when twiddling unused-since-prefetch bit. + TransitionToState(STATE_HEADERS_PHASE_CANNOT_PROCEED); + return OK; + } + // We now have access to the cache entry. // // o if we are a reader for the transaction, then we can start reading the @@ -1639,7 +1650,7 @@ int HttpCache::Transaction::DoCacheUpdateStaleWhileRevalidateTimeout() { response_.stale_revalidate_timeout = cache_->clock_->Now() + kStaleRevalidateTimeout; TransitionToState(STATE_CACHE_UPDATE_STALE_WHILE_REVALIDATE_TIMEOUT_COMPLETE); - return WriteResponseInfoToEntry(false); + return WriteResponseInfoToEntry(response_, false); } int HttpCache::Transaction::DoCacheUpdateStaleWhileRevalidateTimeoutComplete( @@ -1706,6 +1717,7 @@ int HttpCache::Transaction::DoSendRequestComplete(int result) { response_.network_accessed = response->network_accessed; response_.was_fetched_via_proxy = response->was_fetched_via_proxy; response_.proxy_server = response->proxy_server; + response_.restricted_prefetch = response->restricted_prefetch; // Do not record requests that have network errors or restarts. UpdateCacheEntryStatus(CacheEntryStatus::ENTRY_OTHER); @@ -1792,7 +1804,7 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() { // Invalidate any cached GET with a successful PUT or DELETE. if (mode_ == WRITE && (method_ == "PUT" || method_ == "DELETE")) { - if (NonErrorResponse(new_response->headers->response_code()) && + if (NonErrorResponse(new_response_->headers->response_code()) && (entry_ && !entry_->doomed)) { int ret = cache_->DoomEntry(cache_key_, nullptr); DCHECK_EQ(OK, ret); @@ -1803,11 +1815,11 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() { // Invalidate any cached GET with a successful POST. if (!(effective_load_flags_ & LOAD_DISABLE_CACHE) && method_ == "POST" && - NonErrorResponse(new_response->headers->response_code())) { + NonErrorResponse(new_response_->headers->response_code())) { cache_->DoomMainEntryForUrl(request_->url, request_->network_isolation_key); } - RecordNoStoreHeaderHistogram(request_->load_flags, new_response); + RecordNoStoreHeaderHistogram(request_->load_flags, new_response_); if (new_response_->headers->response_code() == 416 && (method_ == "GET" || method_ == "POST")) { @@ -1844,6 +1856,7 @@ int HttpCache::Transaction::DoUpdateCachedResponse() { response_.request_time = new_response_->request_time; response_.network_accessed = new_response_->network_accessed; response_.unused_since_prefetch = new_response_->unused_since_prefetch; + response_.restricted_prefetch = new_response_->restricted_prefetch; response_.ssl_info = new_response_->ssl_info; if (new_response_->vary_data.is_valid()) { response_.vary_data = new_response_->vary_data; @@ -1855,7 +1868,8 @@ int HttpCache::Transaction::DoUpdateCachedResponse() { response_.vary_data = new_vary_data; } - if (response_.headers->HasHeaderValue("cache-control", "no-store")) { + if (response_.headers->HasHeaderValue("cache-control", "no-store") || + ShouldDisableMediaCaching(response_.headers.get())) { if (!entry_->doomed) { int ret = cache_->DoomEntry(cache_key_, nullptr); DCHECK_EQ(OK, ret); @@ -1877,9 +1891,8 @@ int HttpCache::Transaction::DoUpdateCachedResponse() { int HttpCache::Transaction::DoCacheWriteUpdatedResponse() { TRACE_EVENT0("io", "HttpCacheTransaction::DoCacheWriteUpdatedResponse"); - TransitionToState(STATE_CACHE_WRITE_UPDATED_RESPONSE_COMPLETE); - return WriteResponseInfoToEntry(false); + return WriteResponseInfoToEntry(response_, false); } int HttpCache::Transaction::DoCacheWriteUpdatedResponseComplete(int result) { @@ -1984,7 +1997,7 @@ int HttpCache::Transaction::DoCacheWriteResponse() { } TransitionToState(STATE_CACHE_WRITE_RESPONSE_COMPLETE); - return WriteResponseInfoToEntry(truncated_); + return WriteResponseInfoToEntry(response_, truncated_); } int HttpCache::Transaction::DoCacheWriteResponseComplete(int result) { @@ -3006,6 +3019,13 @@ void HttpCache::Transaction::FixHeadersForHead() { int HttpCache::Transaction::DoSetupEntryForRead() { if (network_trans_) ResetNetworkTransaction(); + + if (!entry_) { + // Entry got destroyed when twiddling SWR bits. + TransitionToState(STATE_HEADERS_PHASE_CANNOT_PROCEED); + return OK; + } + if (partial_) { if (truncated_ || is_sparse_ || !invalid_range_) { // We are going to return the saved response headers to the caller, so @@ -3046,7 +3066,9 @@ int HttpCache::Transaction::WriteToEntry(int index, return rv; } -int HttpCache::Transaction::WriteResponseInfoToEntry(bool truncated) { +int HttpCache::Transaction::WriteResponseInfoToEntry( + const HttpResponseInfo& response, + bool truncated) { if (!entry_) return OK; @@ -3062,8 +3084,9 @@ int HttpCache::Transaction::WriteResponseInfoToEntry(bool truncated) { // (even though the cert status contains the actual errors) and no SSL // blocking page is shown. An alternative would be to reverse-map the cert // status to a net error and replay the net error. - if ((response_.headers->HasHeaderValue("cache-control", "no-store")) || - IsCertStatusError(response_.ssl_info.cert_status)) { + if ((response.headers->HasHeaderValue("cache-control", "no-store")) || + IsCertStatusError(response.ssl_info.cert_status) || + ShouldDisableMediaCaching(response.headers.get())) { bool stopped = StopCachingImpl(false); DCHECK(stopped); if (net_log_.IsCapturing()) @@ -3072,12 +3095,12 @@ int HttpCache::Transaction::WriteResponseInfoToEntry(bool truncated) { } if (truncated) - DCHECK_EQ(200, response_.headers->response_code()); + DCHECK_EQ(200, response.headers->response_code()); // When writing headers, we normally only write the non-transient headers. bool skip_transient_headers = true; scoped_refptr<PickledIOBuffer> data(new PickledIOBuffer()); - response_.Persist(data->pickle(), skip_transient_headers, truncated); + response.Persist(data->pickle(), skip_transient_headers, truncated); data->Done(); io_buf_len_ = data->pickle()->size(); @@ -3128,11 +3151,6 @@ void HttpCache::Transaction::DoneWithEntry(bool entry_is_complete) { if (!entry_) return; - // For a writer, histograms will be recorded in - // WriterAboutToBeRemovedFromEntry. - if (!InWriters()) - RecordHistograms(); - cache_->DoneWithEntry(entry_, this, entry_is_complete, partial_ != nullptr); entry_ = nullptr; mode_ = NONE; // switch to 'pass through' mode @@ -3231,8 +3249,11 @@ int HttpCache::Transaction::DoRestartPartialRequest() { // WRITE + Doom + STATE_INIT_ENTRY == STATE_CREATE_ENTRY (without an attempt // to Doom the entry again). - mode_ = WRITE; ResetPartialState(!range_requested_); + + // Change mode to WRITE after ResetPartialState as that may have changed the + // mode to NONE. + mode_ = WRITE; TransitionToState(STATE_CREATE_ENTRY); return OK; } @@ -3364,6 +3385,19 @@ void HttpCache::Transaction::RecordHistograms() { cache_entry_status_ == CacheEntryStatus::ENTRY_VALIDATED || cache_entry_status_ == CacheEntryStatus::ENTRY_UPDATED; + bool is_third_party = false; + + // Given that cache_entry_status_ is not ENTRY_UNDEFINED, the request must + // have started and so request_ should exist. + DCHECK(request_); + if (!request_->network_isolation_key.IsEmpty()) { + const url::Origin& top_frame_origin = + request_->network_isolation_key.GetTopFrameOrigin().value(); + url::Origin request_origin = url::Origin::Create(request_->url); + + is_third_party = !top_frame_origin.IsSameOriginWith(request_origin); + } + std::string mime_type; HttpResponseHeaders* response_headers = GetResponseInfo()->headers.get(); if (response_headers && response_headers->GetMimeType(&mime_type)) { @@ -3376,6 +3410,9 @@ void HttpCache::Transaction::RecordHistograms() { } else if (mime_type == "text/html") { CACHE_STATUS_HISTOGRAMS(".NonMainFrameHTML"); } else if (mime_type == "text/css") { + if (is_third_party) { + CACHE_STATUS_HISTOGRAMS(".CSSThirdParty"); + } CACHE_STATUS_HISTOGRAMS(".CSS"); } else if (base::StartsWith(mime_type, "image/", base::CompareCase::SENSITIVE)) { @@ -3390,8 +3427,14 @@ void HttpCache::Transaction::RecordHistograms() { base::CompareCase::SENSITIVE) || base::EndsWith(mime_type, "ecmascript", base::CompareCase::SENSITIVE)) { + if (is_third_party) { + CACHE_STATUS_HISTOGRAMS(".JavaScriptThirdParty"); + } CACHE_STATUS_HISTOGRAMS(".JavaScript"); } else if (mime_type.find("font") != std::string::npos) { + if (is_third_party) { + CACHE_STATUS_HISTOGRAMS(".FontThirdParty"); + } CACHE_STATUS_HISTOGRAMS(".Font"); } else if (base::StartsWith(mime_type, "audio/", base::CompareCase::SENSITIVE)) { @@ -3437,11 +3480,12 @@ void HttpCache::Transaction::RecordHistograms() { cache_entry_status_ == CacheEntryStatus::ENTRY_UPDATED || cache_entry_status_ == CacheEntryStatus::ENTRY_CANT_CONDITIONALIZE)) || (!did_send_request && - cache_entry_status_ == CacheEntryStatus::ENTRY_USED)); + (cache_entry_status_ == CacheEntryStatus::ENTRY_USED || + cache_entry_status_ == CacheEntryStatus::ENTRY_CANT_CONDITIONALIZE))); if (!did_send_request) { - DCHECK(cache_entry_status_ == CacheEntryStatus::ENTRY_USED); - UMA_HISTOGRAM_TIMES("HttpCache.AccessToDone.Used", total_time); + if (cache_entry_status_ == CacheEntryStatus::ENTRY_USED) + UMA_HISTOGRAM_TIMES("HttpCache.AccessToDone.Used", total_time); return; } @@ -3508,9 +3552,6 @@ void HttpCache::Transaction::SaveNetworkTransactionInfo( network_transaction_info_.old_connection_attempts.push_back(attempt); network_transaction_info_.old_remote_endpoint = IPEndPoint(); transaction.GetRemoteEndpoint(&network_transaction_info_.old_remote_endpoint); - - transaction.GetFullRequestHeaders( - &network_transaction_info_.full_request_headers); } void HttpCache::Transaction::OnIOComplete(int result) { @@ -3524,4 +3565,32 @@ void HttpCache::Transaction::TransitionToState(State state) { next_state_ = state; } +bool HttpCache::Transaction::ShouldDisableMediaCaching( + const HttpResponseHeaders* headers) const { + bool disable_caching = false; + if (base::FeatureList::IsEnabled(features::kTurnOffStreamingMediaCaching)) { + // If the acquired content is 'large' and not already cached, and we have + // a MIME type of audio or video, then disable the cache for this response. + // We based our initial definition of 'large' on the disk cache maximum + // block size of 16K, which we observed captures the majority of responses + // from various MSE implementations. + static constexpr int kMaxContentSize = 4096 * 4; + std::string mime_type; + if (headers->GetContentLength() > kMaxContentSize && + headers->response_code() != 304 && headers->GetMimeType(&mime_type) && + (base::StartsWith(mime_type, "video", + base::CompareCase::INSENSITIVE_ASCII) || + base::StartsWith(mime_type, "audio", + base::CompareCase::INSENSITIVE_ASCII))) { + disable_caching = true; + MediaCacheStatusResponseHistogram( + MediaResponseCacheType::kMediaResponseTransactionCacheDisabled); + } else { + MediaCacheStatusResponseHistogram( + MediaResponseCacheType::kMediaResponseTransactionCacheEnabled); + } + } + return disable_caching; +} + } // namespace net diff --git a/chromium/net/http/http_cache_transaction.h b/chromium/net/http/http_cache_transaction.h index ec14305ab56..f5f1b159035 100644 --- a/chromium/net/http/http_cache_transaction.h +++ b/chromium/net/http/http_cache_transaction.h @@ -131,7 +131,6 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { int buf_len, CompletionOnceCallback callback) override; void StopCaching() override; - bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override; int64_t GetTotalReceivedBytes() const override; int64_t GetTotalSentBytes() const override; void DoneReading() override; @@ -210,7 +209,6 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { int64_t total_sent_bytes = 0; ConnectionAttempts old_connection_attempts; IPEndPoint old_remote_endpoint; - HttpRequestHeaders full_request_headers; DISALLOW_COPY_AND_ASSIGN(NetworkTransactionInfo); }; @@ -234,8 +232,8 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { STATE_DONE_HEADERS_ADD_TO_ENTRY_COMPLETE, STATE_CACHE_READ_RESPONSE, STATE_CACHE_READ_RESPONSE_COMPLETE, - STATE_TOGGLE_UNUSED_SINCE_PREFETCH, - STATE_TOGGLE_UNUSED_SINCE_PREFETCH_COMPLETE, + STATE_WRITE_UPDATED_PREFETCH_RESPONSE, + STATE_WRITE_UPDATED_PREFETCH_RESPONSE_COMPLETE, STATE_CACHE_DISPATCH_VALIDATION, STATE_CACHE_QUERY_DATA, STATE_CACHE_QUERY_DATA_COMPLETE, @@ -314,8 +312,8 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { int DoDoneHeadersAddToEntryComplete(int result); int DoCacheReadResponse(); int DoCacheReadResponseComplete(int result); - int DoCacheToggleUnusedSincePrefetch(); - int DoCacheToggleUnusedSincePrefetchComplete(int result); + int DoCacheWriteUpdatedPrefetchResponse(int result); + int DoCacheWriteUpdatedPrefetchResponseComplete(int result); int DoCacheDispatchValidation(); int DoCacheQueryData(); int DoCacheQueryDataComplete(int result); @@ -444,9 +442,10 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { int data_len, CompletionOnceCallback callback); - // Called to write response_ to the cache entry. |truncated| indicates if the + // Called to write a response to the cache entry. |truncated| indicates if the // entry should be marked as incomplete. - int WriteResponseInfoToEntry(bool truncated); + int WriteResponseInfoToEntry(const HttpResponseInfo& response, + bool truncated); // Helper function, should be called with result of WriteResponseInfoToEntry // (or the result of the callback, when WriteResponseInfoToEntry returns @@ -554,6 +553,9 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { // Saves network transaction info using |transaction|. void SaveNetworkTransactionInfo(const HttpTransaction& transaction); + // Disables caching for media content when running on battery. + bool ShouldDisableMediaCaching(const HttpResponseHeaders* headers) const; + State next_state_; // Initial request with which Start() was invoked. @@ -576,6 +578,16 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { CompletionOnceCallback callback_; // Consumer's callback. HttpResponseInfo response_; HttpResponseInfo auth_response_; + + // This is only populated when we want to modify a prefetch request in some + // way for future transactions, while leaving it untouched for the current + // one. DoCacheReadResponseComplete() sets this to a copy of |response_|, + // and modifies the members for future transactions. Then, + // WriteResponseInfoToEntry() writes |updated_prefetch_response_| to the cache + // entry if it is populated, or |response_| otherwise. Finally, + // WriteResponseInfoToEntry() resets this to base::nullopt. + std::unique_ptr<HttpResponseInfo> updated_prefetch_response_; + const HttpResponseInfo* new_response_; std::string cache_key_; Mode mode_; diff --git a/chromium/net/http/http_cache_unittest.cc b/chromium/net/http/http_cache_unittest.cc index 8d4f37b7cba..35a0b28a5fe 100644 --- a/chromium/net/http/http_cache_unittest.cc +++ b/chromium/net/http/http_cache_unittest.cc @@ -64,7 +64,7 @@ #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/websockets/websocket_handshake_stream_base.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -689,7 +689,7 @@ bool LogContainsEventType(const BoundTestNetLog& log, } // namespace -using HttpCacheTest = TestWithScopedTaskEnvironment; +using HttpCacheTest = TestWithTaskEnvironment; class HttpCacheIOCallbackTest : public HttpCacheTest { public: HttpCacheIOCallbackTest() {} @@ -859,7 +859,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures) { base::HistogramTester histograms; const std::string histogram_name = "HttpCache.ParallelWritingPattern"; - cache.disk_cache()->set_soft_failures(true); + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL); // Read from the network, and fail to write to the cache. RunTransactionTest(cache.http_cache(), kSimpleGET_Transaction); @@ -897,7 +897,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures2) { rv = c->callback.WaitForResult(); // Start failing request now. - cache.disk_cache()->set_soft_failures(true); + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL); // We have to open the entry again to propagate the failure flag. disk_cache::Entry* en; @@ -930,7 +930,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures3) { EXPECT_EQ(0, cache.disk_cache()->open_count()); EXPECT_EQ(1, cache.disk_cache()->create_count()); - cache.disk_cache()->set_soft_failures(true); + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL); MockHttpRequest request(kSimpleGET_Transaction); @@ -943,7 +943,7 @@ TEST_F(HttpCacheTest, SimpleGETWithDiskFailures3) { EXPECT_THAT(c->callback.GetResult(rv), IsOk()); // Now verify that the entry was removed from the cache. - cache.disk_cache()->set_soft_failures(false); + cache.disk_cache()->set_soft_failures_mask(0); EXPECT_EQ(2, cache.network_layer()->transaction_count()); EXPECT_EQ(1, cache.disk_cache()->open_count()); @@ -1211,6 +1211,37 @@ TEST_F(HttpCacheTest, SimpleGET_CacheSignal_Failure) { } } +// Tests that if the transaction is destroyed right after setting the +// cache_entry_status_ as CANT_CONDITIONALIZE, then RecordHistograms should not +// hit a dcheck. +TEST_F(HttpCacheTest, RecordHistogramsCantConditionalize) { + MockHttpCache cache; + cache.disk_cache()->set_support_in_memory_entry_data(true); + + { + // Prime cache. + ScopedMockTransaction transaction(kSimpleGET_Transaction); + transaction.response_headers = "Cache-Control: no-cache\n"; + RunTransactionTest(cache.http_cache(), transaction); + EXPECT_EQ(1, cache.network_layer()->transaction_count()); + EXPECT_EQ(1, cache.disk_cache()->create_count()); + EXPECT_EQ(0, cache.disk_cache()->open_count()); + } + + { + ScopedMockTransaction transaction(kSimpleGET_Transaction); + MockHttpRequest request(transaction); + TestCompletionCallback callback; + std::unique_ptr<HttpTransaction> trans; + int rv = cache.http_cache()->CreateTransaction(DEFAULT_PRIORITY, &trans); + EXPECT_THAT(rv, IsOk()); + ASSERT_TRUE(trans.get()); + rv = trans->Start(&request, callback.callback(), NetLogWithSource()); + // Now destroy the transaction so that RecordHistograms gets invoked. + trans.reset(); + } +} + // Confirm if we have an empty cache, a read is marked as network verified. TEST_F(HttpCacheTest, SimpleGET_NetworkAccessed_Network) { MockHttpCache cache; @@ -1420,6 +1451,112 @@ TEST_F(HttpCacheTest, SimpleGET_UnusedSincePrefetch) { EXPECT_TRUE(response_info.was_cached); } +// Tests that requests made with the LOAD_RESTRICTED_PREFETCH load flag result +// in HttpResponseInfo entries with the |restricted_prefetch| flag set. Also +// tests that responses with |restricted_prefetch| flag set can only be used by +// requests that have the LOAD_CAN_USE_RESTRICTED_PREFETCH load flag. +TEST_F(HttpCacheTest, SimpleGET_RestrictedPrefetchIsRestrictedUntilReuse) { + MockHttpCache cache; + HttpResponseInfo response_info; + + // A normal load does not have |restricted_prefetch| set. + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), kTypicalGET_Transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_FALSE(response_info.restricted_prefetch); + EXPECT_FALSE(response_info.was_cached); + EXPECT_TRUE(response_info.network_accessed); + + // A restricted prefetch is marked as |restricted_prefetch|. + MockTransaction prefetch_transaction(kSimpleGET_Transaction); + prefetch_transaction.load_flags |= LOAD_PREFETCH; + prefetch_transaction.load_flags |= LOAD_RESTRICTED_PREFETCH; + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), prefetch_transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_TRUE(response_info.restricted_prefetch); + EXPECT_FALSE(response_info.was_cached); + EXPECT_TRUE(response_info.network_accessed); + + // Requests that are marked as able to reuse restricted prefetches can do so + // correctly. Once it is reused, it is no longer considered as or marked + // restricted. + MockTransaction can_use_restricted_prefetch_transaction( + kSimpleGET_Transaction); + can_use_restricted_prefetch_transaction.load_flags |= + LOAD_CAN_USE_RESTRICTED_PREFETCH; + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), can_use_restricted_prefetch_transaction, + &response_info, BoundTestNetLog().bound(), nullptr); + EXPECT_TRUE(response_info.restricted_prefetch); + EXPECT_TRUE(response_info.was_cached); + EXPECT_FALSE(response_info.network_accessed); + + // Later reuse is still no longer marked restricted. + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), kSimpleGET_Transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_FALSE(response_info.restricted_prefetch); + EXPECT_TRUE(response_info.was_cached); + EXPECT_FALSE(response_info.network_accessed); +} + +TEST_F(HttpCacheTest, SimpleGET_RestrictedPrefetchReuseIsLimited) { + MockHttpCache cache; + HttpResponseInfo response_info; + + // A restricted prefetch is marked as |restricted_prefetch|. + MockTransaction prefetch_transaction(kSimpleGET_Transaction); + prefetch_transaction.load_flags |= LOAD_PREFETCH; + prefetch_transaction.load_flags |= LOAD_RESTRICTED_PREFETCH; + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), prefetch_transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_TRUE(response_info.restricted_prefetch); + EXPECT_FALSE(response_info.was_cached); + EXPECT_TRUE(response_info.network_accessed); + + // Requests that cannot reuse restricted prefetches fail to do so. The network + // is accessed and the resulting response is not marked as + // |restricted_prefetch|. + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), kSimpleGET_Transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_FALSE(response_info.restricted_prefetch); + EXPECT_FALSE(response_info.was_cached); + EXPECT_TRUE(response_info.network_accessed); + + // Future requests that are not marked as able to reuse restricted prefetches + // can use the entry in the cache now, since it has been evicted in favor of + // an unrestricted one. + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), kSimpleGET_Transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_FALSE(response_info.restricted_prefetch); + EXPECT_TRUE(response_info.was_cached); + EXPECT_FALSE(response_info.network_accessed); +} + +TEST_F(HttpCacheTest, SimpleGET_UnusedSincePrefetchWriteError) { + MockHttpCache cache; + HttpResponseInfo response_info; + + // Do a prefetch. + MockTransaction prefetch_transaction(kSimpleGET_Transaction); + prefetch_transaction.load_flags |= LOAD_PREFETCH; + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), prefetch_transaction, &response_info, + BoundTestNetLog().bound(), nullptr); + EXPECT_TRUE(response_info.unused_since_prefetch); + EXPECT_FALSE(response_info.was_cached); + + // Try to use it while injecting a failure on write. + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_WRITE); + RunTransactionTestWithResponseInfoAndGetTiming( + cache.http_cache(), kSimpleGET_Transaction, &response_info, + BoundTestNetLog().bound(), nullptr); +} + static void PreserveRequestHeaders_Handler(const HttpRequestInfo* request, std::string* response_status, std::string* response_headers, @@ -1590,6 +1727,50 @@ TEST_F(HttpCacheTest, RangeGET_FullAfterPartial) { } } +// Tests that when a range request transaction becomes a writer for the first +// range and then fails conditionalization for the next range and decides to +// doom the entry, then there should not be a dcheck assertion hit. +TEST_F(HttpCacheTest, RangeGET_OverlappingRangesCouldntConditionalize) { + MockHttpCache cache; + + { + ScopedMockTransaction transaction_pre(kRangeGET_TransactionOK); + transaction_pre.request_headers = "Range: bytes = 10-19\r\n" EXTRA_HEADER; + transaction_pre.data = "rg: 10-19 "; + MockHttpRequest request_pre(transaction_pre); + + HttpResponseInfo response_pre; + RunTransactionTestWithRequest(cache.http_cache(), transaction_pre, + request_pre, &response_pre); + ASSERT_TRUE(response_pre.headers != nullptr); + EXPECT_EQ(206, response_pre.headers->response_code()); + EXPECT_EQ(1, cache.network_layer()->transaction_count()); + EXPECT_EQ(0, cache.disk_cache()->open_count()); + EXPECT_EQ(1, cache.disk_cache()->create_count()); + } + + { + // First range skips validation because the response is fresh while the + // second range requires validation since that range is not present in the + // cache and during validation it fails conditionalization. + cache.FailConditionalizations(); + ScopedMockTransaction transaction_pre(kRangeGET_TransactionOK); + transaction_pre.request_headers = "Range: bytes = 10-29\r\n" EXTRA_HEADER; + + // TODO(crbug.com/992521): Fix this scenario to not return the cached bytes + // repeatedly. + transaction_pre.data = "rg: 10-19 rg: 10-19 rg: 20-29 "; + MockHttpRequest request_pre(transaction_pre); + HttpResponseInfo response_pre; + RunTransactionTestWithRequest(cache.http_cache(), transaction_pre, + request_pre, &response_pre); + ASSERT_TRUE(response_pre.headers != nullptr); + EXPECT_EQ(2, cache.network_layer()->transaction_count()); + EXPECT_EQ(1, cache.disk_cache()->open_count()); + EXPECT_EQ(2, cache.disk_cache()->create_count()); + } +} + TEST_F(HttpCacheTest, RangeGET_FullAfterPartialReuse) { MockHttpCache cache; @@ -2027,6 +2208,7 @@ TEST_F(HttpCacheTest, RangeGET_ParallelValidationDifferentRanges) { EXPECT_EQ(1, cache.disk_cache()->open_count()); EXPECT_EQ(1, cache.disk_cache()->create_count()); + context_list.clear(); histograms.ExpectBucketCount( histogram_name, static_cast<int>(HttpCache::PARALLEL_WRITING_NOT_JOIN_RANGE), 1); @@ -2250,6 +2432,7 @@ TEST_F(HttpCacheTest, RangeGET_ParallelValidationCouldntConditionalize) { range_transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 "; ReadAndVerifyTransaction(c->trans.get(), range_transaction); } + context_list.clear(); } // Tests a 200 request and a simultaneous range request where conditionalization @@ -2334,6 +2517,7 @@ TEST_F(HttpCacheTest, RangeGET_ParallelValidationCouldConditionalize) { range_transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 "; ReadAndVerifyTransaction(c1->trans.get(), range_transaction); + context_list.clear(); } // Tests parallel validation on range requests with overlapping ranges. @@ -3277,7 +3461,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritingCacheWriteFailed) { EXPECT_EQ(1, cache.GetCountDoneHeadersQueue(kSimpleGET_Transaction.url)); // Initiate Read from two writers and let the first get a cache write failure. - cache.disk_cache()->set_soft_failures(true); + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL); // We have to open the entry again to propagate the failure flag. disk_cache::Entry* en; cache.OpenBackendEntry(kSimpleGET_Transaction.url, &en); @@ -3395,6 +3579,7 @@ TEST_F(HttpCacheTest, SimplePOST_ParallelWritingDisallowed) { EXPECT_EQ(0, cache.disk_cache()->open_count()); EXPECT_EQ(1, cache.disk_cache()->create_count()); + context_list.clear(); histograms.ExpectBucketCount( histogram_name, static_cast<int>(HttpCache::PARALLEL_WRITING_NOT_JOIN_METHOD_NOT_GET), 1); @@ -3484,6 +3669,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritingSuccess) { } // Verify metrics. + context_list.clear(); histograms.ExpectBucketCount( histogram_name, static_cast<int>(HttpCache::PARALLEL_WRITING_CREATE), 1); histograms.ExpectBucketCount( @@ -3564,6 +3750,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritingHuge) { EXPECT_EQ(kNumTransactions, cache.network_layer()->transaction_count()); // Verify metrics. + context_list.clear(); histograms.ExpectBucketCount( histogram_name, static_cast<int>(HttpCache::PARALLEL_WRITING_CREATE), 1); histograms.ExpectBucketCount( @@ -3940,7 +4127,7 @@ TEST_F(HttpCacheTest, SimpleGET_ParallelWritersFailWrite) { EXPECT_EQ(1, cache.disk_cache()->create_count()); // Fail the request. - cache.disk_cache()->set_soft_failures(true); + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL); // We have to open the entry again to propagate the failure flag. disk_cache::Entry* en; cache.OpenBackendEntry(kSimpleGET_Transaction.url, &en); @@ -6975,7 +7162,7 @@ TEST_F(HttpCacheTest, RangeGET_CacheReadError) { EXPECT_EQ(0, cache.disk_cache()->open_count()); EXPECT_EQ(1, cache.disk_cache()->create_count()); - cache.disk_cache()->set_soft_failures_one_instance(true); + cache.disk_cache()->set_soft_failures_one_instance(MockDiskEntry::FAIL_ALL); // Try to read from the cache (40-49), which will fail quickly enough to // restart, due to the failure injected above. This should still be a range @@ -9684,6 +9871,111 @@ TEST_F(HttpCacheTest, SplitCacheWithFrameOrigin) { EXPECT_FALSE(response.was_cached); } +TEST_F(HttpCacheTest, HttpCacheProfileThirdPartyCSS) { + base::HistogramTester histograms; + MockHttpCache cache; + HttpResponseInfo response; + + url::Origin origin_a = url::Origin::Create(GURL(kSimpleGET_Transaction.url)); + url::Origin origin_b = url::Origin::Create(GURL("http://b.com")); + + ScopedMockTransaction transaction(kSimpleGET_Transaction); + transaction.response_headers = "Content-Type: text/css\n"; + + MockHttpRequest trans_info = MockHttpRequest(transaction); + + // Requesting with the same top-frame origin should not count as third-party + // but should still be recorded as CSS + trans_info.network_isolation_key = NetworkIsolationKey(origin_a, origin_a); + + RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info, + &response); + + histograms.ExpectTotalCount("HttpCache.Pattern", 1); + histograms.ExpectTotalCount("HttpCache.Pattern.CSS", 1); + histograms.ExpectTotalCount("HttpCache.Pattern.CSSThirdParty", 0); + + // Requesting with a different top-frame origin should count as third-party + // and recorded as CSS + trans_info.network_isolation_key = NetworkIsolationKey(origin_b, origin_b); + + RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info, + &response); + histograms.ExpectTotalCount("HttpCache.Pattern", 2); + histograms.ExpectTotalCount("HttpCache.Pattern.CSS", 2); + histograms.ExpectTotalCount("HttpCache.Pattern.CSSThirdParty", 1); +} + +TEST_F(HttpCacheTest, HttpCacheProfileThirdPartyJavaScript) { + base::HistogramTester histograms; + MockHttpCache cache; + HttpResponseInfo response; + + url::Origin origin_a = url::Origin::Create(GURL(kSimpleGET_Transaction.url)); + url::Origin origin_b = url::Origin::Create(GURL("http://b.com")); + + ScopedMockTransaction transaction(kSimpleGET_Transaction); + transaction.response_headers = "Content-Type: application/javascript\n"; + + MockHttpRequest trans_info = MockHttpRequest(transaction); + + // Requesting with the same top-frame origin should not count as third-party + // but should still be recorded as JavaScript + trans_info.network_isolation_key = NetworkIsolationKey(origin_a, origin_a); + + RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info, + &response); + + histograms.ExpectTotalCount("HttpCache.Pattern", 1); + histograms.ExpectTotalCount("HttpCache.Pattern.JavaScript", 1); + histograms.ExpectTotalCount("HttpCache.Pattern.JavaScriptThirdParty", 0); + + // Requesting with a different top-frame origin should count as third-party + // and recorded as JavaScript + trans_info.network_isolation_key = NetworkIsolationKey(origin_b, origin_b); + + RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info, + &response); + histograms.ExpectTotalCount("HttpCache.Pattern", 2); + histograms.ExpectTotalCount("HttpCache.Pattern.JavaScript", 2); + histograms.ExpectTotalCount("HttpCache.Pattern.JavaScriptThirdParty", 1); +} + +TEST_F(HttpCacheTest, HttpCacheProfileThirdPartyFont) { + base::HistogramTester histograms; + MockHttpCache cache; + HttpResponseInfo response; + + url::Origin origin_a = url::Origin::Create(GURL(kSimpleGET_Transaction.url)); + url::Origin origin_b = url::Origin::Create(GURL("http://b.com")); + + ScopedMockTransaction transaction(kSimpleGET_Transaction); + transaction.response_headers = "Content-Type: font/otf\n"; + + MockHttpRequest trans_info = MockHttpRequest(transaction); + + // Requesting with the same top-frame origin should not count as third-party + // but should still be recorded as a font + trans_info.network_isolation_key = NetworkIsolationKey(origin_a, origin_a); + + RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info, + &response); + + histograms.ExpectTotalCount("HttpCache.Pattern", 1); + histograms.ExpectTotalCount("HttpCache.Pattern.Font", 1); + histograms.ExpectTotalCount("HttpCache.Pattern.FontThirdParty", 0); + + // Requesting with a different top-frame origin should count as third-party + // and recorded as a font + trans_info.network_isolation_key = NetworkIsolationKey(origin_b, origin_b); + + RunTransactionTestWithRequest(cache.http_cache(), transaction, trans_info, + &response); + histograms.ExpectTotalCount("HttpCache.Pattern", 2); + histograms.ExpectTotalCount("HttpCache.Pattern.Font", 2); + histograms.ExpectTotalCount("HttpCache.Pattern.FontThirdParty", 1); +} + TEST_F(HttpCacheTest, SplitCache) { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( @@ -10166,7 +10458,7 @@ using HugeCacheTestConfiguration = class HttpCacheHugeResourceTest : public ::testing::TestWithParam<HugeCacheTestConfiguration>, - public WithScopedTaskEnvironment { + public WithTaskEnvironment { public: static std::list<HugeCacheTestConfiguration> GetTestModes(); static std::list<HugeCacheTestConfiguration> kTestModes; @@ -10675,7 +10967,7 @@ TEST_F(HttpCacheTest, NetworkBytesRange) { RemoveMockTransaction(&kRangeGET_TransactionOK); } -class HttpCachePrefetchValidationTest : public TestWithScopedTaskEnvironment { +class HttpCachePrefetchValidationTest : public TestWithTaskEnvironment { protected: static const int kNumSecondsPerMinute = 60; static const int kMaxAgeSecs = 100; @@ -10933,6 +11225,37 @@ TEST_F(HttpCacheTest, StaleContentNotUsedWhenUnusable) { EXPECT_FALSE(response_info.async_revalidation_requested); } +TEST_F(HttpCacheTest, StaleContentWriteError) { + MockHttpCache cache; + base::SimpleTestClock clock; + cache.http_cache()->SetClockForTesting(&clock); + cache.network_layer()->SetClock(&clock); + clock.Advance(base::TimeDelta::FromSeconds(10)); + + ScopedMockTransaction stale_while_revalidate_transaction( + kSimpleGET_Transaction); + stale_while_revalidate_transaction.load_flags |= + LOAD_SUPPORT_ASYNC_REVALIDATION; + stale_while_revalidate_transaction.response_headers = + "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" + "Age: 10801\n" + "Cache-Control: max-age=0,stale-while-revalidate=86400\n"; + + // Write to the cache. + RunTransactionTest(cache.http_cache(), stale_while_revalidate_transaction); + + EXPECT_EQ(1, cache.network_layer()->transaction_count()); + + // Send the request again but inject a write fault. Should still work + // (and not dereference any null pointers). + cache.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_WRITE); + HttpResponseInfo response_info; + RunTransactionTestWithResponseInfo( + cache.http_cache(), stale_while_revalidate_transaction, &response_info); + + EXPECT_EQ(2, cache.network_layer()->transaction_count()); +} + // Tests that we allow multiple simultaneous, non-overlapping transactions to // take place on a sparse entry. TEST_F(HttpCacheTest, RangeGET_MultipleRequests) { @@ -11853,7 +12176,7 @@ TEST_F(HttpCacheIOCallbackTest, FailedOpenOrCreateFollowedByOpenOrCreate) { class HttpCacheMemoryDumpTest : public testing::TestWithParam<base::trace_event::MemoryDumpLevelOfDetail>, - public WithScopedTaskEnvironment {}; + public WithTaskEnvironment {}; INSTANTIATE_TEST_SUITE_P( /* no prefix */, diff --git a/chromium/net/http/http_cache_writers_unittest.cc b/chromium/net/http/http_cache_writers_unittest.cc index 8690686af01..ffe9ff845b7 100644 --- a/chromium/net/http/http_cache_writers_unittest.cc +++ b/chromium/net/http/http_cache_writers_unittest.cc @@ -20,7 +20,7 @@ #include "net/http/mock_http_cache.h" #include "net/http/partial_data.h" #include "net/test/gtest_util.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -70,7 +70,7 @@ class TestHttpCache : public HttpCache { size_t make_readers_size_ = 0u; }; -class WritersTest : public TestWithScopedTaskEnvironment { +class WritersTest : public TestWithTaskEnvironment { public: enum class DeleteTransactionType { NONE, ACTIVE, WAITING, IDLE }; WritersTest() @@ -385,7 +385,7 @@ class WritersTest : public TestWithScopedTaskEnvironment { std::vector<TestCompletionCallback> callbacks(results->size()); // Fail the request. - cache_.disk_cache()->set_soft_failures(true); + cache_.disk_cache()->set_soft_failures_mask(MockDiskEntry::FAIL_ALL); // We have to open the entry again to propagate the failure flag. disk_cache::Entry* en; diff --git a/chromium/net/http/http_network_layer.cc b/chromium/net/http/http_network_layer.cc index 1c835fa6d75..14b8ebad2de 100644 --- a/chromium/net/http/http_network_layer.cc +++ b/chromium/net/http/http_network_layer.cc @@ -11,7 +11,7 @@ #include "base/strings/string_util.h" #include "net/http/http_network_session.h" #include "net/http/http_network_transaction.h" -#include "net/http/http_server_properties_impl.h" +#include "net/http/http_server_properties.h" #include "net/http/http_stream_factory_job.h" #include "net/spdy/spdy_session.h" #include "net/spdy/spdy_session_pool.h" diff --git a/chromium/net/http/http_network_layer_unittest.cc b/chromium/net/http/http_network_layer_unittest.cc index 0f6514582be..b8c7a7b9c02 100644 --- a/chromium/net/http/http_network_layer_unittest.cc +++ b/chromium/net/http/http_network_layer_unittest.cc @@ -12,7 +12,7 @@ #include "net/cert/multi_log_ct_verifier.h" #include "net/dns/mock_host_resolver.h" #include "net/http/http_network_session.h" -#include "net/http/http_server_properties_impl.h" +#include "net/http/http_server_properties.h" #include "net/http/http_transaction_test_util.h" #include "net/http/transport_security_state.h" #include "net/log/net_log_with_source.h" @@ -21,7 +21,7 @@ #include "net/spdy/spdy_session_pool.h" #include "net/ssl/ssl_config_service_defaults.h" #include "net/test/gtest_util.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -34,8 +34,7 @@ namespace net { namespace { -class HttpNetworkLayerTest : public PlatformTest, - public WithScopedTaskEnvironment { +class HttpNetworkLayerTest : public PlatformTest, public WithTaskEnvironment { protected: HttpNetworkLayerTest() : ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()) {} @@ -275,7 +274,7 @@ class HttpNetworkLayerTest : public PlatformTest, std::unique_ptr<HttpNetworkLayer> factory_; private: - HttpServerPropertiesImpl http_server_properties_; + HttpServerProperties http_server_properties_; }; TEST_F(HttpNetworkLayerTest, CreateAndDestroy) { diff --git a/chromium/net/http/http_network_session.cc b/chromium/net/http/http_network_session.cc index 93e89e46866..35549024a49 100644 --- a/chromium/net/http/http_network_session.cc +++ b/chromium/net/http/http_network_session.cc @@ -32,6 +32,7 @@ #include "net/socket/client_socket_pool_manager_impl.h" #include "net/socket/next_proto.h" #include "net/socket/ssl_client_socket.h" +#include "net/spdy/spdy_session.h" #include "net/spdy/spdy_session_pool.h" #include "net/third_party/quiche/src/quic/core/crypto/quic_random.h" #include "net/third_party/quiche/src/quic/core/quic_packets.h" @@ -80,6 +81,7 @@ HttpNetworkSession::Params::Params() enable_spdy_ping_based_connection_checking(true), enable_http2(true), spdy_session_max_recv_window_size(kSpdySessionMaxRecvWindowSize), + spdy_session_max_queued_capped_frames(kSpdySessionMaxQueuedCappedFrames), time_func(&base::TimeTicks::Now), enable_http2_alternative_service(false), enable_websocket_over_http2(false), @@ -139,7 +141,8 @@ HttpNetworkSession::HttpNetworkSession(const Params& params, proxy_resolution_service_(context.proxy_resolution_service), ssl_config_service_(context.ssl_config_service), ssl_client_session_cache_(SSLClientSessionCache::Config()), - ssl_client_context_(context.cert_verifier, + ssl_client_context_(context.ssl_config_service, + context.cert_verifier, context.transport_security_state, context.cert_transparency_verifier, context.ct_policy_enforcer, @@ -165,13 +168,16 @@ HttpNetworkSession::HttpNetworkSession(const Params& params, : quic::QuicChromiumClock::GetInstance(), params.quic_params), spdy_session_pool_(context.host_resolver, - context.ssl_config_service, + &ssl_client_context_, context.http_server_properties, context.transport_security_state, params.quic_params.supported_versions, params.enable_spdy_ping_based_connection_checking, + params.enable_http2, + params.enable_quic, params.quic_params.support_ietf_format_quic_altsvc, params.spdy_session_max_recv_window_size, + params.spdy_session_max_queued_capped_frames, AddDefaultHttp2Settings(params.http2_settings), params.greased_http2_frame, params.time_func, @@ -186,12 +192,12 @@ HttpNetworkSession::HttpNetworkSession(const Params& params, normal_socket_pool_manager_ = std::make_unique<ClientSocketPoolManagerImpl>( CreateCommonConnectJobParams(false /* for_websockets */), CreateCommonConnectJobParams(true /* for_websockets */), - context_.ssl_config_service, NORMAL_SOCKET_POOL); + NORMAL_SOCKET_POOL); websocket_socket_pool_manager_ = std::make_unique<ClientSocketPoolManagerImpl>( CreateCommonConnectJobParams(false /* for_websockets */), CreateCommonConnectJobParams(true /* for_websockets */), - context_.ssl_config_service, WEBSOCKET_SOCKET_POOL); + WEBSOCKET_SOCKET_POOL); if (params_.enable_http2) next_protos_.push_back(kProtoHTTP2); @@ -342,22 +348,6 @@ void HttpNetworkSession::CloseIdleConnections() { spdy_session_pool_.CloseCurrentIdleSessions(); } -bool HttpNetworkSession::IsProtocolEnabled(NextProto protocol) const { - switch (protocol) { - case kProtoUnknown: - NOTREACHED(); - return false; - case kProtoHTTP11: - return true; - case kProtoHTTP2: - return params_.enable_http2; - case kProtoQUIC: - return IsQuicEnabled(); - } - NOTREACHED(); - return false; -} - void HttpNetworkSession::SetServerPushDelegate( std::unique_ptr<ServerPushDelegate> push_delegate) { DCHECK(push_delegate); @@ -373,10 +363,8 @@ void HttpNetworkSession::GetAlpnProtos(NextProtoVector* alpn_protos) const { *alpn_protos = next_protos_; } -void HttpNetworkSession::GetSSLConfig(const HttpRequestInfo& request, - SSLConfig* server_config, +void HttpNetworkSession::GetSSLConfig(SSLConfig* server_config, SSLConfig* proxy_config) const { - ssl_config_service_->GetSSLConfig(server_config); GetAlpnProtos(&server_config->alpn_protos); server_config->ignore_certificate_errors = params_.ignore_certificate_errors; *proxy_config = *server_config; diff --git a/chromium/net/http/http_network_session.h b/chromium/net/http/http_network_session.h index 1e2131fe79e..d6ad5607abe 100644 --- a/chromium/net/http/http_network_session.h +++ b/chromium/net/http/http_network_session.h @@ -27,6 +27,7 @@ #include "net/base/host_port_pair.h" #include "net/base/net_export.h" #include "net/http/http_auth_cache.h" +#include "net/http/http_auth_preferences.h" #include "net/http/http_stream_factory.h" #include "net/net_buildflags.h" #include "net/quic/quic_stream_factory.h" @@ -34,7 +35,6 @@ #include "net/socket/next_proto.h" #include "net/socket/websocket_endpoint_lock_manager.h" #include "net/spdy/spdy_session_pool.h" -#include "net/ssl/ssl_client_auth_cache.h" #include "net/ssl/ssl_client_session_cache.h" #include "net/third_party/quiche/src/spdy/core/spdy_protocol.h" @@ -106,6 +106,8 @@ class NET_EXPORT HttpNetworkSession { bool enable_spdy_ping_based_connection_checking; bool enable_http2; size_t spdy_session_max_recv_window_size; + // Maximum number of capped frames that can be queued at any time. + int spdy_session_max_queued_capped_frames; // HTTP/2 connection settings. // Unknown settings will still be sent to the server. // Might contain unknown setting identifiers from a predefined set that @@ -140,7 +142,7 @@ class NET_EXPORT HttpNetworkSession { QuicParams quic_params; // If non-empty, QUIC will only be spoken to hosts in this list. - base::flat_set<std::string> quic_host_whitelist; + base::flat_set<std::string> quic_host_allowlist; // Enable HTTP/0.9 for HTTP/HTTPS on ports other than the default one for // each protocol. @@ -148,6 +150,10 @@ class NET_EXPORT HttpNetworkSession { // If true, idle sockets won't be closed when memory pressure happens. bool disable_idle_sockets_close_on_memory_pressure; + + // If authentication APIs that support ambient authentication are allowed + // to use the default credentials. + HttpAuthPreferences::DefaultCredentials allow_default_credentials; }; // Structure with pointers to the dependencies of the HttpNetworkSession. @@ -195,9 +201,7 @@ class NET_EXPORT HttpNetworkSession { ~HttpNetworkSession(); HttpAuthCache* http_auth_cache() { return &http_auth_cache_; } - SSLClientAuthCache* ssl_client_auth_cache() { - return &ssl_client_auth_cache_; - } + SSLClientContext* ssl_client_context() { return &ssl_client_context_; } void AddResponseDrainer(std::unique_ptr<HttpResponseBodyDrainer> drainer); @@ -258,18 +262,13 @@ class NET_EXPORT HttpNetworkSession { // Returns the original Context used to construct this session. const Context& context() const { return context_; } - bool IsProtocolEnabled(NextProto protocol) const; - void SetServerPushDelegate(std::unique_ptr<ServerPushDelegate> push_delegate); // Populates |*alpn_protos| with protocols to be used with ALPN. void GetAlpnProtos(NextProtoVector* alpn_protos) const; - // Populates |server_config| and |proxy_config| based on this session and - // |request|. - void GetSSLConfig(const HttpRequestInfo& request, - SSLConfig* server_config, - SSLConfig* proxy_config) const; + // Populates |server_config| and |proxy_config| based on this session. + void GetSSLConfig(SSLConfig* server_config, SSLConfig* proxy_config) const; // Dumps memory allocation stats. |parent_dump_absolute_name| is the name // used by the parent MemoryAllocatorDump in the memory dump hierarchy. @@ -315,7 +314,6 @@ class NET_EXPORT HttpNetworkSession { SSLConfigService* const ssl_config_service_; HttpAuthCache http_auth_cache_; - SSLClientAuthCache ssl_client_auth_cache_; SSLClientSessionCache ssl_client_session_cache_; SSLClientContext ssl_client_context_; WebSocketEndpointLockManager websocket_endpoint_lock_manager_; diff --git a/chromium/net/http/http_network_transaction.cc b/chromium/net/http/http_network_transaction.cc index 9aea7f000c9..149fdf61c68 100644 --- a/chromium/net/http/http_network_transaction.cc +++ b/chromium/net/http/http_network_transaction.cc @@ -66,6 +66,7 @@ #include "net/ssl/ssl_info.h" #include "net/ssl/ssl_private_key.h" #include "url/gurl.h" +#include "url/scheme_host_port.h" #include "url/url_canon.h" #if BUILDFLAG(ENABLE_REPORTING) @@ -117,7 +118,7 @@ HttpNetworkTransaction::HttpNetworkTransaction(RequestPriority priority, priority_(priority), headers_valid_(false), can_send_early_data_(false), - server_ssl_client_cert_was_cached_(false), + configured_client_cert_for_server_(false), request_headers_(), #if BUILDFLAG(ENABLE_REPORTING) network_error_logging_report_generated_(false), @@ -182,8 +183,7 @@ int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info, start_timeticks_ = base::TimeTicks::Now(); #endif // BUILDFLAG(ENABLE_REPORTING) - // Now that we have an HttpRequestInfo object, update server_ssl_config_. - session_->GetSSLConfig(*request_, &server_ssl_config_, &proxy_ssl_config_); + session_->GetSSLConfig(&server_ssl_config_, &proxy_ssl_config_); if (request_->load_flags & LOAD_DISABLE_CERT_NETWORK_FETCHES) { server_ssl_config_.disable_cert_verification_network_fetches = true; @@ -194,8 +194,14 @@ int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info, can_send_early_data_ = true; } - if (request_->load_flags & LOAD_PREFETCH) + if (request_->load_flags & LOAD_PREFETCH) { response_.unused_since_prefetch = true; + } + + if (request_->load_flags & LOAD_RESTRICTED_PREFETCH) { + DCHECK(response_.unused_since_prefetch); + response_.restricted_prefetch = true; + } next_state_ = STATE_NOTIFY_BEFORE_CREATE_STREAM; int rv = DoLoop(OK); @@ -235,8 +241,8 @@ int HttpNetworkTransaction::RestartWithCertificate( scoped_refptr<X509Certificate> client_cert, scoped_refptr<SSLPrivateKey> client_private_key, CompletionOnceCallback callback) { - // In HandleCertificateRequest(), we always tear down existing stream - // requests to force a new connection. So we shouldn't have one here. + // When we receive ERR_SSL_CLIENT_AUTH_CERT_NEEDED, we always tear down + // existing streams and stream requests to force a new connection. DCHECK(!stream_request_.get()); DCHECK(!stream_.get()); DCHECK_EQ(STATE_NONE, next_state_); @@ -244,14 +250,15 @@ int HttpNetworkTransaction::RestartWithCertificate( if (!CheckMaxRestarts()) return ERR_TOO_MANY_RETRIES; - SSLConfig* ssl_config = response_.cert_request_info->is_proxy ? - &proxy_ssl_config_ : &server_ssl_config_; - ssl_config->send_client_cert = true; - ssl_config->client_cert = client_cert; - ssl_config->client_private_key = client_private_key; - session_->ssl_client_auth_cache()->Add( + // Add the credentials to the client auth cache. The next stream request will + // then pick them up. + session_->ssl_client_context()->SetClientCertificate( response_.cert_request_info->host_and_port, std::move(client_cert), std::move(client_private_key)); + + if (!response_.cert_request_info->is_proxy) + configured_client_cert_for_server_ = true; + // Reset the other member variables. // Note: this is necessary only with SSL renegotiation. ResetStateForRestart(); @@ -318,7 +325,8 @@ void HttpNetworkTransaction::PrepareForAuthRestart(HttpAuth::Target target) { if (target == HttpAuth::AUTH_SERVER && auth_controllers_[target]->NeedsHTTP11()) { session_->http_server_properties()->SetHTTP11Required( - HostPortPair::FromURL(request_->url)); + HttpServerProperties::GetNormalizedSchemeHostPort(request_->url), + request_->network_isolation_key); } bool keep_alive = false; @@ -417,13 +425,6 @@ int HttpNetworkTransaction::Read(IOBuffer* buf, void HttpNetworkTransaction::StopCaching() {} -bool HttpNetworkTransaction::GetFullRequestHeaders( - HttpRequestHeaders* headers) const { - // TODO(juliatuttle): Make sure we've populated request_headers_. - *headers = request_headers_; - return true; -} - int64_t HttpNetworkTransaction::GetTotalReceivedBytes() const { int64_t total_received_bytes = total_received_bytes_; if (stream_) @@ -834,8 +835,6 @@ int HttpNetworkTransaction::DoCreateStreamComplete(int result) { if (result == OK) { next_state_ = STATE_INIT_STREAM; DCHECK(stream_.get()); - } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { - result = HandleCertificateRequest(result); } else if (result == ERR_HTTP_1_1_REQUIRED || result == ERR_PROXY_HTTP_1_1_REQUIRED) { return HandleHttp11Required(result); @@ -886,7 +885,8 @@ int HttpNetworkTransaction::DoGenerateProxyAuthToken() { if (!auth_controllers_[target].get()) auth_controllers_[target] = new HttpAuthController( target, AuthURL(target), session_->http_auth_cache(), - session_->http_auth_handler_factory(), session_->host_resolver()); + session_->http_auth_handler_factory(), session_->host_resolver(), + session_->params().allow_default_credentials); return auth_controllers_[target]->MaybeGenerateAuthToken(request_, io_callback_, net_log_); @@ -905,7 +905,8 @@ int HttpNetworkTransaction::DoGenerateServerAuthToken() { if (!auth_controllers_[target].get()) { auth_controllers_[target] = new HttpAuthController( target, AuthURL(target), session_->http_auth_cache(), - session_->http_auth_handler_factory(), session_->host_resolver()); + session_->http_auth_handler_factory(), session_->host_resolver(), + session_->params().allow_default_credentials); if (request_->load_flags & LOAD_DO_NOT_USE_EMBEDDED_IDENTITY) auth_controllers_[target]->DisableEmbeddedIdentity(); } @@ -1052,6 +1053,9 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) { // We don't handle a certificate error during SSL renegotiation, so we // have to return an error that's not in the certificate error range // (-2xx). + // + // TODO(davidben): Remove this error. This is impossible now that server + // certificates are forbidden from changing in renegotiation. LOG(ERROR) << "Got a server certificate with error " << result << " during SSL renegotiation"; result = ERR_CERT_ERROR_IN_SSL_RENEGOTIATION; @@ -1060,9 +1064,10 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) { DCHECK(IsSecureRequest()); response_.cert_request_info = base::MakeRefCounted<SSLCertRequestInfo>(); stream_->GetSSLCertRequestInfo(response_.cert_request_info.get()); - result = HandleCertificateRequest(result); - if (result == OK) - return result; + total_received_bytes_ += stream_->GetTotalReceivedBytes(); + total_sent_bytes_ += stream_->GetTotalSentBytes(); + stream_->Close(true); + CacheNetErrorDetailsAndResetStream(); } if (result == ERR_HTTP_1_1_REQUIRED || @@ -1158,7 +1163,7 @@ int HttpNetworkTransaction::DoReadHeadersComplete(int result) { if (response_.ssl_info.is_valid() && !IsCertStatusError(response_.ssl_info.cert_status)) { session_->http_stream_factory()->ProcessAlternativeServices( - session_, response_.headers.get(), + session_, request_->network_isolation_key, response_.headers.get(), url::SchemeHostPort(request_->url)); } } @@ -1442,134 +1447,56 @@ void HttpNetworkTransaction::GenerateNetworkErrorLoggingReport(int rv) { } #endif // BUILDFLAG(ENABLE_REPORTING) -int HttpNetworkTransaction::HandleCertificateRequest(int error) { - // There are two paths through which the server can request a certificate - // from us. The first is during the initial handshake, the second is - // during SSL renegotiation. - // - // In both cases, we want to close the connection before proceeding. - // We do this for two reasons: - // First, we don't want to keep the connection to the server hung for a - // long time while the user selects a certificate. - // Second, even if we did keep the connection open, NSS has a bug where - // restarting the handshake for ClientAuth is currently broken. - DCHECK_EQ(error, ERR_SSL_CLIENT_AUTH_CERT_NEEDED); - - if (stream_.get()) { - // Since we already have a stream, we're being called as part of SSL - // renegotiation. - DCHECK(!stream_request_.get()); - total_received_bytes_ += stream_->GetTotalReceivedBytes(); - total_sent_bytes_ += stream_->GetTotalSentBytes(); - stream_->Close(true); - CacheNetErrorDetailsAndResetStream(); - } - - // The server is asking for a client certificate during the initial - // handshake. - stream_request_.reset(); - - // If the user selected one of the certificates in client_certs or declined - // to provide one for this server before, use the past decision - // automatically. - scoped_refptr<X509Certificate> client_cert; - scoped_refptr<SSLPrivateKey> client_private_key; - bool found_cached_cert = session_->ssl_client_auth_cache()->Lookup( - response_.cert_request_info->host_and_port, &client_cert, - &client_private_key); - if (!found_cached_cert) - return error; - - // Check that the certificate selected is still a certificate the server - // is likely to accept, based on the criteria supplied in the - // CertificateRequest message. - if (client_cert.get()) { - const std::vector<std::string>& cert_authorities = - response_.cert_request_info->cert_authorities; - - bool cert_still_valid = cert_authorities.empty() || - client_cert->IsIssuedByEncoded(cert_authorities); - if (!cert_still_valid) - return error; - } - - if (!response_.cert_request_info->is_proxy) { - server_ssl_client_cert_was_cached_ = true; - } - - // TODO(davidben): Add a unit test which covers this path; we need to be - // able to send a legitimate certificate and also bypass/clear the - // SSL session cache. - SSLConfig* ssl_config = response_.cert_request_info->is_proxy ? - &proxy_ssl_config_ : &server_ssl_config_; - ssl_config->send_client_cert = true; - ssl_config->client_cert = client_cert; - ssl_config->client_private_key = client_private_key; - next_state_ = STATE_CREATE_STREAM; - // Reset the other member variables. - // Note: this is necessary only with SSL renegotiation. - ResetStateForRestart(); - return OK; -} - int HttpNetworkTransaction::HandleHttp11Required(int error) { DCHECK(error == ERR_HTTP_1_1_REQUIRED || error == ERR_PROXY_HTTP_1_1_REQUIRED); - if (error == ERR_HTTP_1_1_REQUIRED) { - HttpServerProperties::ForceHTTP11(&server_ssl_config_); - } else { - HttpServerProperties::ForceHTTP11(&proxy_ssl_config_); - } + // HttpServerProperties should have been updated, so when the request is sent + // again, it will automatically use HTTP/1.1. ResetConnectionAndRequestForResend(); return OK; } int HttpNetworkTransaction::HandleSSLClientAuthError(int error) { - // Most client auth errors here come from the origin server, but they may come - // from the proxy if the request is not tunneled (i.e. the origin is HTTP, so - // there is no HTTPS connection) and the proxy does not report a bad client - // certificate until after the TLS handshake completes. The latter occurs in - // TLS 1.3 or TLS 1.2 with False Start (disabled for proxies). The error will - // then surface out of Read() rather than Connect() and ultimately surfaced - // out of DoReadHeadersComplete(). + // Client certificate errors may come from either the origin server or the + // proxy. + // + // Origin errors are handled here, while most proxy errors are handled in the + // HttpStreamFactory and below. However, if the request is not tunneled (i.e. + // the origin is HTTP, so there is no HTTPS connection) and the proxy does not + // report a bad client certificate until after the TLS handshake completes. + // The latter occurs in TLS 1.3 or TLS 1.2 with False Start (disabled for + // proxies). The error will then surface out of Read() rather than Connect() + // and ultimately surfaced out of DoReadHeadersComplete(). // // See https://crbug.com/828965. - bool is_server; - SSLConfig* ssl_config; - HostPortPair host_port_pair; - if (UsingHttpProxyWithoutTunnel()) { - is_server = false; - ssl_config = &proxy_ssl_config_; - host_port_pair = proxy_info_.proxy_server().host_port_pair(); - } else { - is_server = true; - ssl_config = &server_ssl_config_; - host_port_pair = HostPortPair::FromURL(request_->url); - } + bool is_server = !UsingHttpProxyWithoutTunnel(); + HostPortPair host_port_pair = + is_server ? HostPortPair::FromURL(request_->url) + : proxy_info_.proxy_server().host_port_pair(); - // Client certificate errors from the proxy are handled in the - // HttpStreamFactory and below. - if (ssl_config->send_client_cert && - (error == ERR_SSL_PROTOCOL_ERROR || IsClientCertificateError(error))) { + if (error == ERR_SSL_PROTOCOL_ERROR || IsClientCertificateError(error)) { DCHECK((is_server && IsSecureRequest()) || proxy_info_.is_https()); - session_->ssl_client_auth_cache()->Remove(host_port_pair); - - // The private key handle may have gone stale due to, e.g., the user - // unplugging their smartcard. Operating systems do not provide reliable - // notifications for this, so if the signature failed and the private key - // came from SSLClientAuthCache, retry to ask the user for a new one. - if (is_server && error == ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED && - server_ssl_client_cert_was_cached_ && !HasExceededMaxRetries()) { - server_ssl_client_cert_was_cached_ = false; - server_ssl_config_.send_client_cert = false; - server_ssl_config_.client_cert = nullptr; - server_ssl_config_.client_private_key = nullptr; - retry_attempts_++; - net_log_.AddEventWithNetErrorCode( - NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error); - ResetConnectionAndRequestForResend(); - return OK; + if (session_->ssl_client_context()->ClearClientCertificate( + host_port_pair)) { + // The private key handle may have gone stale due to, e.g., the user + // unplugging their smartcard. Operating systems do not provide reliable + // notifications for this, so if the signature failed and the user was + // not already prompted for certificate on this request, retry to ask + // the user for a new one. + // + // TODO(davidben): There is no corresponding feature for proxy client + // certificates. Ideally this would live at a lower level, common to both, + // but |configured_client_cert_for_server_| is not accessible below the + // socket pools. + if (is_server && error == ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED && + !configured_client_cert_for_server_ && !HasExceededMaxRetries()) { + retry_attempts_++; + net_log_.AddEventWithNetErrorCode( + NetLogEventType::HTTP_TRANSACTION_RESTART_AFTER_ERROR, error); + ResetConnectionAndRequestForResend(); + return OK; + } } } return error; diff --git a/chromium/net/http/http_network_transaction.h b/chromium/net/http/http_network_transaction.h index fbb7bf69337..3fb09d25cf2 100644 --- a/chromium/net/http/http_network_transaction.h +++ b/chromium/net/http/http_network_transaction.h @@ -70,7 +70,6 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction int buf_len, CompletionOnceCallback callback) override; void StopCaching() override; - bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override; int64_t GetTotalReceivedBytes() const override; int64_t GetTotalSentBytes() const override; void DoneReading() override; @@ -223,9 +222,6 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction // response to a CONNECT request. void LogBlockedTunnelResponse(int response_code) const; - // Called to handle a client certificate request. - int HandleCertificateRequest(int error); - // Called wherever ERR_HTTP_1_1_REQUIRED or // ERR_PROXY_HTTP_1_1_REQUIRED has to be handled. int HandleHttp11Required(int error); @@ -339,9 +335,9 @@ class NET_EXPORT_PRIVATE HttpNetworkTransaction // True if we can send the request over early data. bool can_send_early_data_; - // True if |server_ssl_config_.client_cert| was looked up from the - // SSLClientAuthCache, rather than provided externally by the caller. - bool server_ssl_client_cert_was_cached_; + // True if the client certificate for the server (rather than the proxy) was + // configured in this transaction. + bool configured_client_cert_for_server_; // SSL configuration used for the server and proxy, respectively. Note // |server_ssl_config_| may be updated from the HttpStreamFactory, which will diff --git a/chromium/net/http/http_network_transaction_unittest.cc b/chromium/net/http/http_network_transaction_unittest.cc index 7bd3fffca68..34169b51d1b 100644 --- a/chromium/net/http/http_network_transaction_unittest.cc +++ b/chromium/net/http/http_network_transaction_unittest.cc @@ -31,9 +31,9 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" -#include "base/test/scoped_task_environment.h" #include "base/test/simple_test_clock.h" #include "base/test/simple_test_tick_clock.h" +#include "base/test/task_environment.h" #include "base/test/test_file_util.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" @@ -69,7 +69,7 @@ #include "net/http/http_proxy_connect_job.h" #include "net/http/http_request_headers.h" #include "net/http/http_response_info.h" -#include "net/http/http_server_properties_impl.h" +#include "net/http/http_server_properties.h" #include "net/http/http_stream.h" #include "net/http/http_stream_factory.h" #include "net/http/http_transaction_test_util.h" @@ -104,10 +104,11 @@ #include "net/ssl/ssl_config_service.h" #include "net/ssl/ssl_info.h" #include "net/ssl/ssl_private_key.h" +#include "net/ssl/test_ssl_config_service.h" #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/third_party/quiche/src/spdy/core/spdy_framer.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "net/url_request/static_http_user_agent_settings.h" @@ -348,31 +349,10 @@ class FailingProxyResolverFactory : public ProxyResolverFactory { } }; -class TestSSLConfigService : public SSLConfigService { - public: - explicit TestSSLConfigService(const SSLConfig& config) : config_(config) {} - ~TestSSLConfigService() override = default; - - void GetSSLConfig(SSLConfig* config) override { *config = config_; } - - bool CanShareConnectionWithClientCerts( - const std::string& hostname) const override { - return false; - } - - void UpdateSSLConfigAndNotify(const SSLConfig& config) { - config_ = config; - NotifySSLConfigChange(); - } - - private: - SSLConfig config_; -}; - } // namespace class HttpNetworkTransactionTest : public PlatformTest, - public WithScopedTaskEnvironment { + public WithTaskEnvironment { public: ~HttpNetworkTransactionTest() override { // Important to restore the per-pool limit first, since the pool limit must @@ -385,8 +365,7 @@ class HttpNetworkTransactionTest : public PlatformTest, protected: HttpNetworkTransactionTest() - : WithScopedTaskEnvironment( - base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW), + : WithTaskEnvironment(base::test::TaskEnvironment::TimeSource::MOCK_TIME), dummy_connect_job_params_( nullptr /* client_socket_factory */, nullptr /* host_resolver */, @@ -524,14 +503,6 @@ class HttpNetworkTransactionTest : public PlatformTest, EXPECT_EQ("GET / HTTP/1.1\r\n", GetStringValueFromParams(entries[pos], "line")); - HttpRequestHeaders request_headers; - EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); - std::string value; - EXPECT_TRUE(request_headers.GetHeader("Host", &value)); - EXPECT_EQ("www.example.org", value); - EXPECT_TRUE(request_headers.GetHeader("Connection", &value)); - EXPECT_EQ("keep-alive", value); - EXPECT_EQ("['Host: www.example.org','Connection: keep-alive']", GetHeaders(entries[pos].params)); @@ -673,8 +644,7 @@ class CaptureGroupIdTransportSocketPool : public TransportClientSocketPool { base::TimeDelta(), ProxyServer::Direct(), false /* is_for_websockets */, - common_connect_job_params, - nullptr /* ssl_config_service */) {} + common_connect_job_params) {} const ClientSocketPool::GroupId& last_group_id_received() const { return last_group_id_; @@ -7595,18 +7565,9 @@ TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2) { ntlm::test::kExpectedAuthenticateMsgEmptyChannelBindingsV2)), &authenticate_msg); - // Retry with authorization header. - spdy::SpdyHeaderBlock request_headers1( - spdy_util_.ConstructGetHeaderBlock(kUrl)); - request_headers1["authorization"] = std::string("NTLM ") + negotiate_msg; - spdy::SpdySerializedFrame request1(spdy_util_.ConstructSpdyHeaders( - 3, std::move(request_headers1), LOWEST, true)); - - spdy::SpdySerializedFrame rst( - spdy_util_.ConstructSpdyRstStream(3, spdy::ERROR_CODE_HTTP_1_1_REQUIRED)); - MockWrite writes0[] = {CreateMockWrite(request0, 0)}; - MockRead reads0[] = {CreateMockRead(resp, 1), MockRead(ASYNC, 0, 2)}; + MockRead reads0[] = {CreateMockRead(resp, 1), + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2)}; // Retry yet again using HTTP/1.1. MockWrite writes1[] = { @@ -7649,7 +7610,11 @@ TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2) { SSLSocketDataProvider ssl0(ASYNC, OK); ssl0.next_proto = kProtoHTTP2; + ssl0.next_protos_expected_in_ssl_config = + NextProtoVector{kProtoHTTP2, kProtoHTTP11}; SSLSocketDataProvider ssl1(ASYNC, OK); + // When creating the second connection, only HTTP/1.1 should be allowed. + ssl1.next_protos_expected_in_ssl_config = NextProtoVector{kProtoHTTP11}; session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl0); session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); @@ -7709,6 +7674,225 @@ TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2) { EXPECT_TRUE(data1.AllWriteDataConsumed()); } +#if BUILDFLAG(ENABLE_WEBSOCKETS) + +// Variant of above test using WebSockets. +TEST_F(HttpNetworkTransactionTest, NTLMOverHttp2WithWebsockets) { + const GURL kInitialUrl("https://server/"); + const GURL kWebSocketUrl("wss://server/"); + HttpAuthHandlerNTLM::ScopedProcSetter proc_setter( + MockGetMSTime, MockGenerateRandom, MockGetHostName); + + // Initial request establishes an H2 connection, which will then be reused for + // WebSockets. This is needed since WebSockets will reuse H2 connections, but + // it won't create a new one. + spdy::SpdyHeaderBlock initial_request_headers( + spdy_util_.ConstructGetHeaderBlock(kInitialUrl.spec())); + spdy::SpdySerializedFrame initial_request(spdy_util_.ConstructSpdyHeaders( + 1, std::move(initial_request_headers), DEFAULT_PRIORITY, true)); + spdy::SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck()); + + // Settings frame, indicating WebSockets is supported. + spdy::SettingsMap settings; + settings[spdy::SETTINGS_ENABLE_CONNECT_PROTOCOL] = 1; + spdy::SpdySerializedFrame settings_frame( + spdy_util_.ConstructSpdySettings(settings)); + + // Response headers for first request. Body is never received, but that + // shouldn't matter for the purposes of this test. + spdy::SpdySerializedFrame initial_response( + spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); + + // First WebSocket request, which has no credentials. + spdy::SpdyHeaderBlock websocket_request_headers; + websocket_request_headers[spdy::kHttp2MethodHeader] = "CONNECT"; + websocket_request_headers[spdy::kHttp2AuthorityHeader] = "server"; + websocket_request_headers[spdy::kHttp2SchemeHeader] = "https"; + websocket_request_headers[spdy::kHttp2PathHeader] = "/"; + websocket_request_headers[spdy::kHttp2ProtocolHeader] = "websocket"; + websocket_request_headers["origin"] = "http://server"; + websocket_request_headers["sec-websocket-version"] = "13"; + websocket_request_headers["sec-websocket-extensions"] = + "permessage-deflate; client_max_window_bits"; + spdy::SpdySerializedFrame websocket_request(spdy_util_.ConstructSpdyHeaders( + 3, std::move(websocket_request_headers), MEDIUM, false)); + + // Auth challenge to WebSocket request. + spdy::SpdyHeaderBlock auth_challenge_headers; + auth_challenge_headers[spdy::kHttp2StatusHeader] = "401"; + auth_challenge_headers["www-authenticate"] = "NTLM"; + spdy::SpdySerializedFrame websocket_auth_challenge( + spdy_util_.ConstructSpdyResponseHeaders( + 3, std::move(auth_challenge_headers), true)); + + MockWrite writes0[] = {CreateMockWrite(initial_request, 0), + CreateMockWrite(settings_ack, 2), + CreateMockWrite(websocket_request, 4), + MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 7)}; + MockRead reads0[] = {CreateMockRead(settings_frame, 1), + CreateMockRead(initial_response, 3), + CreateMockRead(websocket_auth_challenge, 5), + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6)}; + + // Generate the NTLM messages based on known test data. + std::string negotiate_msg; + std::string challenge_msg; + std::string authenticate_msg; + base::Base64Encode( + base::StringPiece( + reinterpret_cast<const char*>(ntlm::test::kExpectedNegotiateMsg), + base::size(ntlm::test::kExpectedNegotiateMsg)), + &negotiate_msg); + base::Base64Encode( + base::StringPiece( + reinterpret_cast<const char*>(ntlm::test::kChallengeMsgFromSpecV2), + base::size(ntlm::test::kChallengeMsgFromSpecV2)), + &challenge_msg); + base::Base64Encode( + base::StringPiece( + reinterpret_cast<const char*>( + ntlm::test::kExpectedAuthenticateMsgEmptyChannelBindingsV2), + base::size( + ntlm::test::kExpectedAuthenticateMsgEmptyChannelBindingsV2)), + &authenticate_msg); + + // Retry yet again using HTTP/1.1. + MockWrite writes1[] = { + // After restarting with a null identity, this is the + // request we should be issuing -- the final header line contains a Type + // 1 message. + MockWrite("GET / HTTP/1.1\r\n" + "Host: server\r\n" + "Connection: Upgrade\r\n" + "Authorization: NTLM "), + MockWrite(negotiate_msg.c_str()), + MockWrite("\r\n"), + MockWrite("Origin: http://server\r\n" + "Sec-WebSocket-Version: 13\r\n" + "Upgrade: websocket\r\n" + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" + "Sec-WebSocket-Extensions: permessage-deflate; " + "client_max_window_bits\r\n\r\n"), + + // After calling trans.RestartWithAuth(), we should send a Type 3 message + // (the credentials for the origin server). The second request continues + // on the same connection. + MockWrite("GET / HTTP/1.1\r\n" + "Host: server\r\n" + "Connection: Upgrade\r\n" + "Authorization: NTLM "), + MockWrite(authenticate_msg.c_str()), + MockWrite("\r\n"), + MockWrite("Origin: http://server\r\n" + "Sec-WebSocket-Version: 13\r\n" + "Upgrade: websocket\r\n" + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" + "Sec-WebSocket-Extensions: permessage-deflate; " + "client_max_window_bits\r\n\r\n"), + }; + + MockRead reads1[] = { + // The origin server responds with a Type 2 message. + MockRead("HTTP/1.1 401 Access Denied\r\n"), + MockRead("WWW-Authenticate: NTLM "), + MockRead(challenge_msg.c_str()), + MockRead("\r\n"), + MockRead("Content-Length: 42\r\n"), + MockRead("Content-Type: text/html\r\n\r\n"), + MockRead("You are not authorized to view this page\r\n"), + + // Lastly we get the desired content. + MockRead("HTTP/1.1 101 Switching Protocols\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n"), + }; + SequencedSocketData data0(reads0, writes0); + session_deps_.socket_factory->AddSocketDataProvider(&data0); + SSLSocketDataProvider ssl0(ASYNC, OK); + ssl0.next_proto = kProtoHTTP2; + ssl0.next_protos_expected_in_ssl_config = + NextProtoVector{kProtoHTTP2, kProtoHTTP11}; + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl0); + + StaticSocketDataProvider data1(reads1, writes1); + session_deps_.socket_factory->AddSocketDataProvider(&data1); + SSLSocketDataProvider ssl1(ASYNC, OK); + // When creating the second connection, only HTTP/1.1 should be allowed. + ssl1.next_protos_expected_in_ssl_config = NextProtoVector{}; + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); + + session_deps_.enable_websocket_over_http2 = true; + std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); + + HttpRequestInfo initial_request_info; + initial_request_info.method = "GET"; + initial_request_info.url = kInitialUrl; + initial_request_info.traffic_annotation = + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + HttpNetworkTransaction initial_trans(DEFAULT_PRIORITY, session.get()); + TestCompletionCallback initial_callback; + int rv = initial_trans.Start(&initial_request_info, + initial_callback.callback(), NetLogWithSource()); + EXPECT_THAT(initial_callback.GetResult(rv), IsOk()); + + EXPECT_FALSE(session->http_server_properties()->RequiresHTTP11( + url::SchemeHostPort(kInitialUrl), NetworkIsolationKey())); + + HttpRequestInfo websocket_request_info; + websocket_request_info.method = "GET"; + websocket_request_info.url = kWebSocketUrl; + websocket_request_info.traffic_annotation = + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + EXPECT_TRUE(HostPortPair::FromURL(initial_request_info.url) + .Equals(HostPortPair::FromURL(websocket_request_info.url))); + websocket_request_info.extra_headers.SetHeader("Origin", "http://server"); + websocket_request_info.extra_headers.SetHeader("Sec-WebSocket-Version", "13"); + // The following two headers must be removed by WebSocketHttp2HandshakeStream. + websocket_request_info.extra_headers.SetHeader("Connection", "Upgrade"); + websocket_request_info.extra_headers.SetHeader("Upgrade", "websocket"); + + TestWebSocketHandshakeStreamCreateHelper websocket_stream_create_helper; + + HttpNetworkTransaction websocket_trans(MEDIUM, session.get()); + websocket_trans.SetWebSocketHandshakeStreamCreateHelper( + &websocket_stream_create_helper); + + TestCompletionCallback websocket_callback; + rv = websocket_trans.Start(&websocket_request_info, + websocket_callback.callback(), NetLogWithSource()); + EXPECT_THAT(websocket_callback.GetResult(rv), IsOk()); + + EXPECT_FALSE(websocket_trans.IsReadyToRestartForAuth()); + + const HttpResponseInfo* response = websocket_trans.GetResponseInfo(); + ASSERT_TRUE(response); + EXPECT_TRUE(CheckNTLMServerAuth(response->auth_challenge)); + + rv = websocket_trans.RestartWithAuth( + AuthCredentials(ntlm::test::kDomainUserCombined, ntlm::test::kPassword), + websocket_callback.callback()); + EXPECT_THAT(websocket_callback.GetResult(rv), IsOk()); + + EXPECT_TRUE(websocket_trans.IsReadyToRestartForAuth()); + + response = websocket_trans.GetResponseInfo(); + ASSERT_TRUE(response); + EXPECT_FALSE(response->auth_challenge.has_value()); + + rv = websocket_trans.RestartWithAuth(AuthCredentials(), + websocket_callback.callback()); + EXPECT_THAT(websocket_callback.GetResult(rv), IsOk()); + + // The server should have been marked as requiring HTTP/1.1. The important + // part here is that the scheme that requires HTTP/1.1 should be HTTPS, not + // WSS. + EXPECT_TRUE(session->http_server_properties()->RequiresHTTP11( + url::SchemeHostPort(kInitialUrl), NetworkIsolationKey())); +} + +#endif // BUILDFLAG(ENABLE_WEBSOCKETS) + // Test that, if we have an NTLM proxy and the origin resets the connection, we // do no retry forever checking for TLS version interference. This is a // regression test for https://crbug.com/823387. The version interference probe @@ -7721,7 +7905,7 @@ TEST_F(HttpNetworkTransactionTest, NTLMProxyTLSHandshakeReset) { ProxyResolutionService::CreateFixedFromPacResult( "PROXY server", TRAFFIC_ANNOTATION_FOR_TESTS); - SSLConfig config; + SSLContextConfig config; session_deps_.ssl_config_service = std::make_unique<TestSSLConfigService>(config); @@ -11153,7 +11337,7 @@ std::unique_ptr<HttpNetworkSession> SetupSessionForGroupIdTests( base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( url::SchemeHostPort("https", "host.with.alternate", 443), - alternative_service, expiration); + NetworkIsolationKey(), alternative_service, expiration); return session; } @@ -11960,7 +12144,9 @@ TEST_F(HttpNetworkTransactionTest, IgnoreAltSvcWithInvalidCert) { HttpServerProperties* http_server_properties = session->http_server_properties(); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); EXPECT_THAT(callback.WaitForResult(), IsOk()); @@ -11976,7 +12162,9 @@ TEST_F(HttpNetworkTransactionTest, IgnoreAltSvcWithInvalidCert) { EXPECT_EQ("hello world", response_data); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); } TEST_F(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { @@ -12015,7 +12203,92 @@ TEST_F(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { HttpServerProperties* http_server_properties = session->http_server_properties(); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); + + EXPECT_THAT(callback.WaitForResult(), IsOk()); + + const HttpResponseInfo* response = trans.GetResponseInfo(); + ASSERT_TRUE(response); + ASSERT_TRUE(response->headers); + EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); + EXPECT_FALSE(response->was_fetched_via_spdy); + EXPECT_FALSE(response->was_alpn_negotiated); + + std::string response_data; + ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); + EXPECT_EQ("hello world", response_data); + + AlternativeServiceInfoVector alternative_service_info_vector = + http_server_properties->GetAlternativeServiceInfos(test_server, + NetworkIsolationKey()); + ASSERT_EQ(1u, alternative_service_info_vector.size()); + AlternativeService alternative_service(kProtoHTTP2, "mail.example.org", 443); + EXPECT_EQ(alternative_service, + alternative_service_info_vector[0].alternative_service()); +} + +TEST_F(HttpNetworkTransactionTest, + HonorAlternativeServiceHeaderWithNetworkIsolationKey) { + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeatures( + // enabled_features + {features::kPartitionHttpServerPropertiesByNetworkIsolationKey, + // Need to partition connections by NetworkIsolationKey for + // SpdySessionKeys to include NetworkIsolationKeys. + features::kPartitionConnectionsByNetworkIsolationKey}, + // disabled_features + {}); + // Since HttpServerProperties caches the feature value, have to create a new + // one. + session_deps_.http_server_properties = + std::make_unique<HttpServerProperties>(); + + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const net::NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const net::NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + MockRead data_reads[] = { + MockRead("HTTP/1.1 200 OK\r\n"), + MockRead(kAlternativeServiceHttpHeader), + MockRead("\r\n"), + MockRead("hello world"), + MockRead(SYNCHRONOUS, OK), + }; + + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("https://www.example.org/"); + request.traffic_annotation = + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + request.network_isolation_key = kNetworkIsolationKey1; + + StaticSocketDataProvider data(data_reads, base::span<MockWrite>()); + session_deps_.socket_factory->AddSocketDataProvider(&data); + + SSLSocketDataProvider ssl(ASYNC, OK); + ssl.ssl_info.cert = + ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"); + ASSERT_TRUE(ssl.ssl_info.cert); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); + + TestCompletionCallback callback; + + std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); + + int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); + EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); + + url::SchemeHostPort test_server(request.url); + HttpServerProperties* http_server_properties = + session->http_server_properties(); + EXPECT_TRUE( + http_server_properties + ->GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1) + .empty()); EXPECT_THAT(callback.WaitForResult(), IsOk()); @@ -12031,11 +12304,23 @@ TEST_F(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { EXPECT_EQ("hello world", response_data); AlternativeServiceInfoVector alternative_service_info_vector = - http_server_properties->GetAlternativeServiceInfos(test_server); + http_server_properties->GetAlternativeServiceInfos(test_server, + kNetworkIsolationKey1); ASSERT_EQ(1u, alternative_service_info_vector.size()); AlternativeService alternative_service(kProtoHTTP2, "mail.example.org", 443); EXPECT_EQ(alternative_service, alternative_service_info_vector[0].alternative_service()); + + // Make sure the alternative service information is only associated with + // kNetworkIsolationKey1. + EXPECT_TRUE( + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); + EXPECT_TRUE( + http_server_properties + ->GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2) + .empty()); } // Regression test for https://crbug.com/615497. @@ -12068,7 +12353,9 @@ TEST_F(HttpNetworkTransactionTest, HttpServerProperties* http_server_properties = session->http_server_properties(); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); @@ -12086,7 +12373,9 @@ TEST_F(HttpNetworkTransactionTest, EXPECT_EQ("hello world", response_data); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); } // HTTP/2 Alternative Services should be disabled by default. @@ -12125,7 +12414,8 @@ TEST_F(HttpNetworkTransactionTest, 444); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(request.url), alternative_service, expiration); + url::SchemeHostPort(request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12165,7 +12455,8 @@ TEST_F(HttpNetworkTransactionTest, AlternativeService alternative_service(kProtoHTTP2, "", 444); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(request.url), alternative_service, expiration); + url::SchemeHostPort(request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12184,11 +12475,12 @@ TEST_F(HttpNetworkTransactionTest, ClearAlternativeServices) { AlternativeService alternative_service(kProtoQUIC, "", 80); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetQuicAlternativeService( - test_server, alternative_service, expiration, + test_server, NetworkIsolationKey(), alternative_service, expiration, session->params().quic_params.supported_versions); - EXPECT_EQ( - 1u, - http_server_properties->GetAlternativeServiceInfos(test_server).size()); + EXPECT_EQ(1u, + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .size()); // Send a clear header. MockRead data_reads[] = { @@ -12232,7 +12524,9 @@ TEST_F(HttpNetworkTransactionTest, ClearAlternativeServices) { EXPECT_EQ("hello world", response_data); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); } TEST_F(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { @@ -12271,7 +12565,9 @@ TEST_F(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { HttpServerProperties* http_server_properties = session->http_server_properties(); EXPECT_TRUE( - http_server_properties->GetAlternativeServiceInfos(test_server).empty()); + http_server_properties + ->GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); EXPECT_THAT(callback.WaitForResult(), IsOk()); @@ -12287,7 +12583,8 @@ TEST_F(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { EXPECT_EQ("hello world", response_data); AlternativeServiceInfoVector alternative_service_info_vector = - http_server_properties->GetAlternativeServiceInfos(test_server); + http_server_properties->GetAlternativeServiceInfos(test_server, + NetworkIsolationKey()); ASSERT_EQ(2u, alternative_service_info_vector.size()); AlternativeService alternative_service(kProtoHTTP2, "www.example.com", 443); @@ -12337,7 +12634,7 @@ TEST_F(HttpNetworkTransactionTest, IdentifyQuicBroken) { AlternativeService alternative_service(kProtoQUIC, alternative); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetQuicAlternativeService( - server, alternative_service, expiration, + server, NetworkIsolationKey(), alternative_service, expiration, HttpNetworkSession::Params().quic_params.supported_versions); // Mark the QUIC alternative service as broken. http_server_properties->MarkAlternativeServiceBroken(alternative_service); @@ -12411,12 +12708,13 @@ TEST_F(HttpNetworkTransactionTest, IdentifyQuicNotBroken) { session->params().quic_params.supported_versions)); http_server_properties->SetAlternativeServices( - server, alternative_service_info_vector); + server, NetworkIsolationKey(), alternative_service_info_vector); // Mark one of the QUIC alternative service as broken. http_server_properties->MarkAlternativeServiceBroken(alternative_service1); - EXPECT_EQ(2u, - http_server_properties->GetAlternativeServiceInfos(server).size()); + EXPECT_EQ(2u, http_server_properties + ->GetAlternativeServiceInfos(server, NetworkIsolationKey()) + .size()); HttpRequestInfo request; HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); @@ -12469,7 +12767,7 @@ TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { 666); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - server, alternative_service, expiration); + server, NetworkIsolationKey(), alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12488,7 +12786,8 @@ TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { EXPECT_EQ("hello world", response_data); const AlternativeServiceInfoVector alternative_service_info_vector = - http_server_properties->GetAlternativeServiceInfos(server); + http_server_properties->GetAlternativeServiceInfos(server, + NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service, alternative_service_info_vector[0].alternative_service()); @@ -12533,8 +12832,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedBlocked) { kUnrestrictedAlternatePort); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(restricted_port_request.url), alternative_service, - expiration); + url::SchemeHostPort(restricted_port_request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12584,8 +12883,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedPermitted) { kUnrestrictedAlternatePort); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(restricted_port_request.url), alternative_service, - expiration); + url::SchemeHostPort(restricted_port_request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12634,8 +12933,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedAllowed) { kRestrictedAlternatePort); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(restricted_port_request.url), alternative_service, - expiration); + url::SchemeHostPort(restricted_port_request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12684,8 +12983,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed1) { kRestrictedAlternatePort); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(unrestricted_port_request.url), alternative_service, - expiration); + url::SchemeHostPort(unrestricted_port_request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12734,8 +13033,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed2) { kUnrestrictedAlternatePort); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(unrestricted_port_request.url), alternative_service, - expiration); + url::SchemeHostPort(unrestricted_port_request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -12776,7 +13075,8 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { kUnsafePort); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - url::SchemeHostPort(request.url), alternative_service, expiration); + url::SchemeHostPort(request.url), NetworkIsolationKey(), + alternative_service, expiration); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); TestCompletionCallback callback; @@ -13106,7 +13406,7 @@ TEST_F(HttpNetworkTransactionTest, UseOriginNotAlternativeForProxy) { AlternativeService alternative_service(kProtoHTTP2, alternative); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - server, alternative_service, expiration); + server, NetworkIsolationKey(), alternative_service, expiration); // Non-alternative job should hang. MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); @@ -14344,7 +14644,7 @@ TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) { 1, // Max sockets per group base::TimeDelta::FromSeconds(10), // unused_idle_socket_timeout ProxyServer::Direct(), false, // is_for_websockets - &common_connect_job_params, session_deps_.ssl_config_service.get()); + &common_connect_job_params); auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>(); mock_pool_manager->SetSocketPool(ProxyServer::Direct(), base::WrapUnique(transport_pool)); @@ -15163,7 +15463,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_NoFalseStart) { // allowing the connection to continue restarting. scoped_refptr<X509Certificate> client_cert; scoped_refptr<SSLPrivateKey> client_private_key; - ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( + ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); ASSERT_FALSE(client_cert); @@ -15175,7 +15475,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_NoFalseStart) { // Ensure that the client certificate is removed from the cache on a // handshake failure. - ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( + ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); } @@ -15281,7 +15581,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_FalseStart) { // allowing the connection to continue restarting. scoped_refptr<X509Certificate> client_cert; scoped_refptr<SSLPrivateKey> client_private_key; - ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( + ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); ASSERT_FALSE(client_cert); @@ -15293,7 +15593,7 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_FalseStart) { // Ensure that the client certificate is removed from the cache on a // handshake failure. - ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( + ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); } @@ -15418,12 +15718,12 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Proxy_Fail) { // allowing the connection to continue restarting. scoped_refptr<X509Certificate> client_cert; scoped_refptr<SSLPrivateKey> client_private_key; - ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( + ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate( HostPortPair("proxy", 70), &client_cert, &client_private_key)); ASSERT_FALSE(client_cert); // Ensure the certificate was NOT cached for the endpoint. This only // applies to HTTPS requests, but is fine to check for HTTP requests. - ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( + ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); @@ -15435,9 +15735,9 @@ TEST_F(HttpNetworkTransactionTest, ClientAuthCertCache_Proxy_Fail) { // Now that the new handshake has failed, ensure that the client // certificate was removed from the client auth cache. - ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( + ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate( HostPortPair("proxy", 70), &client_cert, &client_private_key)); - ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( + ASSERT_FALSE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); } @@ -15514,7 +15814,7 @@ TEST_F(HttpNetworkTransactionTest, CertificateRequestInRenego) { // allowing the connection to continue restarting. scoped_refptr<X509Certificate> client_cert; scoped_refptr<SSLPrivateKey> client_private_key; - ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( + ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); EXPECT_TRUE(client_cert->EqualsIncludingChain(identity->certificate())); @@ -15524,7 +15824,7 @@ TEST_F(HttpNetworkTransactionTest, CertificateRequestInRenego) { EXPECT_EQ(200, trans.GetResponseInfo()->headers->response_code()); // The client certificate remains in the cache. - ASSERT_TRUE(session->ssl_client_auth_cache()->Lookup( + ASSERT_TRUE(session->ssl_client_context()->GetClientCertificate( HostPortPair("www.example.com", 443), &client_cert, &client_private_key)); EXPECT_TRUE(client_cert->EqualsIncludingChain(identity->certificate())); } @@ -16132,7 +16432,7 @@ TEST_F(HttpNetworkTransactionTest, AlternativeServiceNotOnHttp11) { AlternativeService alternative_service(kProtoHTTP2, alternative); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - server, alternative_service, expiration); + server, NetworkIsolationKey(), alternative_service, expiration); HttpRequestInfo request; HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); @@ -16200,7 +16500,7 @@ TEST_F(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) { AlternativeService alternative_service(kProtoHTTP2, alternative); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - server, alternative_service, expiration); + server, NetworkIsolationKey(), alternative_service, expiration); HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); HttpRequestInfo request1; @@ -16310,7 +16610,7 @@ TEST_F(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) { AlternativeService alternative_service(kProtoHTTP2, alternative); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties->SetHttp2AlternativeService( - server, alternative_service, expiration); + server, NetworkIsolationKey(), alternative_service, expiration); // First transaction to alternative to open an HTTP/1.1 socket. HttpRequestInfo request1; @@ -16891,10 +17191,6 @@ TEST_F(HttpNetworkTransactionTest, HttpSyncConnectError) { rv = callback.WaitForResult(); EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); - // We don't care whether this succeeds or fails, but it shouldn't crash. - HttpRequestHeaders request_headers; - trans.GetFullRequestHeaders(&request_headers); - ConnectionAttempts attempts; trans.GetConnectionAttempts(&attempts); ASSERT_EQ(1u, attempts.size()); @@ -16928,10 +17224,6 @@ TEST_F(HttpNetworkTransactionTest, HttpAsyncConnectError) { rv = callback.WaitForResult(); EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); - // We don't care whether this succeeds or fails, but it shouldn't crash. - HttpRequestHeaders request_headers; - trans.GetFullRequestHeaders(&request_headers); - ConnectionAttempts attempts; trans.GetConnectionAttempts(&attempts); ASSERT_EQ(1u, attempts.size()); @@ -16969,10 +17261,6 @@ TEST_F(HttpNetworkTransactionTest, HttpSyncWriteError) { rv = callback.WaitForResult(); EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); - - HttpRequestHeaders request_headers; - EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); - EXPECT_TRUE(request_headers.HasHeader("Host")); } TEST_F(HttpNetworkTransactionTest, HttpAsyncWriteError) { @@ -17002,10 +17290,6 @@ TEST_F(HttpNetworkTransactionTest, HttpAsyncWriteError) { rv = callback.WaitForResult(); EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); - - HttpRequestHeaders request_headers; - EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); - EXPECT_TRUE(request_headers.HasHeader("Host")); } TEST_F(HttpNetworkTransactionTest, HttpSyncReadError) { @@ -17038,10 +17322,6 @@ TEST_F(HttpNetworkTransactionTest, HttpSyncReadError) { rv = callback.WaitForResult(); EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); - - HttpRequestHeaders request_headers; - EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); - EXPECT_TRUE(request_headers.HasHeader("Host")); } TEST_F(HttpNetworkTransactionTest, HttpAsyncReadError) { @@ -17074,53 +17354,6 @@ TEST_F(HttpNetworkTransactionTest, HttpAsyncReadError) { rv = callback.WaitForResult(); EXPECT_THAT(rv, IsError(ERR_CONNECTION_RESET)); - - HttpRequestHeaders request_headers; - EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); - EXPECT_TRUE(request_headers.HasHeader("Host")); -} - -TEST_F(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { - HttpRequestInfo request; - request.method = "GET"; - request.url = GURL("http://www.example.org/"); - request.extra_headers.SetHeader("X-Foo", "bar"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); - - MockWrite data_writes[] = { - MockWrite( - "GET / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "X-Foo: bar\r\n\r\n"), - }; - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n" - "Content-Length: 5\r\n\r\n" - "hello"), - MockRead(ASYNC, ERR_UNEXPECTED), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - - TestCompletionCallback callback; - - int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); - - HttpRequestHeaders request_headers; - EXPECT_TRUE(trans.GetFullRequestHeaders(&request_headers)); - std::string foo; - EXPECT_TRUE(request_headers.GetHeader("X-Foo", &foo)); - EXPECT_EQ("bar", foo); } // Tests that when a used socket is returned to the SSL socket pool, it's closed @@ -20261,6 +20494,17 @@ TEST_F(HttpNetworkTransactionTest, AuthEverything) { mock_reads3.emplace_back( "HTTP/1.1 200 OK\r\n" "Content-Length: 0\r\n\r\n"); + // The client makes another request. This should reuse the socket with all + // credentials cached. + mock_writes3.emplace_back( + "GET / HTTP/1.1\r\n" + "Host: www.example.org\r\n" + "Connection: keep-alive\r\n" + // Authenticate as user:pass. + "Authorization: Basic dXNlcjpwYXNz\r\n\r\n"); + mock_reads3.emplace_back( + "HTTP/1.1 200 OK\r\n" + "Content-Length: 0\r\n\r\n"); StaticSocketDataProvider data3(mock_reads3, mock_writes3); session_deps_.socket_factory->AddSocketDataProvider(&data3); session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_proxy3); @@ -20319,6 +20563,14 @@ TEST_F(HttpNetworkTransactionTest, AuthEverything) { // The request completes. ASSERT_THAT(rv, IsOk()); EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code()); + + // Make a second request. This time all credentials are cached. + trans = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + ASSERT_THAT(callback.GetResult(trans->Start(&request, callback.callback(), + NetLogWithSource())), + IsOk()); + EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code()); } // Test the proxy and origin server each requesting both TLS client certificates @@ -20468,6 +20720,38 @@ TEST_F(HttpNetworkTransactionTest, AuthEverythingWithConnectClose) { session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_proxy5); session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_origin5); + // The client makes a second request. This needs yet another connection, but + // all credentials are cached. + SSLSocketDataProvider ssl_proxy6(ASYNC, OK); + ssl_proxy6.expected_send_client_cert = true; + ssl_proxy6.expected_client_cert = identity_proxy->certificate(); + std::vector<MockWrite> mock_writes6; + std::vector<MockRead> mock_reads6; + mock_writes6.emplace_back( + "CONNECT www.example.org:443 HTTP/1.1\r\n" + "Host: www.example.org:443\r\n" + "Proxy-Connection: keep-alive\r\n" + // Authenticate as proxyuser:proxypass. + "Proxy-Authorization: Basic cHJveHl1c2VyOnByb3h5cGFzcw==\r\n\r\n"); + mock_reads6.emplace_back("HTTP/1.1 200 Connection Established\r\n\r\n"); + SSLSocketDataProvider ssl_origin6(ASYNC, OK); + ssl_origin6.expected_send_client_cert = true; + ssl_origin6.expected_client_cert = identity_origin->certificate(); + mock_writes6.emplace_back( + "GET / HTTP/1.1\r\n" + "Host: www.example.org\r\n" + "Connection: keep-alive\r\n" + // Authenticate as user:pass. + "Authorization: Basic dXNlcjpwYXNz\r\n\r\n"); + mock_reads6.emplace_back( + "HTTP/1.1 200 OK\r\n" + "Connection: close\r\n" + "Content-Length: 0\r\n\r\n"); + StaticSocketDataProvider data6(mock_reads6, mock_writes6); + session_deps_.socket_factory->AddSocketDataProvider(&data6); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_proxy6); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_origin6); + std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); // Start the request. @@ -20521,6 +20805,14 @@ TEST_F(HttpNetworkTransactionTest, AuthEverythingWithConnectClose) { // The request completes. ASSERT_THAT(rv, IsOk()); EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code()); + + // Make a second request. This time all credentials are cached. + trans = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + ASSERT_THAT(callback.GetResult(trans->Start(&request, callback.callback(), + NetLogWithSource())), + IsOk()); + EXPECT_EQ(200, trans->GetResponseInfo()->headers->response_code()); } // Test the proxy requesting HTTP auth and the server requesting TLS client @@ -21433,9 +21725,10 @@ TEST_F(HttpNetworkTransactionTest, NetworkIsolationSSLProxy) { // Test that SSLConfig changes from SSLConfigService are picked up even when // there are live sockets. TEST_F(HttpNetworkTransactionTest, SSLConfigChanged) { - SSLConfig ssl_config; - ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3; - auto ssl_config_service = std::make_unique<TestSSLConfigService>(ssl_config); + SSLContextConfig ssl_context_config; + ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3; + auto ssl_config_service = + std::make_unique<TestSSLConfigService>(ssl_context_config); TestSSLConfigService* ssl_config_service_raw = ssl_config_service.get(); session_deps_.ssl_config_service = std::move(ssl_config_service); @@ -21526,8 +21819,8 @@ TEST_F(HttpNetworkTransactionTest, SSLConfigChanged) { EXPECT_EQ("2", response_data2); trans2.reset(); - ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2; - ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_config); + ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2; + ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_context_config); auto trans3 = std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); @@ -21540,9 +21833,10 @@ TEST_F(HttpNetworkTransactionTest, SSLConfigChanged) { } TEST_F(HttpNetworkTransactionTest, SSLConfigChangedPendingConnect) { - SSLConfig ssl_config; - ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3; - auto ssl_config_service = std::make_unique<TestSSLConfigService>(ssl_config); + SSLContextConfig ssl_context_config; + ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_3; + auto ssl_config_service = + std::make_unique<TestSSLConfigService>(ssl_context_config); TestSSLConfigService* ssl_config_service_raw = ssl_config_service.get(); session_deps_.ssl_config_service = std::move(ssl_config_service); @@ -21568,10 +21862,301 @@ TEST_F(HttpNetworkTransactionTest, SSLConfigChangedPendingConnect) { int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - ssl_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2; - ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_config); + ssl_context_config.version_max = SSL_PROTOCOL_VERSION_TLS1_2; + ssl_config_service_raw->UpdateSSLConfigAndNotify(ssl_context_config); EXPECT_THAT(callback.GetResult(rv), IsError(ERR_NETWORK_CHANGED)); } +// Test that HttpNetworkTransaction correctly handles existing sockets when the +// server requests a client certificate post-handshake (via a TLS +// renegotiation). This is a regression test for https://crbug.com/829184. +TEST_F(HttpNetworkTransactionTest, PostHandshakeClientCertWithSockets) { + const MutableNetworkTrafficAnnotationTag kTrafficAnnotation( + TRAFFIC_ANNOTATION_FOR_TESTS); + + auto cert_request_info = base::MakeRefCounted<SSLCertRequestInfo>(); + cert_request_info->host_and_port = HostPortPair("foo.test", 443); + + std::unique_ptr<FakeClientCertIdentity> identity = + FakeClientCertIdentity::CreateFromCertAndKeyFiles( + GetTestCertsDirectory(), "client_1.pem", "client_1.pk8"); + ASSERT_TRUE(identity); + + // This test will make several requests so that, when the client certificate + // request comes in, we have a socket in use, an idle socket, and a socket for + // an unrelated host. + // + // First, two long-lived requests which do not complete until after the client + // certificate request. This arranges for sockets to be in use during the + // request. They should not be interrupted. + HttpRequestInfo request_long_lived; + request_long_lived.method = "GET"; + request_long_lived.url = GURL("https://foo.test/long-lived"); + request_long_lived.traffic_annotation = kTrafficAnnotation; + + HttpRequestInfo request_long_lived_bar; + request_long_lived_bar.method = "GET"; + request_long_lived_bar.url = GURL("https://bar.test/long-lived"); + request_long_lived_bar.traffic_annotation = kTrafficAnnotation; + + // Next, make a request that needs client certificates. + HttpRequestInfo request_auth; + request_auth.method = "GET"; + request_auth.url = GURL("https://foo.test/auth"); + request_auth.traffic_annotation = kTrafficAnnotation; + + // Before responding to the challenge, make a request to an unauthenticated + // endpoint. This will result in an idle socket when the client certificate + // challenge is resolved. + HttpRequestInfo request_unauth; + request_unauth.method = "GET"; + request_unauth.url = GURL("https://foo.test/unauth"); + request_unauth.traffic_annotation = kTrafficAnnotation; + + // After all the preceding requests complete, end with two additional requests + // to ensure pre-authentication foo.test sockets are not used and bar.test + // sockets are unaffected. + HttpRequestInfo request_post_auth; + request_post_auth.method = "GET"; + request_post_auth.url = GURL("https://foo.test/post-auth"); + request_post_auth.traffic_annotation = kTrafficAnnotation; + + HttpRequestInfo request_post_auth_bar; + request_post_auth_bar.method = "GET"; + request_post_auth_bar.url = GURL("https://bar.test/post-auth"); + request_post_auth_bar.traffic_annotation = kTrafficAnnotation; + + // The sockets for /long-lived and /unauth complete their request but are + // not allocated for /post-auth or /retry because SSL state has since changed. + const MockWrite kLongLivedWrites[] = { + MockWrite(ASYNC, 0, + "GET /long-lived HTTP/1.1\r\n" + "Host: foo.test\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + const MockRead kLongLivedReads[] = { + // Pause so /long-lived completes after the client presents client + // certificates. + MockRead(ASYNC, ERR_IO_PENDING, 1), + MockRead(ASYNC, 2, + "HTTP/1.1 200 OK\r\n" + "Connection: keep-alive\r\n" + "Content-Length: 10\r\n\r\n" + "long-lived"), + }; + SequencedSocketData data_long_lived(kLongLivedReads, kLongLivedWrites); + SSLSocketDataProvider ssl_long_lived(ASYNC, OK); + session_deps_.socket_factory->AddSocketDataProvider(&data_long_lived); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_long_lived); + + // Requests for bar.test should be unaffected by foo.test and get allocated + // a single socket. + const MockWrite kBarWrites[] = { + MockWrite(ASYNC, 0, + "GET /long-lived HTTP/1.1\r\n" + "Host: bar.test\r\n" + "Connection: keep-alive\r\n\r\n"), + MockWrite(ASYNC, 3, + "GET /post-auth HTTP/1.1\r\n" + "Host: bar.test\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + const MockRead kBarReads[] = { + // Pause on /long-lived so it completes after foo.test's authentication. + MockRead(ASYNC, ERR_IO_PENDING, 1), + MockRead(ASYNC, 2, + "HTTP/1.1 200 OK\r\n" + "Connection: keep-alive\r\n" + "Content-Length: 10\r\n\r\n" + "long-lived"), + MockRead(ASYNC, 4, + "HTTP/1.1 200 OK\r\n" + "Connection: keep-alive\r\n" + "Content-Length: 9\r\n\r\n" + "post-auth"), + }; + SequencedSocketData data_bar(kBarReads, kBarWrites); + SSLSocketDataProvider ssl_bar(ASYNC, OK); + session_deps_.socket_factory->AddSocketDataProvider(&data_bar); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bar); + + // Requesting /auth results in a post-handshake client certificate challenge. + const MockWrite kAuthWrites[] = { + MockWrite(ASYNC, 0, + "GET /auth HTTP/1.1\r\n" + "Host: foo.test\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + const MockRead kAuthReads[] = { + MockRead(ASYNC, ERR_SSL_CLIENT_AUTH_CERT_NEEDED, 1), + }; + SequencedSocketData data_auth(kAuthReads, kAuthWrites); + SSLSocketDataProvider ssl_auth(ASYNC, OK); + ssl_auth.cert_request_info = cert_request_info.get(); + session_deps_.socket_factory->AddSocketDataProvider(&data_auth); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_auth); + + // Requesting /unauth completes. + const MockWrite kUnauthWrites[] = { + MockWrite(ASYNC, 0, + "GET /unauth HTTP/1.1\r\n" + "Host: foo.test\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + const MockRead kUnauthReads[] = { + MockRead(ASYNC, 1, + "HTTP/1.1 200 OK\r\n" + "Connection: keep-alive\r\n" + "Content-Length: 6\r\n\r\n" + "unauth"), + }; + SequencedSocketData data_unauth(kUnauthReads, kUnauthWrites); + SSLSocketDataProvider ssl_unauth(ASYNC, OK); + session_deps_.socket_factory->AddSocketDataProvider(&data_unauth); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_unauth); + + // When the client certificate is selected, /auth is retried on a new + // connection. In particular, it should not be retried on |data_unauth|, + // which would not honor the new client certificate configuration. + const MockWrite kRetryWrites[] = { + MockWrite(ASYNC, 0, + "GET /auth HTTP/1.1\r\n" + "Host: foo.test\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + const MockRead kRetryReads[] = { + MockRead(ASYNC, 1, + "HTTP/1.1 200 OK\r\n" + // Close the connection so we test that /post-auth is not + // allocated to |data_unauth| or |data_long_lived|. + "Connection: close\r\n" + "Content-Length: 4\r\n\r\n" + "auth"), + }; + SequencedSocketData data_retry(kRetryReads, kRetryWrites); + SSLSocketDataProvider ssl_retry(ASYNC, OK); + ssl_retry.expected_send_client_cert = true; + ssl_retry.expected_client_cert = identity->certificate(); + session_deps_.socket_factory->AddSocketDataProvider(&data_retry); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_retry); + + // /post-auth gets its own socket. + const MockWrite kPostAuthWrites[] = { + MockWrite(ASYNC, 0, + "GET /post-auth HTTP/1.1\r\n" + "Host: foo.test\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + const MockRead kPostAuthReads[] = { + MockRead(ASYNC, 1, + "HTTP/1.1 200 OK\r\n" + "Connection: keep-alive\r\n" + "Content-Length: 9\r\n\r\n" + "post-auth"), + }; + SequencedSocketData data_post_auth(kPostAuthReads, kPostAuthWrites); + SSLSocketDataProvider ssl_post_auth(ASYNC, OK); + ssl_post_auth.expected_send_client_cert = true; + ssl_post_auth.expected_client_cert = identity->certificate(); + session_deps_.socket_factory->AddSocketDataProvider(&data_post_auth); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_post_auth); + + std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); + + // Start the two long-lived requests. + TestCompletionCallback callback_long_lived; + auto trans_long_lived = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + int rv = trans_long_lived->Start( + &request_long_lived, callback_long_lived.callback(), NetLogWithSource()); + ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); + data_long_lived.RunUntilPaused(); + + TestCompletionCallback callback_long_lived_bar; + auto trans_long_lived_bar = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + rv = trans_long_lived_bar->Start(&request_long_lived_bar, + callback_long_lived_bar.callback(), + NetLogWithSource()); + ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); + data_bar.RunUntilPaused(); + + // Request /auth. This gives a client certificate challenge. + TestCompletionCallback callback_auth; + auto trans_auth = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + rv = trans_auth->Start(&request_auth, callback_auth.callback(), + NetLogWithSource()); + EXPECT_THAT(callback_auth.GetResult(rv), + IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); + + // Make an unauthenticated request. This completes. + TestCompletionCallback callback_unauth; + auto trans_unauth = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + rv = trans_unauth->Start(&request_unauth, callback_unauth.callback(), + NetLogWithSource()); + EXPECT_THAT(callback_unauth.GetResult(rv), IsOk()); + std::string response_unauth; + EXPECT_THAT(ReadTransaction(trans_unauth.get(), &response_unauth), IsOk()); + EXPECT_EQ("unauth", response_unauth); + trans_unauth.reset(); + + // Complete the authenticated request. + rv = trans_auth->RestartWithCertificate(identity->certificate(), + identity->ssl_private_key(), + callback_auth.callback()); + EXPECT_THAT(callback_auth.GetResult(rv), IsOk()); + std::string response_auth; + EXPECT_THAT(ReadTransaction(trans_auth.get(), &response_auth), IsOk()); + EXPECT_EQ("auth", response_auth); + trans_auth.reset(); + + // Complete the long-lived requests. + data_long_lived.Resume(); + EXPECT_THAT(callback_long_lived.GetResult(ERR_IO_PENDING), IsOk()); + std::string response_long_lived; + EXPECT_THAT(ReadTransaction(trans_long_lived.get(), &response_long_lived), + IsOk()); + EXPECT_EQ("long-lived", response_long_lived); + trans_long_lived.reset(); + + data_bar.Resume(); + EXPECT_THAT(callback_long_lived_bar.GetResult(ERR_IO_PENDING), IsOk()); + std::string response_long_lived_bar; + EXPECT_THAT( + ReadTransaction(trans_long_lived_bar.get(), &response_long_lived_bar), + IsOk()); + EXPECT_EQ("long-lived", response_long_lived_bar); + trans_long_lived_bar.reset(); + + // Run the post-authentication requests. + TestCompletionCallback callback_post_auth; + auto trans_post_auth = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + rv = trans_post_auth->Start(&request_post_auth, callback_post_auth.callback(), + NetLogWithSource()); + EXPECT_THAT(callback_post_auth.GetResult(rv), IsOk()); + std::string response_post_auth; + EXPECT_THAT(ReadTransaction(trans_post_auth.get(), &response_post_auth), + IsOk()); + EXPECT_EQ("post-auth", response_post_auth); + trans_post_auth.reset(); + + TestCompletionCallback callback_post_auth_bar; + auto trans_post_auth_bar = + std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); + rv = trans_post_auth_bar->Start(&request_post_auth_bar, + callback_post_auth_bar.callback(), + NetLogWithSource()); + EXPECT_THAT(callback_post_auth_bar.GetResult(rv), IsOk()); + std::string response_post_auth_bar; + EXPECT_THAT( + ReadTransaction(trans_post_auth_bar.get(), &response_post_auth_bar), + IsOk()); + EXPECT_EQ("post-auth", response_post_auth_bar); + trans_post_auth_bar.reset(); +} + } // namespace net diff --git a/chromium/net/http/http_proxy_client_socket_fuzzer.cc b/chromium/net/http/http_proxy_client_socket_fuzzer.cc index 45c36ccabf2..f253b16f46b 100644 --- a/chromium/net/http/http_proxy_client_socket_fuzzer.cc +++ b/chromium/net/http/http_proxy_client_socket_fuzzer.cc @@ -7,6 +7,8 @@ #include <stddef.h> #include <stdint.h> +#include <fuzzer/FuzzedDataProvider.h> + #include <memory> #include <string> @@ -20,12 +22,12 @@ #include "net/http/http_auth_handler_basic.h" #include "net/http/http_auth_handler_digest.h" #include "net/http/http_auth_handler_factory.h" +#include "net/http/http_auth_preferences.h" #include "net/http/http_auth_scheme.h" #include "net/log/test_net_log.h" #include "net/socket/fuzzed_socket.h" #include "net/socket/next_proto.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "third_party/libFuzzer/src/utils/FuzzedDataProvider.h" // Fuzzer for HttpProxyClientSocket only tests establishing a connection when // using the proxy as a tunnel. @@ -53,9 +55,10 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { net::kDigestAuthScheme, new net::HttpAuthHandlerDigest::Factory()); scoped_refptr<net::HttpAuthController> auth_controller( - new net::HttpAuthController(net::HttpAuth::AUTH_PROXY, - GURL("http://proxy:42/"), &auth_cache, - &auth_handler_factory, nullptr)); + new net::HttpAuthController( + net::HttpAuth::AUTH_PROXY, GURL("http://proxy:42/"), &auth_cache, + &auth_handler_factory, nullptr, + net::HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS)); // Determine if the HttpProxyClientSocket should be told the underlying socket // is HTTPS. net::HttpProxyClientSocket socket( diff --git a/chromium/net/http/http_proxy_connect_job.cc b/chromium/net/http/http_proxy_connect_job.cc index a9fbbdc38fd..6ee20a1dbe8 100644 --- a/chromium/net/http/http_proxy_connect_job.cc +++ b/chromium/net/http/http_proxy_connect_job.cc @@ -187,7 +187,8 @@ HttpProxyConnectJob::HttpProxyConnectJob( GetDestination().ToString()), common_connect_job_params->http_auth_cache, common_connect_job_params->http_auth_handler_factory, - host_resolver()) + host_resolver(), + HttpAuthPreferences::ALLOW_DEFAULT_CREDENTIALS) : nullptr) {} HttpProxyConnectJob::~HttpProxyConnectJob() {} @@ -698,7 +699,8 @@ int HttpProxyConnectJob::DoQuicProxyCreateStreamComplete(int result) { spdy::SpdyPriority spdy_priority = ConvertRequestPriorityToQuicPriority(kH2QuicTunnelPriority); - quic_stream->SetPriority(spdy_priority); + spdy::SpdyStreamPrecedence precedence(spdy_priority); + quic_stream->SetPriority(precedence); transport_socket_ = std::make_unique<QuicProxyClientSocket>( std::move(quic_stream), std::move(quic_session_), GetUserAgent(), diff --git a/chromium/net/http/http_proxy_connect_job_unittest.cc b/chromium/net/http/http_proxy_connect_job_unittest.cc index 8ddd8e2f422..3f569c6e27f 100644 --- a/chromium/net/http/http_proxy_connect_job_unittest.cc +++ b/chromium/net/http/http_proxy_connect_job_unittest.cc @@ -18,7 +18,7 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "build/build_config.h" #include "net/base/host_port_pair.h" #include "net/base/network_isolation_key.h" @@ -35,7 +35,7 @@ #include "net/socket/transport_connect_job.h" #include "net/spdy/spdy_test_util_common.h" #include "net/test/gtest_util.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" @@ -53,11 +53,10 @@ const char kHttpsProxyHost[] = "httpsproxy.example.test"; } // namespace class HttpProxyConnectJobTest : public ::testing::TestWithParam<HttpProxyType>, - public WithScopedTaskEnvironment { + public WithTaskEnvironment { protected: HttpProxyConnectJobTest() - : WithScopedTaskEnvironment( - base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW), + : WithTaskEnvironment(base::test::TaskEnvironment::TimeSource::MOCK_TIME), field_trial_list_(nullptr) { // Used a mock HostResolver that does not have a cache. session_deps_.host_resolver = std::make_unique<MockHostResolver>(); diff --git a/chromium/net/http/http_response_body_drainer.cc b/chromium/net/http/http_response_body_drainer.cc index 010657dc6e1..bd60c429fe1 100644 --- a/chromium/net/http/http_response_body_drainer.cc +++ b/chromium/net/http/http_response_body_drainer.cc @@ -73,10 +73,9 @@ int HttpResponseBodyDrainer::DoDrainResponseBody() { next_state_ = STATE_DRAIN_RESPONSE_BODY_COMPLETE; return stream_->ReadResponseBody( - read_buf_.get(), - kDrainBodyBufferSize - total_read_, - base::Bind(&HttpResponseBodyDrainer::OnIOComplete, - base::Unretained(this))); + read_buf_.get(), kDrainBodyBufferSize - total_read_, + base::BindOnce(&HttpResponseBodyDrainer::OnIOComplete, + base::Unretained(this))); } int HttpResponseBodyDrainer::DoDrainResponseBodyComplete(int result) { diff --git a/chromium/net/http/http_response_body_drainer_unittest.cc b/chromium/net/http/http_response_body_drainer_unittest.cc index b40cdca15b8..84c2f4501b0 100644 --- a/chromium/net/http/http_response_body_drainer_unittest.cc +++ b/chromium/net/http/http_response_body_drainer_unittest.cc @@ -25,12 +25,12 @@ #include "net/cert/mock_cert_verifier.h" #include "net/cert/multi_log_ct_verifier.h" #include "net/http/http_network_session.h" -#include "net/http/http_server_properties_impl.h" +#include "net/http/http_server_properties.h" #include "net/http/http_stream.h" #include "net/http/transport_security_state.h" #include "net/proxy_resolution/proxy_resolution_service.h" #include "net/ssl/ssl_config_service_defaults.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { @@ -228,12 +228,12 @@ void MockHttpStream::CompleteRead() { std::move(callback_).Run(result); } -class HttpResponseBodyDrainerTest : public TestWithScopedTaskEnvironment { +class HttpResponseBodyDrainerTest : public TestWithTaskEnvironment { protected: HttpResponseBodyDrainerTest() : proxy_resolution_service_(ProxyResolutionService::CreateDirect()), ssl_config_service_(new SSLConfigServiceDefaults), - http_server_properties_(new HttpServerPropertiesImpl()), + http_server_properties_(new HttpServerProperties()), session_(CreateNetworkSession()), mock_stream_(new MockHttpStream(&result_waiter_)), drainer_(new HttpResponseBodyDrainer(mock_stream_)) {} @@ -254,7 +254,7 @@ class HttpResponseBodyDrainerTest : public TestWithScopedTaskEnvironment { std::unique_ptr<ProxyResolutionService> proxy_resolution_service_; std::unique_ptr<SSLConfigService> ssl_config_service_; - std::unique_ptr<HttpServerPropertiesImpl> http_server_properties_; + std::unique_ptr<HttpServerProperties> http_server_properties_; MockCertVerifier cert_verifier_; TransportSecurityState transport_security_state_; MultiLogCTVerifier ct_verifier_; diff --git a/chromium/net/http/http_response_info.cc b/chromium/net/http/http_response_info.cc index 0b9844e9ac1..d03f76da339 100644 --- a/chromium/net/http/http_response_info.cc +++ b/chromium/net/http/http_response_info.cc @@ -110,6 +110,10 @@ enum { // This bit is set if the response has a peer signature algorithm. RESPONSE_INFO_HAS_PEER_SIGNATURE_ALGORITHM = 1 << 25, + // This bit is set if the response is a prefetch whose reuse should be + // restricted in some way. + RESPONSE_INFO_RESTRICTED_PREFETCH = 1 << 26, + // TODO(darin): Add other bits to indicate alternate request methods. // For now, we don't support storing those. }; @@ -124,6 +128,7 @@ HttpResponseInfo::HttpResponseInfo() was_fetched_via_proxy(false), did_use_http_auth(false), unused_since_prefetch(false), + restricted_prefetch(false), async_revalidation_requested(false), connection_info(CONNECTION_INFO_UNKNOWN) {} @@ -287,6 +292,8 @@ bool HttpResponseInfo::InitFromPickle(const base::Pickle& pickle, unused_since_prefetch = (flags & RESPONSE_INFO_UNUSED_SINCE_PREFETCH) != 0; + restricted_prefetch = (flags & RESPONSE_INFO_RESTRICTED_PREFETCH) != 0; + ssl_info.pkp_bypassed = (flags & RESPONSE_INFO_PKP_BYPASSED) != 0; // Read peer_signature_algorithm. @@ -336,6 +343,8 @@ void HttpResponseInfo::Persist(base::Pickle* pickle, flags |= RESPONSE_INFO_USE_HTTP_AUTHENTICATION; if (unused_since_prefetch) flags |= RESPONSE_INFO_UNUSED_SINCE_PREFETCH; + if (restricted_prefetch) + flags |= RESPONSE_INFO_RESTRICTED_PREFETCH; if (ssl_info.pkp_bypassed) flags |= RESPONSE_INFO_PKP_BYPASSED; if (!stale_revalidate_timeout.is_null()) diff --git a/chromium/net/http/http_response_info.h b/chromium/net/http/http_response_info.h index 1f75fe4793c..ff80d89295c 100644 --- a/chromium/net/http/http_response_info.h +++ b/chromium/net/http/http_response_info.h @@ -157,6 +157,11 @@ class NET_EXPORT HttpResponseInfo { // used since. bool unused_since_prefetch; + // True if the response is a prefetch whose reuse is "restricted". This means + // it can only be reused from the cache by requests that are marked as able to + // use restricted prefetches. + bool restricted_prefetch; + // True if this resource is stale and needs async revalidation. // This value is not persisted by Persist(); it is only ever set when the // response is retrieved from the cache. diff --git a/chromium/net/http/http_server_properties.cc b/chromium/net/http/http_server_properties.cc index cea073214d6..e83e286e6fa 100644 --- a/chromium/net/http/http_server_properties.cc +++ b/chromium/net/http/http_server_properties.cc @@ -4,10 +4,22 @@ #include "net/http/http_server_properties.h" +#include "base/bind.h" +#include "base/feature_list.h" +#include "base/location.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" +#include "base/single_thread_task_runner.h" +#include "base/stl_util.h" +#include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/threading/thread_task_runner_handle.h" +#include "base/time/default_clock.h" +#include "base/time/default_tick_clock.h" +#include "base/values.h" +#include "net/base/features.h" #include "net/http/http_network_session.h" +#include "net/http/http_server_properties_manager.h" #include "net/socket/ssl_client_socket.h" #include "net/ssl/ssl_config.h" @@ -15,143 +27,1043 @@ namespace net { namespace { -enum AlternativeProxyUsage { - // Alternative Proxy was used without racing a normal connection. - ALTERNATIVE_PROXY_USAGE_NO_RACE = 0, - // Alternative Proxy was used by winning a race with a normal connection. - ALTERNATIVE_PROXY_USAGE_WON_RACE = 1, - // Alternative Proxy was not used by losing a race with a normal connection. - ALTERNATIVE_PROXY_USAGE_LOST_RACE = 2, - // Maximum value for the enum. - ALTERNATIVE_PROXY_USAGE_MAX, -}; - -AlternativeProxyUsage ConvertProtocolUsageToProxyUsage( - AlternateProtocolUsage usage) { - switch (usage) { - case ALTERNATE_PROTOCOL_USAGE_NO_RACE: - return ALTERNATIVE_PROXY_USAGE_NO_RACE; - case ALTERNATE_PROTOCOL_USAGE_WON_RACE: - return ALTERNATIVE_PROXY_USAGE_WON_RACE; - case ALTERNATE_PROTOCOL_USAGE_LOST_RACE: - return ALTERNATIVE_PROXY_USAGE_LOST_RACE; - default: - NOTREACHED(); - return ALTERNATIVE_PROXY_USAGE_MAX; - } -} - -} // anonymous namespace - -const char kAlternativeServiceHeader[] = "Alt-Svc"; - -void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage, - bool proxy_server_used) { - if (proxy_server_used) { - DCHECK_LE(usage, ALTERNATE_PROTOCOL_USAGE_LOST_RACE); - UMA_HISTOGRAM_ENUMERATION("Net.QuicAlternativeProxy.Usage", - ConvertProtocolUsageToProxyUsage(usage), - ALTERNATIVE_PROXY_USAGE_MAX); - } else { - UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolUsage", usage, - ALTERNATE_PROTOCOL_USAGE_MAX); - } -} - -void HistogramBrokenAlternateProtocolLocation( - BrokenAlternateProtocolLocation location){ - UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolBrokenLocation", location, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX); -} - -bool IsAlternateProtocolValid(NextProto protocol) { - switch (protocol) { - case kProtoUnknown: - return false; - case kProtoHTTP11: - return false; - case kProtoHTTP2: - return true; - case kProtoQUIC: +// Time to wait before starting an update the preferences from the +// http_server_properties_impl_ cache. Scheduling another update during this +// period will be a no-op. +constexpr base::TimeDelta kUpdatePrefsDelay = base::TimeDelta::FromSeconds(60); + +} // namespace + +HttpServerProperties::PrefDelegate::~PrefDelegate() = default; + +HttpServerProperties::ServerInfo::ServerInfo() = default; +HttpServerProperties::ServerInfo::ServerInfo(const ServerInfo& server_info) = + default; +HttpServerProperties::ServerInfo::ServerInfo(ServerInfo&& server_info) = + default; +HttpServerProperties::ServerInfo::~ServerInfo() = default; + +bool HttpServerProperties::ServerInfo::empty() const { + return !supports_spdy.has_value() && !alternative_services.has_value() && + !server_network_stats.has_value(); +} + +bool HttpServerProperties::ServerInfo::operator==( + const ServerInfo& other) const { + return supports_spdy == other.supports_spdy && + alternative_services == other.alternative_services && + server_network_stats == other.server_network_stats; +} + +HttpServerProperties::ServerInfoMapKey::ServerInfoMapKey( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key, + bool use_network_isolation_key) + : server(server), + network_isolation_key(use_network_isolation_key ? network_isolation_key + : NetworkIsolationKey()) { + // TODO(mmenke): DCHECK that |server|'s scheme is not ws/wss. +} + +HttpServerProperties::ServerInfoMapKey::~ServerInfoMapKey() = default; + +bool HttpServerProperties::ServerInfoMapKey::operator<( + const ServerInfoMapKey& other) const { + return std::tie(server, network_isolation_key) < + std::tie(other.server, other.network_isolation_key); +} + +HttpServerProperties::ServerInfoMap::ServerInfoMap() + : base::MRUCache<ServerInfoMapKey, ServerInfo>(kMaxServerInfoEntries) {} + +HttpServerProperties::ServerInfoMap::iterator +HttpServerProperties::ServerInfoMap::GetOrPut(const ServerInfoMapKey& key) { + auto it = Get(key); + if (it != end()) + return it; + return Put(key, ServerInfo()); +} + +HttpServerProperties::ServerInfoMap::iterator +HttpServerProperties::ServerInfoMap::EraseIfEmpty(iterator server_info_it) { + if (server_info_it->second.empty()) + return Erase(server_info_it); + return ++server_info_it; +} + +HttpServerProperties::HttpServerProperties( + std::unique_ptr<PrefDelegate> pref_delegate, + NetLog* net_log, + const base::TickClock* tick_clock, + base::Clock* clock) + : tick_clock_(tick_clock ? tick_clock + : base::DefaultTickClock::GetInstance()), + clock_(clock ? clock : base::DefaultClock::GetInstance()), + use_network_isolation_key_(base::FeatureList::IsEnabled( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey)), + is_initialized_(pref_delegate.get() == nullptr), + queue_write_on_load_(false), + properties_manager_( + pref_delegate + ? std::make_unique<HttpServerPropertiesManager>( + std::move(pref_delegate), + base::BindOnce(&HttpServerProperties::OnPrefsLoaded, + base::Unretained(this)), + kDefaultMaxQuicServerEntries, + net_log, + tick_clock_) + : nullptr), + broken_alternative_services_(kMaxRecentlyBrokenAlternativeServiceEntries, + this, + tick_clock_), + canonical_suffixes_({".ggpht.com", ".c.youtube.com", ".googlevideo.com", + ".googleusercontent.com"}), + quic_server_info_map_(kDefaultMaxQuicServerEntries), + max_server_configs_stored_in_properties_(kDefaultMaxQuicServerEntries) {} + +HttpServerProperties::~HttpServerProperties() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + if (properties_manager_) { + // Stop waiting for initial settings. + is_initialized_ = true; + + // Stop the timer if it's running, since this will write to the properties + // file immediately. + prefs_update_timer_.Stop(); + + WriteProperties(base::OnceClosure()); + } +} + +url::SchemeHostPort HttpServerProperties::GetNormalizedSchemeHostPort( + const GURL& url) { + if (url.is_valid()) { + if (url.SchemeIs(url::kHttpsScheme) || url.SchemeIs(url::kWssScheme)) { + return url::SchemeHostPort(url::kHttpsScheme, url.host_piece(), + url.EffectiveIntPort()); + } else if (url.SchemeIs(url::kHttpScheme) || url.SchemeIs(url::kWsScheme)) { + return url::SchemeHostPort(url::kHttpScheme, url.host_piece(), + url.EffectiveIntPort()); + } + } + return url::SchemeHostPort(url); +} + +void HttpServerProperties::Clear(base::OnceClosure callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + server_info_map_.Clear(); + broken_alternative_services_.Clear(); + canonical_alt_svc_map_.clear(); + last_quic_address_ = IPAddress(); + quic_server_info_map_.Clear(); + canonical_server_info_map_.clear(); + + if (properties_manager_) { + // Stop waiting for initial settings. + is_initialized_ = true; + // Leaving this as-is doesn't actually have any effect, if it's true, but + // seems best to be safe. + queue_write_on_load_ = false; + + // Stop the timer if it's running, since this will write to the properties + // file immediately. + prefs_update_timer_.Stop(); + WriteProperties(std::move(callback)); + } else if (callback) { + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + std::move(callback)); + } +} + +bool HttpServerProperties::SupportsRequestPriority( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (server.host().empty()) + return false; + + if (GetSupportsSpdy(server, network_isolation_key)) + return true; + const AlternativeServiceInfoVector alternative_service_info_vector = + GetAlternativeServiceInfos(server, network_isolation_key); + for (const AlternativeServiceInfo& alternative_service_info : + alternative_service_info_vector) { + if (alternative_service_info.alternative_service().protocol == kProtoQUIC) { return true; + } } - NOTREACHED(); return false; } -// static -AlternativeServiceInfo -AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( +bool HttpServerProperties::GetSupportsSpdy( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (server.host().empty()) + return false; + + auto server_info = + server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key)); + return server_info != server_info_map_.end() && + server_info->second.supports_spdy.value_or(false); +} + +void HttpServerProperties::SetSupportsSpdy( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key, + bool supports_spdy) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (server.host().empty()) + return; + + auto server_info = server_info_map_.GetOrPut( + CreateServerInfoKey(server, network_isolation_key)); + // If value is already the same as |supports_spdy|, or value is unset and + // |supports_spdy| is false, don't queue a write. + bool queue_write = + server_info->second.supports_spdy.value_or(false) != supports_spdy; + server_info->second.supports_spdy = supports_spdy; + + if (queue_write) + MaybeQueueWriteProperties(); +} + +bool HttpServerProperties::RequiresHTTP11( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(server.scheme() != "ws"); + DCHECK(server.scheme() != "wss"); + if (server.host().empty()) + return false; + + auto spdy_info = + server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key)); + return spdy_info != server_info_map_.end() && + spdy_info->second.requires_http11.value_or(false); +} + +void HttpServerProperties::SetHTTP11Required( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(server.scheme() != "ws"); + DCHECK(server.scheme() != "wss"); + if (server.host().empty()) + return; + + server_info_map_.GetOrPut(CreateServerInfoKey(server, network_isolation_key)) + ->second.requires_http11 = true; + // No need to call MaybeQueueWriteProperties(), as this information is not + // persisted to preferences. +} + +void HttpServerProperties::MaybeForceHTTP11( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key, + SSLConfig* ssl_config) { + DCHECK(server.scheme() != "ws"); + DCHECK(server.scheme() != "wss"); + if (RequiresHTTP11(server, network_isolation_key)) { + ssl_config->alpn_protos.clear(); + ssl_config->alpn_protos.push_back(kProtoHTTP11); + } +} + +AlternativeServiceInfoVector HttpServerProperties::GetAlternativeServiceInfos( + const url::SchemeHostPort& origin, + const net::NetworkIsolationKey& network_isolation_key) { + // Copy valid alternative service infos into + // |valid_alternative_service_infos|. + AlternativeServiceInfoVector valid_alternative_service_infos; + const base::Time now = clock_->Now(); + auto map_it = + server_info_map_.Get(CreateServerInfoKey(origin, network_isolation_key)); + if (map_it != server_info_map_.end() && + map_it->second.alternative_services.has_value()) { + AlternativeServiceInfoVector* service_info = + &map_it->second.alternative_services.value(); + HostPortPair host_port_pair(origin.host(), origin.port()); + for (auto it = service_info->begin(); it != service_info->end();) { + if (it->expiration() < now) { + it = service_info->erase(it); + continue; + } + AlternativeService alternative_service(it->alternative_service()); + if (alternative_service.host.empty()) { + alternative_service.host = origin.host(); + } + // If the alternative service is equivalent to the origin (same host, same + // port, and both TCP), skip it. + if (host_port_pair.Equals(alternative_service.host_port_pair()) && + alternative_service.protocol == kProtoHTTP2) { + ++it; + continue; + } + if (alternative_service.protocol == kProtoQUIC) { + valid_alternative_service_infos.push_back( + AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + alternative_service, it->expiration(), + it->advertised_versions())); + } else { + valid_alternative_service_infos.push_back( + AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + alternative_service, it->expiration())); + } + ++it; + } + if (service_info->empty()) { + map_it->second.alternative_services.reset(); + server_info_map_.EraseIfEmpty(map_it); + } + return valid_alternative_service_infos; + } + + auto canonical = GetCanonicalAltSvcHost(origin, network_isolation_key); + if (canonical == canonical_alt_svc_map_.end()) { + return AlternativeServiceInfoVector(); + } + map_it = server_info_map_.Get( + CreateServerInfoKey(canonical->second, network_isolation_key)); + if (map_it == server_info_map_.end() || + !map_it->second.alternative_services.has_value()) { + return AlternativeServiceInfoVector(); + } + AlternativeServiceInfoVector* service_info = + &map_it->second.alternative_services.value(); + for (auto it = service_info->begin(); it != service_info->end();) { + if (it->expiration() < now) { + it = service_info->erase(it); + continue; + } + AlternativeService alternative_service(it->alternative_service()); + if (alternative_service.host.empty()) { + alternative_service.host = canonical->second.host(); + if (IsAlternativeServiceBroken(alternative_service)) { + ++it; + continue; + } + alternative_service.host = origin.host(); + } else if (IsAlternativeServiceBroken(alternative_service)) { + ++it; + continue; + } + if (alternative_service.protocol == kProtoQUIC) { + valid_alternative_service_infos.push_back( + AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + alternative_service, it->expiration(), + it->advertised_versions())); + } else { + valid_alternative_service_infos.push_back( + AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + alternative_service, it->expiration())); + } + ++it; + } + if (service_info->empty()) + server_info_map_.EraseIfEmpty(map_it); + return valid_alternative_service_infos; +} + +void HttpServerProperties::SetHttp2AlternativeService( + const url::SchemeHostPort& origin, + const NetworkIsolationKey& network_isolation_key, const AlternativeService& alternative_service, base::Time expiration) { DCHECK_EQ(alternative_service.protocol, kProtoHTTP2); - return AlternativeServiceInfo(alternative_service, expiration, - quic::ParsedQuicVersionVector()); + + SetAlternativeServices( + origin, network_isolation_key, + AlternativeServiceInfoVector( + /*size=*/1, AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + alternative_service, expiration))); } -// static -AlternativeServiceInfo AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( +void HttpServerProperties::SetQuicAlternativeService( + const url::SchemeHostPort& origin, + const NetworkIsolationKey& network_isolation_key, const AlternativeService& alternative_service, base::Time expiration, const quic::ParsedQuicVersionVector& advertised_versions) { - DCHECK_EQ(alternative_service.protocol, kProtoQUIC); - return AlternativeServiceInfo(alternative_service, expiration, - advertised_versions); + DCHECK(alternative_service.protocol == kProtoQUIC); + + SetAlternativeServices( + origin, network_isolation_key, + AlternativeServiceInfoVector( + /*size=*/1, + AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + alternative_service, expiration, advertised_versions))); } -AlternativeServiceInfo::AlternativeServiceInfo() : alternative_service_() {} +void HttpServerProperties::SetAlternativeServices( + const url::SchemeHostPort& origin, + const net::NetworkIsolationKey& network_isolation_key, + const AlternativeServiceInfoVector& alternative_service_info_vector) { + if (alternative_service_info_vector.empty()) { + RemoveAltSvcCanonicalHost(origin, network_isolation_key); + // Don't bother moving to front when erasing information. + auto it = server_info_map_.Peek( + CreateServerInfoKey(origin, network_isolation_key)); -AlternativeServiceInfo::~AlternativeServiceInfo() = default; + if (it == server_info_map_.end() || + !it->second.alternative_services.has_value()) { + return; + } -AlternativeServiceInfo::AlternativeServiceInfo( - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions) - : alternative_service_(alternative_service), expiration_(expiration) { - if (alternative_service_.protocol == kProtoQUIC) { - advertised_versions_ = advertised_versions; - std::sort(advertised_versions_.begin(), advertised_versions_.end(), - TransportVersionLessThan); + it->second.alternative_services.reset(); + server_info_map_.EraseIfEmpty(it); + MaybeQueueWriteProperties(); + return; + } + + auto it = server_info_map_.GetOrPut( + CreateServerInfoKey(origin, network_isolation_key)); + bool need_update_pref = true; + if (it->second.alternative_services.has_value()) { + DCHECK(!it->second.empty()); + if (it->second.alternative_services->size() == + alternative_service_info_vector.size()) { + const base::Time now = clock_->Now(); + need_update_pref = false; + auto new_it = alternative_service_info_vector.begin(); + for (const auto& old : *it->second.alternative_services) { + // Persist to disk immediately if new entry has different scheme, host, + // or port. + if (old.alternative_service() != new_it->alternative_service()) { + need_update_pref = true; + break; + } + // Also persist to disk if new expiration it more that twice as far or + // less than half as far in the future. + base::Time old_time = old.expiration(); + base::Time new_time = new_it->expiration(); + if (new_time - now > 2 * (old_time - now) || + 2 * (new_time - now) < (old_time - now)) { + need_update_pref = true; + break; + } + // Also persist to disk if new entry has a different list of advertised + // versions. + if (old.advertised_versions() != new_it->advertised_versions()) { + need_update_pref = true; + break; + } + ++new_it; + } + } + } + + const bool previously_no_alternative_services = + (GetIteratorWithAlternativeServiceInfo(origin, network_isolation_key) == + server_info_map_.end()); + + it->second.alternative_services = alternative_service_info_vector; + + if (previously_no_alternative_services && + !GetAlternativeServiceInfos(origin, network_isolation_key).empty()) { + // TODO(rch): Consider the case where multiple requests are started + // before the first completes. In this case, only one of the jobs + // would reach this code, whereas all of them should should have. + HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING, + false); + } + + // If this host ends with a canonical suffix, then set it as the + // canonical host. + const char* kCanonicalScheme = "https"; + if (origin.scheme() == kCanonicalScheme) { + const std::string* canonical_suffix = GetCanonicalSuffix(origin.host()); + if (canonical_suffix != nullptr) { + url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix, + origin.port()); + canonical_alt_svc_map_[CreateServerInfoKey( + canonical_server, network_isolation_key)] = origin; + } } + + if (need_update_pref) + MaybeQueueWriteProperties(); } -AlternativeServiceInfo::AlternativeServiceInfo( - const AlternativeServiceInfo& alternative_service_info) = default; +void HttpServerProperties::MarkAlternativeServiceBroken( + const AlternativeService& alternative_service) { + broken_alternative_services_.MarkBroken(alternative_service); + MaybeQueueWriteProperties(); +} -AlternativeServiceInfo& AlternativeServiceInfo::operator=( - const AlternativeServiceInfo& alternative_service_info) = default; +void HttpServerProperties:: + MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( + const AlternativeService& alternative_service) { + broken_alternative_services_.MarkBrokenUntilDefaultNetworkChanges( + alternative_service); + MaybeQueueWriteProperties(); +} + +void HttpServerProperties::MarkAlternativeServiceRecentlyBroken( + const AlternativeService& alternative_service) { + broken_alternative_services_.MarkRecentlyBroken(alternative_service); + MaybeQueueWriteProperties(); +} + +bool HttpServerProperties::IsAlternativeServiceBroken( + const AlternativeService& alternative_service) const { + return broken_alternative_services_.IsBroken(alternative_service); +} + +bool HttpServerProperties::WasAlternativeServiceRecentlyBroken( + const AlternativeService& alternative_service) { + return broken_alternative_services_.WasRecentlyBroken(alternative_service); +} + +void HttpServerProperties::ConfirmAlternativeService( + const AlternativeService& alternative_service) { + bool old_value = IsAlternativeServiceBroken(alternative_service); + broken_alternative_services_.Confirm(alternative_service); + bool new_value = IsAlternativeServiceBroken(alternative_service); -std::string AlternativeService::ToString() const { - return base::StringPrintf("%s %s:%d", NextProtoToString(protocol), - host.c_str(), port); + // For persisting, we only care about the value returned by + // IsAlternativeServiceBroken. If that value changes, then call persist. + if (old_value != new_value) + MaybeQueueWriteProperties(); } -std::string AlternativeServiceInfo::ToString() const { - base::Time::Exploded exploded; - expiration_.LocalExplode(&exploded); - return base::StringPrintf( - "%s, expires %04d-%02d-%02d %02d:%02d:%02d", - alternative_service_.ToString().c_str(), exploded.year, exploded.month, - exploded.day_of_month, exploded.hour, exploded.minute, exploded.second); +void HttpServerProperties::OnDefaultNetworkChanged() { + bool changed = broken_alternative_services_.OnDefaultNetworkChanged(); + if (changed) + MaybeQueueWriteProperties(); } -// static -bool AlternativeServiceInfo::TransportVersionLessThan( - const quic::ParsedQuicVersion& lhs, - const quic::ParsedQuicVersion& rhs) { - return lhs.transport_version < rhs.transport_version; +std::unique_ptr<base::Value> +HttpServerProperties::GetAlternativeServiceInfoAsValue() const { + const base::Time now = clock_->Now(); + const base::TimeTicks now_ticks = tick_clock_->NowTicks(); + std::unique_ptr<base::ListValue> dict_list(new base::ListValue); + for (const auto& server_info : server_info_map_) { + if (!server_info.second.alternative_services.has_value()) + continue; + std::unique_ptr<base::ListValue> alternative_service_list( + new base::ListValue); + const ServerInfoMapKey& key = server_info.first; + for (const AlternativeServiceInfo& alternative_service_info : + server_info.second.alternative_services.value()) { + std::string alternative_service_string( + alternative_service_info.ToString()); + AlternativeService alternative_service( + alternative_service_info.alternative_service()); + if (alternative_service.host.empty()) { + alternative_service.host = key.server.host(); + } + base::TimeTicks brokenness_expiration_ticks; + if (broken_alternative_services_.IsBroken(alternative_service, + &brokenness_expiration_ticks)) { + // Convert |brokenness_expiration| from TimeTicks to Time + base::Time brokenness_expiration = + now + (brokenness_expiration_ticks - now_ticks); + base::Time::Exploded exploded; + brokenness_expiration.LocalExplode(&exploded); + std::string broken_info_string = + " (broken until " + + base::StringPrintf("%04d-%02d-%02d %0d:%0d:%0d", exploded.year, + exploded.month, exploded.day_of_month, + exploded.hour, exploded.minute, + exploded.second) + + ")"; + alternative_service_string.append(broken_info_string); + } + alternative_service_list->AppendString(alternative_service_string); + } + if (alternative_service_list->empty()) + continue; + std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + dict->SetString("server", key.server.Serialize()); + dict->SetString("network_isolation_key", + key.network_isolation_key.ToDebugString()); + dict->Set("alternative_service", std::unique_ptr<base::Value>( + std::move(alternative_service_list))); + dict_list->Append(std::move(dict)); + } + return std::move(dict_list); } -std::ostream& operator<<(std::ostream& os, - const AlternativeService& alternative_service) { - os << alternative_service.ToString(); - return os; +bool HttpServerProperties::GetSupportsQuic(IPAddress* last_address) const { + if (last_quic_address_.empty()) + return false; + + *last_address = last_quic_address_; + return true; } -// static -void HttpServerProperties::ForceHTTP11(SSLConfig* ssl_config) { - ssl_config->alpn_protos.clear(); - ssl_config->alpn_protos.push_back(kProtoHTTP11); +void HttpServerProperties::SetSupportsQuic(bool used_quic, + const IPAddress& address) { + IPAddress new_quic_address; + if (used_quic) + new_quic_address = address; + + if (new_quic_address == last_quic_address_) + return; + + last_quic_address_ = new_quic_address; + MaybeQueueWriteProperties(); +} + +void HttpServerProperties::SetServerNetworkStats( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key, + ServerNetworkStats stats) { + auto server_info = server_info_map_.GetOrPut( + CreateServerInfoKey(server, network_isolation_key)); + bool changed = !server_info->second.server_network_stats.has_value() || + server_info->second.server_network_stats.value() != stats; + + if (changed) { + server_info->second.server_network_stats = stats; + MaybeQueueWriteProperties(); + } +} + +void HttpServerProperties::ClearServerNetworkStats( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key) { + auto server_info = + server_info_map_.Peek(CreateServerInfoKey(server, network_isolation_key)); + // If stats are empty, nothing to do. + if (server_info == server_info_map_.end() || + !server_info->second.server_network_stats.has_value()) { + return; + } + + // Otherwise, clear and delete if needed. No need to bring to front of MRU + // cache when clearing data. + server_info->second.server_network_stats.reset(); + if (server_info->second.empty()) + server_info_map_.EraseIfEmpty(server_info); + MaybeQueueWriteProperties(); +} + +const ServerNetworkStats* HttpServerProperties::GetServerNetworkStats( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key) { + auto server_info = + server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key)); + if (server_info == server_info_map_.end() || + !server_info->second.server_network_stats.has_value()) { + return nullptr; + } + return &server_info->second.server_network_stats.value(); +} + +void HttpServerProperties::SetQuicServerInfo( + const quic::QuicServerId& server_id, + const std::string& server_info) { + auto it = quic_server_info_map_.Peek(server_id); + bool changed = + (it == quic_server_info_map_.end() || it->second != server_info); + quic_server_info_map_.Put(server_id, server_info); + UpdateCanonicalServerInfoMap(server_id); + if (changed) + MaybeQueueWriteProperties(); +} + +const std::string* HttpServerProperties::GetQuicServerInfo( + const quic::QuicServerId& server_id) { + auto it = quic_server_info_map_.Get(server_id); + if (it != quic_server_info_map_.end()) { + // Since |canonical_server_info_map_| should always map to the most + // recent host, update it with the one that became MRU in + // |quic_server_info_map_|. + UpdateCanonicalServerInfoMap(server_id); + return &it->second; + } + + // If the exact match for |server_id| wasn't found, check + // |canonical_server_info_map_| whether there is server info for a host with + // the same canonical host suffix. + auto canonical_itr = GetCanonicalServerInfoHost(server_id); + if (canonical_itr == canonical_server_info_map_.end()) + return nullptr; + + // When search in |quic_server_info_map_|, do not change the MRU order. + it = quic_server_info_map_.Peek(canonical_itr->second); + if (it != quic_server_info_map_.end()) + return &it->second; + + return nullptr; +} + +const QuicServerInfoMap& HttpServerProperties::quic_server_info_map() const { + return quic_server_info_map_; +} + +size_t HttpServerProperties::max_server_configs_stored_in_properties() const { + return max_server_configs_stored_in_properties_; +} + +void HttpServerProperties::SetMaxServerConfigsStoredInProperties( + size_t max_server_configs_stored_in_properties) { + // Do nothing if the new size is the same as the old one. + if (max_server_configs_stored_in_properties_ == + max_server_configs_stored_in_properties) { + return; + } + + max_server_configs_stored_in_properties_ = + max_server_configs_stored_in_properties; + + // MRUCache doesn't allow the capacity of the cache to be changed. Thus create + // a new map with the new size and add current elements and swap the new map. + quic_server_info_map_.ShrinkToSize(max_server_configs_stored_in_properties_); + QuicServerInfoMap temp_map(max_server_configs_stored_in_properties_); + // Update the |canonical_server_info_map_| as well, so it stays in sync with + // |quic_server_info_map_|. + canonical_server_info_map_ = CanonicalServerInfoMap(); + for (auto it = quic_server_info_map_.rbegin(); + it != quic_server_info_map_.rend(); ++it) { + temp_map.Put(it->first, it->second); + UpdateCanonicalServerInfoMap(it->first); + } + + quic_server_info_map_.Swap(temp_map); + if (properties_manager_) { + properties_manager_->set_max_server_configs_stored_in_properties( + max_server_configs_stored_in_properties); + } +} + +bool HttpServerProperties::IsInitialized() const { + return is_initialized_; +} + +void HttpServerProperties::OnExpireBrokenAlternativeService( + const AlternativeService& expired_alternative_service) { + // Remove every occurrence of |expired_alternative_service| from + // |alternative_service_map_|. + for (auto map_it = server_info_map_.begin(); + map_it != server_info_map_.end();) { + if (!map_it->second.alternative_services.has_value()) { + ++map_it; + continue; + } + AlternativeServiceInfoVector* service_info = + &map_it->second.alternative_services.value(); + for (auto it = service_info->begin(); it != service_info->end();) { + AlternativeService alternative_service(it->alternative_service()); + // Empty hostname in map means hostname of key: substitute before + // comparing to |expired_alternative_service|. + if (alternative_service.host.empty()) { + alternative_service.host = map_it->first.server.host(); + } + if (alternative_service == expired_alternative_service) { + it = service_info->erase(it); + continue; + } + ++it; + } + // If an origin has an empty list of alternative services, then remove it + // from both |canonical_alt_svc_map_| and + // |alternative_service_map_|. + if (service_info->empty()) { + // TODO(mmenke): Take a NetworkIsolationKey as input and use it here. + RemoveAltSvcCanonicalHost(map_it->first.server, NetworkIsolationKey()); + map_it->second.alternative_services.reset(); + map_it = server_info_map_.EraseIfEmpty(map_it); + continue; + } + ++map_it; + } +} + +base::TimeDelta HttpServerProperties::GetUpdatePrefsDelayForTesting() { + return kUpdatePrefsDelay; +} + +HttpServerProperties::ServerInfoMapKey +HttpServerProperties::CreateServerInfoKey( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key) const { + return ServerInfoMapKey(server, network_isolation_key, + use_network_isolation_key_); +} + +HttpServerProperties::ServerInfoMap::const_iterator +HttpServerProperties::GetIteratorWithAlternativeServiceInfo( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) { + ServerInfoMap::const_iterator it = + server_info_map_.Get(CreateServerInfoKey(server, network_isolation_key)); + if (it != server_info_map_.end() && it->second.alternative_services) + return it; + + auto canonical = GetCanonicalAltSvcHost(server, network_isolation_key); + if (canonical == canonical_alt_svc_map_.end()) { + return server_info_map_.end(); + } + + const url::SchemeHostPort canonical_server = canonical->second; + it = server_info_map_.Get( + CreateServerInfoKey(canonical_server, network_isolation_key)); + if (it == server_info_map_.end() || !it->second.alternative_services) + return server_info_map_.end(); + + for (const AlternativeServiceInfo& alternative_service_info : + it->second.alternative_services.value()) { + AlternativeService alternative_service( + alternative_service_info.alternative_service()); + if (alternative_service.host.empty()) { + alternative_service.host = canonical_server.host(); + } + if (!IsAlternativeServiceBroken(alternative_service)) { + return it; + } + } + + RemoveAltSvcCanonicalHost(canonical_server, network_isolation_key); + return server_info_map_.end(); +} + +HttpServerProperties::CanonicalAltSvcMap::const_iterator +HttpServerProperties::GetCanonicalAltSvcHost( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) const { + const char* kCanonicalScheme = "https"; + if (server.scheme() != kCanonicalScheme) + return canonical_alt_svc_map_.end(); + + const std::string* canonical_suffix = GetCanonicalSuffix(server.host()); + if (canonical_suffix == nullptr) + return canonical_alt_svc_map_.end(); + + url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix, + server.port()); + return canonical_alt_svc_map_.find( + CreateServerInfoKey(canonical_server, network_isolation_key)); +} + +HttpServerProperties::CanonicalServerInfoMap::const_iterator +HttpServerProperties::GetCanonicalServerInfoHost( + const quic::QuicServerId& server) const { + const std::string* canonical_suffix = GetCanonicalSuffix(server.host()); + if (canonical_suffix == nullptr) + return canonical_server_info_map_.end(); + + HostPortPair canonical_pair(*canonical_suffix, server.port()); + return canonical_server_info_map_.find(canonical_pair); +} + +void HttpServerProperties::RemoveAltSvcCanonicalHost( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key) { + auto canonical = GetCanonicalAltSvcHost(server, network_isolation_key); + if (canonical == canonical_alt_svc_map_.end()) + return; + + canonical_alt_svc_map_.erase(canonical->first); +} + +void HttpServerProperties::UpdateCanonicalServerInfoMap( + const quic::QuicServerId& server) { + const std::string* suffix = GetCanonicalSuffix(server.host()); + if (suffix) { + HostPortPair canonical_pair(*suffix, server.port()); + canonical_server_info_map_[canonical_pair] = server; + } +} + +const std::string* HttpServerProperties::GetCanonicalSuffix( + const std::string& host) const { + // If this host ends with a canonical suffix, then return the canonical + // suffix. + for (const std::string& canonical_suffix : canonical_suffixes_) { + if (base::EndsWith(host, canonical_suffix, + base::CompareCase::INSENSITIVE_ASCII)) { + return &canonical_suffix; + } + } + return nullptr; +} + +void HttpServerProperties::OnPrefsLoaded( + std::unique_ptr<ServerInfoMap> server_info_map, + const IPAddress& last_quic_address, + std::unique_ptr<QuicServerInfoMap> quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + DCHECK(!is_initialized_); + + // Either all of these are nullptr, or none of them are (except the broken alt + // service fields). + if (server_info_map) { + OnServerInfoLoaded(std::move(server_info_map)); + OnSupportsQuicLoaded(last_quic_address); + OnQuicServerInfoMapLoaded(std::move(quic_server_info_map)); + if (recently_broken_alternative_services) { + DCHECK(broken_alternative_service_list); + OnBrokenAndRecentlyBrokenAlternativeServicesLoaded( + std::move(broken_alternative_service_list), + std::move(recently_broken_alternative_services)); + } + } + + is_initialized_ = true; + + if (queue_write_on_load_) { + // Leaving this as true doesn't actually have any effect, but seems best to + // be safe. + queue_write_on_load_ = false; + MaybeQueueWriteProperties(); + } +} + +void HttpServerProperties::OnServerInfoLoaded( + std::unique_ptr<ServerInfoMap> server_info_map) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + // Perform a simple sanity check on loaded data, when DCHECKs are enabled. +#if DCHECK_IS_ON() + if (!use_network_isolation_key_) { + for (auto server_info = server_info_map->begin(); + server_info != server_info_map->end(); ++server_info) { + DCHECK(server_info->first.network_isolation_key.IsEmpty()); + } + } +#endif // DCHECK_IS_ON() + + // Swap in the entries from persisted data. This allows the MRU cache to be + // sorted based on the order of the entries in the newer in-memory cache. + server_info_map_.Swap(*server_info_map); + + // Add the entries from the memory cache. + for (auto it = server_info_map->rbegin(); it != server_info_map->rend(); + ++it) { + // If there's no corresponding old entry, add the new entry directly. + auto old_entry = server_info_map_.Get(it->first); + if (old_entry == server_info_map_.end()) { + server_info_map_.Put(it->first, std::move(it->second)); + continue; + } + + // Otherwise, merge the old and new entries. Prefer values from older + // entries. + if (!old_entry->second.supports_spdy.has_value()) + old_entry->second.supports_spdy = it->second.supports_spdy; + if (!old_entry->second.alternative_services.has_value()) + old_entry->second.alternative_services = it->second.alternative_services; + if (!old_entry->second.server_network_stats.has_value()) + old_entry->second.server_network_stats = it->second.server_network_stats; + + // |requires_http11| isn't saved to prefs, so the loaded entry should not + // have it set. Unconditionally copy it from the new entry. + DCHECK(!old_entry->second.requires_http11.has_value()); + old_entry->second.requires_http11 = it->second.requires_http11; + } + + // Attempt to find canonical servers. Canonical suffix only apply to HTTPS. + const uint16_t kCanonicalPort = 443; + const char* kCanonicalScheme = "https"; + for (auto it = server_info_map_.begin(); it != server_info_map_.end(); ++it) { + if (!it->second.alternative_services || + it->first.server.scheme() != kCanonicalScheme) { + continue; + } + const std::string* canonical_suffix = + GetCanonicalSuffix(it->first.server.host()); + if (!canonical_suffix) + continue; + ServerInfoMapKey key = CreateServerInfoKey( + url::SchemeHostPort(kCanonicalScheme, *canonical_suffix, + kCanonicalPort), + it->first.network_isolation_key); + // If we already have a valid canonical server, we're done. + if (base::Contains(canonical_alt_svc_map_, key)) { + auto it = server_info_map_.Peek(key); + if (it != server_info_map_.end() && + it->second.alternative_services.has_value()) { + continue; + } + } + canonical_alt_svc_map_[key] = it->first.server; + } +} + +void HttpServerProperties::OnSupportsQuicLoaded(const IPAddress& last_address) { + last_quic_address_ = last_address; +} + +void HttpServerProperties::OnQuicServerInfoMapLoaded( + std::unique_ptr<QuicServerInfoMap> quic_server_info_map) { + DCHECK_EQ(quic_server_info_map->max_size(), quic_server_info_map_.max_size()); + + // Add the entries from persisted data. + quic_server_info_map_.Swap(*quic_server_info_map); + + // Add the entries from the memory cache. + for (auto it = quic_server_info_map->rbegin(); + it != quic_server_info_map->rend(); ++it) { + if (quic_server_info_map_.Get(it->first) == quic_server_info_map_.end()) { + quic_server_info_map_.Put(it->first, it->second); + } + } + + // Repopulate |canonical_server_info_map_| to stay in sync with + // |quic_server_info_map_|. + canonical_server_info_map_.clear(); + for (auto it = quic_server_info_map_.rbegin(); + it != quic_server_info_map_.rend(); ++it) { + UpdateCanonicalServerInfoMap(it->first); + } +} + +void HttpServerProperties::OnBrokenAndRecentlyBrokenAlternativeServicesLoaded( + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services) { + broken_alternative_services_.SetBrokenAndRecentlyBrokenAlternativeServices( + std::move(broken_alternative_service_list), + std::move(recently_broken_alternative_services)); +} + +void HttpServerProperties::MaybeQueueWriteProperties() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + if (prefs_update_timer_.IsRunning() || !properties_manager_) + return; + + if (!is_initialized_) { + queue_write_on_load_ = true; + return; + } + + prefs_update_timer_.Start( + FROM_HERE, kUpdatePrefsDelay, + base::BindOnce(&HttpServerProperties::WriteProperties, + base::Unretained(this), base::OnceClosure())); +} + +void HttpServerProperties::WriteProperties(base::OnceClosure callback) const { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(properties_manager_); + + // |this| shouldn't be waiting to load properties cached to disk when this + // method is invoked, since this method will overwrite any cached properties. + DCHECK(is_initialized_); + + // There shouldn't be a queued update when this is run, since this method + // removes the need for any update to be queued. + DCHECK(!prefs_update_timer_.IsRunning()); + + properties_manager_->WriteToPrefs( + server_info_map_, + base::BindRepeating(&HttpServerProperties::GetCanonicalSuffix, + base::Unretained(this)), + last_quic_address_, quic_server_info_map_, + broken_alternative_services_.broken_alternative_service_list(), + broken_alternative_services_.recently_broken_alternative_services(), + std::move(callback)); } } // namespace net diff --git a/chromium/net/http/http_server_properties.h b/chromium/net/http/http_server_properties.h index a1117925d95..8ef3bd6426b 100644 --- a/chromium/net/http/http_server_properties.h +++ b/chromium/net/http/http_server_properties.h @@ -5,10 +5,12 @@ #ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_H_ #define NET_HTTP_HTTP_SERVER_PROPERTIES_H_ +#include <stddef.h> #include <stdint.h> #include <map> -#include <ostream> +#include <memory> +#include <set> #include <string> #include <tuple> #include <vector> @@ -16,10 +18,19 @@ #include "base/callback.h" #include "base/containers/mru_cache.h" #include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "base/optional.h" +#include "base/threading/thread_checker.h" #include "base/time/time.h" +#include "base/timer/timer.h" +#include "base/values.h" #include "net/base/host_port_pair.h" +#include "net/base/ip_address.h" #include "net/base/net_export.h" -#include "net/socket/next_proto.h" +#include "net/base/network_isolation_key.h" +#include "net/http/alternative_service.h" +#include "net/http/broken_alternative_services.h" +#include "net/http/http_server_properties.h" #include "net/third_party/quiche/src/quic/core/quic_bandwidth.h" #include "net/third_party/quiche/src/quic/core/quic_server_id.h" #include "net/third_party/quiche/src/quic/core/quic_versions.h" @@ -28,200 +39,23 @@ #include "url/scheme_host_port.h" namespace base { +class Clock; +class TickClock; class Value; } namespace net { +class HostPortPair; +class HttpServerPropertiesManager; class IPAddress; +class NetLog; struct SSLConfig; -enum AlternateProtocolUsage { - // Alternate Protocol was used without racing a normal connection. - ALTERNATE_PROTOCOL_USAGE_NO_RACE = 0, - // Alternate Protocol was used by winning a race with a normal connection. - ALTERNATE_PROTOCOL_USAGE_WON_RACE = 1, - // Alternate Protocol was not used by losing a race with a normal connection. - ALTERNATE_PROTOCOL_USAGE_LOST_RACE = 2, - // Alternate Protocol was not used because no Alternate-Protocol information - // was available when the request was issued, but an Alternate-Protocol header - // was present in the response. - ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING = 3, - // Alternate Protocol was not used because it was marked broken. - ALTERNATE_PROTOCOL_USAGE_BROKEN = 4, - // Maximum value for the enum. - ALTERNATE_PROTOCOL_USAGE_MAX, -}; - -// Log a histogram to reflect |usage|. -NET_EXPORT void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage, - bool proxy_server_used); - -enum BrokenAlternateProtocolLocation { - BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB = 0, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY = 1, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_ALT = 2, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_JOB_MAIN = 3, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_HTTP_STREAM = 4, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_NETWORK_TRANSACTION = 5, - BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX, -}; - -// Log a histogram to reflect |location|. -NET_EXPORT void HistogramBrokenAlternateProtocolLocation( - BrokenAlternateProtocolLocation location); - -NET_EXPORT bool IsAlternateProtocolValid(NextProto protocol); - -// (protocol, host, port) triple as defined in -// https://tools.ietf.org/id/draft-ietf-httpbis-alt-svc-06.html -struct NET_EXPORT AlternativeService { - AlternativeService() : protocol(kProtoUnknown), host(), port(0) {} - - AlternativeService(NextProto protocol, const std::string& host, uint16_t port) - : protocol(protocol), host(host), port(port) {} - - AlternativeService(NextProto protocol, const HostPortPair& host_port_pair) - : protocol(protocol), - host(host_port_pair.host()), - port(host_port_pair.port()) {} - - AlternativeService(const AlternativeService& alternative_service) = default; - AlternativeService& operator=(const AlternativeService& alternative_service) = - default; - - HostPortPair host_port_pair() const { return HostPortPair(host, port); } - - bool operator==(const AlternativeService& other) const { - return protocol == other.protocol && host == other.host && - port == other.port; - } - - bool operator!=(const AlternativeService& other) const { - return !this->operator==(other); - } - - bool operator<(const AlternativeService& other) const { - return std::tie(protocol, host, port) < - std::tie(other.protocol, other.host, other.port); - } - - // Output format: "protocol host:port", e.g. "h2 www.google.com:1234". - std::string ToString() const; - - NextProto protocol; - std::string host; - uint16_t port; -}; - -NET_EXPORT_PRIVATE std::ostream& operator<<( - std::ostream& os, - const AlternativeService& alternative_service); - -struct AlternativeServiceHash { - size_t operator()(const net::AlternativeService& entry) const { - return entry.protocol ^ std::hash<std::string>()(entry.host) ^ entry.port; - } -}; - -class NET_EXPORT_PRIVATE AlternativeServiceInfo { - public: - static AlternativeServiceInfo CreateHttp2AlternativeServiceInfo( - const AlternativeService& alternative_service, - base::Time expiration); - - static AlternativeServiceInfo CreateQuicAlternativeServiceInfo( - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions); - - AlternativeServiceInfo(); - ~AlternativeServiceInfo(); - - AlternativeServiceInfo( - const AlternativeServiceInfo& alternative_service_info); - - AlternativeServiceInfo& operator=( - const AlternativeServiceInfo& alternative_service_info); - - bool operator==(const AlternativeServiceInfo& other) const { - return alternative_service_ == other.alternative_service() && - expiration_ == other.expiration() && - advertised_versions_ == other.advertised_versions(); - } - - bool operator!=(const AlternativeServiceInfo& other) const { - return !this->operator==(other); - } - - std::string ToString() const; - - void set_alternative_service(const AlternativeService& alternative_service) { - alternative_service_ = alternative_service; - } - - void set_protocol(const NextProto& protocol) { - alternative_service_.protocol = protocol; - } - - void set_host(const std::string& host) { alternative_service_.host = host; } - - void set_port(uint16_t port) { alternative_service_.port = port; } - - void set_expiration(const base::Time& expiration) { - expiration_ = expiration; - } - - void set_advertised_versions( - const quic::ParsedQuicVersionVector& advertised_versions) { - if (alternative_service_.protocol != kProtoQUIC) - return; - - advertised_versions_ = advertised_versions; - std::sort(advertised_versions_.begin(), advertised_versions_.end(), - TransportVersionLessThan); - } - - const AlternativeService& alternative_service() const { - return alternative_service_; - } - - NextProto protocol() const { return alternative_service_.protocol; } - - HostPortPair host_port_pair() const { - return alternative_service_.host_port_pair(); - } - - base::Time expiration() const { return expiration_; } - - const quic::ParsedQuicVersionVector& advertised_versions() const { - return advertised_versions_; - } - - private: - AlternativeServiceInfo( - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions); - - static bool TransportVersionLessThan(const quic::ParsedQuicVersion& lhs, - const quic::ParsedQuicVersion& rhs); - - AlternativeService alternative_service_; - base::Time expiration_; - - // Lists all the QUIC versions that are advertised by the server and supported - // by Chrome. If empty, defaults to versions used by the current instance of - // the netstack. - // This list MUST be sorted in ascending order. - quic::ParsedQuicVersionVector advertised_versions_; -}; - struct NET_EXPORT SupportsQuic { SupportsQuic() : used_quic(false) {} SupportsQuic(bool used_quic, const std::string& address) - : used_quic(used_quic), - address(address) {} + : used_quic(used_quic), address(address) {} bool Equals(const SupportsQuic& other) const { return used_quic == other.used_quic && address == other.address; @@ -247,235 +81,477 @@ struct NET_EXPORT ServerNetworkStats { }; typedef std::vector<AlternativeService> AlternativeServiceVector; -typedef std::vector<AlternativeServiceInfo> AlternativeServiceInfoVector; - -// Stores broken alternative services and when their brokenness expires. -typedef std::list<std::pair<AlternativeService, base::TimeTicks>> - BrokenAlternativeServiceList; - -// Store at most 300 MRU SupportsSpdyServerHostPortPairs in memory and disk. -const int kMaxSupportsSpdyServerEntries = 300; - -// Store at most 200 MRU AlternateProtocolHostPortPairs in memory and disk. -const int kMaxAlternateProtocolEntries = 200; - -// Store at most 200 MRU ServerNetworkStats in memory and disk. -const int kMaxServerNetworkStatsEntries = 200; // Store at most 200 MRU RecentlyBrokenAlternativeServices in memory and disk. +// This ideally would be with the other constants in HttpServerProperties, but +// has to go here instead of prevent a circular dependency. const int kMaxRecentlyBrokenAlternativeServiceEntries = 200; // Store at most 5 MRU QUIC servers by default. This is mainly used by cronet. const int kDefaultMaxQuicServerEntries = 5; -// Stores flattened representation of servers (scheme, host, port) and whether -// or not they support SPDY. -class SpdyServersMap : public base::MRUCache<std::string, bool> { - public: - SpdyServersMap() - : base::MRUCache<std::string, bool>(kMaxSupportsSpdyServerEntries) {} -}; - -class AlternativeServiceMap - : public base::MRUCache<url::SchemeHostPort, AlternativeServiceInfoVector> { - public: - AlternativeServiceMap() - : base::MRUCache<url::SchemeHostPort, AlternativeServiceInfoVector>( - kMaxAlternateProtocolEntries) {} -}; - -class ServerNetworkStatsMap - : public base::MRUCache<url::SchemeHostPort, ServerNetworkStats> { - public: - ServerNetworkStatsMap() - : base::MRUCache<url::SchemeHostPort, ServerNetworkStats>( - kMaxServerNetworkStatsEntries) {} -}; - -// Stores how many times an alternative service has been marked broken. -class RecentlyBrokenAlternativeServices - : public base::MRUCache<AlternativeService, int> { - public: - RecentlyBrokenAlternativeServices() - : base::MRUCache<AlternativeService, int>( - kMaxRecentlyBrokenAlternativeServiceEntries) {} -}; - // Max number of quic servers to store is not hardcoded and can be set. // Because of this, QuicServerInfoMap will not be a subclass of MRUCache. typedef base::MRUCache<quic::QuicServerId, std::string> QuicServerInfoMap; -extern const char kAlternativeServiceHeader[]; - // The interface for setting/retrieving the HTTP server properties. // Currently, this class manages servers': // * HTTP/2 support; // * Alternative Service support; // * QUIC data (like ServerNetworkStats and QuicServerInfo). // -// Embedders must ensure that HttpServerProperites is completely initialized -// before the first request is issued. -class NET_EXPORT HttpServerProperties { +// Optionally retrieves and saves properties from/to disk. This class is not +// threadsafe. +class NET_EXPORT HttpServerProperties + : public BrokenAlternativeServices::Delegate { public: - HttpServerProperties() {} - virtual ~HttpServerProperties() {} + // Store at most 500 MRU ServerInfos in memory and disk. + static const int kMaxServerInfoEntries = 500; + + // Provides an interface to interact with persistent preferences storage + // implemented by the embedder. The prefs are assumed not to have been loaded + // before HttpServerPropertiesManager construction. + class NET_EXPORT PrefDelegate { + public: + virtual ~PrefDelegate(); + + // Returns the branch of the preferences system for the server properties. + // Returns nullptr if the pref system has no data for the server properties. + virtual const base::DictionaryValue* GetServerProperties() const = 0; + + // Sets the server properties to the given value. If |callback| is + // non-empty, flushes data to persistent storage and invokes |callback| + // asynchronously when complete. + virtual void SetServerProperties(const base::DictionaryValue& value, + base::OnceClosure callback) = 0; + + // Starts listening for prefs to be loaded. If prefs are already loaded, + // |pref_loaded_callback| will be invoked asynchronously. Callback will be + // invoked even if prefs fail to load. Will only be called once by the + // HttpServerPropertiesManager. + virtual void WaitForPrefLoad(base::OnceClosure pref_loaded_callback) = 0; + }; + + // Contains metadata about a particular server. Note that all methods that + // take a "SchemeHostPort" expect schemes of ws and wss to be mapped to http + // and https, respectively. See GetNormalizedSchemeHostPort(). + struct NET_EXPORT ServerInfo { + ServerInfo(); + ServerInfo(const ServerInfo& server_info); + ServerInfo(ServerInfo&& server_info); + ~ServerInfo(); + + // Returns true if no fields are populated. + bool empty() const; + + // Used in tests. + bool operator==(const ServerInfo& other) const; + + // IMPORTANT: When adding a field here, be sure to update + // HttpServerProperties::OnServerInfoLoaded() as well as + // HttpServerPropertiesManager to correctly load/save the from/to the pref + // store. + + // Whether or not a server is known to support H2/SPDY. False indicates + // known lack of support, true indicates known support, and not set + // indicates unknown. The difference between false and not set only matters + // when loading from disk, when an initialized false value will take + // priority over a not set value. + base::Optional<bool> supports_spdy; + + // True if the server has previously indicated it required HTTP/1.1. Unlike + // other fields, not persisted to disk. + base::Optional<bool> requires_http11; + + base::Optional<AlternativeServiceInfoVector> alternative_services; + base::Optional<ServerNetworkStats> server_network_stats; + }; + + struct NET_EXPORT ServerInfoMapKey { + // If |use_network_isolation_key| is false, an empty NetworkIsolationKey is + // used instead of |network_isolation_key|. + ServerInfoMapKey(const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key, + bool use_network_isolation_key); + ~ServerInfoMapKey(); + + bool operator<(const ServerInfoMapKey& other) const; + + url::SchemeHostPort server; + NetworkIsolationKey network_isolation_key; + }; + + class NET_EXPORT ServerInfoMap + : public base::MRUCache<ServerInfoMapKey, ServerInfo> { + public: + ServerInfoMap(); + + // If there's an entry corresponding to |key|, brings that entry to the + // front and returns an iterator to it. Otherwise, inserts an empty + // ServerInfo using |key|, and returns an iterator to it. + iterator GetOrPut(const ServerInfoMapKey& key); + + // Erases the ServerInfo identified by |server_info_it| if no fields have + // data. The iterator must point to an entry in the map. Regardless of + // whether the entry is removed or not, returns iterator for the next entry. + iterator EraseIfEmpty(iterator server_info_it); + + private: + DISALLOW_COPY_AND_ASSIGN(ServerInfoMap); + }; + + // If a |pref_delegate| is specified, it will be used to read/write the + // properties to a pref file. Writes are rate limited to improve performance. + // + // |tick_clock| is used for setting expiration times and scheduling the + // expiration of broken alternative services. If null, default clock will be + // used. + // + // |clock| is used for converting base::TimeTicks to base::Time for + // wherever base::Time is preferable. + HttpServerProperties(std::unique_ptr<PrefDelegate> pref_delegate = nullptr, + NetLog* net_log = nullptr, + const base::TickClock* tick_clock = nullptr, + base::Clock* clock = nullptr); + + ~HttpServerProperties() override; + + // Returns the SchemeHostPort for |url|, with the exception that it replaces + // "wss" with "https" and "ws" with "http", so they're grouped together. + static url::SchemeHostPort GetNormalizedSchemeHostPort(const GURL& url); // Deletes all data. If |callback| is non-null, flushes data to disk // and invokes the callback asynchronously once changes have been written to // disk. - virtual void Clear(base::OnceClosure callback) = 0; + void Clear(base::OnceClosure callback); - // Returns true if |server| supports a network protocol which honors - // request prioritization. + // Returns true if |server|, in the context of |network_isolation_key|, has + // previously supported a network protocol which honors request + // prioritization. + // // Note that this also implies that the server supports request // multiplexing, since priorities imply a relationship between // multiple requests. - virtual bool SupportsRequestPriority(const url::SchemeHostPort& server) = 0; + bool SupportsRequestPriority( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key); // Returns the value set by SetSupportsSpdy(). If not set, returns false. - virtual bool GetSupportsSpdy(const url::SchemeHostPort& server) = 0; - - // Add |server| into the persistent store. Should only be called from IO - // thread. - virtual void SetSupportsSpdy(const url::SchemeHostPort& server, - bool support_spdy) = 0; - - // Returns true if |server| has required HTTP/1.1 via HTTP/2 error code. - virtual bool RequiresHTTP11(const HostPortPair& server) = 0; - - // Require HTTP/1.1 on subsequent connections. Not persisted. - virtual void SetHTTP11Required(const HostPortPair& server) = 0; - - // Modify SSLConfig to force HTTP/1.1. - static void ForceHTTP11(SSLConfig* ssl_config); + bool GetSupportsSpdy(const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key); + + // Records whether |server| supports H2 or not. Information is restricted to + // the context of |network_isolation_key|, to prevent cross-site information + // leakage. + void SetSupportsSpdy(const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key, + bool supports_spdy); + + // Returns true if |server| has required HTTP/1.1 via HTTP/2 error code, in + // the context of |network_isolation_key|. + bool RequiresHTTP11(const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key); + + // Require HTTP/1.1 on subsequent connections, in the context of + // |network_isolation_key|. Not persisted. + void SetHTTP11Required(const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key); // Modify SSLConfig to force HTTP/1.1 if necessary. - virtual void MaybeForceHTTP11(const HostPortPair& server, - SSLConfig* ssl_config) = 0; - - // Return all alternative services for |origin|, including broken ones. - // Returned alternative services never have empty hostnames. - virtual AlternativeServiceInfoVector GetAlternativeServiceInfos( - const url::SchemeHostPort& origin) = 0; + void MaybeForceHTTP11(const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key, + SSLConfig* ssl_config); + + // Return all alternative services for |origin|, learned in the context of + // |network_isolation_key|, including broken ones. Returned alternative + // services never have empty hostnames. + AlternativeServiceInfoVector GetAlternativeServiceInfos( + const url::SchemeHostPort& origin, + const net::NetworkIsolationKey& network_isolation_key); // Set a single HTTP/2 alternative service for |origin|. Previous // alternative services for |origin| are discarded. // |alternative_service.host| may be empty. - // Return true if |alternative_service_map_| has changed significantly enough - // that it should be persisted to disk. - virtual bool SetHttp2AlternativeService( + void SetHttp2AlternativeService( const url::SchemeHostPort& origin, + const NetworkIsolationKey& network_isolation_key, const AlternativeService& alternative_service, - base::Time expiration) = 0; + base::Time expiration); // Set a single QUIC alternative service for |origin|. Previous alternative // services for |origin| are discarded. // |alternative_service.host| may be empty. - // Return true if |alternative_service_map_| has changed significantly enough - // that it should be persisted to disk. - virtual bool SetQuicAlternativeService( + void SetQuicAlternativeService( const url::SchemeHostPort& origin, + const NetworkIsolationKey& network_isolation_key, const AlternativeService& alternative_service, base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions) = 0; + const quic::ParsedQuicVersionVector& advertised_versions); - // Set alternative services for |origin|. Previous alternative services for - // |origin| are discarded. - // Hostnames in |alternative_service_info_vector| may be empty. + // Set alternative services for |origin|, learned in the context of + // |network_isolation_key|. Previous alternative services for |origin| are + // discarded. Hostnames in |alternative_service_info_vector| may be empty. // |alternative_service_info_vector| may be empty. - // Return true if |alternative_service_map_| has changed significantly enough - // that it should be persisted to disk. - virtual bool SetAlternativeServices( + void SetAlternativeServices( const url::SchemeHostPort& origin, - const AlternativeServiceInfoVector& alternative_service_info_vector) = 0; + const net::NetworkIsolationKey& network_isolation_key, + const AlternativeServiceInfoVector& alternative_service_info_vector); // Marks |alternative_service| as broken. // |alternative_service.host| must not be empty. - virtual void MarkAlternativeServiceBroken( - const AlternativeService& alternative_service) = 0; + void MarkAlternativeServiceBroken( + const AlternativeService& alternative_service); // Marks |alternative_service| as broken until the default network changes. // |alternative_service.host| must not be empty. - virtual void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - const AlternativeService& alternative_service) = 0; + void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( + const AlternativeService& alternative_service); // Marks |alternative_service| as recently broken. // |alternative_service.host| must not be empty. - virtual void MarkAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) = 0; + void MarkAlternativeServiceRecentlyBroken( + const AlternativeService& alternative_service); // Returns true iff |alternative_service| is currently broken. // |alternative_service.host| must not be empty. - virtual bool IsAlternativeServiceBroken( - const AlternativeService& alternative_service) const = 0; + bool IsAlternativeServiceBroken( + const AlternativeService& alternative_service) const; // Returns true iff |alternative_service| was recently broken. // |alternative_service.host| must not be empty. - virtual bool WasAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) = 0; + bool WasAlternativeServiceRecentlyBroken( + const AlternativeService& alternative_service); // Confirms that |alternative_service| is working. // |alternative_service.host| must not be empty. - virtual void ConfirmAlternativeService( - const AlternativeService& alternative_service) = 0; + void ConfirmAlternativeService(const AlternativeService& alternative_service); // Called when the default network changes. // Clears all the alternative services that were marked broken until the // default network changed. - // Returns true if there is any broken alternative service affected by the - // default network change. - virtual bool OnDefaultNetworkChanged() = 0; - - // Returns all alternative service mappings. - // Returned alternative services may have empty hostnames. - virtual const AlternativeServiceMap& alternative_service_map() const = 0; + void OnDefaultNetworkChanged(); // Returns all alternative service mappings as human readable strings. // Empty alternative service hostnames will be printed as such. - virtual std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue() - const = 0; + std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue() const; - virtual bool GetSupportsQuic(IPAddress* last_address) const = 0; + bool GetSupportsQuic(IPAddress* last_address) const; - virtual void SetSupportsQuic(bool used_quic, - const IPAddress& last_address) = 0; + void SetSupportsQuic(bool used_quic, const IPAddress& last_address); // Sets |stats| for |server|. - virtual void SetServerNetworkStats(const url::SchemeHostPort& server, - ServerNetworkStats stats) = 0; + void SetServerNetworkStats(const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key, + ServerNetworkStats stats); // Clears any stats for |server|. - virtual void ClearServerNetworkStats(const url::SchemeHostPort& server) = 0; + void ClearServerNetworkStats( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key); // Returns any stats for |server| or nullptr if there are none. - virtual const ServerNetworkStats* GetServerNetworkStats( - const url::SchemeHostPort& server) = 0; - - virtual const ServerNetworkStatsMap& server_network_stats_map() const = 0; + const ServerNetworkStats* GetServerNetworkStats( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key); // Save QuicServerInfo (in std::string form) for the given |server_id|. - // Returns true if the value has changed otherwise it returns false. - virtual bool SetQuicServerInfo(const quic::QuicServerId& server_id, - const std::string& server_info) = 0; + void SetQuicServerInfo(const quic::QuicServerId& server_id, + const std::string& server_info); // Get QuicServerInfo (in std::string form) for the given |server_id|. - virtual const std::string* GetQuicServerInfo( - const quic::QuicServerId& server_id) = 0; + const std::string* GetQuicServerInfo(const quic::QuicServerId& server_id); // Returns all persistent QuicServerInfo objects. - virtual const QuicServerInfoMap& quic_server_info_map() const = 0; + const QuicServerInfoMap& quic_server_info_map() const; // Returns the number of server configs (QuicServerInfo objects) persisted. - virtual size_t max_server_configs_stored_in_properties() const = 0; + size_t max_server_configs_stored_in_properties() const; // Sets the number of server configs (QuicServerInfo objects) to be persisted. - virtual void SetMaxServerConfigsStoredInProperties( - size_t max_server_configs_stored_in_properties) = 0; + void SetMaxServerConfigsStoredInProperties( + size_t max_server_configs_stored_in_properties); // Returns whether HttpServerProperties is initialized. - virtual bool IsInitialized() const = 0; + bool IsInitialized() const; + + // BrokenAlternativeServices::Delegate method. + void OnExpireBrokenAlternativeService( + const AlternativeService& expired_alternative_service) override; + + static base::TimeDelta GetUpdatePrefsDelayForTesting(); + + // Test-only routines that call the methods used to load the specified + // field(s) from a prefs file. Unlike OnPrefsLoaded(), these may be invoked + // multiple times. + void OnServerInfoLoadedForTesting( + std::unique_ptr<ServerInfoMap> server_info_map) { + OnServerInfoLoaded(std::move(server_info_map)); + } + void OnSupportsQuicLoadedForTesting(const IPAddress& last_address) { + OnSupportsQuicLoaded(last_address); + } + void OnQuicServerInfoMapLoadedForTesting( + std::unique_ptr<QuicServerInfoMap> quic_server_info_map) { + OnQuicServerInfoMapLoaded(std::move(quic_server_info_map)); + } + void OnBrokenAndRecentlyBrokenAlternativeServicesLoadedForTesting( + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services) { + OnBrokenAndRecentlyBrokenAlternativeServicesLoaded( + std::move(broken_alternative_service_list), + std::move(recently_broken_alternative_services)); + } + + const std::string* GetCanonicalSuffixForTesting( + const std::string& host) const { + return GetCanonicalSuffix(host); + } + + const ServerInfoMap& server_info_map_for_testing() const { + return server_info_map_; + } + + // TODO(mmenke): Look into removing this. + HttpServerPropertiesManager* properties_manager_for_testing() { + return properties_manager_.get(); + } private: + // TODO (wangyix): modify HttpServerProperties unit tests so this + // friendness is no longer required. + friend class HttpServerPropertiesPeer; + + typedef base::flat_map<ServerInfoMapKey, url::SchemeHostPort> + CanonicalAltSvcMap; + typedef base::flat_map<HostPortPair, quic::QuicServerId> + CanonicalServerInfoMap; + typedef std::vector<std::string> CanonicalSuffixList; + + // Helper function to use the passed in parameters and + // |use_network_isolation_key_| to create a ServerInfoMapKey. + ServerInfoMapKey CreateServerInfoKey( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key) const; + + // Return the iterator for |server| in the context of |network_isolation_key|, + // or for its canonical host, or end. Skips over ServerInfos without + // |alternative_service_info| populated. + ServerInfoMap::const_iterator GetIteratorWithAlternativeServiceInfo( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key); + + // Return the canonical host for |server| in the context of + // |network_isolation_key|, or end if none exists. + CanonicalAltSvcMap::const_iterator GetCanonicalAltSvcHost( + const url::SchemeHostPort& server, + const net::NetworkIsolationKey& network_isolation_key) const; + + // Return the canonical host with the same canonical suffix as |server|. + // The returned canonical host can be used to search for server info in + // |quic_server_info_map_|. Return 'end' the host doesn't exist. + CanonicalServerInfoMap::const_iterator GetCanonicalServerInfoHost( + const quic::QuicServerId& server) const; + + // Remove the canonical alt-svc host for |server| with + // |network_isolation_key|. + void RemoveAltSvcCanonicalHost( + const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key); + + // Update |canonical_server_info_map_| with the new canonical host. + // The |server| should have the corresponding server info associated with it + // in |quic_server_info_map_|. If |canonical_server_info_map_| doesn't + // have an entry associated with |server|, the method will add one. + void UpdateCanonicalServerInfoMap(const quic::QuicServerId& server); + + // Returns the canonical host suffix for |host|, or nullptr if none + // exists. + const std::string* GetCanonicalSuffix(const std::string& host) const; + + void OnPrefsLoaded( + std::unique_ptr<ServerInfoMap> server_info_map, + const IPAddress& last_quic_address, + std::unique_ptr<QuicServerInfoMap> quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services); + + // These methods are called by OnPrefsLoaded to handle merging properties + // loaded from prefs with what has been learned while waiting for prefs to + // load. + void OnServerInfoLoaded(std::unique_ptr<ServerInfoMap> server_info_map); + void OnSupportsQuicLoaded(const IPAddress& last_address); + void OnQuicServerInfoMapLoaded( + std::unique_ptr<QuicServerInfoMap> quic_server_info_map); + void OnBrokenAndRecentlyBrokenAlternativeServicesLoaded( + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services); + + // Queue a delayed call to WriteProperties(). If |is_initialized_| is false, + // or |properties_manager_| is nullptr, or there's already a queued call to + // WriteProperties(), does nothing. + void MaybeQueueWriteProperties(); + + // Writes cached state to |properties_manager_|, which must not be null. + // Invokes |callback| on completion, if non-null. + void WriteProperties(base::OnceClosure callback) const; + + const base::TickClock* tick_clock_; // Unowned + base::Clock* clock_; // Unowned + + // Cached value of kPartitionHttpServerPropertiesByNetworkIsolationKey + // feature. Cached to improve performance. + const bool use_network_isolation_key_; + + // Set to true once initial properties have been retrieved from disk by + // |properties_manager_|. Always true if |properties_manager_| is nullptr. + bool is_initialized_; + + // Queue a write when resources finish loading. Set to true when + // MaybeQueueWriteProperties() is invoked while still waiting on + // initialization to complete. + bool queue_write_on_load_; + + // Used to load/save properties from/to preferences. May be nullptr. + std::unique_ptr<HttpServerPropertiesManager> properties_manager_; + + ServerInfoMap server_info_map_; + + BrokenAlternativeServices broken_alternative_services_; + + IPAddress last_quic_address_; + // Contains a map of servers which could share the same alternate protocol. + // Map from a Canonical scheme/host/port (host is some postfix of host names) + // to an actual origin, which has a plausible alternate protocol mapping. + CanonicalAltSvcMap canonical_alt_svc_map_; + + // Contains list of suffixes (for example ".c.youtube.com", + // ".googlevideo.com", ".googleusercontent.com") of canonical hostnames. + const CanonicalSuffixList canonical_suffixes_; + + QuicServerInfoMap quic_server_info_map_; + + // Maps canonical suffixes to host names that have the same canonical suffix + // and have a corresponding entry in |quic_server_info_map_|. The map can be + // used to quickly look for server info for hosts that share the same + // canonical suffix but don't have exact match in |quic_server_info_map_|. The + // map exists solely to improve the search performance. It only contains + // derived data that can be recalculated by traversing + // |quic_server_info_map_|. + CanonicalServerInfoMap canonical_server_info_map_; + + size_t max_server_configs_stored_in_properties_; + + // Used to post calls to WriteProperties(). + base::OneShotTimer prefs_update_timer_; + + THREAD_CHECKER(thread_checker_); + DISALLOW_COPY_AND_ASSIGN(HttpServerProperties); }; diff --git a/chromium/net/http/http_server_properties_impl.cc b/chromium/net/http/http_server_properties_impl.cc deleted file mode 100644 index bf614b37103..00000000000 --- a/chromium/net/http/http_server_properties_impl.cc +++ /dev/null @@ -1,793 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "net/http/http_server_properties_impl.h" - -#include <algorithm> -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/location.h" -#include "base/logging.h" -#include "base/metrics/histogram_macros.h" -#include "base/single_thread_task_runner.h" -#include "base/stl_util.h" -#include "base/strings/string_util.h" -#include "base/strings/stringprintf.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/default_clock.h" -#include "base/values.h" - -namespace net { - -HttpServerPropertiesImpl::HttpServerPropertiesImpl( - const base::TickClock* tick_clock, - base::Clock* clock) - : tick_clock_(tick_clock ? tick_clock - : base::DefaultTickClock::GetInstance()), - clock_(clock ? clock : base::DefaultClock::GetInstance()), - broken_alternative_services_(this, tick_clock_), - canonical_suffixes_({".ggpht.com", ".c.youtube.com", ".googlevideo.com", - ".googleusercontent.com"}), - quic_server_info_map_(kDefaultMaxQuicServerEntries), - max_server_configs_stored_in_properties_(kDefaultMaxQuicServerEntries) {} - -HttpServerPropertiesImpl::HttpServerPropertiesImpl() - : HttpServerPropertiesImpl(nullptr, nullptr) {} - -HttpServerPropertiesImpl::~HttpServerPropertiesImpl() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); -} - -void HttpServerPropertiesImpl::SetSpdyServers( - std::unique_ptr<SpdyServersMap> spdy_servers_map) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - // Add the entries from persisted data. - spdy_servers_map_.Swap(*spdy_servers_map); - - // Add the entries from the memory cache. - for (auto it = spdy_servers_map->rbegin(); it != spdy_servers_map->rend(); - ++it) { - // Add the entry if it is not in the cache, otherwise move it to the front - // of recency list. - if (spdy_servers_map_.Get(it->first) == spdy_servers_map_.end()) - spdy_servers_map_.Put(it->first, it->second); - } -} - -void HttpServerPropertiesImpl::SetAlternativeServiceServers( - std::unique_ptr<AlternativeServiceMap> alternative_service_map) { - int32_t size_diff = - alternative_service_map->size() - alternative_service_map_.size(); - if (size_diff > 0) { - UMA_HISTOGRAM_COUNTS_1M("Net.AlternativeServiceServers.MorePrefsEntries", - size_diff); - } else { - UMA_HISTOGRAM_COUNTS_1M( - "Net.AlternativeServiceServers.MoreOrEqualCacheEntries", -size_diff); - } - - // Add the entries from persisted data. - alternative_service_map_.Swap(*alternative_service_map); - - // Add the entries from the memory cache. - for (auto input_it = alternative_service_map->rbegin(); - input_it != alternative_service_map->rend(); ++input_it) { - if (alternative_service_map_.Get(input_it->first) == - alternative_service_map_.end()) { - alternative_service_map_.Put(input_it->first, input_it->second); - } - } - - // Attempt to find canonical servers. Canonical suffix only apply to HTTPS. - const uint16_t kCanonicalPort = 443; - const char* kCanonicalScheme = "https"; - for (const std::string& canonical_suffix : canonical_suffixes_) { - url::SchemeHostPort canonical_server(kCanonicalScheme, canonical_suffix, - kCanonicalPort); - // If we already have a valid canonical server, we're done. - if (base::Contains(canonical_alt_svc_map_, canonical_server) && - (alternative_service_map_.Peek( - canonical_alt_svc_map_[canonical_server]) != - alternative_service_map_.end())) { - continue; - } - // Now attempt to find a server which matches this origin and set it as - // canonical. - for (AlternativeServiceMap::const_iterator it = - alternative_service_map_.begin(); - it != alternative_service_map_.end(); ++it) { - if (base::EndsWith(it->first.host(), canonical_suffix, - base::CompareCase::INSENSITIVE_ASCII) && - it->first.scheme() == canonical_server.scheme()) { - canonical_alt_svc_map_[canonical_server] = it->first; - break; - } - } - } -} - -void HttpServerPropertiesImpl::SetSupportsQuic(const IPAddress& last_address) { - last_quic_address_ = last_address; -} - -void HttpServerPropertiesImpl::SetServerNetworkStats( - std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map) { - // Add the entries from persisted data. - server_network_stats_map_.Swap(*server_network_stats_map); - - // Add the entries from the memory cache. - for (auto it = server_network_stats_map->rbegin(); - it != server_network_stats_map->rend(); ++it) { - if (server_network_stats_map_.Get(it->first) == - server_network_stats_map_.end()) { - server_network_stats_map_.Put(it->first, it->second); - } - } -} - -void HttpServerPropertiesImpl::SetQuicServerInfoMap( - std::unique_ptr<QuicServerInfoMap> quic_server_info_map) { - DCHECK_EQ(quic_server_info_map->max_size(), quic_server_info_map_.max_size()); - - // Add the entries from persisted data. - quic_server_info_map_.Swap(*quic_server_info_map); - - // Add the entries from the memory cache. - for (auto it = quic_server_info_map->rbegin(); - it != quic_server_info_map->rend(); ++it) { - if (quic_server_info_map_.Get(it->first) == quic_server_info_map_.end()) { - quic_server_info_map_.Put(it->first, it->second); - } - } - - // Repopulate |canonical_server_info_map_| to stay in sync with - // |quic_server_info_map_|. - canonical_server_info_map_.clear(); - for (auto it = quic_server_info_map_.rbegin(); - it != quic_server_info_map_.rend(); ++it) { - UpdateCanonicalServerInfoMap(it->first); - } -} - -const SpdyServersMap& HttpServerPropertiesImpl::spdy_servers_map() const { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return spdy_servers_map_; -} - -void HttpServerPropertiesImpl::SetBrokenAndRecentlyBrokenAlternativeServices( - std::unique_ptr<BrokenAlternativeServiceList> - broken_alternative_service_list, - std::unique_ptr<RecentlyBrokenAlternativeServices> - recently_broken_alternative_services) { - broken_alternative_services_.SetBrokenAndRecentlyBrokenAlternativeServices( - std::move(broken_alternative_service_list), - std::move(recently_broken_alternative_services)); -} - -const BrokenAlternativeServiceList& -HttpServerPropertiesImpl::broken_alternative_service_list() const { - return broken_alternative_services_.broken_alternative_service_list(); -} - -const RecentlyBrokenAlternativeServices& -HttpServerPropertiesImpl::recently_broken_alternative_services() const { - return broken_alternative_services_.recently_broken_alternative_services(); -} - -void HttpServerPropertiesImpl::Clear(base::OnceClosure callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - spdy_servers_map_.Clear(); - alternative_service_map_.Clear(); - broken_alternative_services_.Clear(); - canonical_alt_svc_map_.clear(); - last_quic_address_ = IPAddress(); - server_network_stats_map_.Clear(); - quic_server_info_map_.Clear(); - canonical_server_info_map_.clear(); - - if (!callback.is_null()) { - base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, - std::move(callback)); - } -} - -bool HttpServerPropertiesImpl::SupportsRequestPriority( - const url::SchemeHostPort& server) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (server.host().empty()) - return false; - - if (GetSupportsSpdy(server)) - return true; - const AlternativeServiceInfoVector alternative_service_info_vector = - GetAlternativeServiceInfos(server); - for (const AlternativeServiceInfo& alternative_service_info : - alternative_service_info_vector) { - if (alternative_service_info.alternative_service().protocol == kProtoQUIC) { - return true; - } - } - return false; -} - -bool HttpServerPropertiesImpl::GetSupportsSpdy( - const url::SchemeHostPort& server) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (server.host().empty()) - return false; - - auto spdy_server = spdy_servers_map_.Get(server.Serialize()); - return spdy_server != spdy_servers_map_.end() && spdy_server->second; -} - -void HttpServerPropertiesImpl::SetSupportsSpdy( - const url::SchemeHostPort& server, - bool support_spdy) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (server.host().empty()) - return; - - auto spdy_server = spdy_servers_map_.Get(server.Serialize()); - if ((spdy_server != spdy_servers_map_.end()) && - (spdy_server->second == support_spdy)) { - return; - } - // Cache the data. - spdy_servers_map_.Put(server.Serialize(), support_spdy); -} - -bool HttpServerPropertiesImpl::RequiresHTTP11( - const HostPortPair& host_port_pair) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (host_port_pair.host().empty()) - return false; - - return (http11_servers_.find(host_port_pair) != http11_servers_.end()); -} - -void HttpServerPropertiesImpl::SetHTTP11Required( - const HostPortPair& host_port_pair) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (host_port_pair.host().empty()) - return; - - http11_servers_.insert(host_port_pair); -} - -void HttpServerPropertiesImpl::MaybeForceHTTP11(const HostPortPair& server, - SSLConfig* ssl_config) { - if (RequiresHTTP11(server)) { - ForceHTTP11(ssl_config); - } -} - -const std::string* HttpServerPropertiesImpl::GetCanonicalSuffix( - const std::string& host) const { - // If this host ends with a canonical suffix, then return the canonical - // suffix. - for (const std::string& canonical_suffix : canonical_suffixes_) { - if (base::EndsWith(host, canonical_suffix, - base::CompareCase::INSENSITIVE_ASCII)) { - return &canonical_suffix; - } - } - return nullptr; -} - -AlternativeServiceInfoVector -HttpServerPropertiesImpl::GetAlternativeServiceInfos( - const url::SchemeHostPort& origin) { - // Copy valid alternative service infos into - // |valid_alternative_service_infos|. - AlternativeServiceInfoVector valid_alternative_service_infos; - const base::Time now = clock_->Now(); - auto map_it = alternative_service_map_.Get(origin); - if (map_it != alternative_service_map_.end()) { - HostPortPair host_port_pair(origin.host(), origin.port()); - for (auto it = map_it->second.begin(); it != map_it->second.end();) { - if (it->expiration() < now) { - it = map_it->second.erase(it); - continue; - } - AlternativeService alternative_service(it->alternative_service()); - if (alternative_service.host.empty()) { - alternative_service.host = origin.host(); - } - // If the alternative service is equivalent to the origin (same host, same - // port, and both TCP), skip it. - if (host_port_pair.Equals(alternative_service.host_port_pair()) && - alternative_service.protocol == kProtoHTTP2) { - ++it; - continue; - } - if (alternative_service.protocol == kProtoQUIC) { - valid_alternative_service_infos.push_back( - AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( - alternative_service, it->expiration(), - it->advertised_versions())); - } else { - valid_alternative_service_infos.push_back( - AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( - alternative_service, it->expiration())); - } - ++it; - } - if (map_it->second.empty()) { - alternative_service_map_.Erase(map_it); - } - return valid_alternative_service_infos; - } - - auto canonical = GetCanonicalAltSvcHost(origin); - if (canonical == canonical_alt_svc_map_.end()) { - return AlternativeServiceInfoVector(); - } - map_it = alternative_service_map_.Get(canonical->second); - if (map_it == alternative_service_map_.end()) { - return AlternativeServiceInfoVector(); - } - for (auto it = map_it->second.begin(); it != map_it->second.end();) { - if (it->expiration() < now) { - it = map_it->second.erase(it); - continue; - } - AlternativeService alternative_service(it->alternative_service()); - if (alternative_service.host.empty()) { - alternative_service.host = canonical->second.host(); - if (IsAlternativeServiceBroken(alternative_service)) { - ++it; - continue; - } - alternative_service.host = origin.host(); - } else if (IsAlternativeServiceBroken(alternative_service)) { - ++it; - continue; - } - if (alternative_service.protocol == kProtoQUIC) { - valid_alternative_service_infos.push_back( - AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( - alternative_service, it->expiration(), - it->advertised_versions())); - } else { - valid_alternative_service_infos.push_back( - AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( - alternative_service, it->expiration())); - } - ++it; - } - if (map_it->second.empty()) { - alternative_service_map_.Erase(map_it); - } - return valid_alternative_service_infos; -} - -bool HttpServerPropertiesImpl::SetHttp2AlternativeService( - const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration) { - DCHECK_EQ(alternative_service.protocol, kProtoHTTP2); - - return SetAlternativeServices( - origin, - AlternativeServiceInfoVector( - /*size=*/1, AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( - alternative_service, expiration))); -} - -bool HttpServerPropertiesImpl::SetQuicAlternativeService( - const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions) { - DCHECK(alternative_service.protocol == kProtoQUIC); - - return SetAlternativeServices( - origin, AlternativeServiceInfoVector( - /*size=*/1, - AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( - alternative_service, expiration, advertised_versions))); -} - -bool HttpServerPropertiesImpl::SetAlternativeServices( - const url::SchemeHostPort& origin, - const AlternativeServiceInfoVector& alternative_service_info_vector) { - auto it = alternative_service_map_.Peek(origin); - - if (alternative_service_info_vector.empty()) { - RemoveAltSvcCanonicalHost(origin); - if (it == alternative_service_map_.end()) - return false; - - alternative_service_map_.Erase(it); - return true; - } - - bool changed = true; - if (it != alternative_service_map_.end()) { - DCHECK(!it->second.empty()); - if (it->second.size() == alternative_service_info_vector.size()) { - const base::Time now = clock_->Now(); - changed = false; - auto new_it = alternative_service_info_vector.begin(); - for (const auto& old : it->second) { - // Persist to disk immediately if new entry has different scheme, host, - // or port. - if (old.alternative_service() != new_it->alternative_service()) { - changed = true; - break; - } - // Also persist to disk if new expiration it more that twice as far or - // less than half as far in the future. - base::Time old_time = old.expiration(); - base::Time new_time = new_it->expiration(); - if (new_time - now > 2 * (old_time - now) || - 2 * (new_time - now) < (old_time - now)) { - changed = true; - break; - } - // Also persist to disk if new entry has a different list of advertised - // versions. - if (old.advertised_versions() != new_it->advertised_versions()) { - changed = true; - break; - } - ++new_it; - } - } - } - - const bool previously_no_alternative_services = - (GetAlternateProtocolIterator(origin) == alternative_service_map_.end()); - - alternative_service_map_.Put(origin, alternative_service_info_vector); - - if (previously_no_alternative_services && - !GetAlternativeServiceInfos(origin).empty()) { - // TODO(rch): Consider the case where multiple requests are started - // before the first completes. In this case, only one of the jobs - // would reach this code, whereas all of them should should have. - HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING, - false); - } - - // If this host ends with a canonical suffix, then set it as the - // canonical host. - const char* kCanonicalScheme = "https"; - if (origin.scheme() == kCanonicalScheme) { - const std::string* canonical_suffix = GetCanonicalSuffix(origin.host()); - if (canonical_suffix != nullptr) { - url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix, - origin.port()); - canonical_alt_svc_map_[canonical_server] = origin; - } - } - return changed; -} - -void HttpServerPropertiesImpl::MarkAlternativeServiceBroken( - const AlternativeService& alternative_service) { - broken_alternative_services_.MarkBroken(alternative_service); -} - -void HttpServerPropertiesImpl:: - MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - const AlternativeService& alternative_service) { - broken_alternative_services_.MarkBrokenUntilDefaultNetworkChanges( - alternative_service); -} - -void HttpServerPropertiesImpl::MarkAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) { - broken_alternative_services_.MarkRecentlyBroken(alternative_service); -} - -bool HttpServerPropertiesImpl::IsAlternativeServiceBroken( - const AlternativeService& alternative_service) const { - return broken_alternative_services_.IsBroken(alternative_service); -} - -bool HttpServerPropertiesImpl::WasAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) { - return broken_alternative_services_.WasRecentlyBroken(alternative_service); -} - -void HttpServerPropertiesImpl::ConfirmAlternativeService( - const AlternativeService& alternative_service) { - broken_alternative_services_.Confirm(alternative_service); -} - -bool HttpServerPropertiesImpl::OnDefaultNetworkChanged() { - return broken_alternative_services_.OnDefaultNetworkChanged(); -} - -const AlternativeServiceMap& HttpServerPropertiesImpl::alternative_service_map() - const { - return alternative_service_map_; -} - -std::unique_ptr<base::Value> -HttpServerPropertiesImpl::GetAlternativeServiceInfoAsValue() const { - const base::Time now = clock_->Now(); - const base::TimeTicks now_ticks = tick_clock_->NowTicks(); - std::unique_ptr<base::ListValue> dict_list(new base::ListValue); - for (const auto& alternative_service_map_item : alternative_service_map_) { - std::unique_ptr<base::ListValue> alternative_service_list( - new base::ListValue); - const url::SchemeHostPort& server = alternative_service_map_item.first; - for (const AlternativeServiceInfo& alternative_service_info : - alternative_service_map_item.second) { - std::string alternative_service_string( - alternative_service_info.ToString()); - AlternativeService alternative_service( - alternative_service_info.alternative_service()); - if (alternative_service.host.empty()) { - alternative_service.host = server.host(); - } - base::TimeTicks brokenness_expiration_ticks; - if (broken_alternative_services_.IsBroken(alternative_service, - &brokenness_expiration_ticks)) { - // Convert |brokenness_expiration| from TimeTicks to Time - base::Time brokenness_expiration = - now + (brokenness_expiration_ticks - now_ticks); - base::Time::Exploded exploded; - brokenness_expiration.LocalExplode(&exploded); - std::string broken_info_string = - " (broken until " + - base::StringPrintf("%04d-%02d-%02d %0d:%0d:%0d", exploded.year, - exploded.month, exploded.day_of_month, - exploded.hour, exploded.minute, - exploded.second) + - ")"; - alternative_service_string.append(broken_info_string); - } - alternative_service_list->AppendString(alternative_service_string); - } - if (alternative_service_list->empty()) - continue; - std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); - dict->SetString("server", server.Serialize()); - dict->Set("alternative_service", std::unique_ptr<base::Value>( - std::move(alternative_service_list))); - dict_list->Append(std::move(dict)); - } - return std::move(dict_list); -} - -bool HttpServerPropertiesImpl::GetSupportsQuic(IPAddress* last_address) const { - if (last_quic_address_.empty()) - return false; - - *last_address = last_quic_address_; - return true; -} - -void HttpServerPropertiesImpl::SetSupportsQuic(bool used_quic, - const IPAddress& address) { - if (!used_quic) { - last_quic_address_ = IPAddress(); - } else { - last_quic_address_ = address; - } -} - -void HttpServerPropertiesImpl::SetServerNetworkStats( - const url::SchemeHostPort& server, - ServerNetworkStats stats) { - server_network_stats_map_.Put(server, stats); -} - -void HttpServerPropertiesImpl::ClearServerNetworkStats( - const url::SchemeHostPort& server) { - auto it = server_network_stats_map_.Get(server); - if (it != server_network_stats_map_.end()) { - server_network_stats_map_.Erase(it); - } -} - -const ServerNetworkStats* HttpServerPropertiesImpl::GetServerNetworkStats( - const url::SchemeHostPort& server) { - auto it = server_network_stats_map_.Get(server); - if (it == server_network_stats_map_.end()) { - return nullptr; - } - return &it->second; -} - -const ServerNetworkStatsMap& -HttpServerPropertiesImpl::server_network_stats_map() const { - return server_network_stats_map_; -} - -bool HttpServerPropertiesImpl::SetQuicServerInfo( - const quic::QuicServerId& server_id, - const std::string& server_info) { - auto it = quic_server_info_map_.Peek(server_id); - bool changed = - (it == quic_server_info_map_.end() || it->second != server_info); - quic_server_info_map_.Put(server_id, server_info); - UpdateCanonicalServerInfoMap(server_id); - return changed; -} - -const std::string* HttpServerPropertiesImpl::GetQuicServerInfo( - const quic::QuicServerId& server_id) { - auto it = quic_server_info_map_.Get(server_id); - if (it != quic_server_info_map_.end()) { - // Since |canonical_server_info_map_| should always map to the most - // recent host, update it with the one that became MRU in - // |quic_server_info_map_|. - UpdateCanonicalServerInfoMap(server_id); - return &it->second; - } - - // If the exact match for |server_id| wasn't found, check - // |canonical_server_info_map_| whether there is server info for a host with - // the same canonical host suffix. - auto canonical_itr = GetCanonicalServerInfoHost(server_id); - if (canonical_itr == canonical_server_info_map_.end()) - return nullptr; - - // When search in |quic_server_info_map_|, do not change the MRU order. - it = quic_server_info_map_.Peek(canonical_itr->second); - if (it != quic_server_info_map_.end()) - return &it->second; - - return nullptr; -} - -HttpServerPropertiesImpl::CanonicalServerInfoMap::const_iterator -HttpServerPropertiesImpl::GetCanonicalServerInfoHost( - const quic::QuicServerId& server) const { - const std::string* canonical_suffix = GetCanonicalSuffix(server.host()); - if (canonical_suffix == nullptr) - return canonical_server_info_map_.end(); - - HostPortPair canonical_pair(*canonical_suffix, server.port()); - return canonical_server_info_map_.find(canonical_pair); -} - -const QuicServerInfoMap& HttpServerPropertiesImpl::quic_server_info_map() - const { - return quic_server_info_map_; -} - -size_t HttpServerPropertiesImpl::max_server_configs_stored_in_properties() - const { - return max_server_configs_stored_in_properties_; -} - -void HttpServerPropertiesImpl::SetMaxServerConfigsStoredInProperties( - size_t max_server_configs_stored_in_properties) { - // Do nothing if the new size is the same as the old one. - if (max_server_configs_stored_in_properties_ == - max_server_configs_stored_in_properties) - return; - - max_server_configs_stored_in_properties_ = - max_server_configs_stored_in_properties; - - // MRUCache doesn't allow the capacity of the cache to be changed. Thus create - // a new map with the new size and add current elements and swap the new map. - quic_server_info_map_.ShrinkToSize(max_server_configs_stored_in_properties_); - QuicServerInfoMap temp_map(max_server_configs_stored_in_properties_); - // Update the |canonical_server_info_map_| as well, so it stays in sync with - // |quic_server_info_map_|. - canonical_server_info_map_ = CanonicalServerInfoMap(); - for (auto it = quic_server_info_map_.rbegin(); - it != quic_server_info_map_.rend(); ++it) { - temp_map.Put(it->first, it->second); - UpdateCanonicalServerInfoMap(it->first); - } - - quic_server_info_map_.Swap(temp_map); -} - -void HttpServerPropertiesImpl::UpdateCanonicalServerInfoMap( - const quic::QuicServerId& server) { - const std::string* suffix = GetCanonicalSuffix(server.host()); - if (suffix) { - HostPortPair canonical_pair(*suffix, server.port()); - canonical_server_info_map_[canonical_pair] = server; - } -} - -bool HttpServerPropertiesImpl::IsInitialized() const { - // No initialization is needed. - return true; -} - -AlternativeServiceMap::const_iterator -HttpServerPropertiesImpl::GetAlternateProtocolIterator( - const url::SchemeHostPort& server) { - AlternativeServiceMap::const_iterator it = - alternative_service_map_.Get(server); - if (it != alternative_service_map_.end()) - return it; - - auto canonical = GetCanonicalAltSvcHost(server); - if (canonical == canonical_alt_svc_map_.end()) { - return alternative_service_map_.end(); - } - - const url::SchemeHostPort canonical_server = canonical->second; - it = alternative_service_map_.Get(canonical_server); - if (it == alternative_service_map_.end()) { - return alternative_service_map_.end(); - } - - for (const AlternativeServiceInfo& alternative_service_info : it->second) { - AlternativeService alternative_service( - alternative_service_info.alternative_service()); - if (alternative_service.host.empty()) { - alternative_service.host = canonical_server.host(); - } - if (!IsAlternativeServiceBroken(alternative_service)) { - return it; - } - } - - RemoveAltSvcCanonicalHost(canonical_server); - return alternative_service_map_.end(); -} - -HttpServerPropertiesImpl::CanonicalAltSvcMap::const_iterator -HttpServerPropertiesImpl::GetCanonicalAltSvcHost( - const url::SchemeHostPort& server) const { - const char* kCanonicalScheme = "https"; - if (server.scheme() != kCanonicalScheme) - return canonical_alt_svc_map_.end(); - - const std::string* canonical_suffix = GetCanonicalSuffix(server.host()); - if (canonical_suffix == nullptr) - return canonical_alt_svc_map_.end(); - - url::SchemeHostPort canonical_server(kCanonicalScheme, *canonical_suffix, - server.port()); - return canonical_alt_svc_map_.find(canonical_server); -} - -void HttpServerPropertiesImpl::RemoveAltSvcCanonicalHost( - const url::SchemeHostPort& server) { - auto canonical = GetCanonicalAltSvcHost(server); - if (canonical == canonical_alt_svc_map_.end()) - return; - - canonical_alt_svc_map_.erase(canonical->first); -} - -void HttpServerPropertiesImpl::OnExpireBrokenAlternativeService( - const AlternativeService& expired_alternative_service) { - // Remove every occurrence of |expired_alternative_service| from - // |alternative_service_map_|. - for (auto map_it = alternative_service_map_.begin(); - map_it != alternative_service_map_.end();) { - for (auto it = map_it->second.begin(); it != map_it->second.end();) { - AlternativeService alternative_service(it->alternative_service()); - // Empty hostname in map means hostname of key: substitute before - // comparing to |expired_alternative_service|. - if (alternative_service.host.empty()) { - alternative_service.host = map_it->first.host(); - } - if (alternative_service == expired_alternative_service) { - it = map_it->second.erase(it); - continue; - } - ++it; - } - // If an origin has an empty list of alternative services, then remove it - // from both |canonical_alt_svc_map_| and - // |alternative_service_map_|. - if (map_it->second.empty()) { - RemoveAltSvcCanonicalHost(map_it->first); - map_it = alternative_service_map_.Erase(map_it); - continue; - } - ++map_it; - } -} - -} // namespace net diff --git a/chromium/net/http/http_server_properties_impl.h b/chromium/net/http/http_server_properties_impl.h deleted file mode 100644 index 863d1531f01..00000000000 --- a/chromium/net/http/http_server_properties_impl.h +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ -#define NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ - -#include <stddef.h> -#include <stdint.h> - -#include <map> -#include <set> -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "base/threading/thread_checker.h" -#include "base/time/default_tick_clock.h" -#include "base/values.h" -#include "net/base/host_port_pair.h" -#include "net/base/ip_address.h" -#include "net/base/net_export.h" -#include "net/http/broken_alternative_services.h" -#include "net/http/http_server_properties.h" - -namespace base { -class Clock; -class TickClock; -} - -namespace net { - -// The implementation for setting/retrieving the HTTP server properties. -class NET_EXPORT HttpServerPropertiesImpl - : public HttpServerProperties, - public BrokenAlternativeServices::Delegate { - public: - // |tick_clock| is used for setting expiration times and scheduling the - // expiration of broken alternative services. If null, default clock will be - // used. - // |clock| is used for converting base::TimeTicks to base::Time for - // wherever base::Time is preferable. - HttpServerPropertiesImpl(const base::TickClock* tick_clock, - base::Clock* clock); - - // Default clock will be used. - HttpServerPropertiesImpl(); - - ~HttpServerPropertiesImpl() override; - - // Sets |spdy_servers_map_| with the servers (host/port) from - // |spdy_servers| that either support SPDY or not. - void SetSpdyServers(std::unique_ptr<SpdyServersMap> spdy_servers_map); - - void SetAlternativeServiceServers( - std::unique_ptr<AlternativeServiceMap> alternate_protocol_servers); - - void SetSupportsQuic(const IPAddress& last_address); - - void SetServerNetworkStats( - std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map); - - void SetQuicServerInfoMap( - std::unique_ptr<QuicServerInfoMap> quic_server_info_map); - - const SpdyServersMap& spdy_servers_map() const; - - void SetBrokenAndRecentlyBrokenAlternativeServices( - std::unique_ptr<BrokenAlternativeServiceList> - broken_alternative_service_list, - std::unique_ptr<RecentlyBrokenAlternativeServices> - recently_broken_alternative_services); - - const BrokenAlternativeServiceList& broken_alternative_service_list() const; - - const RecentlyBrokenAlternativeServices& - recently_broken_alternative_services() const; - - // Returns flattened string representation of the |host_port_pair|. Used by - // unittests. - static std::string GetFlattenedSpdyServer(const HostPortPair& host_port_pair); - - // Returns the canonical host suffix for |host|, or nullptr if none - // exists. - const std::string* GetCanonicalSuffix(const std::string& host) const; - - // ----------------------------- - // HttpServerProperties methods: - // ----------------------------- - - void Clear(base::OnceClosure callback) override; - bool SupportsRequestPriority(const url::SchemeHostPort& server) override; - bool GetSupportsSpdy(const url::SchemeHostPort& server) override; - void SetSupportsSpdy(const url::SchemeHostPort& server, - bool support_spdy) override; - bool RequiresHTTP11(const HostPortPair& server) override; - void SetHTTP11Required(const HostPortPair& server) override; - void MaybeForceHTTP11(const HostPortPair& server, - SSLConfig* ssl_config) override; - AlternativeServiceInfoVector GetAlternativeServiceInfos( - const url::SchemeHostPort& origin) override; - bool SetHttp2AlternativeService(const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration) override; - bool SetQuicAlternativeService( - const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions) override; - bool SetAlternativeServices(const url::SchemeHostPort& origin, - const AlternativeServiceInfoVector& - alternative_service_info_vector) override; - void MarkAlternativeServiceBroken( - const AlternativeService& alternative_service) override; - void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - const AlternativeService& alternative_service) override; - void MarkAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) override; - bool IsAlternativeServiceBroken( - const AlternativeService& alternative_service) const override; - bool WasAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) override; - void ConfirmAlternativeService( - const AlternativeService& alternative_service) override; - bool OnDefaultNetworkChanged() override; - const AlternativeServiceMap& alternative_service_map() const override; - std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue() - const override; - bool GetSupportsQuic(IPAddress* last_address) const override; - void SetSupportsQuic(bool used_quic, const IPAddress& address) override; - void SetServerNetworkStats(const url::SchemeHostPort& server, - ServerNetworkStats stats) override; - void ClearServerNetworkStats(const url::SchemeHostPort& server) override; - const ServerNetworkStats* GetServerNetworkStats( - const url::SchemeHostPort& server) override; - const ServerNetworkStatsMap& server_network_stats_map() const override; - bool SetQuicServerInfo(const quic::QuicServerId& server_id, - const std::string& server_info) override; - const std::string* GetQuicServerInfo( - const quic::QuicServerId& server_id) override; - const QuicServerInfoMap& quic_server_info_map() const override; - size_t max_server_configs_stored_in_properties() const override; - void SetMaxServerConfigsStoredInProperties( - size_t max_server_configs_stored_in_properties) override; - bool IsInitialized() const override; - - // BrokenAlternativeServices::Delegate method. - void OnExpireBrokenAlternativeService( - const AlternativeService& expired_alternative_service) override; - - private: - // TODO (wangyix): modify HttpServerPropertiesImpl unit tests so this - // friendness is no longer required. - friend class HttpServerPropertiesImplPeer; - - typedef base::flat_map<url::SchemeHostPort, url::SchemeHostPort> - CanonicalAltSvcMap; - typedef base::flat_map<HostPortPair, quic::QuicServerId> - CanonicalServerInfoMap; - typedef std::vector<std::string> CanonicalSuffixList; - typedef std::set<HostPortPair> Http11ServerHostPortSet; - - // Return the iterator for |server|, or for its canonical host, or end. - AlternativeServiceMap::const_iterator GetAlternateProtocolIterator( - const url::SchemeHostPort& server); - - // Return the canonical host for |server|, or end if none exists. - CanonicalAltSvcMap::const_iterator GetCanonicalAltSvcHost( - const url::SchemeHostPort& server) const; - - // Return the canonical host with the same canonical suffix as |server|. - // The returned canonical host can be used to search for server info in - // |quic_server_info_map_|. Return 'end' the host doesn't exist. - CanonicalServerInfoMap::const_iterator GetCanonicalServerInfoHost( - const quic::QuicServerId& server) const; - - // Remove the canonical alt-svc host for |server|. - void RemoveAltSvcCanonicalHost(const url::SchemeHostPort& server); - - // Update |canonical_server_info_map_| with the new canonical host. - // The |server| should have the corresponding server info associated with it - // in |quic_server_info_map_|. If |canonical_server_info_map_| doesn't - // have an entry associated with |server|, the method will add one. - void UpdateCanonicalServerInfoMap(const quic::QuicServerId& server); - - const base::TickClock* tick_clock_; // Unowned - base::Clock* clock_; // Unowned - - SpdyServersMap spdy_servers_map_; - Http11ServerHostPortSet http11_servers_; - - AlternativeServiceMap alternative_service_map_; - - BrokenAlternativeServices broken_alternative_services_; - - IPAddress last_quic_address_; - ServerNetworkStatsMap server_network_stats_map_; - // Contains a map of servers which could share the same alternate protocol. - // Map from a Canonical scheme/host/port (host is some postfix of host names) - // to an actual origin, which has a plausible alternate protocol mapping. - CanonicalAltSvcMap canonical_alt_svc_map_; - - // Contains list of suffixes (for example ".c.youtube.com", - // ".googlevideo.com", ".googleusercontent.com") of canonical hostnames. - const CanonicalSuffixList canonical_suffixes_; - - QuicServerInfoMap quic_server_info_map_; - - // Maps canonical suffixes to host names that have the same canonical suffix - // and have a corresponding entry in |quic_server_info_map_|. The map can be - // used to quickly look for server info for hosts that share the same - // canonical suffix but don't have exact match in |quic_server_info_map_|. The - // map exists solely to improve the search performance. It only contains - // derived data that can be recalculated by traversing - // |quic_server_info_map_|. - CanonicalServerInfoMap canonical_server_info_map_; - - size_t max_server_configs_stored_in_properties_; - - THREAD_CHECKER(thread_checker_); - - DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesImpl); -}; - -} // namespace net - -#endif // NET_HTTP_HTTP_SERVER_PROPERTIES_IMPL_H_ diff --git a/chromium/net/http/http_server_properties_manager.cc b/chromium/net/http/http_server_properties_manager.cc index 8cb7cd9d563..33c8e5aebd2 100644 --- a/chromium/net/http/http_server_properties_manager.cc +++ b/chromium/net/http/http_server_properties_manager.cc @@ -7,31 +7,26 @@ #include <utility> #include "base/bind.h" +#include "base/feature_list.h" #include "base/metrics/histogram_macros.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" +#include "base/time/tick_clock.h" #include "base/values.h" +#include "net/base/features.h" #include "net/base/host_port_pair.h" #include "net/base/ip_address.h" #include "net/base/port_util.h" #include "net/base/privacy_mode.h" +#include "net/http/http_server_properties.h" #include "net/third_party/quiche/src/quic/platform/api/quic_hostname_utils.h" #include "url/gurl.h" +#include "url/scheme_host_port.h" namespace net { namespace { -// Time to wait before starting an update the http_server_properties_impl_ cache -// from preferences. Scheduling another update during this period will be a -// no-op. -constexpr base::TimeDelta kUpdateCacheDelay = base::TimeDelta::FromSeconds(1); - -// Time to wait before starting an update the preferences from the -// http_server_properties_impl_ cache. Scheduling another update during this -// period will be a no-op. -constexpr base::TimeDelta kUpdatePrefsDelay = base::TimeDelta::FromSeconds(60); - // "version" 0 indicates, http_server_properties doesn't have "version" // property. const int kMissingVersion = 0; @@ -42,6 +37,8 @@ const int kVersionNumber = 5; // Persist at most 200 currently-broken alternative services to disk. const int kMaxBrokenAlternativeServicesToPersist = 200; +const char kServerKey[] = "server"; +const char kNetworkIsolationKey[] = "isolation"; const char kVersionKey[] = "version"; const char kServersKey[] = "servers"; const char kSupportsSpdyKey[] = "supports_spdy"; @@ -62,6 +59,49 @@ const char kBrokenAlternativeServicesKey[] = "broken_alternative_services"; const char kBrokenUntilKey[] = "broken_until"; const char kBrokenCountKey[] = "broken_count"; +// Utility method to return only those AlternativeServiceInfos that should be +// persisted to disk. In particular, removes expired and invalid alternative +// services. Also checks if an alternative service for the same canonical suffix +// has already been saved, and if so, returns an empty list. +AlternativeServiceInfoVector GetAlternativeServiceToPersist( + const base::Optional<AlternativeServiceInfoVector>& alternative_services, + const HttpServerProperties::ServerInfoMapKey& server_info_key, + base::Time now, + const HttpServerPropertiesManager::GetCannonicalSuffix& + get_canonical_suffix, + std::set<std::pair<std::string, NetworkIsolationKey>>* + persisted_canonical_suffix_set) { + if (!alternative_services) + return AlternativeServiceInfoVector(); + // Separate out valid, non-expired AlternativeServiceInfo entries. + AlternativeServiceInfoVector notbroken_alternative_service_info_vector; + for (const auto& alternative_service_info : alternative_services.value()) { + if (alternative_service_info.expiration() < now || + !IsAlternateProtocolValid( + alternative_service_info.alternative_service().protocol)) { + continue; + } + notbroken_alternative_service_info_vector.push_back( + alternative_service_info); + } + if (notbroken_alternative_service_info_vector.empty()) + return notbroken_alternative_service_info_vector; + const std::string* canonical_suffix = + get_canonical_suffix.Run(server_info_key.server.host()); + if (canonical_suffix) { + // Don't save if have already saved information associated with the same + // canonical suffix. + std::pair<std::string, NetworkIsolationKey> index( + *canonical_suffix, server_info_key.network_isolation_key); + if (persisted_canonical_suffix_set->find(index) != + persisted_canonical_suffix_set->end()) { + return AlternativeServiceInfoVector(); + } + persisted_canonical_suffix_set->emplace(std::move(index)); + } + return notbroken_alternative_service_info_vector; +} + void AddAlternativeServiceFieldsToDictionaryValue( const AlternativeService& alternative_service, base::DictionaryValue* dict) { @@ -73,15 +113,6 @@ void AddAlternativeServiceFieldsToDictionaryValue( NextProtoToString(alternative_service.protocol)); } -// A local or temporary data structure to hold preferences for a server. -// This is used only in UpdatePrefs. -struct ServerPref { - bool supports_spdy = false; - AlternativeServiceInfoVector alternative_service_info_vector; - bool server_network_stats_valid = false; - ServerNetworkStats server_network_stats; -}; - quic::QuicServerId QuicServerIdFromString(const std::string& str) { GURL url(str); if (!url.is_valid()) { @@ -105,342 +136,46 @@ std::string QuicServerIdToString(const quic::QuicServerId& server_id) { //////////////////////////////////////////////////////////////////////////////// // HttpServerPropertiesManager -HttpServerPropertiesManager::PrefDelegate::~PrefDelegate() = default; - HttpServerPropertiesManager::HttpServerPropertiesManager( - std::unique_ptr<PrefDelegate> pref_delegate, + std::unique_ptr<HttpServerProperties::PrefDelegate> pref_delegate, + OnPrefsLoadedCallback on_prefs_loaded_callback, + size_t max_server_configs_stored_in_properties, NetLog* net_log, const base::TickClock* clock) : pref_delegate_(std::move(pref_delegate)), - clock_(clock ? clock : base::DefaultTickClock::GetInstance()), + on_prefs_loaded_callback_(std::move(on_prefs_loaded_callback)), + max_server_configs_stored_in_properties_( + max_server_configs_stored_in_properties), + clock_(clock), net_log_( NetLogWithSource::Make(net_log, NetLogSourceType::HTTP_SERVER_PROPERTIES)) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(pref_delegate_); + DCHECK(on_prefs_loaded_callback_); DCHECK(clock_); - pref_delegate_->StartListeningForUpdates(base::BindRepeating( - &HttpServerPropertiesManager::OnHttpServerPropertiesChanged, - base::Unretained(this))); + pref_delegate_->WaitForPrefLoad( + base::BindOnce(&HttpServerPropertiesManager::OnHttpServerPropertiesLoaded, + pref_load_weak_ptr_factory_.GetWeakPtr())); net_log_.BeginEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION); - - http_server_properties_impl_.reset( - new HttpServerPropertiesImpl(clock_, nullptr)); } HttpServerPropertiesManager::~HttpServerPropertiesManager() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Flush settings on destruction. - UpdatePrefsFromCache(base::OnceClosure()); -} - -void HttpServerPropertiesManager::Clear(base::OnceClosure callback) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - http_server_properties_impl_->Clear(base::OnceClosure()); - UpdatePrefsFromCache(std::move(callback)); -} - -bool HttpServerPropertiesManager::SupportsRequestPriority( - const url::SchemeHostPort& server) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->SupportsRequestPriority(server); -} - -bool HttpServerPropertiesManager::GetSupportsSpdy( - const url::SchemeHostPort& server) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->GetSupportsSpdy(server); -} - -void HttpServerPropertiesManager::SetSupportsSpdy( - const url::SchemeHostPort& server, - bool support_spdy) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - bool old_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server); - http_server_properties_impl_->SetSupportsSpdy(server, support_spdy); - bool new_support_spdy = http_server_properties_impl_->GetSupportsSpdy(server); - if (old_support_spdy != new_support_spdy) - ScheduleUpdatePrefs(); -} - -bool HttpServerPropertiesManager::RequiresHTTP11(const HostPortPair& server) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->RequiresHTTP11(server); -} - -void HttpServerPropertiesManager::SetHTTP11Required( - const HostPortPair& server) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - http_server_properties_impl_->SetHTTP11Required(server); - ScheduleUpdatePrefs(); -} - -void HttpServerPropertiesManager::MaybeForceHTTP11(const HostPortPair& server, - SSLConfig* ssl_config) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - http_server_properties_impl_->MaybeForceHTTP11(server, ssl_config); -} - -AlternativeServiceInfoVector -HttpServerPropertiesManager::GetAlternativeServiceInfos( - const url::SchemeHostPort& origin) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->GetAlternativeServiceInfos(origin); -} - -bool HttpServerPropertiesManager::SetHttp2AlternativeService( - const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - const bool changed = http_server_properties_impl_->SetHttp2AlternativeService( - origin, alternative_service, expiration); - if (changed) { - ScheduleUpdatePrefs(); - } - return changed; -} - -bool HttpServerPropertiesManager::SetQuicAlternativeService( - const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - const bool changed = http_server_properties_impl_->SetQuicAlternativeService( - origin, alternative_service, expiration, advertised_versions); - if (changed) { - ScheduleUpdatePrefs(); - } - return changed; -} - -bool HttpServerPropertiesManager::SetAlternativeServices( - const url::SchemeHostPort& origin, - const AlternativeServiceInfoVector& alternative_service_info_vector) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - const bool changed = http_server_properties_impl_->SetAlternativeServices( - origin, alternative_service_info_vector); - if (changed) { - ScheduleUpdatePrefs(); - } - return changed; -} - -void HttpServerPropertiesManager::MarkAlternativeServiceBroken( - const AlternativeService& alternative_service) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - http_server_properties_impl_->MarkAlternativeServiceBroken( - alternative_service); - ScheduleUpdatePrefs(); -} - -void HttpServerPropertiesManager:: - MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - const AlternativeService& alternative_service) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - http_server_properties_impl_ - ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - alternative_service); - ScheduleUpdatePrefs(); -} - -void HttpServerPropertiesManager::MarkAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - http_server_properties_impl_->MarkAlternativeServiceRecentlyBroken( - alternative_service); - ScheduleUpdatePrefs(); -} - -bool HttpServerPropertiesManager::IsAlternativeServiceBroken( - const AlternativeService& alternative_service) const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->IsAlternativeServiceBroken( - alternative_service); -} - -bool HttpServerPropertiesManager::WasAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->WasAlternativeServiceRecentlyBroken( - alternative_service); -} - -void HttpServerPropertiesManager::ConfirmAlternativeService( - const AlternativeService& alternative_service) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - bool old_value = http_server_properties_impl_->IsAlternativeServiceBroken( - alternative_service); - http_server_properties_impl_->ConfirmAlternativeService(alternative_service); - bool new_value = http_server_properties_impl_->IsAlternativeServiceBroken( - alternative_service); - // For persisting, we only care about the value returned by - // IsAlternativeServiceBroken. If that value changes, then call persist. - if (old_value != new_value) - ScheduleUpdatePrefs(); -} - -bool HttpServerPropertiesManager::OnDefaultNetworkChanged() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - bool changed = http_server_properties_impl_->OnDefaultNetworkChanged(); - if (changed) - ScheduleUpdatePrefs(); - return changed; -} - -const AlternativeServiceMap& -HttpServerPropertiesManager::alternative_service_map() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->alternative_service_map(); -} - -std::unique_ptr<base::Value> -HttpServerPropertiesManager::GetAlternativeServiceInfoAsValue() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->GetAlternativeServiceInfoAsValue(); -} - -bool HttpServerPropertiesManager::GetSupportsQuic( - IPAddress* last_address) const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->GetSupportsQuic(last_address); -} - -void HttpServerPropertiesManager::SetSupportsQuic(bool used_quic, - const IPAddress& address) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - IPAddress old_last_quic_addr; - http_server_properties_impl_->GetSupportsQuic(&old_last_quic_addr); - http_server_properties_impl_->SetSupportsQuic(used_quic, address); - IPAddress new_last_quic_addr; - http_server_properties_impl_->GetSupportsQuic(&new_last_quic_addr); - if (old_last_quic_addr != new_last_quic_addr) - ScheduleUpdatePrefs(); -} - -void HttpServerPropertiesManager::SetServerNetworkStats( - const url::SchemeHostPort& server, - ServerNetworkStats stats) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - ServerNetworkStats old_stats; - const ServerNetworkStats* old_stats_ptr = - http_server_properties_impl_->GetServerNetworkStats(server); - if (http_server_properties_impl_->GetServerNetworkStats(server)) - old_stats = *old_stats_ptr; - http_server_properties_impl_->SetServerNetworkStats(server, stats); - ServerNetworkStats new_stats = - *(http_server_properties_impl_->GetServerNetworkStats(server)); - if (old_stats != new_stats) - ScheduleUpdatePrefs(); -} - -void HttpServerPropertiesManager::ClearServerNetworkStats( - const url::SchemeHostPort& server) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - bool need_update = - http_server_properties_impl_->GetServerNetworkStats(server) != nullptr; - http_server_properties_impl_->ClearServerNetworkStats(server); - if (need_update) - ScheduleUpdatePrefs(); -} - -const ServerNetworkStats* HttpServerPropertiesManager::GetServerNetworkStats( - const url::SchemeHostPort& server) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->GetServerNetworkStats(server); -} - -const ServerNetworkStatsMap& -HttpServerPropertiesManager::server_network_stats_map() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->server_network_stats_map(); -} - -bool HttpServerPropertiesManager::SetQuicServerInfo( - const quic::QuicServerId& server_id, - const std::string& server_info) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - bool changed = - http_server_properties_impl_->SetQuicServerInfo(server_id, server_info); - if (changed) - ScheduleUpdatePrefs(); - return changed; -} - -const std::string* HttpServerPropertiesManager::GetQuicServerInfo( - const quic::QuicServerId& server_id) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->GetQuicServerInfo(server_id); -} - -const QuicServerInfoMap& HttpServerPropertiesManager::quic_server_info_map() - const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->quic_server_info_map(); -} - -size_t HttpServerPropertiesManager::max_server_configs_stored_in_properties() - const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_ - ->max_server_configs_stored_in_properties(); -} - -void HttpServerPropertiesManager::SetMaxServerConfigsStoredInProperties( - size_t max_server_configs_stored_in_properties) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return http_server_properties_impl_->SetMaxServerConfigsStoredInProperties( - max_server_configs_stored_in_properties); } -bool HttpServerPropertiesManager::IsInitialized() const { +void HttpServerPropertiesManager::ReadPrefs( + std::unique_ptr<HttpServerProperties::ServerInfoMap>* server_info_map, + IPAddress* last_quic_address, + std::unique_ptr<QuicServerInfoMap>* quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList>* + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices>* + recently_broken_alternative_services) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return is_initialized_; -} - -// static -base::TimeDelta HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() { - return kUpdateCacheDelay; -} - -// static -base::TimeDelta HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() { - return kUpdatePrefsDelay; -} - -void HttpServerPropertiesManager::ScheduleUpdateCacheForTesting() { - ScheduleUpdateCache(); -} - -void HttpServerPropertiesManager::ScheduleUpdateCache() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Do not schedule a new update if there is already one scheduled. - if (pref_cache_update_timer_.IsRunning()) - return; - - if (!is_initialized_) { - UpdateCacheFromPrefs(); - return; - } - - pref_cache_update_timer_.Start( - FROM_HERE, kUpdateCacheDelay, this, - &HttpServerPropertiesManager::UpdateCacheFromPrefs); -} - -void HttpServerPropertiesManager::UpdateCacheFromPrefs() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - if (!is_initialized_) { - net_log_.EndEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION); - is_initialized_ = true; - } + net_log_.EndEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION); const base::DictionaryValue* http_server_properties_dict = pref_delegate_->GetServerProperties(); @@ -448,7 +183,6 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() { if (!http_server_properties_dict) return; - bool detected_corrupted_prefs = false; net_log_.AddEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_UPDATE_CACHE, [&] { return http_server_properties_dict->Clone(); }); int version_number = kMissingVersion; @@ -460,7 +194,6 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() { return; } - const base::DictionaryValue* servers_dict = nullptr; const base::ListValue* servers_list = nullptr; // For Version 5, data is stored in the following format. // |servers| are saved in MRU order. |servers| are in the format flattened @@ -481,54 +214,42 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() { return; } - std::unique_ptr<IPAddress> addr = std::make_unique<IPAddress>(); - ReadSupportsQuic(*http_server_properties_dict, addr.get()); + ReadSupportsQuic(*http_server_properties_dict, last_quic_address); - // String is "scheme://host:port" tuple of spdy server. - std::unique_ptr<SpdyServersMap> spdy_servers_map = - std::make_unique<SpdyServersMap>(); - std::unique_ptr<AlternativeServiceMap> alternative_service_map = - std::make_unique<AlternativeServiceMap>(); - std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map = - std::make_unique<ServerNetworkStatsMap>(); - std::unique_ptr<QuicServerInfoMap> quic_server_info_map = - std::make_unique<QuicServerInfoMap>( - max_server_configs_stored_in_properties()); + *server_info_map = std::make_unique<HttpServerProperties::ServerInfoMap>(); + *quic_server_info_map = std::make_unique<QuicServerInfoMap>( + max_server_configs_stored_in_properties_); + + bool use_network_isolation_key = base::FeatureList::IsEnabled( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); // Iterate servers list in reverse MRU order so that entries are inserted // into |spdy_servers_map|, |alternative_service_map|, and // |server_network_stats_map| from oldest to newest. + const base::DictionaryValue* server_dict = nullptr; for (auto it = servers_list->end(); it != servers_list->begin();) { --it; - if (!it->GetAsDictionary(&servers_dict)) { + if (!it->GetAsDictionary(&server_dict)) { DVLOG(1) << "Malformed http_server_properties for servers dictionary."; - detected_corrupted_prefs = true; continue; } - if (!AddServersData(*servers_dict, spdy_servers_map.get(), - alternative_service_map.get(), - server_network_stats_map.get())) { - detected_corrupted_prefs = true; - } + AddServerData(*server_dict, server_info_map->get(), + use_network_isolation_key); } - if (!AddToQuicServerInfoMap(*http_server_properties_dict, - quic_server_info_map.get())) { - detected_corrupted_prefs = true; - } + AddToQuicServerInfoMap(*http_server_properties_dict, + quic_server_info_map->get()); // Read list containing broken and recently-broken alternative services, if // it exists. - std::unique_ptr<BrokenAlternativeServiceList> broken_alternative_service_list; - std::unique_ptr<RecentlyBrokenAlternativeServices> - recently_broken_alternative_services; const base::ListValue* broken_alt_svc_list; if (http_server_properties_dict->GetListWithoutPathExpansion( kBrokenAlternativeServicesKey, &broken_alt_svc_list)) { - broken_alternative_service_list = + *broken_alternative_service_list = std::make_unique<BrokenAlternativeServiceList>(); - recently_broken_alternative_services = - std::make_unique<RecentlyBrokenAlternativeServices>(); + *recently_broken_alternative_services = + std::make_unique<RecentlyBrokenAlternativeServices>( + kMaxRecentlyBrokenAlternativeServiceEntries); // Iterate list in reverse-MRU order for (auto it = broken_alt_svc_list->end(); @@ -537,60 +258,34 @@ void HttpServerPropertiesManager::UpdateCacheFromPrefs() { const base::DictionaryValue* entry_dict; if (!it->GetAsDictionary(&entry_dict)) { DVLOG(1) << "Malformed broken alterantive service entry."; - detected_corrupted_prefs = true; - continue; - } - if (!AddToBrokenAlternativeServices( - *entry_dict, broken_alternative_service_list.get(), - recently_broken_alternative_services.get())) { - detected_corrupted_prefs = true; continue; } + AddToBrokenAlternativeServices( + *entry_dict, broken_alternative_service_list->get(), + recently_broken_alternative_services->get()); } } // Set the properties loaded from prefs on |http_server_properties_impl_|. - UMA_HISTOGRAM_COUNTS_1M("Net.CountOfSpdyServers", spdy_servers_map->size()); - http_server_properties_impl_->SetSpdyServers(std::move(spdy_servers_map)); - - // Update the cached data and use the new alternative service list from - // preferences. - UMA_HISTOGRAM_COUNTS_1M("Net.CountOfAlternateProtocolServers", - alternative_service_map->size()); - http_server_properties_impl_->SetAlternativeServiceServers( - std::move(alternative_service_map)); - - http_server_properties_impl_->SetSupportsQuic(*addr); - - http_server_properties_impl_->SetServerNetworkStats( - std::move(server_network_stats_map)); + // TODO(mmenke): Rename this once more information is stored in this map. + UMA_HISTOGRAM_COUNTS_1M("Net.HttpServerProperties.CountOfServers", + (*server_info_map)->size()); UMA_HISTOGRAM_COUNTS_1000("Net.CountOfQuicServerInfos", - quic_server_info_map->size()); - - http_server_properties_impl_->SetQuicServerInfoMap( - std::move(quic_server_info_map)); + (*quic_server_info_map)->size()); - if (recently_broken_alternative_services) { - DCHECK(broken_alternative_service_list); + if (*recently_broken_alternative_services) { + DCHECK(*broken_alternative_service_list); UMA_HISTOGRAM_COUNTS_1000("Net.CountOfBrokenAlternativeServices", - broken_alternative_service_list->size()); + (*broken_alternative_service_list)->size()); UMA_HISTOGRAM_COUNTS_1000("Net.CountOfRecentlyBrokenAlternativeServices", - recently_broken_alternative_services->size()); - - http_server_properties_impl_->SetBrokenAndRecentlyBrokenAlternativeServices( - std::move(broken_alternative_service_list), - std::move(recently_broken_alternative_services)); + (*recently_broken_alternative_services)->size()); } - - // Update the prefs with what we have read (delete all corrupted prefs). - if (detected_corrupted_prefs) - ScheduleUpdatePrefs(); } -bool HttpServerPropertiesManager::AddToBrokenAlternativeServices( +void HttpServerPropertiesManager::AddToBrokenAlternativeServices( const base::DictionaryValue& broken_alt_svc_entry_dict, BrokenAlternativeServiceList* broken_alternative_service_list, RecentlyBrokenAlternativeServices* recently_broken_alternative_services) { @@ -598,7 +293,7 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices( if (!ParseAlternativeServiceDict(broken_alt_svc_entry_dict, false, "broken alternative services", &alt_service)) { - return false; + return; } // Each entry must contain either broken-count and/or broken-until fields. @@ -612,11 +307,11 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices( kBrokenCountKey, &broken_count)) { DVLOG(1) << "Recently broken alternative service has malformed " << "broken-count."; - return false; + return; } if (broken_count < 0) { DVLOG(1) << "Broken alternative service has negative broken-count."; - return false; + return; } recently_broken_alternative_services->Put(alt_service, broken_count); contains_broken_count_or_broken_until = true; @@ -632,7 +327,7 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices( !base::StringToInt64(expiration_string, &expiration_int64)) { DVLOG(1) << "Broken alternative service has malformed broken-until " << "string."; - return false; + return; } time_t expiration_time_t = static_cast<time_t>(expiration_int64); @@ -648,49 +343,50 @@ bool HttpServerPropertiesManager::AddToBrokenAlternativeServices( if (!contains_broken_count_or_broken_until) { DVLOG(1) << "Broken alternative service has neither broken-count nor " << "broken-until specified."; - return false; } - - return true; } -bool HttpServerPropertiesManager::AddServersData( - const base::DictionaryValue& servers_dict, - SpdyServersMap* spdy_servers_map, - AlternativeServiceMap* alternative_service_map, - ServerNetworkStatsMap* network_stats_map) { - for (base::DictionaryValue::Iterator it(servers_dict); !it.IsAtEnd(); - it.Advance()) { - // Get server's scheme/host/pair. - const std::string& server_str = it.key(); - std::string spdy_server_url = server_str; - url::SchemeHostPort spdy_server((GURL(spdy_server_url))); - if (spdy_server.host().empty()) { - DVLOG(1) << "Malformed http_server_properties for server: " << server_str; - return false; - } +void HttpServerPropertiesManager::AddServerData( + const base::DictionaryValue& server_dict, + HttpServerProperties::ServerInfoMap* server_info_map, + bool use_network_isolation_key) { + // Get server's scheme/host/pair. + const std::string* server_str = server_dict.FindStringKey(kServerKey); + const base::Value* network_isolation_key_value = + server_dict.FindKey(kNetworkIsolationKey); + NetworkIsolationKey network_isolation_key; + // Can't load entry if server name missing, or if the network isolation key is + // missing or invalid. + if (!server_str || !network_isolation_key_value || + !NetworkIsolationKey::FromValue(*network_isolation_key_value, + &network_isolation_key)) { + return; + } - const base::DictionaryValue* server_pref_dict = nullptr; - if (!it.value().GetAsDictionary(&server_pref_dict)) { - DVLOG(1) << "Malformed http_server_properties server: " << server_str; - return false; - } + // If the entry includes a non-empty NetworkIsolationKey, but using a network + // isolation key is currently disabled, throw away the entry. + if (!network_isolation_key.IsEmpty() && !use_network_isolation_key) + return; - // Get if server supports Spdy. - bool supports_spdy = false; - if (server_pref_dict->GetBoolean(kSupportsSpdyKey, &supports_spdy) && - supports_spdy) { - spdy_servers_map->Put(spdy_server.Serialize(), supports_spdy); - } + url::SchemeHostPort spdy_server((GURL(*server_str))); + if (spdy_server.host().empty()) { + DVLOG(1) << "Malformed http_server_properties for server: " << server_str; + return; + } - if (!AddToAlternativeServiceMap(spdy_server, *server_pref_dict, - alternative_service_map) || - !AddToNetworkStatsMap(spdy_server, *server_pref_dict, - network_stats_map)) { - return false; - } + HttpServerProperties::ServerInfo server_info; + + server_info.supports_spdy = server_dict.FindBoolKey(kSupportsSpdyKey); + + if (ParseAlternativeServiceInfo(spdy_server, server_dict, &server_info)) + ParseNetworkStats(spdy_server, server_dict, &server_info); + + if (!server_info.empty()) { + server_info_map->Put( + HttpServerProperties::ServerInfoMapKey( + spdy_server, network_isolation_key, use_network_isolation_key), + std::move(server_info)); } - return true; } bool HttpServerPropertiesManager::ParseAlternativeServiceDict( @@ -801,12 +497,11 @@ bool HttpServerPropertiesManager::ParseAlternativeServiceInfoDictOfServer( return true; } -bool HttpServerPropertiesManager::AddToAlternativeServiceMap( +bool HttpServerPropertiesManager::ParseAlternativeServiceInfo( const url::SchemeHostPort& server, const base::DictionaryValue& server_pref_dict, - AlternativeServiceMap* alternative_service_map) { - DCHECK(alternative_service_map->Peek(server) == - alternative_service_map->end()); + HttpServerProperties::ServerInfo* server_info) { + DCHECK(!server_info->alternative_services.has_value()); const base::ListValue* alternative_service_list; if (!server_pref_dict.GetListWithoutPathExpansion( kAlternativeServiceKey, &alternative_service_list)) { @@ -837,73 +532,69 @@ bool HttpServerPropertiesManager::AddToAlternativeServiceMap( return false; } - alternative_service_map->Put(server, alternative_service_info_vector); + server_info->alternative_services = alternative_service_info_vector; return true; } -bool HttpServerPropertiesManager::ReadSupportsQuic( +void HttpServerPropertiesManager::ReadSupportsQuic( const base::DictionaryValue& http_server_properties_dict, IPAddress* last_quic_address) { const base::DictionaryValue* supports_quic_dict = nullptr; if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( kSupportsQuicKey, &supports_quic_dict)) { - return true; + return; } bool used_quic = false; if (!supports_quic_dict->GetBooleanWithoutPathExpansion(kUsedQuicKey, &used_quic)) { DVLOG(1) << "Malformed SupportsQuic"; - return false; + return; } if (!used_quic) - return false; + return; std::string address; if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey, &address) || !last_quic_address->AssignFromIPLiteral(address)) { DVLOG(1) << "Malformed SupportsQuic"; - return false; } - return true; } -bool HttpServerPropertiesManager::AddToNetworkStatsMap( +void HttpServerPropertiesManager::ParseNetworkStats( const url::SchemeHostPort& server, const base::DictionaryValue& server_pref_dict, - ServerNetworkStatsMap* network_stats_map) { - DCHECK(network_stats_map->Peek(server) == network_stats_map->end()); + HttpServerProperties::ServerInfo* server_info) { + DCHECK(!server_info->server_network_stats.has_value()); const base::DictionaryValue* server_network_stats_dict = nullptr; if (!server_pref_dict.GetDictionaryWithoutPathExpansion( kNetworkStatsKey, &server_network_stats_dict)) { - return true; + return; } int srtt; if (!server_network_stats_dict->GetIntegerWithoutPathExpansion(kSrttKey, &srtt)) { DVLOG(1) << "Malformed ServerNetworkStats for server: " << server.Serialize(); - return false; + return; } ServerNetworkStats server_network_stats; server_network_stats.srtt = base::TimeDelta::FromMicroseconds(srtt); // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist // bandwidth_estimate. - network_stats_map->Put(server, server_network_stats); - return true; + server_info->server_network_stats = server_network_stats; } -bool HttpServerPropertiesManager::AddToQuicServerInfoMap( +void HttpServerPropertiesManager::AddToQuicServerInfoMap( const base::DictionaryValue& http_server_properties_dict, QuicServerInfoMap* quic_server_info_map) { const base::DictionaryValue* quic_servers_dict = nullptr; if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion( kQuicServers, &quic_servers_dict)) { DVLOG(1) << "Malformed http_server_properties for quic_servers."; - return true; + return; } - bool detected_corrupted_prefs = false; for (base::DictionaryValue::Iterator it(*quic_servers_dict); !it.IsAtEnd(); it.Advance()) { // Get quic_server_id. @@ -914,7 +605,6 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap( if (quic_server_id.host().empty()) { DVLOG(1) << "Malformed http_server_properties for quic server: " << quic_server_id_str; - detected_corrupted_prefs = true; continue; } @@ -922,7 +612,6 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap( if (!it.value().GetAsDictionary(&quic_server_pref_dict)) { DVLOG(1) << "Malformed http_server_properties quic server dict: " << quic_server_id_str; - detected_corrupted_prefs = true; continue; } @@ -931,156 +620,90 @@ bool HttpServerPropertiesManager::AddToQuicServerInfoMap( kServerInfoKey, &quic_server_info)) { DVLOG(1) << "Malformed http_server_properties quic server info: " << quic_server_id_str; - detected_corrupted_prefs = true; continue; } quic_server_info_map->Put(quic_server_id, quic_server_info); } - return !detected_corrupted_prefs; } -void HttpServerPropertiesManager::ScheduleUpdatePrefs() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Do not schedule a new update if there is already one scheduled. - if (network_prefs_update_timer_.IsRunning()) - return; - - network_prefs_update_timer_.Start( - FROM_HERE, kUpdatePrefsDelay, - base::Bind(&HttpServerPropertiesManager::UpdatePrefsFromCache, - base::Unretained(this), base::Passed(base::OnceClosure()))); -} - -void HttpServerPropertiesManager::UpdatePrefsFromCache( +void HttpServerPropertiesManager::WriteToPrefs( + const HttpServerProperties::ServerInfoMap& server_info_map, + const GetCannonicalSuffix& get_canonical_suffix, + const IPAddress& last_quic_address, + const QuicServerInfoMap& quic_server_info_map, + const BrokenAlternativeServiceList& broken_alternative_service_list, + const RecentlyBrokenAlternativeServices& + recently_broken_alternative_services, base::OnceClosure callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - typedef base::MRUCache<url::SchemeHostPort, ServerPref> ServerPrefMap; - ServerPrefMap server_pref_map(ServerPrefMap::NO_AUTO_EVICT); - - // Add SPDY servers to |server_pref_map|. - const SpdyServersMap& spdy_servers_map = - http_server_properties_impl_->spdy_servers_map(); - for (auto it = spdy_servers_map.rbegin(); it != spdy_servers_map.rend(); - ++it) { - // Only add servers that support SPDY. - if (!it->second) - continue; - - url::SchemeHostPort server(GURL(it->first)); - auto map_it = server_pref_map.Put(server, ServerPref()); - map_it->second.supports_spdy = true; - } + // If loading prefs hasn't completed, don't call it, since this will overwrite + // existing prefs. + on_prefs_loaded_callback_.Reset(); - // Add alternative service info to |server_pref_map|. - const AlternativeServiceMap& alternative_service_map = - http_server_properties_impl_->alternative_service_map(); - UMA_HISTOGRAM_COUNTS_1M("Net.CountOfAlternateProtocolServers.Memory", - alternative_service_map.size()); - typedef std::map<std::string, bool> CanonicalHostPersistedMap; - CanonicalHostPersistedMap persisted_map; + std::set<std::pair<std::string, NetworkIsolationKey>> + persisted_canonical_suffix_set; const base::Time now = base::Time::Now(); - for (auto it = alternative_service_map.rbegin(); - it != alternative_service_map.rend(); ++it) { - const url::SchemeHostPort& server = it->first; - AlternativeServiceInfoVector notbroken_alternative_service_info_vector; - for (const AlternativeServiceInfo& alternative_service_info : it->second) { - // Do not persist expired entries - if (alternative_service_info.expiration() < now) { - continue; - } - if (!IsAlternateProtocolValid( - alternative_service_info.alternative_service().protocol)) { - continue; - } - notbroken_alternative_service_info_vector.push_back( - alternative_service_info); - } - if (notbroken_alternative_service_info_vector.empty()) { - continue; - } - const std::string* canonical_suffix = - http_server_properties_impl_->GetCanonicalSuffix(server.host()); - if (canonical_suffix != nullptr) { - if (persisted_map.find(*canonical_suffix) != persisted_map.end()) - continue; - persisted_map[*canonical_suffix] = true; - } - - auto map_it = server_pref_map.Get(server); - if (map_it == server_pref_map.end()) - map_it = server_pref_map.Put(server, ServerPref()); - map_it->second.alternative_service_info_vector = - std::move(notbroken_alternative_service_info_vector); - } - - // Add server network stats to |server_pref_map|. - const ServerNetworkStatsMap& server_network_stats_map = - http_server_properties_impl_->server_network_stats_map(); - for (auto it = server_network_stats_map.rbegin(); - it != server_network_stats_map.rend(); ++it) { - const url::SchemeHostPort& server = it->first; - auto map_it = server_pref_map.Get(server); - if (map_it == server_pref_map.end()) - map_it = server_pref_map.Put(server, ServerPref()); - map_it->second.server_network_stats_valid = true; - map_it->second.server_network_stats = it->second; - } - base::DictionaryValue http_server_properties_dict; - // Convert |server_pref_map| to a DictionaryValue and add it to + // Convert |server_info_map| to a DictionaryValue and add it to // |http_server_properties_dict|. - auto servers_list = std::make_unique<base::ListValue>(); - for (ServerPrefMap::const_reverse_iterator map_it = server_pref_map.rbegin(); - map_it != server_pref_map.rend(); ++map_it) { - const url::SchemeHostPort server = map_it->first; - const ServerPref& server_pref = map_it->second; + base::Value servers_list(base::Value::Type::LIST); + for (auto map_it = server_info_map.rbegin(); map_it != server_info_map.rend(); + ++map_it) { + const HttpServerProperties::ServerInfoMapKey key = map_it->first; + const HttpServerProperties::ServerInfo& server_info = map_it->second; + + // If can't convert the NetworkIsolationKey to a value, don't save to disk. + // Generally happens because the key is for a unique origin. + base::Value network_isolation_key_value; + if (!key.network_isolation_key.ToValue(&network_isolation_key_value)) + continue; - auto servers_dict = std::make_unique<base::DictionaryValue>(); - auto server_pref_dict = std::make_unique<base::DictionaryValue>(); + base::DictionaryValue server_dict; - if (server_pref.supports_spdy) { - server_pref_dict->SetBoolean(kSupportsSpdyKey, server_pref.supports_spdy); - } - if (!server_pref.alternative_service_info_vector.empty()) { - SaveAlternativeServiceToServerPrefs( - server_pref.alternative_service_info_vector, server_pref_dict.get()); - } - if (server_pref.server_network_stats_valid) { - SaveNetworkStatsToServerPrefs(server_pref.server_network_stats, - server_pref_dict.get()); + bool supports_spdy = server_info.supports_spdy.value_or(false); + if (supports_spdy) + server_dict.SetBoolKey(kSupportsSpdyKey, supports_spdy); + + AlternativeServiceInfoVector alternative_services = + GetAlternativeServiceToPersist(server_info.alternative_services, key, + now, get_canonical_suffix, + &persisted_canonical_suffix_set); + if (!alternative_services.empty()) + SaveAlternativeServiceToServerPrefs(alternative_services, &server_dict); + + if (server_info.server_network_stats) { + SaveNetworkStatsToServerPrefs(*server_info.server_network_stats, + &server_dict); } - servers_dict->SetWithoutPathExpansion(server.Serialize(), - std::move(server_pref_dict)); - bool value = servers_list->AppendIfNotPresent(std::move(servers_dict)); - DCHECK(value); // Should never happen. + // Don't add empty entries. This can happen if, for example, all alternative + // services are empty, or |supports_spdy| is set to false, and all other + // fields are not set. + if (server_dict.DictEmpty()) + continue; + server_dict.SetStringKey(kServerKey, key.server.Serialize()); + server_dict.SetKey(kNetworkIsolationKey, + std::move(network_isolation_key_value)); + servers_list.GetList().emplace_back(std::move(server_dict)); } - http_server_properties_dict.SetWithoutPathExpansion(kServersKey, - std::move(servers_list)); + http_server_properties_dict.SetKey(kServersKey, std::move(servers_list)); http_server_properties_dict.SetInteger(kVersionKey, kVersionNumber); - IPAddress last_quic_addr; - if (http_server_properties_impl_->GetSupportsQuic(&last_quic_addr)) { - SaveSupportsQuicToPrefs(last_quic_addr, &http_server_properties_dict); - } + if (last_quic_address.IsValid()) + SaveSupportsQuicToPrefs(last_quic_address, &http_server_properties_dict); - SaveQuicServerInfoMapToServerPrefs( - http_server_properties_impl_->quic_server_info_map(), - &http_server_properties_dict); + SaveQuicServerInfoMapToServerPrefs(quic_server_info_map, + &http_server_properties_dict); SaveBrokenAlternativeServicesToPrefs( - http_server_properties_impl_->broken_alternative_service_list(), - kMaxBrokenAlternativeServicesToPersist, - http_server_properties_impl_->recently_broken_alternative_services(), - &http_server_properties_dict); + broken_alternative_service_list, kMaxBrokenAlternativeServicesToPersist, + recently_broken_alternative_services, &http_server_properties_dict); - setting_prefs_ = true; pref_delegate_->SetServerProperties(http_server_properties_dict, std::move(callback)); - setting_prefs_ = false; net_log_.AddEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_UPDATE_PREFS, [&] { return http_server_properties_dict.Clone(); }); @@ -1240,10 +863,29 @@ void HttpServerPropertiesManager::SaveBrokenAlternativeServicesToPrefs( kBrokenAlternativeServicesKey, std::move(json_list)); } -void HttpServerPropertiesManager::OnHttpServerPropertiesChanged() { +void HttpServerPropertiesManager::OnHttpServerPropertiesLoaded() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!setting_prefs_) - ScheduleUpdateCache(); + + // If prefs have already been written, nothing to do. + if (!on_prefs_loaded_callback_) + return; + + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map; + IPAddress last_quic_address; + std::unique_ptr<QuicServerInfoMap> quic_server_info_map; + std::unique_ptr<BrokenAlternativeServiceList> broken_alternative_service_list; + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services; + + ReadPrefs(&server_info_map, &last_quic_address, &quic_server_info_map, + &broken_alternative_service_list, + &recently_broken_alternative_services); + + std::move(on_prefs_loaded_callback_) + .Run(std::move(server_info_map), last_quic_address, + std::move(quic_server_info_map), + std::move(broken_alternative_service_list), + std::move(recently_broken_alternative_services)); } } // namespace net diff --git a/chromium/net/http/http_server_properties_manager.h b/chromium/net/http/http_server_properties_manager.h index 17d7d969455..73a3123658d 100644 --- a/chromium/net/http/http_server_properties_manager.h +++ b/chromium/net/http/http_server_properties_manager.h @@ -5,29 +5,24 @@ #ifndef NET_HTTP_HTTP_SERVER_PROPERTIES_MANAGER_H_ #define NET_HTTP_HTTP_SERVER_PROPERTIES_MANAGER_H_ -#include <stdint.h> - #include <memory> #include <string> -#include <vector> #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" -#include "base/time/default_tick_clock.h" -#include "base/time/time.h" -#include "base/timer/timer.h" #include "net/base/host_port_pair.h" #include "net/base/net_export.h" +#include "net/http/alternative_service.h" +#include "net/http/broken_alternative_services.h" #include "net/http/http_server_properties.h" -#include "net/http/http_server_properties_impl.h" #include "net/log/net_log_with_source.h" namespace base { class DictionaryValue; +class TickClock; } namespace net { @@ -37,150 +32,103 @@ class IPAddress; //////////////////////////////////////////////////////////////////////////////// // HttpServerPropertiesManager -// The manager for creating and updating an HttpServerProperties (for example it -// tracks if a server supports SPDY or not). -class NET_EXPORT HttpServerPropertiesManager : public HttpServerProperties { +// Class responsible for serializing/deserializing HttpServerProperties and +// reading from/writing to preferences. +class NET_EXPORT_PRIVATE HttpServerPropertiesManager { public: - // Provides an interface to interact with persistent preferences storage - // implemented by the embedder. The prefs are assumed not to have been loaded - // before HttpServerPropertiesManager construction. - class NET_EXPORT PrefDelegate { - public: - virtual ~PrefDelegate(); - - // Returns the branch of the preferences system for the server properties. - // Returns nullptr if the pref system has no data for the server properties. - virtual const base::DictionaryValue* GetServerProperties() const = 0; - - // Sets the server properties to the given value. If |callback| is - // non-empty, flushes data to persistent storage and invokes |callback| - // asynchronously when complete. - virtual void SetServerProperties(const base::DictionaryValue& value, - base::OnceClosure callback) = 0; - - // Starts listening for external storage changes. There will only be one - // callback active at a time. The first time the |callback| is invoked is - // expected to mean the initial pref store values have been loaded. - virtual void StartListeningForUpdates( - const base::RepeatingClosure& callback) = 0; - }; + // Called when prefs are loaded. If prefs completely failed to load, + // everything will be nullptr. Otherwise, everything will be populated, except + // |broken_alternative_service_list| and + // |recently_broken_alternative_services|, which may be null. + using OnPrefsLoadedCallback = base::OnceCallback<void( + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map, + const IPAddress& last_quic_address, + std::unique_ptr<QuicServerInfoMap> quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services)>; + + using GetCannonicalSuffix = + base::RepeatingCallback<const std::string*(const std::string& host)>; // Create an instance of the HttpServerPropertiesManager. // - // Server propertise will be loaded from |pref_delegate| the first time it - // notifies the HttpServerPropertiesManager of an update, indicating the prefs - // have been loaded from disk. + // |on_prefs_loaded_callback| will be invoked with values loaded from + // |prefs_delegate| once prefs have been loaded from disk. + // If WriteToPrefs() is invoked before this happens, + // |on_prefs_loaded_callback| will never be invoked, since the written prefs + // take precedence over the ones previously stored on disk. // // |clock| is used for setting expiration times and scheduling the - // expiration of broken alternative services. If null, the default clock will - // be used. - HttpServerPropertiesManager(std::unique_ptr<PrefDelegate> pref_delegate, - NetLog* net_log, - const base::TickClock* clock = nullptr); - - ~HttpServerPropertiesManager() override; - - // ---------------------------------- - // HttpServerProperties methods: - // ---------------------------------- - - void Clear(base::OnceClosure callback) override; - bool SupportsRequestPriority(const url::SchemeHostPort& server) override; - bool GetSupportsSpdy(const url::SchemeHostPort& server) override; - void SetSupportsSpdy(const url::SchemeHostPort& server, - bool support_spdy) override; - bool RequiresHTTP11(const HostPortPair& server) override; - void SetHTTP11Required(const HostPortPair& server) override; - void MaybeForceHTTP11(const HostPortPair& server, - SSLConfig* ssl_config) override; - AlternativeServiceInfoVector GetAlternativeServiceInfos( - const url::SchemeHostPort& origin) override; - bool SetHttp2AlternativeService(const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration) override; - bool SetQuicAlternativeService( - const url::SchemeHostPort& origin, - const AlternativeService& alternative_service, - base::Time expiration, - const quic::ParsedQuicVersionVector& advertised_versions) override; - bool SetAlternativeServices(const url::SchemeHostPort& origin, - const AlternativeServiceInfoVector& - alternative_service_info_vector) override; - void MarkAlternativeServiceBroken( - const AlternativeService& alternative_service) override; - void MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - const AlternativeService& alternative_service) override; - void MarkAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) override; - bool IsAlternativeServiceBroken( - const AlternativeService& alternative_service) const override; - bool WasAlternativeServiceRecentlyBroken( - const AlternativeService& alternative_service) override; - void ConfirmAlternativeService( - const AlternativeService& alternative_service) override; - bool OnDefaultNetworkChanged() override; - const AlternativeServiceMap& alternative_service_map() const override; - std::unique_ptr<base::Value> GetAlternativeServiceInfoAsValue() - const override; - bool GetSupportsQuic(IPAddress* last_address) const override; - void SetSupportsQuic(bool used_quic, const IPAddress& last_address) override; - void SetServerNetworkStats(const url::SchemeHostPort& server, - ServerNetworkStats stats) override; - void ClearServerNetworkStats(const url::SchemeHostPort& server) override; - const ServerNetworkStats* GetServerNetworkStats( - const url::SchemeHostPort& server) override; - const ServerNetworkStatsMap& server_network_stats_map() const override; - bool SetQuicServerInfo(const quic::QuicServerId& server_id, - const std::string& server_info) override; - const std::string* GetQuicServerInfo( - const quic::QuicServerId& server_id) override; - const QuicServerInfoMap& quic_server_info_map() const override; - size_t max_server_configs_stored_in_properties() const override; - void SetMaxServerConfigsStoredInProperties( - size_t max_server_configs_stored_in_properties) override; - bool IsInitialized() const override; - - static base::TimeDelta GetUpdateCacheDelayForTesting(); - static base::TimeDelta GetUpdatePrefsDelayForTesting(); - - void ScheduleUpdateCacheForTesting(); - - protected: - // These are used to delay updating of the cached data in - // |http_server_properties_impl_| while the preferences are changing, and - // execute only one update per simultaneous prefs changes. - void ScheduleUpdateCache(); - - // Update cached prefs in |http_server_properties_impl_| with data from - // preferences. - void UpdateCacheFromPrefs(); - - // These are used to delay updating the preferences when cached data in - // |http_server_properties_impl_| is changing, and execute only one update per - // simultaneous changes. - // |location| specifies where this method is called from. - void ScheduleUpdatePrefs(); - - // Update prefs::kHttpServerProperties in preferences with the cached data - // from |http_server_properties_impl_|. Invokes |callback| when changes have - // been committed, if non-null. - void UpdatePrefsFromCache(base::OnceClosure callback); + // expiration of broken alternative services, and must not be nullptr. + HttpServerPropertiesManager( + std::unique_ptr<HttpServerProperties::PrefDelegate> pref_delegate, + OnPrefsLoadedCallback on_prefs_loaded_callback, + size_t max_server_configs_stored_in_properties, + NetLog* net_log, + const base::TickClock* clock = nullptr); + + ~HttpServerPropertiesManager(); + + // Populates passed in objects with data from preferences. If pref data is not + // present, leaves all values alone. Otherwise, populates them all, with the + // possible exception of the two broken alt services lists. + // + // Corrupted data is ignored. + // + // TODO(mmenke): Consider always populating fields, unconditionally, for a + // simpler API. + void ReadPrefs( + std::unique_ptr<HttpServerProperties::ServerInfoMap>* server_info_map, + IPAddress* last_quic_address, + std::unique_ptr<QuicServerInfoMap>* quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList>* + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices>* + recently_broken_alternative_services); + + void set_max_server_configs_stored_in_properties( + size_t max_server_configs_stored_in_properties) { + max_server_configs_stored_in_properties_ = + max_server_configs_stored_in_properties; + } + + // Update preferences with caller-provided data. Invokes |callback| when + // changes have been committed, if non-null. + // + // If the OnPrefLoadCallback() passed to the constructor hasn't been invoked + // by the time this method is called, calling this will prevent it from ever + // being invoked, as this method will overwrite any previous preferences. + // + // Entries associated with NetworkIsolationKeys for opaque origins are not + // written to disk. + void WriteToPrefs( + const HttpServerProperties::ServerInfoMap& server_info_map, + const GetCannonicalSuffix& get_canonical_suffix, + const IPAddress& last_quic_address, + const QuicServerInfoMap& quic_server_info_map, + const BrokenAlternativeServiceList& broken_alternative_service_list, + const RecentlyBrokenAlternativeServices& + recently_broken_alternative_services, + base::OnceClosure callback); private: + // TODO(mmenke): Remove these friend methods, and make all methods static that + // can be. FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest, - AddToAlternativeServiceMap); + ParseAlternativeServiceInfo); FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref); FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins); FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService); - void OnHttpServerPropertiesChanged(); - bool AddServersData(const base::DictionaryValue& server_dict, - SpdyServersMap* spdy_servers_map, - AlternativeServiceMap* alternative_service_map, - ServerNetworkStatsMap* network_stats_map); + void AddServerData(const base::DictionaryValue& server_dict, + HttpServerProperties::ServerInfoMap* server_info_map, + bool use_network_isolation_key); + // Helper method used for parsing an alternative service from JSON. // |dict| is the JSON dictionary to be parsed. It should contain fields // corresponding to members of AlternativeService. @@ -190,26 +138,33 @@ class NET_EXPORT HttpServerPropertiesManager : public HttpServerProperties { // should describe what section of the JSON prefs is currently being parsed. // |alternative_service| is the output of parsing |dict|. // Return value is true if parsing is successful. - bool ParseAlternativeServiceDict(const base::DictionaryValue& dict, - bool host_optional, - const std::string& parsing_under, - AlternativeService* alternative_service); - bool ParseAlternativeServiceInfoDictOfServer( + static bool ParseAlternativeServiceDict( + const base::DictionaryValue& dict, + bool host_optional, + const std::string& parsing_under, + AlternativeService* alternative_service); + + static bool ParseAlternativeServiceInfoDictOfServer( const base::DictionaryValue& dict, const std::string& server_str, AlternativeServiceInfo* alternative_service_info); - bool AddToAlternativeServiceMap( + + // Attempts to populate |server_info|'s |alternative_service_info| field from + // |server_dict|. Returns true if the data was no corrupted (Lack of data is + // not considered corruption). + static bool ParseAlternativeServiceInfo( const url::SchemeHostPort& server, const base::DictionaryValue& server_dict, - AlternativeServiceMap* alternative_service_map); - bool ReadSupportsQuic(const base::DictionaryValue& server_dict, + HttpServerProperties::ServerInfo* server_info); + + void ReadSupportsQuic(const base::DictionaryValue& server_dict, IPAddress* last_quic_address); - bool AddToNetworkStatsMap(const url::SchemeHostPort& server, - const base::DictionaryValue& server_dict, - ServerNetworkStatsMap* network_stats_map); - bool AddToQuicServerInfoMap(const base::DictionaryValue& server_dict, + void ParseNetworkStats(const url::SchemeHostPort& server, + const base::DictionaryValue& server_dict, + HttpServerProperties::ServerInfo* server_info); + void AddToQuicServerInfoMap(const base::DictionaryValue& server_dict, QuicServerInfoMap* quic_server_info_map); - bool AddToBrokenAlternativeServices( + void AddToBrokenAlternativeServices( const base::DictionaryValue& broken_alt_svc_entry_dict, BrokenAlternativeServiceList* broken_alternative_service_list, RecentlyBrokenAlternativeServices* recently_broken_alternative_services); @@ -233,28 +188,23 @@ class NET_EXPORT HttpServerPropertiesManager : public HttpServerProperties { recently_broken_alternative_services, base::DictionaryValue* http_server_properties_dict); - // Used to post cache update tasks. - base::OneShotTimer pref_cache_update_timer_; - - std::unique_ptr<PrefDelegate> pref_delegate_; - // Set to true while modifying prefs, to avoid loading those prefs again as a - // result of them being changed by the changes just made by this class. - bool setting_prefs_ = false; + void OnHttpServerPropertiesLoaded(); - const base::TickClock* clock_; // Unowned + std::unique_ptr<HttpServerProperties::PrefDelegate> pref_delegate_; - // Set to true once the initial prefs have been loaded. - bool is_initialized_ = false; + OnPrefsLoadedCallback on_prefs_loaded_callback_; - // Used to post |prefs::kHttpServerProperties| pref update tasks. - base::OneShotTimer network_prefs_update_timer_; + size_t max_server_configs_stored_in_properties_; - std::unique_ptr<HttpServerPropertiesImpl> http_server_properties_impl_; + const base::TickClock* clock_; // Unowned const NetLogWithSource net_log_; SEQUENCE_CHECKER(sequence_checker_); + base::WeakPtrFactory<HttpServerPropertiesManager> pref_load_weak_ptr_factory_{ + this}; + DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManager); }; diff --git a/chromium/net/http/http_server_properties_manager_unittest.cc b/chromium/net/http/http_server_properties_manager_unittest.cc index 4921d2e610b..26dc69ca443 100644 --- a/chromium/net/http/http_server_properties_manager_unittest.cc +++ b/chromium/net/http/http_server_properties_manager_unittest.cc @@ -7,6 +7,7 @@ #include <utility> #include "base/bind.h" +#include "base/feature_list.h" #include "base/json/json_reader.h" #include "base/json/json_writer.h" #include "base/macros.h" @@ -14,11 +15,16 @@ #include "base/single_thread_task_runner.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" +#include "base/test/bind_test_util.h" +#include "base/test/scoped_feature_list.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/time/default_tick_clock.h" #include "base/values.h" +#include "net/base/features.h" #include "net/base/ip_address.h" #include "net/http/http_network_session.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/http/http_server_properties.h" +#include "net/test/test_with_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -34,37 +40,77 @@ using ::testing::Invoke; using ::testing::Mock; using ::testing::StrictMock; -class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate { +enum class NetworkIsolationKeyMode { + kDisabled, + kTopFrameOriginOnly, + kTopFrameOriginAndFrameOrigin, +}; + +const NetworkIsolationKeyMode kNetworkIsolationKeyModes[] = { + NetworkIsolationKeyMode::kDisabled, + NetworkIsolationKeyMode::kTopFrameOriginOnly, + NetworkIsolationKeyMode::kTopFrameOriginAndFrameOrigin, +}; + +std::unique_ptr<base::test::ScopedFeatureList> SetNetworkIsolationKeyMode( + NetworkIsolationKeyMode mode) { + auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); + switch (mode) { + case NetworkIsolationKeyMode::kDisabled: + feature_list->InitAndDisableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + break; + case NetworkIsolationKeyMode::kTopFrameOriginOnly: + feature_list->InitWithFeatures( + // enabled_features + {features::kPartitionHttpServerPropertiesByNetworkIsolationKey}, + // disabled_features + {features::kAppendFrameOriginToNetworkIsolationKey}); + break; + case NetworkIsolationKeyMode::kTopFrameOriginAndFrameOrigin: + feature_list->InitWithFeatures( + // enabled_features + {features::kPartitionHttpServerPropertiesByNetworkIsolationKey, + features::kAppendFrameOriginToNetworkIsolationKey}, + // disabled_features + {}); + break; + } + return feature_list; +} + +class MockPrefDelegate : public net::HttpServerProperties::PrefDelegate { public: MockPrefDelegate() = default; ~MockPrefDelegate() override = default; - // HttpServerPropertiesManager::PrefDelegate implementation. + // HttpServerProperties::PrefDelegate implementation. const base::DictionaryValue* GetServerProperties() const override { return &prefs_; } + void SetServerProperties(const base::DictionaryValue& value, base::OnceClosure callback) override { prefs_.Clear(); prefs_.MergeDictionary(&value); ++num_pref_updates_; if (!prefs_changed_callback_.is_null()) - prefs_changed_callback_.Run(); + std::move(prefs_changed_callback_).Run(); if (!extra_prefs_changed_callback_.is_null()) extra_prefs_changed_callback_.Run(); set_properties_callback_ = std::move(callback); } - void StartListeningForUpdates(const base::Closure& callback) override { + + void WaitForPrefLoad(base::OnceClosure callback) override { CHECK(prefs_changed_callback_.is_null()); - prefs_changed_callback_ = callback; + prefs_changed_callback_ = std::move(callback); } - void SetPrefs(const base::DictionaryValue& value) { - // prefs_ = value; + void InitializePrefs(const base::DictionaryValue& value) { + ASSERT_FALSE(prefs_changed_callback_.is_null()); prefs_.Clear(); prefs_.MergeDictionary(&value); - if (!prefs_changed_callback_.is_null()) - prefs_changed_callback_.Run(); + std::move(prefs_changed_callback_).Run(); } int GetAndClearNumPrefUpdates() { @@ -87,7 +133,7 @@ class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate { private: base::DictionaryValue prefs_; - base::Closure prefs_changed_callback_; + base::OnceClosure prefs_changed_callback_; base::Closure extra_prefs_changed_callback_; int num_pref_updates_ = 0; @@ -96,14 +142,86 @@ class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate { DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate); }; +// Converts |server_info_map| to a base::Value by running it through an +// HttpServerPropertiesManager. Other fields are left empty. +base::Value ServerInfoMapToValue( + const HttpServerProperties::ServerInfoMap& server_info_map) { + std::unique_ptr<MockPrefDelegate> pref_delegate = + std::make_unique<MockPrefDelegate>(); + MockPrefDelegate* unowned_pref_delegate = pref_delegate.get(); + // Callback that shouldn't be invoked - this method short-circuits loading + // prefs by calling HttpServerPropertiesManager::WriteToPrefs() before prefs + // are loaded. + HttpServerPropertiesManager::OnPrefsLoadedCallback on_prefs_loaded_callback = + base::BindOnce( + [](std::unique_ptr<HttpServerProperties::ServerInfoMap> + server_info_map, + const IPAddress& last_quic_address, + std::unique_ptr<QuicServerInfoMap> quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services) { ADD_FAILURE(); }); + HttpServerPropertiesManager manager( + std::move(pref_delegate), std::move(on_prefs_loaded_callback), + 10 /* max_server_configs_stored_in_properties */, nullptr /* net_log */, + base::DefaultTickClock::GetInstance()); + manager.WriteToPrefs( + server_info_map, HttpServerPropertiesManager::GetCannonicalSuffix(), + IPAddress() /* last_quic_address */, QuicServerInfoMap(10), + BrokenAlternativeServiceList(), RecentlyBrokenAlternativeServices(10), + base::OnceClosure()); + + return unowned_pref_delegate->GetServerProperties()->Clone(); +} + +// Does the inverse of ServerInfoMapToValue(). Ignores fields other than the +// ServerInfoMap. +std::unique_ptr<HttpServerProperties::ServerInfoMap> ValueToServerInfoMap( + const base::Value& value) { + const base::DictionaryValue* dictionary_value; + if (!value.GetAsDictionary(&dictionary_value)) + return nullptr; + + std::unique_ptr<MockPrefDelegate> pref_delegate = + std::make_unique<MockPrefDelegate>(); + MockPrefDelegate* unowned_pref_delegate = pref_delegate.get(); + + std::unique_ptr<HttpServerProperties::ServerInfoMap> out; + bool callback_invoked = false; + HttpServerPropertiesManager::OnPrefsLoadedCallback on_prefs_loaded_callback = + base::BindLambdaForTesting( + [&](std::unique_ptr<HttpServerProperties::ServerInfoMap> + server_info_map, + const IPAddress& last_quic_address, + std::unique_ptr<QuicServerInfoMap> quic_server_info_map, + std::unique_ptr<BrokenAlternativeServiceList> + broken_alternative_service_list, + std::unique_ptr<RecentlyBrokenAlternativeServices> + recently_broken_alternative_services) { + ASSERT_FALSE(callback_invoked); + callback_invoked = true; + out = std::move(server_info_map); + }); + + HttpServerPropertiesManager manager( + std::move(pref_delegate), std::move(on_prefs_loaded_callback), + 10 /* max_server_configs_stored_in_properties */, nullptr /* net_log */, + base::DefaultTickClock::GetInstance()); + + unowned_pref_delegate->InitializePrefs(*dictionary_value); + EXPECT_TRUE(callback_invoked); + return out; +} + } // namespace class HttpServerPropertiesManagerTest : public testing::Test, - public WithScopedTaskEnvironment { + public WithTaskEnvironment { protected: HttpServerPropertiesManagerTest() - : WithScopedTaskEnvironment( - base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {} + : WithTaskEnvironment( + base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} void SetUp() override { one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1); @@ -111,30 +229,53 @@ class HttpServerPropertiesManagerTest : public testing::Test, HttpNetworkSession::Params().quic_params.supported_versions; pref_delegate_ = new MockPrefDelegate; - http_server_props_manager_ = std::make_unique<HttpServerPropertiesManager>( + http_server_props_ = std::make_unique<HttpServerProperties>( base::WrapUnique(pref_delegate_), /*net_log=*/nullptr, GetMockTickClock()); - EXPECT_FALSE(http_server_props_manager_->IsInitialized()); - pref_delegate_->SetPrefs(base::DictionaryValue()); - EXPECT_TRUE(http_server_props_manager_->IsInitialized()); + EXPECT_FALSE(http_server_props_->IsInitialized()); EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); } + // Wrapper around |pref_delegate_|'s InitializePrefs() method that has a + // couple extra expectations about whether any tasks are posted, and if a pref + // update is queued. + // + // |expect_pref_update| should be true if a pref update is expected to be + // queued in response to the load. + void InitializePrefs( + const base::DictionaryValue& dict = base::DictionaryValue(), + bool expect_pref_update = false) { + EXPECT_FALSE(http_server_props_->IsInitialized()); + pref_delegate_->InitializePrefs(dict); + EXPECT_TRUE(http_server_props_->IsInitialized()); + if (!expect_pref_update) { + EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + } else { + EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + FastForwardUntilNoTasksRemain(); + EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); + } + } + void TearDown() override { // Run pending non-delayed tasks but don't FastForwardUntilNoTasksRemain() // as some delayed tasks may forever repost (e.g. because impl doesn't use a // mock clock and doesn't see timings as having expired, ref. - // HttpServerPropertiesImpl:: + // HttpServerProperties:: // ScheduleBrokenAlternateProtocolMappingsExpiration()). base::RunLoop().RunUntilIdle(); - http_server_props_manager_.reset(); + http_server_props_.reset(); } - bool HasAlternativeService(const url::SchemeHostPort& server) { + bool HasAlternativeService(const url::SchemeHostPort& server, + const NetworkIsolationKey& network_isolation_key) { const AlternativeServiceInfoVector alternative_service_info_vector = - http_server_props_manager_->GetAlternativeServiceInfos(server); + http_server_props_->GetAlternativeServiceInfos(server, + network_isolation_key); return !alternative_service_info_vector.empty(); } @@ -146,7 +287,7 @@ class HttpServerPropertiesManagerTest : public testing::Test, } MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. - std::unique_ptr<HttpServerPropertiesManager> http_server_props_manager_; + std::unique_ptr<HttpServerProperties> http_server_props_; base::Time one_day_from_now_; quic::ParsedQuicVersionVector advertised_versions_; @@ -154,177 +295,6 @@ class HttpServerPropertiesManagerTest : public testing::Test, DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); }; -TEST_F(HttpServerPropertiesManagerTest, - SingleUpdateForTwoSpdyServerPrefChanges) { - // Set up the prefs for https://www.google.com and https://mail.google.com and - // then set it twice. Only expect a single cache update. - - auto server_pref_dict = std::make_unique<base::DictionaryValue>(); - url::SchemeHostPort google_server("https", "www.google.com", 443); - url::SchemeHostPort mail_server("https", "mail.google.com", 443); - - // Set supports_spdy for https://www.google.com:443. - server_pref_dict->SetBoolean("supports_spdy", true); - - // Set up alternative_services for https://www.google.com. - auto alternative_service_dict0 = std::make_unique<base::DictionaryValue>(); - alternative_service_dict0->SetInteger("port", 443); - alternative_service_dict0->SetString("protocol_str", "h2"); - auto alternative_service_dict1 = std::make_unique<base::DictionaryValue>(); - alternative_service_dict1->SetInteger("port", 1234); - alternative_service_dict1->SetString("protocol_str", "quic"); - auto alternative_service_list0 = std::make_unique<base::ListValue>(); - alternative_service_list0->Append(std::move(alternative_service_dict0)); - alternative_service_list0->Append(std::move(alternative_service_dict1)); - server_pref_dict->SetWithoutPathExpansion( - "alternative_service", std::move(alternative_service_list0)); - - // Set up ServerNetworkStats for https://www.google.com. - auto stats = std::make_unique<base::DictionaryValue>(); - stats->SetInteger("srtt", 10); - server_pref_dict->SetWithoutPathExpansion("network_stats", std::move(stats)); - - // Set the server preference for https://www.google.com. - auto servers_dict = std::make_unique<base::DictionaryValue>(); - servers_dict->SetWithoutPathExpansion("https://www.google.com", - std::move(server_pref_dict)); - auto servers_list = std::make_unique<base::ListValue>(); - servers_list->Append(std::move(servers_dict)); - servers_dict = std::make_unique<base::DictionaryValue>(); - - // Set the preference for mail.google.com server. - auto server_pref_dict1 = std::make_unique<base::DictionaryValue>(); - - // Set supports_spdy for https://mail.google.com. - server_pref_dict1->SetBoolean("supports_spdy", true); - - // Set up alternative_services for https://mail.google.com. - auto alternative_service_dict2 = std::make_unique<base::DictionaryValue>(); - alternative_service_dict2->SetString("protocol_str", "h2"); - alternative_service_dict2->SetInteger("port", 444); - auto alternative_service_list1 = std::make_unique<base::ListValue>(); - alternative_service_list1->Append(std::move(alternative_service_dict2)); - server_pref_dict1->SetWithoutPathExpansion( - "alternative_service", std::move(alternative_service_list1)); - - // Set up ServerNetworkStats for https://mail.google.com and it is the MRU - // server. - auto stats1 = std::make_unique<base::DictionaryValue>(); - stats1->SetInteger("srtt", 20); - server_pref_dict1->SetWithoutPathExpansion("network_stats", - std::move(stats1)); - // Set the server preference for https://mail.google.com. - servers_dict->SetWithoutPathExpansion("https://mail.google.com", - std::move(server_pref_dict1)); - servers_list->Append(std::move(servers_dict)); - base::DictionaryValue http_server_properties_dict = DictWithVersion(); - http_server_properties_dict.SetWithoutPathExpansion("servers", - std::move(servers_list)); - auto supports_quic = std::make_unique<base::DictionaryValue>(); - supports_quic->SetBoolean("used_quic", true); - supports_quic->SetString("address", "127.0.0.1"); - http_server_properties_dict.SetWithoutPathExpansion("supports_quic", - std::move(supports_quic)); - - // Set quic_server_info for https://www.google.com, https://mail.google.com - // and https://play.google.com and verify the MRU. - http_server_props_manager_->SetMaxServerConfigsStoredInProperties(3); - auto quic_servers_dict = std::make_unique<base::DictionaryValue>(); - auto quic_server_pref_dict1 = std::make_unique<base::DictionaryValue>(); - std::string quic_server_info1("quic_server_info1"); - quic_server_pref_dict1->SetKey("server_info", base::Value(quic_server_info1)); - auto quic_server_pref_dict2 = std::make_unique<base::DictionaryValue>(); - std::string quic_server_info2("quic_server_info2"); - quic_server_pref_dict2->SetKey("server_info", base::Value(quic_server_info2)); - auto quic_server_pref_dict3 = std::make_unique<base::DictionaryValue>(); - std::string quic_server_info3("quic_server_info3"); - quic_server_pref_dict3->SetKey("server_info", base::Value(quic_server_info3)); - // Set the quic_server_info1 for https://www.google.com. - quic::QuicServerId google_quic_server_id("www.google.com", 443, false); - quic_servers_dict->SetWithoutPathExpansion("https://www.google.com", - std::move(quic_server_pref_dict1)); - // Set the quic_server_info2 for https://mail.google.com. - quic::QuicServerId mail_quic_server_id("mail.google.com", 443, false); - quic_servers_dict->SetWithoutPathExpansion("https://mail.google.com", - std::move(quic_server_pref_dict2)); - // Set the quic_server_info3 for https://play.google.com. - quic::QuicServerId play_quic_server_id("play.google.com", 443, false); - quic_servers_dict->SetWithoutPathExpansion("https://play.google.com", - std::move(quic_server_pref_dict3)); - http_server_properties_dict.SetWithoutPathExpansion( - "quic_servers", std::move(quic_servers_dict)); - - // Set the same value for kHttpServerProperties multiple times. - pref_delegate_->SetPrefs(http_server_properties_dict); - pref_delegate_->SetPrefs(http_server_properties_dict); - - // Should be a delayed task to update the cache from the prefs file. - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - FastForwardUntilNoTasksRemain(); - - // Verify SupportsSpdy. - EXPECT_TRUE( - http_server_props_manager_->SupportsRequestPriority(google_server)); - EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server)); - HostPortPair foo_host_port_pair = - HostPortPair::FromString("foo.google.com:1337"); - url::SchemeHostPort foo_server("http", foo_host_port_pair.host(), - foo_host_port_pair.port()); - - EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority(foo_server)); - - // Verify alternative service. - const AlternativeServiceMap& map = - http_server_props_manager_->alternative_service_map(); - ASSERT_EQ(2u, map.size()); - - auto map_it = map.begin(); - EXPECT_EQ("www.google.com", map_it->first.host()); - ASSERT_EQ(2u, map_it->second.size()); - EXPECT_EQ(kProtoHTTP2, map_it->second[0].alternative_service().protocol); - EXPECT_TRUE(map_it->second[0].alternative_service().host.empty()); - EXPECT_EQ(443, map_it->second[0].alternative_service().port); - EXPECT_EQ(kProtoQUIC, map_it->second[1].alternative_service().protocol); - EXPECT_TRUE(map_it->second[1].alternative_service().host.empty()); - EXPECT_EQ(1234, map_it->second[1].alternative_service().port); - ++map_it; - EXPECT_EQ("mail.google.com", map_it->first.host()); - ASSERT_EQ(1u, map_it->second.size()); - EXPECT_EQ(kProtoHTTP2, map_it->second[0].alternative_service().protocol); - EXPECT_TRUE(map_it->second[0].alternative_service().host.empty()); - EXPECT_EQ(444, map_it->second[0].alternative_service().port); - - // Verify SupportsQuic. - IPAddress last_address; - EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&last_address)); - EXPECT_EQ("127.0.0.1", last_address.ToString()); - - // Verify ServerNetworkStats. - const ServerNetworkStats* stats2 = - http_server_props_manager_->GetServerNetworkStats(google_server); - EXPECT_EQ(10, stats2->srtt.ToInternalValue()); - const ServerNetworkStats* stats3 = - http_server_props_manager_->GetServerNetworkStats(mail_server); - EXPECT_EQ(20, stats3->srtt.ToInternalValue()); - - // Verify QuicServerInfo. - EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( - google_quic_server_id)); - EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo( - mail_quic_server_id)); - EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo( - play_quic_server_id)); - - // Verify the MRU order. - http_server_props_manager_->SetMaxServerConfigsStoredInProperties(2); - EXPECT_EQ(nullptr, http_server_props_manager_->GetQuicServerInfo( - google_quic_server_id)); - EXPECT_EQ(quic_server_info2, *http_server_props_manager_->GetQuicServerInfo( - mail_quic_server_id)); - EXPECT_EQ(quic_server_info3, *http_server_props_manager_->GetQuicServerInfo( - play_quic_server_id)); -} - TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) { auto server_pref_dict = std::make_unique<base::DictionaryValue>(); @@ -367,13 +337,7 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) { "quic_servers", std::move(quic_servers_dict)); // Set up the pref. - pref_delegate_->SetPrefs(http_server_properties_dict); - - EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - FastForwardUntilNoTasksRemain(); - // Prefs should have been overwritten, due to the bad data. - EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); + InitializePrefs(http_server_properties_dict); // Verify that nothing is set. HostPortPair google_host_port_pair = @@ -381,13 +345,13 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedHostPortPair) { url::SchemeHostPort gooler_server("http", google_host_port_pair.host(), google_host_port_pair.port()); - EXPECT_FALSE( - http_server_props_manager_->SupportsRequestPriority(gooler_server)); - EXPECT_FALSE(HasAlternativeService(gooler_server)); - const ServerNetworkStats* stats1 = - http_server_props_manager_->GetServerNetworkStats(gooler_server); + EXPECT_FALSE(http_server_props_->SupportsRequestPriority( + gooler_server, NetworkIsolationKey())); + EXPECT_FALSE(HasAlternativeService(gooler_server, NetworkIsolationKey())); + const ServerNetworkStats* stats1 = http_server_props_->GetServerNetworkStats( + gooler_server, NetworkIsolationKey()); EXPECT_EQ(nullptr, stats1); - EXPECT_EQ(0u, http_server_props_manager_->quic_server_info_map().size()); + EXPECT_EQ(0u, http_server_props_->quic_server_info_map().size()); } TEST_F(HttpServerPropertiesManagerTest, BadCachedAltProtocolPort) { @@ -415,29 +379,26 @@ TEST_F(HttpServerPropertiesManagerTest, BadCachedAltProtocolPort) { http_server_properties_dict.SetWithoutPathExpansion( "servers", std::move(servers_list)); - // Set up the pref. - pref_delegate_->SetPrefs(http_server_properties_dict); + // Set up the pref. + InitializePrefs(http_server_properties_dict); - EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - FastForwardUntilNoTasksRemain(); - // Prefs should have been overwritten, due to the bad data. - EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - - // Verify alternative service is not set. - EXPECT_FALSE( - HasAlternativeService(url::SchemeHostPort("http", "www.google.com", 80))); + // Verify alternative service is not set. + EXPECT_FALSE( + HasAlternativeService(url::SchemeHostPort("http", "www.google.com", 80), + NetworkIsolationKey())); } TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) { + InitializePrefs(); + // Add mail.google.com:443 as a supporting spdy server. url::SchemeHostPort spdy_server("https", "mail.google.com", 443); - EXPECT_FALSE( - http_server_props_manager_->SupportsRequestPriority(spdy_server)); - http_server_props_manager_->SetSupportsSpdy(spdy_server, true); + EXPECT_FALSE(http_server_props_->SupportsRequestPriority( + spdy_server, NetworkIsolationKey())); + http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true); // Setting the value to the same thing again should not trigger another pref // update. - http_server_props_manager_->SetSupportsSpdy(spdy_server, true); + http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -447,11 +408,12 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) { // Setting the value to the same thing again should not trigger another pref // update. - http_server_props_manager_->SetSupportsSpdy(spdy_server, true); + http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); - EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); + EXPECT_TRUE(http_server_props_->SupportsRequestPriority( + spdy_server, NetworkIsolationKey())); } // Regression test for crbug.com/670519. Test that there is only one pref update @@ -460,23 +422,26 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) { // completed. TEST_F(HttpServerPropertiesManagerTest, SinglePrefUpdateForTwoSpdyServerCacheChanges) { + InitializePrefs(); + // Post an update task. SetSupportsSpdy calls ScheduleUpdatePrefs with a delay // of 60ms. url::SchemeHostPort spdy_server("https", "mail.google.com", 443); - EXPECT_FALSE( - http_server_props_manager_->SupportsRequestPriority(spdy_server)); - http_server_props_manager_->SetSupportsSpdy(spdy_server, true); + EXPECT_FALSE(http_server_props_->SupportsRequestPriority( + spdy_server, NetworkIsolationKey())); + http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true); // The pref update task should be scheduled. EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); // Move forward the task runner short by 20ms. - FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() - + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting() - base::TimeDelta::FromMilliseconds(20)); // Set another spdy server to trigger another call to // ScheduleUpdatePrefs. There should be no new update posted. url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); - http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); + http_server_props_->SetSupportsSpdy(spdy_server2, NetworkIsolationKey(), + true); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); // Move forward the extra 20ms. The pref update should be executed. @@ -485,14 +450,16 @@ TEST_F(HttpServerPropertiesManagerTest, EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); - EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); - EXPECT_TRUE( - http_server_props_manager_->SupportsRequestPriority(spdy_server2)); + EXPECT_TRUE(http_server_props_->SupportsRequestPriority( + spdy_server, NetworkIsolationKey())); + EXPECT_TRUE(http_server_props_->SupportsRequestPriority( + spdy_server2, NetworkIsolationKey())); // Set the third spdy server to trigger one more call to // ScheduleUpdatePrefs. A new update task should be posted now since the // previous one is completed. url::SchemeHostPort spdy_server3("https", "maps.google.com", 443); - http_server_props_manager_->SetSupportsSpdy(spdy_server3, true); + http_server_props_->SetSupportsSpdy(spdy_server3, NetworkIsolationKey(), + true); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); // Run the task. @@ -502,15 +469,19 @@ TEST_F(HttpServerPropertiesManagerTest, } TEST_F(HttpServerPropertiesManagerTest, GetAlternativeServiceInfos) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 443); - http_server_props_manager_->SetHttp2AlternativeService( - spdy_server_mail, alternative_service, one_day_from_now_); + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); // ExpectScheduleUpdatePrefs() should be called only once. - http_server_props_manager_->SetHttp2AlternativeService( - spdy_server_mail, alternative_service, one_day_from_now_); + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -519,15 +490,18 @@ TEST_F(HttpServerPropertiesManagerTest, GetAlternativeServiceInfos) { EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); AlternativeServiceInfoVector alternative_service_info_vector = - http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail); + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service, alternative_service_info_vector[0].alternative_service()); } TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); AlternativeServiceInfoVector alternative_service_info_vector; const AlternativeService alternative_service1(kProtoHTTP2, "mail.google.com", 443); @@ -539,11 +513,11 @@ TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) { alternative_service_info_vector.push_back( AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( alternative_service2, one_day_from_now_, advertised_versions_)); - http_server_props_manager_->SetAlternativeServices( - spdy_server_mail, alternative_service_info_vector); + http_server_props_->SetAlternativeServices( + spdy_server_mail, NetworkIsolationKey(), alternative_service_info_vector); // ExpectScheduleUpdatePrefs() should be called only once. - http_server_props_manager_->SetAlternativeServices( - spdy_server_mail, alternative_service_info_vector); + http_server_props_->SetAlternativeServices( + spdy_server_mail, NetworkIsolationKey(), alternative_service_info_vector); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -551,7 +525,8 @@ TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) { EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); AlternativeServiceInfoVector alternative_service_info_vector2 = - http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail); + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); ASSERT_EQ(2u, alternative_service_info_vector2.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector2[0].alternative_service()); @@ -560,50 +535,55 @@ TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServices) { } TEST_F(HttpServerPropertiesManagerTest, SetAlternativeServicesEmpty) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 443); - http_server_props_manager_->SetAlternativeServices( - spdy_server_mail, AlternativeServiceInfoVector()); + http_server_props_->SetAlternativeServices( + spdy_server_mail, NetworkIsolationKey(), AlternativeServiceInfoVector()); EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); } TEST_F(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail; AlternativeService alternative_service; spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443); - http_server_props_manager_->SetHttp2AlternativeService( - spdy_server_mail, alternative_service, one_day_from_now_); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->MarkAlternativeServiceBroken(alternative_service); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); // In addition to the pref update task, there's now a task to mark the // alternative service as no longer broken. EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); - http_server_props_manager_->ConfirmAlternativeService(alternative_service); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->ConfirmAlternativeService(alternative_service); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); @@ -613,46 +593,147 @@ TEST_F(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); } +// Check the case that prefs are loaded only after setting alternative service +// info. Prefs should not be written until after the load happens. +TEST_F(HttpServerPropertiesManagerTest, LateLoadAlternativeServiceInfo) { + url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); + const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", + 443); + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + + AlternativeServiceInfoVector alternative_service_info_vector = + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); + ASSERT_EQ(1u, alternative_service_info_vector.size()); + EXPECT_EQ(alternative_service, + alternative_service_info_vector[0].alternative_service()); + + // Initializing prefs does not result in a task to write the prefs. + InitializePrefs(base::DictionaryValue(), true /* expect_pref_update */); + alternative_service_info_vector = + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); + EXPECT_EQ(1u, alternative_service_info_vector.size()); + + // Updating the entry should result in a task to save prefs. Have to at least + // double (or half) the lifetime, to ensure the change triggers a save to + // prefs. + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_ + base::TimeDelta::FromDays(2)); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); + FastForwardUntilNoTasksRemain(); + EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); + alternative_service_info_vector = + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); + EXPECT_EQ(1u, alternative_service_info_vector.size()); +} + +// Check the case that prefs are cleared before they're loaded. +TEST_F(HttpServerPropertiesManagerTest, + ClearPrefsBeforeLoadAlternativeServiceInfo) { + url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); + const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", + 443); + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); + FastForwardUntilNoTasksRemain(); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + + AlternativeServiceInfoVector alternative_service_info_vector = + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); + ASSERT_EQ(1u, alternative_service_info_vector.size()); + EXPECT_EQ(alternative_service, + alternative_service_info_vector[0].alternative_service()); + + // Clearing prefs should result in a task to write the prefs. + bool callback_invoked_ = false; + http_server_props_->Clear(base::BindOnce( + [](bool* callback_invoked) { + EXPECT_FALSE(*callback_invoked); + *callback_invoked = true; + }, + &callback_invoked_)); + EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); + EXPECT_FALSE(callback_invoked_); + std::move(pref_delegate_->GetSetPropertiesCallback()).Run(); + EXPECT_TRUE(callback_invoked_); + alternative_service_info_vector = + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); + EXPECT_EQ(0u, alternative_service_info_vector.size()); + + // Re-creating the entry should result in a task to save prefs. + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); + FastForwardUntilNoTasksRemain(); + EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); + alternative_service_info_vector = + http_server_props_->GetAlternativeServiceInfos(spdy_server_mail, + NetworkIsolationKey()); + EXPECT_EQ(1u, alternative_service_info_vector.size()); +} + TEST_F(HttpServerPropertiesManagerTest, ConfirmBrokenUntilDefaultNetworkChanges) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail; AlternativeService alternative_service; spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443); - http_server_props_manager_->SetHttp2AlternativeService( - spdy_server_mail, alternative_service, one_day_from_now_); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - http_server_props_manager_ - ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - alternative_service); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( + alternative_service); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); // In addition to the pref update task, there's now a task to mark the // alternative service as no longer broken. EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); - http_server_props_manager_->ConfirmAlternativeService(alternative_service); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->ConfirmAlternativeService(alternative_service); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); @@ -662,46 +743,48 @@ TEST_F(HttpServerPropertiesManagerTest, FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); } TEST_F(HttpServerPropertiesManagerTest, OnDefaultNetworkChangedWithBrokenUntilDefaultNetworkChanges) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail; AlternativeService alternative_service; spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443); - http_server_props_manager_->SetHttp2AlternativeService( - spdy_server_mail, alternative_service, one_day_from_now_); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - http_server_props_manager_ - ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( - alternative_service); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( + alternative_service); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); // In addition to the pref update task, there's now a task to mark the // alternative service as no longer broken. EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); - http_server_props_manager_->OnDefaultNetworkChanged(); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->OnDefaultNetworkChanged(); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); @@ -711,43 +794,46 @@ TEST_F(HttpServerPropertiesManagerTest, FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); } TEST_F(HttpServerPropertiesManagerTest, OnDefaultNetworkChangedWithBrokenOnly) { + InitializePrefs(); + url::SchemeHostPort spdy_server_mail; AlternativeService alternative_service; spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80); - EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); + EXPECT_FALSE(HasAlternativeService(spdy_server_mail, NetworkIsolationKey())); alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443); - http_server_props_manager_->SetHttp2AlternativeService( - spdy_server_mail, alternative_service, one_day_from_now_); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->SetHttp2AlternativeService( + spdy_server_mail, NetworkIsolationKey(), alternative_service, + one_day_from_now_); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->MarkAlternativeServiceBroken(alternative_service); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); // In addition to the pref update task, there's now a task to mark the // alternative service as no longer broken. EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); - http_server_props_manager_->OnDefaultNetworkChanged(); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + http_server_props_->OnDefaultNetworkChanged(); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); @@ -757,20 +843,22 @@ TEST_F(HttpServerPropertiesManagerTest, OnDefaultNetworkChangedWithBrokenOnly) { FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - alternative_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(alternative_service)); + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( alternative_service)); } TEST_F(HttpServerPropertiesManagerTest, SupportsQuic) { + InitializePrefs(); + IPAddress address; - EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); + EXPECT_FALSE(http_server_props_->GetSupportsQuic(&address)); IPAddress actual_address(127, 0, 0, 1); - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->SetSupportsQuic(true, actual_address); // Another task should not be scheduled. - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->SetSupportsQuic(true, actual_address); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -778,25 +866,29 @@ TEST_F(HttpServerPropertiesManagerTest, SupportsQuic) { FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); + EXPECT_TRUE(http_server_props_->GetSupportsQuic(&address)); EXPECT_EQ(actual_address, address); // Another task should not be scheduled. - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->SetSupportsQuic(true, actual_address); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); } TEST_F(HttpServerPropertiesManagerTest, ServerNetworkStats) { + InitializePrefs(); + url::SchemeHostPort mail_server("http", "mail.google.com", 80); - const ServerNetworkStats* stats = - http_server_props_manager_->GetServerNetworkStats(mail_server); + const ServerNetworkStats* stats = http_server_props_->GetServerNetworkStats( + mail_server, NetworkIsolationKey()); EXPECT_EQ(nullptr, stats); ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); - http_server_props_manager_->SetServerNetworkStats(mail_server, stats1); + http_server_props_->SetServerNetworkStats(mail_server, NetworkIsolationKey(), + stats1); // Another task should not be scheduled. - http_server_props_manager_->SetServerNetworkStats(mail_server, stats1); + http_server_props_->SetServerNetworkStats(mail_server, NetworkIsolationKey(), + stats1); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -805,15 +897,17 @@ TEST_F(HttpServerPropertiesManagerTest, ServerNetworkStats) { EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); // Another task should not be scheduled. - http_server_props_manager_->SetServerNetworkStats(mail_server, stats1); + http_server_props_->SetServerNetworkStats(mail_server, NetworkIsolationKey(), + stats1); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_EQ(GetPendingMainThreadTaskCount(), 0u); - const ServerNetworkStats* stats2 = - http_server_props_manager_->GetServerNetworkStats(mail_server); + const ServerNetworkStats* stats2 = http_server_props_->GetServerNetworkStats( + mail_server, NetworkIsolationKey()); EXPECT_EQ(10, stats2->srtt.ToInternalValue()); - http_server_props_manager_->ClearServerNetworkStats(mail_server); + http_server_props_->ClearServerNetworkStats(mail_server, + NetworkIsolationKey()); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -821,20 +915,20 @@ TEST_F(HttpServerPropertiesManagerTest, ServerNetworkStats) { FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_EQ(nullptr, - http_server_props_manager_->GetServerNetworkStats(mail_server)); + EXPECT_EQ(nullptr, http_server_props_->GetServerNetworkStats( + mail_server, NetworkIsolationKey())); } TEST_F(HttpServerPropertiesManagerTest, QuicServerInfo) { + InitializePrefs(); + quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false); EXPECT_EQ(nullptr, - http_server_props_manager_->GetQuicServerInfo(mail_quic_server_id)); + http_server_props_->GetQuicServerInfo(mail_quic_server_id)); std::string quic_server_info1("quic_server_info1"); - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); // Another task should not be scheduled. - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); // Run the task. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -842,17 +936,18 @@ TEST_F(HttpServerPropertiesManagerTest, QuicServerInfo) { FastForwardUntilNoTasksRemain(); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( - mail_quic_server_id)); + EXPECT_EQ(quic_server_info1, + *http_server_props_->GetQuicServerInfo(mail_quic_server_id)); // Another task should not be scheduled. - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); } TEST_F(HttpServerPropertiesManagerTest, Clear) { + InitializePrefs(); + const url::SchemeHostPort spdy_server("https", "mail.google.com", 443); const IPAddress actual_address(127, 0, 0, 1); const quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false); @@ -869,95 +964,98 @@ TEST_F(HttpServerPropertiesManagerTest, Clear) { alt_svc_info_vector.push_back( AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( broken_alternative_service, one_day_from_now_)); - http_server_props_manager_->SetAlternativeServices(spdy_server, - alt_svc_info_vector); + http_server_props_->SetAlternativeServices(spdy_server, NetworkIsolationKey(), + alt_svc_info_vector); - http_server_props_manager_->MarkAlternativeServiceBroken( - broken_alternative_service); - http_server_props_manager_->SetSupportsSpdy(spdy_server, true); - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->MarkAlternativeServiceBroken(broken_alternative_service); + http_server_props_->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), true); + http_server_props_->SetSupportsQuic(true, actual_address); ServerNetworkStats stats; stats.srtt = base::TimeDelta::FromMicroseconds(10); - http_server_props_manager_->SetServerNetworkStats(spdy_server, stats); + http_server_props_->SetServerNetworkStats(spdy_server, NetworkIsolationKey(), + stats); - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); // Advance time by just enough so that the prefs update task is executed but // not the task to expire the brokenness of |broken_alternative_service|. - FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting()); + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); EXPECT_NE(0u, GetPendingMainThreadTaskCount()); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( + EXPECT_TRUE(http_server_props_->IsAlternativeServiceBroken( broken_alternative_service)); - EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); - EXPECT_TRUE(HasAlternativeService(spdy_server)); + EXPECT_TRUE(http_server_props_->SupportsRequestPriority( + spdy_server, NetworkIsolationKey())); + EXPECT_TRUE(HasAlternativeService(spdy_server, NetworkIsolationKey())); IPAddress address; - EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); + EXPECT_TRUE(http_server_props_->GetSupportsQuic(&address)); EXPECT_EQ(actual_address, address); - const ServerNetworkStats* stats1 = - http_server_props_manager_->GetServerNetworkStats(spdy_server); + const ServerNetworkStats* stats1 = http_server_props_->GetServerNetworkStats( + spdy_server, NetworkIsolationKey()); EXPECT_EQ(10, stats1->srtt.ToInternalValue()); - EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( - mail_quic_server_id)); + EXPECT_EQ(quic_server_info1, + *http_server_props_->GetQuicServerInfo(mail_quic_server_id)); // Clear http server data, which should instantly update prefs. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); bool callback_invoked_ = false; - http_server_props_manager_->Clear( - base::BindOnce([](bool* callback_invoked) { *callback_invoked = true; }, - &callback_invoked_)); + http_server_props_->Clear(base::BindOnce( + [](bool* callback_invoked) { + EXPECT_FALSE(*callback_invoked); + *callback_invoked = true; + }, + &callback_invoked_)); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_FALSE(callback_invoked_); std::move(pref_delegate_->GetSetPropertiesCallback()).Run(); EXPECT_TRUE(callback_invoked_); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( + EXPECT_FALSE(http_server_props_->IsAlternativeServiceBroken( broken_alternative_service)); - EXPECT_FALSE( - http_server_props_manager_->SupportsRequestPriority(spdy_server)); - EXPECT_FALSE(HasAlternativeService(spdy_server)); - EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); - const ServerNetworkStats* stats2 = - http_server_props_manager_->GetServerNetworkStats(spdy_server); + EXPECT_FALSE(http_server_props_->SupportsRequestPriority( + spdy_server, NetworkIsolationKey())); + EXPECT_FALSE(HasAlternativeService(spdy_server, NetworkIsolationKey())); + EXPECT_FALSE(http_server_props_->GetSupportsQuic(&address)); + const ServerNetworkStats* stats2 = http_server_props_->GetServerNetworkStats( + spdy_server, NetworkIsolationKey()); EXPECT_EQ(nullptr, stats2); EXPECT_EQ(nullptr, - http_server_props_manager_->GetQuicServerInfo(mail_quic_server_id)); + http_server_props_->GetQuicServerInfo(mail_quic_server_id)); } // https://crbug.com/444956: Add 200 alternative_service servers followed by // supports_quic and verify we have read supports_quic from prefs. TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { - auto servers_dict = std::make_unique<base::DictionaryValue>(); std::unique_ptr<base::ListValue> servers_list = std::make_unique<base::ListValue>(); for (int i = 1; i <= 200; ++i) { // Set up alternative_service for www.google.com:i. - auto alternative_service_dict = std::make_unique<base::DictionaryValue>(); - alternative_service_dict->SetString("protocol_str", "quic"); - alternative_service_dict->SetInteger("port", i); - auto alternative_service_list = std::make_unique<base::ListValue>(); - alternative_service_list->Append(std::move(alternative_service_dict)); - auto server_pref_dict = std::make_unique<base::DictionaryValue>(); - server_pref_dict->SetWithoutPathExpansion( - "alternative_service", std::move(alternative_service_list)); - servers_dict->SetWithoutPathExpansion( - StringPrintf("https://www.google.com:%d", i), - std::move(server_pref_dict)); - servers_list->AppendIfNotPresent(std::move(servers_dict)); - servers_dict = std::make_unique<base::DictionaryValue>(); + base::Value server_dict(base::Value::Type::DICTIONARY); + base::Value alternative_service_dict(base::Value::Type::DICTIONARY); + alternative_service_dict.SetStringKey("protocol_str", "quic"); + alternative_service_dict.SetIntKey("port", i); + base::Value alternative_service_list(base::Value::Type::LIST); + alternative_service_list.GetList().emplace_back( + std::move(alternative_service_dict)); + server_dict.SetKey("alternative_service", + std::move(alternative_service_list)); + server_dict.SetStringKey("server", + StringPrintf("https://www.google.com:%d", i)); + server_dict.SetKey("isolation", base::Value(base::Value::Type::LIST)); + servers_list->GetList().emplace_back(std::move(server_dict)); } // Set the server preference for http://mail.google.com server. - auto server_pref_dict1 = std::make_unique<base::DictionaryValue>(); - servers_dict->SetWithoutPathExpansion("https://mail.google.com", - std::move(server_pref_dict1)); - servers_list->AppendIfNotPresent(std::move(servers_dict)); - base::DictionaryValue http_server_properties_dict = DictWithVersion(); - http_server_properties_dict.SetWithoutPathExpansion( - "servers", std::move(servers_list)); + base::Value server_dict2(base::Value::Type::DICTIONARY); + server_dict2.SetStringKey("server", "https://mail.google.com"); + server_dict2.SetKey("isolation", base::Value(base::Value::Type::LIST)); + servers_list->GetList().emplace_back(std::move(server_dict2)); + + base::DictionaryValue http_server_properties_dict = DictWithVersion(); + http_server_properties_dict.SetWithoutPathExpansion("servers", + std::move(servers_list)); // Set up SupportsQuic for 127.0.0.1 auto supports_quic = std::make_unique<base::DictionaryValue>(); @@ -967,8 +1065,7 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { std::move(supports_quic)); // Set up the pref. - pref_delegate_->SetPrefs(http_server_properties_dict); - FastForwardUntilNoTasksRemain(); + InitializePrefs(http_server_properties_dict); // Verify alternative service. for (int i = 1; i <= 200; ++i) { @@ -976,7 +1073,8 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { server_gurl = GURL(StringPrintf("https://www.google.com:%d", i)); url::SchemeHostPort server(server_gurl); AlternativeServiceInfoVector alternative_service_info_vector = - http_server_props_manager_->GetAlternativeServiceInfos(server); + http_server_props_->GetAlternativeServiceInfos(server, + NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ( kProtoQUIC, @@ -986,11 +1084,13 @@ TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) { // Verify SupportsQuic. IPAddress address; - ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); + ASSERT_TRUE(http_server_props_->GetSupportsQuic(&address)); EXPECT_EQ("127.0.0.1", address.ToString()); } TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) { + InitializePrefs(); + const url::SchemeHostPort server_www("https", "www.google.com", 80); const url::SchemeHostPort server_mail("https", "mail.google.com", 80); @@ -1010,40 +1110,41 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) { alternative_service_info_vector.push_back( AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( www_alternative_service2, expiration2)); - ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( - server_www, alternative_service_info_vector)); + http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(), + alternative_service_info_vector); AlternativeService mail_alternative_service(kProtoHTTP2, "foo.google.com", 444); base::Time expiration3 = base::Time::Max(); - ASSERT_TRUE(http_server_props_manager_->SetHttp2AlternativeService( - server_mail, mail_alternative_service, expiration3)); + http_server_props_->SetHttp2AlternativeService( + server_mail, NetworkIsolationKey(), mail_alternative_service, + expiration3); - http_server_props_manager_->MarkAlternativeServiceBroken( - www_alternative_service2); - http_server_props_manager_->MarkAlternativeServiceRecentlyBroken( + http_server_props_->MarkAlternativeServiceBroken(www_alternative_service2); + http_server_props_->MarkAlternativeServiceRecentlyBroken( mail_alternative_service); // #3: Set SPDY server map - http_server_props_manager_->SetSupportsSpdy(server_www, false); - http_server_props_manager_->SetSupportsSpdy(server_mail, true); - http_server_props_manager_->SetSupportsSpdy( - url::SchemeHostPort("http", "not_persisted.com", 80), false); + http_server_props_->SetSupportsSpdy(server_www, NetworkIsolationKey(), false); + http_server_props_->SetSupportsSpdy(server_mail, NetworkIsolationKey(), true); + http_server_props_->SetSupportsSpdy( + url::SchemeHostPort("http", "not_persisted.com", 80), + NetworkIsolationKey(), false); // #4: Set ServerNetworkStats. ServerNetworkStats stats; stats.srtt = base::TimeDelta::FromInternalValue(42); - http_server_props_manager_->SetServerNetworkStats(server_mail, stats); + http_server_props_->SetServerNetworkStats(server_mail, NetworkIsolationKey(), + stats); // #5: Set quic_server_info string. quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false); std::string quic_server_info1("quic_server_info1"); - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); // #6: Set SupportsQuic. IPAddress actual_address(127, 0, 0, 1); - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->SetSupportsQuic(true, actual_address); base::Time time_before_prefs_update = base::Time::Now(); @@ -1054,7 +1155,7 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) { // |broken_alternative_service|. EXPECT_EQ(2u, GetPendingMainThreadTaskCount()); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting()); + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -1097,7 +1198,7 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) { ASSERT_TRUE(base::StringToInt64(expiration_string, &expiration_int64)); base::TimeDelta expiration_delta = base::TimeDelta::FromMinutes(5) - - HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting(); + HttpServerProperties::GetUpdatePrefsDelayForTesting(); time_t time_t_of_prefs_update = static_cast<time_t>(expiration_int64); EXPECT_LE((time_before_prefs_update + expiration_delta).ToTimeT(), time_t_of_prefs_update); @@ -1116,18 +1217,20 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) { "{\"https://mail.google.com:80\":" "{\"server_info\":\"quic_server_info1\"}}," "\"servers\":[" - "{\"https://www.google.com:80\":{" - "\"alternative_service\":[{\"advertised_versions\":[]," + "{\"alternative_service\":[{\"advertised_versions\":[]," "\"expiration\":\"13756212000000000\",\"port\":443," "\"protocol_str\":\"h2\"}," "{\"advertised_versions\":[],\"expiration\":\"13758804000000000\"," - "\"host\":\"www.google.com\",\"port\":1234,\"protocol_str\":\"h2\"}]}}," - "{\"https://mail.google.com:80\":{" - "\"alternative_service\":[{\"advertised_versions\":[]," + "\"host\":\"www.google.com\",\"port\":1234,\"protocol_str\":\"h2\"}]," + "\"isolation\":[]," + "\"server\":\"https://www.google.com:80\"}," + "{\"alternative_service\":[{\"advertised_versions\":[]," "\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\"," "\"port\":444,\"protocol_str\":\"h2\"}]," + "\"isolation\":[]," "\"network_stats\":{\"srtt\":42}," - "\"supports_spdy\":true}}]," + "\"server\":\"https://mail.google.com:80\"," + "\"supports_spdy\":true}]," "\"supports_quic\":{\"address\":\"127.0.0.1\",\"used_quic\":true}," "\"version\":5}"; @@ -1136,38 +1239,9 @@ TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsWithCache) { EXPECT_EQ(expected_json, preferences_json); } -TEST_F(HttpServerPropertiesManagerTest, - SingleCacheUpdateForMultipleUpdatesScheduled) { - EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); - // Update cache. - http_server_props_manager_->ScheduleUpdateCacheForTesting(); - EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - - // Move forward the task runner short by 20ms. - FastForwardBy(HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() - - base::TimeDelta::FromMilliseconds(20)); - // Schedule a new cache update within the time window should be a no-op. - http_server_props_manager_->ScheduleUpdateCacheForTesting(); - EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - - // Move forward the task runner the extra 20ms, now the cache update should be - // executed. - FastForwardBy(base::TimeDelta::FromMilliseconds(20)); - - // Since this test has no pref corruption, there shouldn't be any pref update. - EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); - - // Schedule one more cache update. The task should be successfully scheduled - // on the task runner. - http_server_props_manager_->ScheduleUpdateCacheForTesting(); - EXPECT_EQ(1u, GetPendingMainThreadTaskCount()); - - FastForwardUntilNoTasksRemain(); - EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); -} +TEST_F(HttpServerPropertiesManagerTest, ParseAlternativeServiceInfo) { + InitializePrefs(); -TEST_F(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { std::unique_ptr<base::Value> server_value = base::JSONReader::ReadDeprecated( "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"}," "{\"port\":123,\"protocol_str\":\"quic\"," @@ -1179,13 +1253,13 @@ TEST_F(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); const url::SchemeHostPort server("https", "example.com", 443); - AlternativeServiceMap alternative_service_map; - EXPECT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap( - server, *server_dict, &alternative_service_map)); + HttpServerProperties::ServerInfo server_info; + EXPECT_TRUE(HttpServerPropertiesManager::ParseAlternativeServiceInfo( + server, *server_dict, &server_info)); - auto it = alternative_service_map.Get(server); - ASSERT_NE(alternative_service_map.end(), it); - AlternativeServiceInfoVector alternative_service_info_vector = it->second; + ASSERT_TRUE(server_info.alternative_services.has_value()); + AlternativeServiceInfoVector alternative_service_info_vector = + server_info.alternative_services.value(); ASSERT_EQ(3u, alternative_service_info_vector.size()); EXPECT_EQ(kProtoHTTP2, @@ -1216,10 +1290,16 @@ TEST_F(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { base::Time::FromUTCString("2036-12-31 10:00:00", &expected_expiration)); EXPECT_EQ(expected_expiration, alternative_service_info_vector[2].expiration()); + + // No other fields should have been populated. + server_info.alternative_services.reset(); + EXPECT_TRUE(server_info.empty()); } // Regression test for https://crbug.com/615497. TEST_F(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins) { + InitializePrefs(); + std::unique_ptr<base::Value> server_value = base::JSONReader::ReadDeprecated( "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"h2\"," "\"expiration\":\"9223372036854775807\"}]}"); @@ -1228,16 +1308,16 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotLoadAltSvcForInsecureOrigins) { ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); const url::SchemeHostPort server("http", "example.com", 80); - AlternativeServiceMap alternative_service_map; - EXPECT_FALSE(http_server_props_manager_->AddToAlternativeServiceMap( - server, *server_dict, &alternative_service_map)); - - auto it = alternative_service_map.Get(server); - EXPECT_EQ(alternative_service_map.end(), it); + HttpServerProperties::ServerInfo server_info; + EXPECT_FALSE(HttpServerPropertiesManager::ParseAlternativeServiceInfo( + server, *server_dict, &server_info)); + EXPECT_TRUE(server_info.empty()); } // Do not persist expired alternative service entries to disk. TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) { + InitializePrefs(); + AlternativeServiceInfoVector alternative_service_info_vector; const AlternativeService broken_alternative_service( @@ -1248,8 +1328,7 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) { AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( broken_alternative_service, time_one_day_later)); // #1: MarkAlternativeServiceBroken(). - http_server_props_manager_->MarkAlternativeServiceBroken( - broken_alternative_service); + http_server_props_->MarkAlternativeServiceBroken(broken_alternative_service); const AlternativeService expired_alternative_service( kProtoHTTP2, "expired.example.com", 443); @@ -1267,8 +1346,8 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) { const url::SchemeHostPort server("https", "www.example.com", 443); // #2: SetAlternativeServices(). - ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( - server, alternative_service_info_vector)); + http_server_props_->SetAlternativeServices(server, NetworkIsolationKey(), + alternative_service_info_vector); // |net_test_task_runner_| has a remaining pending task to expire // |broken_alternative_service| at |time_one_day_later|. Fast forward enough @@ -1276,7 +1355,7 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) { // |broken_alternative_service|. EXPECT_EQ(2U, GetPendingMainThreadTaskCount()); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting()); + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); EXPECT_EQ(1U, GetPendingMainThreadTaskCount()); EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -1289,13 +1368,18 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) { const base::DictionaryValue* server_pref_dict; ASSERT_TRUE(it->GetAsDictionary(&server_pref_dict)); - const base::DictionaryValue* example_pref_dict; + const std::string* server_str = server_pref_dict->FindStringKey("server"); + ASSERT_TRUE(server_str); + EXPECT_EQ("https://www.example.com", *server_str); - ASSERT_TRUE(server_pref_dict->GetDictionaryWithoutPathExpansion( - "https://www.example.com", &example_pref_dict)); + const base::Value* network_isolation_key_value = + server_pref_dict->FindKey("isolation"); + ASSERT_TRUE(network_isolation_key_value); + ASSERT_EQ(base::Value::Type::LIST, network_isolation_key_value->type()); + EXPECT_TRUE(network_isolation_key_value->GetList().empty()); const base::ListValue* altsvc_list; - ASSERT_TRUE(example_pref_dict->GetList("alternative_service", &altsvc_list)); + ASSERT_TRUE(server_pref_dict->GetList("alternative_service", &altsvc_list)); ASSERT_EQ(2u, altsvc_list->GetSize()); @@ -1313,6 +1397,8 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotPersistExpiredAlternativeService) { // Test that expired alternative service entries on disk are ignored. TEST_F(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) { + InitializePrefs(); + auto alternative_service_list = std::make_unique<base::ListValue>(); auto expired_dict = std::make_unique<base::DictionaryValue>(); expired_dict->SetString("protocol_str", "h2"); @@ -1337,13 +1423,13 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) { std::move(alternative_service_list)); const url::SchemeHostPort server("https", "example.com", 443); - AlternativeServiceMap alternative_service_map; - ASSERT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap( - server, server_pref_dict, &alternative_service_map)); + HttpServerProperties::ServerInfo server_info; + ASSERT_TRUE(HttpServerPropertiesManager::ParseAlternativeServiceInfo( + server, server_pref_dict, &server_info)); - auto it = alternative_service_map.Get(server); - ASSERT_NE(alternative_service_map.end(), it); - AlternativeServiceInfoVector alternative_service_info_vector = it->second; + ASSERT_TRUE(server_info.alternative_services.has_value()); + AlternativeServiceInfoVector alternative_service_info_vector = + server_info.alternative_services.value(); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(kProtoHTTP2, @@ -1352,18 +1438,26 @@ TEST_F(HttpServerPropertiesManagerTest, DoNotLoadExpiredAlternativeService) { alternative_service_info_vector[0].alternative_service().host); EXPECT_EQ(443, alternative_service_info_vector[0].alternative_service().port); EXPECT_EQ(one_day_from_now_, alternative_service_info_vector[0].expiration()); + + // No other fields should have been populated. + server_info.alternative_services.reset(); + EXPECT_TRUE(server_info.empty()); } // Make sure prefs are updated on destruction. TEST_F(HttpServerPropertiesManagerTest, UpdatePrefsOnShutdown) { + InitializePrefs(); + int pref_updates = 0; pref_delegate_->set_extra_update_prefs_callback( base::Bind([](int* updates) { (*updates)++; }, &pref_updates)); - http_server_props_manager_.reset(); + http_server_props_.reset(); EXPECT_EQ(1, pref_updates); } TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) { + InitializePrefs(); + const url::SchemeHostPort server_www("https", "www.google.com", 80); const url::SchemeHostPort server_mail("https", "mail.google.com", 80); @@ -1389,30 +1483,30 @@ TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) { alternative_service_info_vector.push_back( AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( h2_alternative_service, expiration2)); - ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( - server_www, alternative_service_info_vector)); + http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(), + alternative_service_info_vector); // Set another QUIC alternative service with a single advertised QUIC version. AlternativeService mail_alternative_service(kProtoQUIC, "foo.google.com", 444); base::Time expiration3 = base::Time::Max(); - ASSERT_TRUE(http_server_props_manager_->SetQuicAlternativeService( - server_mail, mail_alternative_service, expiration3, - advertised_versions_)); + http_server_props_->SetQuicAlternativeService( + server_mail, NetworkIsolationKey(), mail_alternative_service, expiration3, + advertised_versions_); // #3: Set ServerNetworkStats. ServerNetworkStats stats; stats.srtt = base::TimeDelta::FromInternalValue(42); - http_server_props_manager_->SetServerNetworkStats(server_mail, stats); + http_server_props_->SetServerNetworkStats(server_mail, NetworkIsolationKey(), + stats); // #4: Set quic_server_info string. quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false); std::string quic_server_info1("quic_server_info1"); - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); // #5: Set SupportsQuic. IPAddress actual_address(127, 0, 0, 1); - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->SetSupportsQuic(true, actual_address); // Update Prefs. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -1424,15 +1518,20 @@ TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) { const char expected_json[] = "{\"quic_servers\":{\"https://mail.google.com:80\":{" "\"server_info\":\"quic_server_info1\"}},\"servers\":[" - "{\"https://www.google.com:80\":{\"alternative_service\":[{" + "{\"alternative_service\":[{" "\"advertised_versions\":[39,46],\"expiration\":\"13756212000000000\"," "\"port\":443,\"protocol_str\":\"quic\"},{\"advertised_versions\":[]," "\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\"," - "\"port\":1234,\"protocol_str\":\"h2\"}]}}," - "{\"https://mail.google.com:80\":{\"alternative_service\":[{" + "\"port\":1234,\"protocol_str\":\"h2\"}]," + "\"isolation\":[]," + "\"server\":\"https://www.google.com:80\"}," + "{\"alternative_service\":[{" "\"advertised_versions\":[46],\"expiration\":\"9223372036854775807\"," "\"host\":\"foo.google.com\",\"port\":444,\"protocol_str\":\"quic\"}]," - "\"network_stats\":{\"srtt\":42}}}],\"supports_quic\":{" + "\"isolation\":[]," + "\"network_stats\":{\"srtt\":42}," + "\"server\":\"https://mail.google.com:80\"}]," + "\"supports_quic\":{" "\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}"; const base::Value* http_server_properties = @@ -1444,6 +1543,8 @@ TEST_F(HttpServerPropertiesManagerTest, PersistAdvertisedVersionsToPref) { } TEST_F(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref) { + InitializePrefs(); + std::unique_ptr<base::Value> server_value = base::JSONReader::ReadDeprecated( "{\"alternative_service\":[" "{\"port\":443,\"protocol_str\":\"quic\"}," @@ -1455,13 +1556,13 @@ TEST_F(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref) { ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); const url::SchemeHostPort server("https", "example.com", 443); - AlternativeServiceMap alternative_service_map; - EXPECT_TRUE(http_server_props_manager_->AddToAlternativeServiceMap( - server, *server_dict, &alternative_service_map)); + HttpServerProperties::ServerInfo server_info; + EXPECT_TRUE(HttpServerPropertiesManager::ParseAlternativeServiceInfo( + server, *server_dict, &server_info)); - auto it = alternative_service_map.Get(server); - ASSERT_NE(alternative_service_map.end(), it); - AlternativeServiceInfoVector alternative_service_info_vector = it->second; + ASSERT_TRUE(server_info.alternative_services.has_value()); + AlternativeServiceInfoVector alternative_service_info_vector = + server_info.alternative_services.value(); ASSERT_EQ(2u, alternative_service_info_vector.size()); // Verify the first alternative service with no advertised version listed. @@ -1492,10 +1593,16 @@ TEST_F(HttpServerPropertiesManagerTest, ReadAdvertisedVersionsFromPref) { EXPECT_EQ(quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_46), loaded_advertised_versions[1]); + + // No other fields should have been populated. + server_info.alternative_services.reset(); + EXPECT_TRUE(server_info.empty()); } TEST_F(HttpServerPropertiesManagerTest, UpdatePrefWhenAdvertisedVersionsChange) { + InitializePrefs(); + const url::SchemeHostPort server_www("https", "www.google.com", 80); // #1: Set alternate protocol. @@ -1508,18 +1615,17 @@ TEST_F(HttpServerPropertiesManagerTest, alternative_service_info_vector.push_back( AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( quic_alternative_service1, expiration1, advertised_versions_)); - ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( - server_www, alternative_service_info_vector)); + http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(), + alternative_service_info_vector); // Set quic_server_info string. quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false); std::string quic_server_info1("quic_server_info1"); - http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, - quic_server_info1); + http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1); // Set SupportsQuic. IPAddress actual_address(127, 0, 0, 1); - http_server_props_manager_->SetSupportsQuic(true, actual_address); + http_server_props_->SetSupportsQuic(true, actual_address); // Update Prefs. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -1531,10 +1637,12 @@ TEST_F(HttpServerPropertiesManagerTest, const char expected_json[] = "{\"quic_servers\":{\"https://mail.google.com:80\":" "{\"server_info\":\"quic_server_info1\"}},\"servers\":[" - "{\"https://www.google.com:80\":" "{\"alternative_service\":[{\"advertised_versions\":[46]," "\"expiration\":\"13756212000000000\",\"port\":443," - "\"protocol_str\":\"quic\"}]}}],\"supports_quic\":" + "\"protocol_str\":\"quic\"}]," + "\"isolation\":[]," + "\"server\":\"https://www.google.com:80\"}]," + "\"supports_quic\":" "{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}"; const base::Value* http_server_properties = @@ -1556,8 +1664,8 @@ TEST_F(HttpServerPropertiesManagerTest, alternative_service_info_vector_2.push_back( AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( quic_alternative_service1, expiration1, advertised_versions)); - ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( - server_www, alternative_service_info_vector_2)); + http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(), + alternative_service_info_vector_2); // Update Prefs. EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); @@ -1569,10 +1677,12 @@ TEST_F(HttpServerPropertiesManagerTest, const char expected_json_updated[] = "{\"quic_servers\":{\"https://mail.google.com:80\":" "{\"server_info\":\"quic_server_info1\"}},\"servers\":[" - "{\"https://www.google.com:80\":" "{\"alternative_service\":[{\"advertised_versions\":[39,46]," "\"expiration\":\"13756212000000000\",\"port\":443," - "\"protocol_str\":\"quic\"}]}}],\"supports_quic\":" + "\"protocol_str\":\"quic\"}]," + "\"isolation\":[]," + "\"server\":\"https://www.google.com:80\"}]," + "\"supports_quic\":" "{\"address\":\"127.0.0.1\",\"used_quic\":true},\"version\":5}"; EXPECT_TRUE( base::JSONWriter::Write(*http_server_properties, &preferences_json)); @@ -1589,8 +1699,8 @@ TEST_F(HttpServerPropertiesManagerTest, alternative_service_info_vector_3.push_back( AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( quic_alternative_service1, expiration1, advertised_versions_2)); - ASSERT_FALSE(http_server_props_manager_->SetAlternativeServices( - server_www, alternative_service_info_vector_3)); + http_server_props_->SetAlternativeServices(server_www, NetworkIsolationKey(), + alternative_service_info_vector_3); // No Prefs update. EXPECT_EQ(0u, GetPendingMainThreadTaskCount()); @@ -1603,20 +1713,16 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { AlternativeService cached_recently_broken_service(kProtoQUIC, "cached_rbroken", 443); - http_server_props_manager_->MarkAlternativeServiceBroken( - cached_broken_service); - http_server_props_manager_->MarkAlternativeServiceBroken( - cached_broken_service2); - http_server_props_manager_->MarkAlternativeServiceRecentlyBroken( + http_server_props_->MarkAlternativeServiceBroken(cached_broken_service); + http_server_props_->MarkAlternativeServiceBroken(cached_broken_service2); + http_server_props_->MarkAlternativeServiceRecentlyBroken( cached_recently_broken_service); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); + // There should be a task to remove remove alt services from the cache of + // broken alt services. There should be no task to update the prefs, since the + // prefs file hasn't been loaded yet. EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - // Run the prefs update task but not the expiration task for - // |cached_broken_service|. - FastForwardBy(HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting()); - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); // Load the |pref_delegate_| with some JSON to verify updating the cache from // prefs. For the broken alternative services "www.google.com:1234" and @@ -1643,21 +1749,23 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { "\"server_info\":\"quic_server_info1\"}" "}," "\"servers\":[" - "{\"https://www.google.com:80\":{" + "{\"server\":\"https://www.google.com:80\"," + "\"isolation\":[]," "\"alternative_service\":[" "{\"expiration\":\"13756212000000000\",\"port\":443," "\"protocol_str\":\"h2\"}," "{\"expiration\":\"13758804000000000\",\"host\":\"www.google.com\"," "\"port\":1234,\"protocol_str\":\"h2\"}" "]" - "}}," - "{\"https://mail.google.com:80\":{" + "}," + "{\"server\":\"https://mail.google.com:80\"," + "\"isolation\":[]," "\"alternative_service\":[" "{\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\"," "\"port\":444,\"protocol_str\":\"h2\"}" "]," "\"network_stats\":{\"srtt\":42}" - "}}" + "}" "]," "\"supports_quic\":" "{\"address\":\"127.0.0.1\",\"used_quic\":true}," @@ -1667,20 +1775,25 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { base::DictionaryValue* server_dict; ASSERT_TRUE(server_value->GetAsDictionary(&server_dict)); - pref_delegate_->SetPrefs(*server_dict); + // Don't use the test fixture's InitializePrefs() method, since there are + // pending tasks. Initializing prefs should queue a pref update task, since + // prefs have been modified. + pref_delegate_->InitializePrefs(*server_dict); + EXPECT_TRUE(http_server_props_->IsInitialized()); + EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - // Run the cache update task but not the expiration task for - // |cached_broken_service|. - FastForwardBy(NextMainThreadPendingTaskDelay()); + // Run until prefs are updated. + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); + EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_NE(0u, GetPendingMainThreadTaskCount()); // // Verify alternative service info for https://www.google.com // AlternativeServiceInfoVector alternative_service_info_vector = - http_server_props_manager_->GetAlternativeServiceInfos( - url::SchemeHostPort("https", "www.google.com", 80)); + http_server_props_->GetAlternativeServiceInfos( + url::SchemeHostPort("https", "www.google.com", 80), + NetworkIsolationKey()); ASSERT_EQ(2u, alternative_service_info_vector.size()); EXPECT_EQ(kProtoHTTP2, @@ -1708,8 +1821,9 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { // Verify alternative service info for https://mail.google.com // alternative_service_info_vector = - http_server_props_manager_->GetAlternativeServiceInfos( - url::SchemeHostPort("https", "mail.google.com", 80)); + http_server_props_->GetAlternativeServiceInfos( + url::SchemeHostPort("https", "mail.google.com", 80), + NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(kProtoHTTP2, @@ -1726,38 +1840,41 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { // Verify broken alternative services. // AlternativeService prefs_broken_service(kProtoHTTP2, "www.google.com", 1234); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service2)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - prefs_broken_service)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service2)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(prefs_broken_service)); + // Verify brokenness expiration times. // |cached_broken_service|'s expiration time should've been overwritten by the // prefs to be approximately 1 day from now. |cached_broken_service2|'s // expiration time should still be 5 minutes due to being marked broken. // |prefs_broken_service|'s expiration time should be approximately 1 day from // now which comes from the prefs. - FastForwardBy(base::TimeDelta::FromMinutes(4)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service2)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - prefs_broken_service)); + FastForwardBy(base::TimeDelta::FromMinutes(5) - + HttpServerProperties::GetUpdatePrefsDelayForTesting()); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service2)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(prefs_broken_service)); FastForwardBy(base::TimeDelta::FromDays(1)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service2)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - prefs_broken_service)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service2)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(prefs_broken_service)); // Now that |prefs_broken_service|'s brokenness has expired, it should've // been removed from the alternative services info vectors of all servers. alternative_service_info_vector = - http_server_props_manager_->GetAlternativeServiceInfos( - url::SchemeHostPort("https", "www.google.com", 80)); + http_server_props_->GetAlternativeServiceInfos( + url::SchemeHostPort("https", "www.google.com", 80), + NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); // @@ -1772,90 +1889,504 @@ TEST_F(HttpServerPropertiesManagerTest, UpdateCacheWithPrefs) { // |cached_broken_service2| should have broken-count 1 from being marked // broken. - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( prefs_broken_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( cached_recently_broken_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( cached_broken_service)); - EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( + EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken( cached_broken_service2)); // Make sure |prefs_broken_service| has the right expiration delay when marked // broken. Since |prefs_broken_service| had no broken_count specified in the // prefs, a broken_count value of 1 should have been assumed by - // |http_server_props_manager_|. - http_server_props_manager_->MarkAlternativeServiceBroken( - prefs_broken_service); + // |http_server_props_|. + http_server_props_->MarkAlternativeServiceBroken(prefs_broken_service); EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates()); EXPECT_NE(0u, GetPendingMainThreadTaskCount()); FastForwardBy(base::TimeDelta::FromMinutes(10) - base::TimeDelta::FromInternalValue(1)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - prefs_broken_service)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(prefs_broken_service)); FastForwardBy(base::TimeDelta::FromInternalValue(1)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - prefs_broken_service)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(prefs_broken_service)); // Make sure |cached_recently_broken_service| has the right expiration delay // when marked broken. - http_server_props_manager_->MarkAlternativeServiceBroken( + http_server_props_->MarkAlternativeServiceBroken( cached_recently_broken_service); EXPECT_NE(0u, GetPendingMainThreadTaskCount()); FastForwardBy(base::TimeDelta::FromMinutes(40) - base::TimeDelta::FromInternalValue(1)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( + EXPECT_TRUE(http_server_props_->IsAlternativeServiceBroken( cached_recently_broken_service)); FastForwardBy(base::TimeDelta::FromInternalValue(1)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( + EXPECT_FALSE(http_server_props_->IsAlternativeServiceBroken( cached_recently_broken_service)); // Make sure |cached_broken_service| has the right expiration delay when // marked broken. - http_server_props_manager_->MarkAlternativeServiceBroken( - cached_broken_service); - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - FastForwardBy(base::TimeDelta::FromMinutes(20) - - base::TimeDelta::FromInternalValue(1)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service)); - FastForwardBy(base::TimeDelta::FromInternalValue(1)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service)); - // Make sure |cached_broken_service2| has the right expiration delay when - // marked broken. - http_server_props_manager_->MarkAlternativeServiceBroken( - cached_broken_service2); - EXPECT_NE(0u, GetPendingMainThreadTaskCount()); - FastForwardBy(base::TimeDelta::FromMinutes(10) - - base::TimeDelta::FromInternalValue(1)); - EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service2)); - FastForwardBy(base::TimeDelta::FromInternalValue(1)); - EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( - cached_broken_service2)); - - // - // Verify ServerNetworkStats. - // - const ServerNetworkStats* server_network_stats = - http_server_props_manager_->GetServerNetworkStats( - url::SchemeHostPort("https", "mail.google.com", 80)); - EXPECT_TRUE(server_network_stats); - EXPECT_EQ(server_network_stats->srtt, - base::TimeDelta::FromInternalValue(42)); - - // - // Verify QUIC server info. - // - const std::string* quic_server_info = - http_server_props_manager_->GetQuicServerInfo( - quic::QuicServerId("mail.google.com", 80, false)); - EXPECT_EQ("quic_server_info1", *quic_server_info); - - // - // Verify supports QUIC. - // - IPAddress actual_address(127, 0, 0, 1); - EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&actual_address)); - EXPECT_EQ(4, pref_delegate_->GetAndClearNumPrefUpdates()); + http_server_props_->MarkAlternativeServiceBroken(cached_broken_service); + EXPECT_NE(0u, GetPendingMainThreadTaskCount()); + FastForwardBy(base::TimeDelta::FromMinutes(20) - + base::TimeDelta::FromInternalValue(1)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service)); + FastForwardBy(base::TimeDelta::FromInternalValue(1)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service)); + // Make sure |cached_broken_service2| has the right expiration delay when + // marked broken. + http_server_props_->MarkAlternativeServiceBroken(cached_broken_service2); + EXPECT_NE(0u, GetPendingMainThreadTaskCount()); + FastForwardBy(base::TimeDelta::FromMinutes(10) - + base::TimeDelta::FromInternalValue(1)); + EXPECT_TRUE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service2)); + FastForwardBy(base::TimeDelta::FromInternalValue(1)); + EXPECT_FALSE( + http_server_props_->IsAlternativeServiceBroken(cached_broken_service2)); + + // + // Verify ServerNetworkStats. + // + const ServerNetworkStats* server_network_stats = + http_server_props_->GetServerNetworkStats( + url::SchemeHostPort("https", "mail.google.com", 80), + NetworkIsolationKey()); + EXPECT_TRUE(server_network_stats); + EXPECT_EQ(server_network_stats->srtt, base::TimeDelta::FromInternalValue(42)); + + // + // Verify QUIC server info. + // + const std::string* quic_server_info = http_server_props_->GetQuicServerInfo( + quic::QuicServerId("mail.google.com", 80, false)); + EXPECT_EQ("quic_server_info1", *quic_server_info); + + // + // Verify supports QUIC. + // + IPAddress actual_address(127, 0, 0, 1); + EXPECT_TRUE(http_server_props_->GetSupportsQuic(&actual_address)); + EXPECT_EQ(4, pref_delegate_->GetAndClearNumPrefUpdates()); +} + +// Check the interaction of ForceHTTP11 with saving/restoring settings. +// In particular, ForceHTTP11 is not saved, and it should not overwrite or be +// overitten by loaded data. +TEST_F(HttpServerPropertiesManagerTest, ForceHTTP11) { + const url::SchemeHostPort kServer1("https", "foo.test", 443); + const url::SchemeHostPort kServer2("https", "bar.test", 443); + const url::SchemeHostPort kServer3("https", "baz.test", 443); + + // Create and initialize an HttpServerProperties with no state. + std::unique_ptr<MockPrefDelegate> pref_delegate = + std::make_unique<MockPrefDelegate>(); + MockPrefDelegate* unowned_pref_delegate = pref_delegate.get(); + std::unique_ptr<HttpServerProperties> properties = + std::make_unique<HttpServerProperties>(std::move(pref_delegate), + /*net_log=*/nullptr, + GetMockTickClock()); + unowned_pref_delegate->InitializePrefs(base::DictionaryValue()); + + // Set kServer1 to support H2, but require HTTP/1.1. Set kServer2 to only + // require HTTP/1.1. + EXPECT_FALSE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey())); + EXPECT_FALSE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey())); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey())); + EXPECT_FALSE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey())); + properties->SetSupportsSpdy(kServer1, NetworkIsolationKey(), true); + properties->SetHTTP11Required(kServer1, NetworkIsolationKey()); + properties->SetHTTP11Required(kServer2, NetworkIsolationKey()); + EXPECT_TRUE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey())); + EXPECT_TRUE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey())); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey())); + EXPECT_TRUE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey())); + + // Wait until the data's been written to prefs, and then tear down the + // HttpServerProperties. + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); + std::unique_ptr<base::DictionaryValue> saved_value = + unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + properties.reset(); + + // Only information on kServer1 should have been saved to prefs. + std::string preferences_json; + base::JSONWriter::Write(*saved_value, &preferences_json); + EXPECT_EQ( + "{\"servers\":[" + "{\"isolation\":[]," + "\"server\":\"https://foo.test\"," + "\"supports_spdy\":true}]," + "\"version\":5}", + preferences_json); + + // Create a new HttpServerProperties using the value saved to prefs above. + pref_delegate = std::make_unique<MockPrefDelegate>(); + unowned_pref_delegate = pref_delegate.get(); + properties = std::make_unique<HttpServerProperties>( + std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); + + // Before the data has loaded, set kServer1 and kServer3 as requiring + // HTTP/1.1. + EXPECT_FALSE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey())); + EXPECT_FALSE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey())); + properties->SetHTTP11Required(kServer1, NetworkIsolationKey()); + properties->SetHTTP11Required(kServer3, NetworkIsolationKey()); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey())); + EXPECT_TRUE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey())); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey())); + EXPECT_FALSE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey())); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer3, NetworkIsolationKey())); + EXPECT_TRUE(properties->RequiresHTTP11(kServer3, NetworkIsolationKey())); + + // The data loads. + unowned_pref_delegate->InitializePrefs(*saved_value); + + // The properties should contain a combination of the old and new data. + EXPECT_TRUE(properties->GetSupportsSpdy(kServer1, NetworkIsolationKey())); + EXPECT_TRUE(properties->RequiresHTTP11(kServer1, NetworkIsolationKey())); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey())); + EXPECT_FALSE(properties->RequiresHTTP11(kServer2, NetworkIsolationKey())); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer3, NetworkIsolationKey())); + EXPECT_TRUE(properties->RequiresHTTP11(kServer3, NetworkIsolationKey())); +} + +TEST_F(HttpServerPropertiesManagerTest, NetworkIsolationKeyServerInfo) { + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const url::Origin kOpaqueOrigin = + url::Origin::Create(GURL("data:text/plain,Hello World")); + const url::SchemeHostPort kServer("https", "baz.test", 443); + const url::SchemeHostPort kServer2("https", "zab.test", 443); + + HttpServerProperties::ServerInfo server_info; + server_info.supports_spdy = true; + + for (auto save_network_isolation_key_mode : kNetworkIsolationKeyModes) { + SCOPED_TRACE(static_cast<int>(save_network_isolation_key_mode)); + + // Save prefs using |save_network_isolation_key_mode|. + base::Value saved_value; + { + // Configure the the feature. + std::unique_ptr<base::test::ScopedFeatureList> feature_list = + SetNetworkIsolationKeyMode(save_network_isolation_key_mode); + + // This parameter is normally calculated by HttpServerProperties based on + // the kPartitionHttpServerPropertiesByNetworkIsolationKey feature, but + // this test doesn't use that class. + bool use_network_isolation_key = + save_network_isolation_key_mode != NetworkIsolationKeyMode::kDisabled; + + HttpServerProperties::ServerInfoMap server_info_map; + + // Add server info entry using two origins with value of |server_info|. + // NetworkIsolationKey's constructor takes the state of the + // kAppendFrameOriginToNetworkIsolationKey feature into account, so need + // to make sure to call the constructor after setting up the feature + // above. + HttpServerProperties::ServerInfoMapKey server_info_key( + kServer, NetworkIsolationKey(kOrigin1, kOrigin2), + use_network_isolation_key); + server_info_map.Put(server_info_key, server_info); + + // Also add an etry with an opaque origin, if |use_network_isolation_key| + // is true. This value should not be saved to disk, since opaque origins + // are only meaningful within a browsing session. + if (use_network_isolation_key) { + HttpServerProperties::ServerInfoMapKey server_info_key2( + kServer2, NetworkIsolationKey(kOpaqueOrigin, kOpaqueOrigin), + use_network_isolation_key); + server_info_map.Put(server_info_key2, server_info); + } + + saved_value = ServerInfoMapToValue(server_info_map); + } + + for (auto load_network_isolation_key_mode : kNetworkIsolationKeyModes) { + SCOPED_TRACE(static_cast<int>(load_network_isolation_key_mode)); + + std::unique_ptr<base::test::ScopedFeatureList> feature_list = + SetNetworkIsolationKeyMode(load_network_isolation_key_mode); + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map2 = + ValueToServerInfoMap(saved_value); + ASSERT_TRUE(server_info_map2); + if (save_network_isolation_key_mode == + NetworkIsolationKeyMode::kDisabled) { + // If NetworkIsolationKey was disabled when saving, it was saved with an + // empty NetworkIsolationKey, which should always be loaded + // successfully. This is needed to continue to support consumers that + // don't use NetworkIsolationKeys. + ASSERT_EQ(1u, server_info_map2->size()); + const HttpServerProperties::ServerInfoMapKey& server_info_key2 = + server_info_map2->begin()->first; + const HttpServerProperties::ServerInfo& server_info2 = + server_info_map2->begin()->second; + EXPECT_EQ(kServer, server_info_key2.server); + EXPECT_EQ(NetworkIsolationKey(), + server_info_key2.network_isolation_key); + EXPECT_EQ(server_info, server_info2); + } else if (save_network_isolation_key_mode == + load_network_isolation_key_mode) { + // If the save and load modes are the same, the load should succeed, and + // the network isolation keys should match. + ASSERT_EQ(1u, server_info_map2->size()); + const HttpServerProperties::ServerInfoMapKey& server_info_key2 = + server_info_map2->begin()->first; + const HttpServerProperties::ServerInfo& server_info2 = + server_info_map2->begin()->second; + EXPECT_EQ(kServer, server_info_key2.server); + EXPECT_EQ(NetworkIsolationKey(kOrigin1, kOrigin2), + server_info_key2.network_isolation_key); + EXPECT_EQ(server_info, server_info2); + } else { + // Otherwise, the NetworkIsolationKey doesn't make sense with the + // current feature values, so the ServerInfo should be discarded. + EXPECT_EQ(0u, server_info_map2->size()); + } + } + } +} + +// Tests a full round trip with a NetworkIsolationKey, using the +// HttpServerProperties interface. +TEST_F(HttpServerPropertiesManagerTest, NetworkIsolationKeyIntegration) { + const url::Origin kOrigin = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey(kOrigin, kOrigin); + const url::SchemeHostPort kServer("https", "baz.test", 443); + + const url::Origin kOpaqueOrigin = + url::Origin::Create(GURL("data:text/plain,Hello World")); + const NetworkIsolationKey kOpaqueOriginNetworkIsolationKey(kOpaqueOrigin, + kOpaqueOrigin); + const url::SchemeHostPort kServer2("https", "zab.test", 443); + + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + + // Create and initialize an HttpServerProperties with no state. + std::unique_ptr<MockPrefDelegate> pref_delegate = + std::make_unique<MockPrefDelegate>(); + MockPrefDelegate* unowned_pref_delegate = pref_delegate.get(); + std::unique_ptr<HttpServerProperties> properties = + std::make_unique<HttpServerProperties>(std::move(pref_delegate), + /*net_log=*/nullptr, + GetMockTickClock()); + unowned_pref_delegate->InitializePrefs(base::DictionaryValue()); + + // Set a values using kNetworkIsolationKey. + properties->SetSupportsSpdy(kServer, kNetworkIsolationKey, true); + EXPECT_TRUE(properties->GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE( + properties->GetSupportsSpdy(kServer, kOpaqueOriginNetworkIsolationKey)); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer, NetworkIsolationKey())); + + // Opaque origins should works with HttpServerProperties, but not be persisted + // to disk. + properties->SetSupportsSpdy(kServer2, kOpaqueOriginNetworkIsolationKey, true); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, kNetworkIsolationKey)); + EXPECT_TRUE( + properties->GetSupportsSpdy(kServer2, kOpaqueOriginNetworkIsolationKey)); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey())); + + // Wait until the data's been written to prefs, and then tear down the + // HttpServerProperties. + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); + std::unique_ptr<base::DictionaryValue> saved_value = + unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + properties.reset(); + + // Create a new HttpServerProperties using the value saved to prefs above. + pref_delegate = std::make_unique<MockPrefDelegate>(); + unowned_pref_delegate = pref_delegate.get(); + properties = std::make_unique<HttpServerProperties>( + std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); + unowned_pref_delegate->InitializePrefs(*saved_value); + + // The information set using kNetworkIsolationKey on the original + // HttpServerProperties should also be set on the restored + // HttpServerProperties. + EXPECT_TRUE(properties->GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE( + properties->GetSupportsSpdy(kServer, kOpaqueOriginNetworkIsolationKey)); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer, NetworkIsolationKey())); + + // The information set using kOpaqueOriginNetworkIsolationKey should not have + // been restored. + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, kNetworkIsolationKey)); + EXPECT_FALSE( + properties->GetSupportsSpdy(kServer2, kOpaqueOriginNetworkIsolationKey)); + EXPECT_FALSE(properties->GetSupportsSpdy(kServer2, NetworkIsolationKey())); +} + +// Tests a full round trip to prefs and back in the canonical suffix case. +// Enable NetworkIsolationKeys, as they have some interactions with the +// canonical suffix logic. +TEST_F(HttpServerPropertiesManagerTest, + CanonicalSuffixRoundTripWithNetworkIsolationKey) { + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + // Three servers with the same canonical suffix (".c.youtube.com"). + const url::SchemeHostPort kServer1("https", "foo.c.youtube.com", 443); + const url::SchemeHostPort kServer2("https", "bar.c.youtube.com", 443); + const url::SchemeHostPort kServer3("https", "baz.c.youtube.com", 443); + + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + + // Create three alt service vectors of different lengths. + base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); + AlternativeServiceInfo alt_service1 = + AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + AlternativeService(kProtoQUIC, "foopy.c.youtube.com", 1234), + expiration, + HttpNetworkSession::Params().quic_params.supported_versions); + AlternativeServiceInfo alt_service2 = + AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + AlternativeService(kProtoHTTP2, "foopy.c.youtube.com", 443), + expiration); + AlternativeServiceInfo alt_service3 = + AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + AlternativeService(kProtoHTTP2, "foopy2.c.youtube.com", 443), + expiration); + AlternativeServiceInfoVector alt_service_vector1 = {alt_service1}; + AlternativeServiceInfoVector alt_service_vector2 = {alt_service1, + alt_service2}; + AlternativeServiceInfoVector alt_service_vector3 = { + alt_service1, alt_service2, alt_service3}; + + // Create and initialize an HttpServerProperties with no state. + std::unique_ptr<MockPrefDelegate> pref_delegate = + std::make_unique<MockPrefDelegate>(); + MockPrefDelegate* unowned_pref_delegate = pref_delegate.get(); + std::unique_ptr<HttpServerProperties> properties = + std::make_unique<HttpServerProperties>(std::move(pref_delegate), + /*net_log=*/nullptr, + GetMockTickClock()); + unowned_pref_delegate->InitializePrefs(base::DictionaryValue()); + + // Set alternative services for kServer1 using kNetworkIsolationKey1. That + // information should be retrieved when fetching information for any server + // with the same canonical suffix, when using kNetworkIsolationKey1. + properties->SetAlternativeServices(kServer1, kNetworkIsolationKey1, + alt_service_vector1); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 0u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2) + .size()); + + // Set different alternative services for kServer2 using + // kNetworkIsolationKey1. It should not affect information retrieved for + // kServer1, but should for kServer2 and kServer3. + properties->SetAlternativeServices(kServer2, kNetworkIsolationKey1, + alt_service_vector2); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 2u, + properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 2u, + properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 0u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2) + .size()); + + // Set different information for kServer1 using kNetworkIsolationKey2. It + // should not affect information stored for kNetworkIsolationKey1. + properties->SetAlternativeServices(kServer1, kNetworkIsolationKey2, + alt_service_vector3); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 2u, + properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 2u, + properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 3u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2) + .size()); + EXPECT_EQ( + 3u, + properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey2) + .size()); + EXPECT_EQ( + 3u, + properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey2) + .size()); + + // Wait until the data's been written to prefs, and then tear down the + // HttpServerProperties. + FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting()); + std::unique_ptr<base::DictionaryValue> saved_value = + unowned_pref_delegate->GetServerProperties()->CreateDeepCopy(); + properties.reset(); + + // Create a new HttpServerProperties using the value saved to prefs above. + pref_delegate = std::make_unique<MockPrefDelegate>(); + unowned_pref_delegate = pref_delegate.get(); + properties = std::make_unique<HttpServerProperties>( + std::move(pref_delegate), /*net_log=*/nullptr, GetMockTickClock()); + unowned_pref_delegate->InitializePrefs(*saved_value); + + // Only the first of the values learned for kNetworkIsolationKey1 should have + // been saved, and the value for kNetworkIsolationKey2 as well. The canonical + // suffix logic should still be respected. + // + // TODO(mmenke): Preferring the oldest value seems unexpected. + // https://crbug.com/994842. + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 1u, + properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey1) + .size()); + EXPECT_EQ( + 3u, + properties->GetAlternativeServiceInfos(kServer1, kNetworkIsolationKey2) + .size()); + EXPECT_EQ( + 3u, + properties->GetAlternativeServiceInfos(kServer2, kNetworkIsolationKey2) + .size()); + EXPECT_EQ( + 3u, + properties->GetAlternativeServiceInfos(kServer3, kNetworkIsolationKey2) + .size()); } } // namespace net diff --git a/chromium/net/http/http_server_properties_impl_unittest.cc b/chromium/net/http/http_server_properties_unittest.cc index 95aa25ddaf6..2eca2e469f0 100644 --- a/chromium/net/http/http_server_properties_impl_unittest.cc +++ b/chromium/net/http/http_server_properties_unittest.cc @@ -2,23 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "net/http/http_server_properties_impl.h" +#include "net/http/http_server_properties.h" #include <memory> #include <string> #include <vector> #include "base/bind.h" +#include "base/feature_list.h" #include "base/json/json_writer.h" #include "base/logging.h" #include "base/run_loop.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/scoped_feature_list.h" #include "base/test/simple_test_clock.h" +#include "base/test/task_environment.h" #include "base/values.h" +#include "net/base/features.h" #include "net/base/host_port_pair.h" #include "net/base/ip_address.h" #include "net/http/http_network_session.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -36,10 +39,10 @@ const base::TimeDelta BROKEN_ALT_SVC_EXPIRE_DELAYS[10] = { base::TimeDelta::FromSeconds(76800), base::TimeDelta::FromSeconds(153600), }; -class HttpServerPropertiesImplPeer { +class HttpServerPropertiesPeer { public: static void AddBrokenAlternativeServiceWithExpirationTime( - HttpServerPropertiesImpl* impl, + HttpServerProperties* impl, const AlternativeService& alternative_service, base::TimeTicks when) { BrokenAlternativeServiceList::iterator unused_it; @@ -58,41 +61,53 @@ class HttpServerPropertiesImplPeer { } static void ExpireBrokenAlternateProtocolMappings( - HttpServerPropertiesImpl* impl) { + HttpServerProperties* impl) { impl->broken_alternative_services_.ExpireBrokenAlternateProtocolMappings(); } }; namespace { -class HttpServerPropertiesImplTest : public TestWithScopedTaskEnvironment { +// Creates a ServerInfoMapKey without a NetworkIsolationKey. +HttpServerProperties::ServerInfoMapKey CreateSimpleKey( + const url::SchemeHostPort& server) { + return HttpServerProperties::ServerInfoMapKey( + server, net::NetworkIsolationKey(), + false /* use_network_isolation_key */); +} + +class HttpServerPropertiesTest : public TestWithTaskEnvironment { protected: - HttpServerPropertiesImplTest() - : TestWithScopedTaskEnvironment( - base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME), + HttpServerPropertiesTest() + : TestWithTaskEnvironment( + base::test::TaskEnvironment::TimeSource::MOCK_TIME), test_tick_clock_(GetMockTickClock()), - impl_(test_tick_clock_, &test_clock_) { + impl_(nullptr /* pref_delegate */, + nullptr /* net_log */, + test_tick_clock_, + &test_clock_) { // Set |test_clock_| to some random time. test_clock_.Advance(base::TimeDelta::FromSeconds(12345)); } - bool HasAlternativeService(const url::SchemeHostPort& origin) { + bool HasAlternativeService(const url::SchemeHostPort& origin, + const NetworkIsolationKey& network_isolation_key) { const AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(origin); + impl_.GetAlternativeServiceInfos(origin, network_isolation_key); return !alternative_service_info_vector.empty(); } - bool SetAlternativeService(const url::SchemeHostPort& origin, + void SetAlternativeService(const url::SchemeHostPort& origin, const AlternativeService& alternative_service) { const base::Time expiration = test_clock_.Now() + base::TimeDelta::FromDays(1); if (alternative_service.protocol == kProtoQUIC) { - return impl_.SetQuicAlternativeService( - origin, alternative_service, expiration, + impl_.SetQuicAlternativeService( + origin, NetworkIsolationKey(), alternative_service, expiration, HttpNetworkSession::Params().quic_params.supported_versions); } else { - return impl_.SetHttp2AlternativeService(origin, alternative_service, - expiration); + impl_.SetHttp2AlternativeService(origin, NetworkIsolationKey(), + alternative_service, expiration); } } @@ -103,191 +118,363 @@ class HttpServerPropertiesImplTest : public TestWithScopedTaskEnvironment { const base::TickClock* test_tick_clock_; base::SimpleTestClock test_clock_; - HttpServerPropertiesImpl impl_; + HttpServerProperties impl_; }; -typedef HttpServerPropertiesImplTest SpdyServerPropertiesTest; +TEST_F(HttpServerPropertiesTest, GetNormalizedSchemeHostPort) { + url::SchemeHostPort server = + HttpServerProperties::GetNormalizedSchemeHostPort( + GURL("https://foo.test/")); + EXPECT_EQ("https", server.scheme()); + EXPECT_EQ("foo.test", server.host()); + EXPECT_EQ(443, server.port()); + + server = HttpServerProperties::GetNormalizedSchemeHostPort( + GURL("wss://foo.test/")); + EXPECT_EQ("https", server.scheme()); + EXPECT_EQ("foo.test", server.host()); + EXPECT_EQ(443, server.port()); + + server = HttpServerProperties::GetNormalizedSchemeHostPort( + GURL("wss://bar.test:7/")); + EXPECT_EQ("https", server.scheme()); + EXPECT_EQ("bar.test", server.host()); + EXPECT_EQ(7, server.port()); + + server = HttpServerProperties::GetNormalizedSchemeHostPort( + GURL("http://foo.test/")); + EXPECT_EQ("http", server.scheme()); + EXPECT_EQ("foo.test", server.host()); + EXPECT_EQ(80, server.port()); + + server = + HttpServerProperties::GetNormalizedSchemeHostPort(GURL("ws://foo.test/")); + EXPECT_EQ("http", server.scheme()); + EXPECT_EQ("foo.test", server.host()); + EXPECT_EQ(80, server.port()); + + server = HttpServerProperties::GetNormalizedSchemeHostPort( + GURL("ws://bar.test:7/")); + EXPECT_EQ("http", server.scheme()); + EXPECT_EQ("bar.test", server.host()); + EXPECT_EQ(7, server.port()); + + // Neither of these should happen, except possibly when loading a bad + // properties file, but neither should crash. + server = HttpServerProperties::GetNormalizedSchemeHostPort(GURL()); + EXPECT_EQ("", server.host()); + server = HttpServerProperties::GetNormalizedSchemeHostPort( + GURL("file:///foo/bar")); + EXPECT_EQ(server, url::SchemeHostPort(GURL("file:///foo/bar"))); +} -TEST_F(SpdyServerPropertiesTest, SetWithSchemeHostPort) { +TEST_F(HttpServerPropertiesTest, SetSupportsSpdy) { // Check spdy servers are correctly set with SchemeHostPort key. url::SchemeHostPort https_www_server("https", "www.google.com", 443); url::SchemeHostPort http_photo_server("http", "photos.google.com", 80); + url::SchemeHostPort https_mail_server("https", "mail.google.com", 443); // Servers with port equal to default port in scheme will drop port components // when calling Serialize(). - std::string spdy_server_g = https_www_server.Serialize(); - std::string spdy_server_p = http_photo_server.Serialize(); url::SchemeHostPort http_google_server("http", "www.google.com", 443); url::SchemeHostPort https_photos_server("https", "photos.google.com", 443); url::SchemeHostPort valid_google_server((GURL("https://www.google.com"))); - // Initializing https://www.google.com:443 and https://photos.google.com:443 - // as spdy servers. - std::unique_ptr<SpdyServersMap> spdy_servers1 = - std::make_unique<SpdyServersMap>(); - spdy_servers1->Put(spdy_server_g, true); - spdy_servers1->Put(spdy_server_p, true); - impl_.SetSpdyServers(std::move(spdy_servers1)); - EXPECT_TRUE(impl_.SupportsRequestPriority(http_photo_server)); - EXPECT_TRUE(impl_.SupportsRequestPriority(https_www_server)); - EXPECT_FALSE(impl_.SupportsRequestPriority(http_google_server)); - EXPECT_FALSE(impl_.SupportsRequestPriority(https_photos_server)); - EXPECT_TRUE(impl_.SupportsRequestPriority(valid_google_server)); + impl_.SetSupportsSpdy(https_www_server, NetworkIsolationKey(), true); + impl_.SetSupportsSpdy(http_photo_server, NetworkIsolationKey(), true); + impl_.SetSupportsSpdy(https_mail_server, NetworkIsolationKey(), false); + EXPECT_TRUE(impl_.GetSupportsSpdy(https_www_server, NetworkIsolationKey())); + EXPECT_TRUE( + impl_.SupportsRequestPriority(https_www_server, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(http_photo_server, NetworkIsolationKey())); + EXPECT_TRUE( + impl_.SupportsRequestPriority(http_photo_server, NetworkIsolationKey())); + EXPECT_FALSE(impl_.GetSupportsSpdy(https_mail_server, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.SupportsRequestPriority(https_mail_server, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.GetSupportsSpdy(http_google_server, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.SupportsRequestPriority(http_google_server, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.GetSupportsSpdy(https_photos_server, NetworkIsolationKey())); + EXPECT_FALSE(impl_.SupportsRequestPriority(https_photos_server, + NetworkIsolationKey())); + EXPECT_TRUE( + impl_.GetSupportsSpdy(valid_google_server, NetworkIsolationKey())); + EXPECT_TRUE(impl_.SupportsRequestPriority(valid_google_server, + NetworkIsolationKey())); + + // Flip values of two servers. + impl_.SetSupportsSpdy(https_www_server, NetworkIsolationKey(), false); + impl_.SetSupportsSpdy(https_mail_server, NetworkIsolationKey(), true); + EXPECT_FALSE(impl_.GetSupportsSpdy(https_www_server, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.SupportsRequestPriority(https_www_server, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(https_mail_server, NetworkIsolationKey())); + EXPECT_TRUE( + impl_.SupportsRequestPriority(https_mail_server, NetworkIsolationKey())); } -TEST_F(SpdyServerPropertiesTest, Set) { - url::SchemeHostPort spdy_server_google("https", "www.google.com", 443); - std::string spdy_server_g = spdy_server_google.Serialize(); +TEST_F(HttpServerPropertiesTest, SetSupportsSpdyWithNetworkIsolationKey) { + const url::SchemeHostPort kServer("https", "foo.test", 443); + const url::Origin kOrigin = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey(kOrigin, kOrigin); + + EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, NetworkIsolationKey())); + + // Without network isolation keys enabled for HttpServerProperties, passing in + // a NetworkIsolationKey should have no effect on behavior. + for (const auto network_isolation_key_to_set : + {NetworkIsolationKey(), kNetworkIsolationKey}) { + impl_.SetSupportsSpdy(kServer, network_isolation_key_to_set, true); + EXPECT_TRUE(impl_.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_TRUE(impl_.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_TRUE(impl_.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_TRUE(impl_.SupportsRequestPriority(kServer, NetworkIsolationKey())); + + impl_.SetSupportsSpdy(kServer, network_isolation_key_to_set, false); + EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(impl_.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_FALSE(impl_.SupportsRequestPriority(kServer, NetworkIsolationKey())); + } - url::SchemeHostPort spdy_server_photos("https", "photos.google.com", 443); - std::string spdy_server_p = spdy_server_photos.Serialize(); + // With network isolation keys enabled for HttpServerProperties, the + // NetworkIsolationKey argument should be respected. - url::SchemeHostPort spdy_server_docs("https", "docs.google.com", 443); - std::string spdy_server_d = spdy_server_docs.Serialize(); + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + // Since HttpServerProperties caches the feature value, have to create a new + // one. + HttpServerProperties properties(nullptr /* pref_delegate */, + nullptr /* net_log */, test_tick_clock_, + &test_clock_); + + EXPECT_FALSE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE( + properties.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_FALSE( + properties.SupportsRequestPriority(kServer, NetworkIsolationKey())); + + properties.SetSupportsSpdy(kServer, kNetworkIsolationKey, true); + EXPECT_TRUE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_TRUE( + properties.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_FALSE( + properties.SupportsRequestPriority(kServer, NetworkIsolationKey())); + + properties.SetSupportsSpdy(kServer, NetworkIsolationKey(), true); + EXPECT_TRUE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_TRUE( + properties.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_TRUE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_TRUE( + properties.SupportsRequestPriority(kServer, NetworkIsolationKey())); + + properties.SetSupportsSpdy(kServer, kNetworkIsolationKey, false); + EXPECT_FALSE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE( + properties.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_TRUE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_TRUE( + properties.SupportsRequestPriority(kServer, NetworkIsolationKey())); + + properties.SetSupportsSpdy(kServer, NetworkIsolationKey(), false); + EXPECT_FALSE(properties.GetSupportsSpdy(kServer, kNetworkIsolationKey)); + EXPECT_FALSE( + properties.SupportsRequestPriority(kServer, kNetworkIsolationKey)); + EXPECT_FALSE(properties.GetSupportsSpdy(kServer, NetworkIsolationKey())); + EXPECT_FALSE( + properties.SupportsRequestPriority(kServer, NetworkIsolationKey())); +} +TEST_F(HttpServerPropertiesTest, LoadSupportsSpdy) { + HttpServerProperties::ServerInfo supports_spdy; + supports_spdy.supports_spdy = true; + HttpServerProperties::ServerInfo no_spdy; + no_spdy.supports_spdy = false; + + url::SchemeHostPort spdy_server_google("https", "www.google.com", 443); + url::SchemeHostPort spdy_server_photos("https", "photos.google.com", 443); + url::SchemeHostPort spdy_server_docs("https", "docs.google.com", 443); url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443); - std::string spdy_server_m = spdy_server_mail.Serialize(); // Check by initializing empty spdy servers. - std::unique_ptr<SpdyServersMap> spdy_servers = - std::make_unique<SpdyServersMap>(); - impl_.SetSpdyServers(std::move(spdy_servers)); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google)); + std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers)); + EXPECT_FALSE( + impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); // Check by initializing www.google.com:443 and photos.google.com:443 as spdy // servers. - std::unique_ptr<SpdyServersMap> spdy_servers1 = - std::make_unique<SpdyServersMap>(); - spdy_servers1->Put(spdy_server_g, true); - spdy_servers1->Put(spdy_server_p, true); - impl_.SetSpdyServers(std::move(spdy_servers1)); + std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers1 = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + spdy_servers1->Put(CreateSimpleKey(spdy_server_google), supports_spdy); + spdy_servers1->Put(CreateSimpleKey(spdy_server_photos), no_spdy); + impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers1)); // Note: these calls affect MRU order. - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_photos)); - - // Verify spdy_server_g and spdy_server_d are in the list in MRU order. - ASSERT_EQ(2U, impl_.spdy_servers_map().size()); - auto it = impl_.spdy_servers_map().begin(); - EXPECT_EQ(spdy_server_p, it->first); - EXPECT_TRUE(it->second); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.GetSupportsSpdy(spdy_server_photos, NetworkIsolationKey())); + + // Verify google and photos are in the list in MRU order. + ASSERT_EQ(2U, impl_.server_info_map_for_testing().size()); + auto it = impl_.server_info_map_for_testing().begin(); + EXPECT_EQ(spdy_server_photos, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_FALSE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_g, it->first); - EXPECT_TRUE(it->second); - - // Check by initializing mail.google.com:443 and docs.google.com:443 as spdy - // servers. - std::unique_ptr<SpdyServersMap> spdy_servers2 = - std::make_unique<SpdyServersMap>(); - spdy_servers2->Put(spdy_server_m, true); - spdy_servers2->Put(spdy_server_d, true); - impl_.SetSpdyServers(std::move(spdy_servers2)); + EXPECT_EQ(spdy_server_google, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); + + // Check by initializing mail.google.com:443 and docs.google.com:443. + std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers2 = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + spdy_servers2->Put(CreateSimpleKey(spdy_server_mail), supports_spdy); + spdy_servers2->Put(CreateSimpleKey(spdy_server_docs), supports_spdy); + impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers2)); // Verify all the servers are in the list in MRU order. Note that - // SetSpdyServers will put existing spdy server entries in front of newly - // added entries. - ASSERT_EQ(4U, impl_.spdy_servers_map().size()); - it = impl_.spdy_servers_map().begin(); - EXPECT_EQ(spdy_server_p, it->first); - EXPECT_TRUE(it->second); + // OnServerInfoLoadedForTesting will put existing spdy server entries in + // front of newly added entries. + ASSERT_EQ(4U, impl_.server_info_map_for_testing().size()); + it = impl_.server_info_map_for_testing().begin(); + EXPECT_EQ(spdy_server_photos, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_FALSE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_g, it->first); - EXPECT_TRUE(it->second); + EXPECT_EQ(spdy_server_google, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_d, it->first); - EXPECT_TRUE(it->second); + EXPECT_EQ(spdy_server_docs, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_m, it->first); - EXPECT_TRUE(it->second); + EXPECT_EQ(spdy_server_mail, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); // Check these in reverse MRU order so that MRU order stays the same. - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_mail)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_photos)); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_docs, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.GetSupportsSpdy(spdy_server_photos, NetworkIsolationKey())); - // Verify new data that is being initialized overwrites what is already in the - // memory and also verify the recency list order. - // - // Change supports SPDY value for photos and mails servers and order of - // initalization shouldn't matter. - std::unique_ptr<SpdyServersMap> spdy_servers3 = - std::make_unique<SpdyServersMap>(); - spdy_servers3->Put(spdy_server_m, false); - spdy_servers3->Put(spdy_server_p, false); - impl_.SetSpdyServers(std::move(spdy_servers3)); + // Verify that old values loaded from disk take precedence over newer learned + // values and also verify the recency list order is unchanged. + std::unique_ptr<HttpServerProperties::ServerInfoMap> spdy_servers3 = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + spdy_servers3->Put(CreateSimpleKey(spdy_server_mail), no_spdy); + spdy_servers3->Put(CreateSimpleKey(spdy_server_photos), supports_spdy); + impl_.OnServerInfoLoadedForTesting(std::move(spdy_servers3)); // Verify the entries are in the same order. - ASSERT_EQ(4U, impl_.spdy_servers_map().size()); - it = impl_.spdy_servers_map().begin(); - EXPECT_EQ(spdy_server_p, it->first); - EXPECT_FALSE(it->second); + ASSERT_EQ(4U, impl_.server_info_map_for_testing().size()); + it = impl_.server_info_map_for_testing().begin(); + EXPECT_EQ(spdy_server_photos, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_g, it->first); - EXPECT_TRUE(it->second); + EXPECT_EQ(spdy_server_google, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_d, it->first); - EXPECT_TRUE(it->second); + EXPECT_EQ(spdy_server_docs, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_TRUE(*it->second.supports_spdy); ++it; - EXPECT_EQ(spdy_server_m, it->first); - EXPECT_FALSE(it->second); - - // Verify photos and mail servers don't support SPDY and other servers support - // SPDY. - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_photos)); + EXPECT_EQ(spdy_server_mail, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.supports_spdy.has_value()); + EXPECT_FALSE(*it->second.supports_spdy); + + // Verify photos server doesn't support SPDY and other servers support SPDY. + EXPECT_FALSE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_docs, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_photos, NetworkIsolationKey())); } -TEST_F(SpdyServerPropertiesTest, SupportsRequestPriorityTest) { +TEST_F(HttpServerPropertiesTest, SupportsRequestPriority) { url::SchemeHostPort spdy_server_empty("https", std::string(), 443); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_empty)); + EXPECT_FALSE( + impl_.SupportsRequestPriority(spdy_server_empty, NetworkIsolationKey())); // Add www.google.com:443 as supporting SPDY. url::SchemeHostPort spdy_server_google("https", "www.google.com", 443); - impl_.SetSupportsSpdy(spdy_server_google, true); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); + impl_.SetSupportsSpdy(spdy_server_google, NetworkIsolationKey(), true); + EXPECT_TRUE( + impl_.SupportsRequestPriority(spdy_server_google, NetworkIsolationKey())); // Add mail.google.com:443 as not supporting SPDY. url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail)); + EXPECT_FALSE( + impl_.SupportsRequestPriority(spdy_server_mail, NetworkIsolationKey())); // Add docs.google.com:443 as supporting SPDY. url::SchemeHostPort spdy_server_docs("https", "docs.google.com", 443); - impl_.SetSupportsSpdy(spdy_server_docs, true); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs)); + impl_.SetSupportsSpdy(spdy_server_docs, NetworkIsolationKey(), true); + EXPECT_TRUE( + impl_.SupportsRequestPriority(spdy_server_docs, NetworkIsolationKey())); // Add www.youtube.com:443 as supporting QUIC. url::SchemeHostPort youtube_server("https", "www.youtube.com", 443); const AlternativeService alternative_service1(kProtoQUIC, "www.youtube.com", 443); SetAlternativeService(youtube_server, alternative_service1); - EXPECT_TRUE(impl_.SupportsRequestPriority(youtube_server)); + EXPECT_TRUE( + impl_.SupportsRequestPriority(youtube_server, NetworkIsolationKey())); // Add www.example.com:443 with two alternative services, one supporting QUIC. url::SchemeHostPort example_server("https", "www.example.com", 443); const AlternativeService alternative_service2(kProtoHTTP2, "", 443); SetAlternativeService(example_server, alternative_service2); SetAlternativeService(example_server, alternative_service1); - EXPECT_TRUE(impl_.SupportsRequestPriority(example_server)); + EXPECT_TRUE( + impl_.SupportsRequestPriority(example_server, NetworkIsolationKey())); // Verify all the entries are the same after additions. - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs)); - EXPECT_TRUE(impl_.SupportsRequestPriority(youtube_server)); - EXPECT_TRUE(impl_.SupportsRequestPriority(example_server)); + EXPECT_TRUE( + impl_.SupportsRequestPriority(spdy_server_google, NetworkIsolationKey())); + EXPECT_FALSE( + impl_.SupportsRequestPriority(spdy_server_mail, NetworkIsolationKey())); + EXPECT_TRUE( + impl_.SupportsRequestPriority(spdy_server_docs, NetworkIsolationKey())); + EXPECT_TRUE( + impl_.SupportsRequestPriority(youtube_server, NetworkIsolationKey())); + EXPECT_TRUE( + impl_.SupportsRequestPriority(example_server, NetworkIsolationKey())); } -TEST_F(SpdyServerPropertiesTest, Clear) { +TEST_F(HttpServerPropertiesTest, ClearSupportsSpdy) { // Add www.google.com:443 and mail.google.com:443 as supporting SPDY. url::SchemeHostPort spdy_server_google("https", "www.google.com", 443); - impl_.SetSupportsSpdy(spdy_server_google, true); + impl_.SetSupportsSpdy(spdy_server_google, NetworkIsolationKey(), true); url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443); - impl_.SetSupportsSpdy(spdy_server_mail, true); + impl_.SetSupportsSpdy(spdy_server_mail, NetworkIsolationKey(), true); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_mail)); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey())); base::RunLoop run_loop; bool callback_invoked_ = false; @@ -297,8 +484,9 @@ TEST_F(SpdyServerPropertiesTest, Clear) { std::move(quit_closure).Run(); }, &callback_invoked_, run_loop.QuitClosure())); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google)); - EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail)); + EXPECT_FALSE( + impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); + EXPECT_FALSE(impl_.GetSupportsSpdy(spdy_server_mail, NetworkIsolationKey())); // Callback should be run asynchronously. EXPECT_FALSE(callback_invoked_); @@ -306,52 +494,55 @@ TEST_F(SpdyServerPropertiesTest, Clear) { EXPECT_TRUE(callback_invoked_); } -TEST_F(SpdyServerPropertiesTest, MRUOfSpdyServersMap) { +TEST_F(HttpServerPropertiesTest, MRUOfServerInfoMap) { url::SchemeHostPort spdy_server_google("https", "www.google.com", 443); - std::string spdy_server_g = spdy_server_google.Serialize(); url::SchemeHostPort spdy_server_mail("https", "mail.google.com", 443); - std::string spdy_server_m = spdy_server_mail.Serialize(); // Add www.google.com:443 as supporting SPDY. - impl_.SetSupportsSpdy(spdy_server_google, true); - ASSERT_EQ(1u, impl_.spdy_servers_map().size()); - auto it = impl_.spdy_servers_map().begin(); - ASSERT_EQ(spdy_server_g, it->first); + impl_.SetSupportsSpdy(spdy_server_google, NetworkIsolationKey(), true); + ASSERT_EQ(1u, impl_.server_info_map_for_testing().size()); + auto it = impl_.server_info_map_for_testing().begin(); + ASSERT_EQ(spdy_server_google, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); // Add mail.google.com:443 as supporting SPDY. Verify mail.google.com:443 and // www.google.com:443 are in the list. - impl_.SetSupportsSpdy(spdy_server_mail, true); - ASSERT_EQ(2u, impl_.spdy_servers_map().size()); - it = impl_.spdy_servers_map().begin(); - ASSERT_EQ(spdy_server_m, it->first); + impl_.SetSupportsSpdy(spdy_server_mail, NetworkIsolationKey(), true); + ASSERT_EQ(2u, impl_.server_info_map_for_testing().size()); + it = impl_.server_info_map_for_testing().begin(); + ASSERT_EQ(spdy_server_mail, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); ++it; - ASSERT_EQ(spdy_server_g, it->first); + ASSERT_EQ(spdy_server_google, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); // Get www.google.com:443. It should become the most-recently-used server. - EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google)); - ASSERT_EQ(2u, impl_.spdy_servers_map().size()); - it = impl_.spdy_servers_map().begin(); - ASSERT_EQ(spdy_server_g, it->first); + EXPECT_TRUE(impl_.GetSupportsSpdy(spdy_server_google, NetworkIsolationKey())); + ASSERT_EQ(2u, impl_.server_info_map_for_testing().size()); + it = impl_.server_info_map_for_testing().begin(); + ASSERT_EQ(spdy_server_google, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); ++it; - ASSERT_EQ(spdy_server_m, it->first); + ASSERT_EQ(spdy_server_mail, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); } -typedef HttpServerPropertiesImplTest AlternateProtocolServerPropertiesTest; +typedef HttpServerPropertiesTest AlternateProtocolServerPropertiesTest; TEST_F(AlternateProtocolServerPropertiesTest, Basic) { url::SchemeHostPort test_server("http", "foo", 80); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); AlternativeService alternative_service(kProtoHTTP2, "foo", 443); SetAlternativeService(test_server, alternative_service); const AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service, alternative_service_info_vector[0].alternative_service()); impl_.Clear(base::OnceClosure()); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); } TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { @@ -380,10 +571,11 @@ TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { alternative_service_info_vector.push_back(alternative_service_info4); url::SchemeHostPort test_server("https", "foo", 443); - impl_.SetAlternativeServices(test_server, alternative_service_info_vector); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + alternative_service_info_vector); const AlternativeServiceInfoVector alternative_service_info_vector2 = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(3u, alternative_service_info_vector2.size()); EXPECT_EQ(alternative_service_info2, alternative_service_info_vector2[0]); EXPECT_EQ(alternative_service_info3, alternative_service_info_vector2[1]); @@ -392,21 +584,20 @@ TEST_F(AlternateProtocolServerPropertiesTest, ExcludeOrigin) { TEST_F(AlternateProtocolServerPropertiesTest, Set) { // |test_server1| has an alternative service, which will not be - // affected by SetAlternativeServiceServers(), because - // |alternative_service_map| does not have an entry for + // affected by OnServerInfoLoadedForTesting(), because + // |server_info_map| does not have an entry for // |test_server1|. url::SchemeHostPort test_server1("http", "foo1", 80); const AlternativeService alternative_service1(kProtoHTTP2, "bar1", 443); const base::Time now = test_clock_.Now(); base::Time expiration1 = now + base::TimeDelta::FromDays(1); // 1st entry in the memory. - impl_.SetHttp2AlternativeService(test_server1, alternative_service1, - expiration1); + impl_.SetHttp2AlternativeService(test_server1, NetworkIsolationKey(), + alternative_service1, expiration1); // |test_server2| has an alternative service, which will be - // overwritten by SetAlternativeServiceServers(), because - // |alternative_service_map| has an entry for - // |test_server2|. + // overwritten by OnServerInfoLoadedForTesting(), because + // |server_info_map| has an entry for |test_server2|. AlternativeServiceInfoVector alternative_service_info_vector; const AlternativeService alternative_service2(kProtoHTTP2, "bar2", 443); base::Time expiration2 = now + base::TimeDelta::FromDays(2); @@ -415,21 +606,21 @@ TEST_F(AlternateProtocolServerPropertiesTest, Set) { alternative_service2, expiration2)); url::SchemeHostPort test_server2("http", "foo2", 80); // 0th entry in the memory. - impl_.SetAlternativeServices(test_server2, alternative_service_info_vector); + impl_.SetAlternativeServices(test_server2, NetworkIsolationKey(), + alternative_service_info_vector); - // Prepare |alternative_service_map| to be loaded by - // SetAlternativeServiceServers(). - std::unique_ptr<AlternativeServiceMap> alternative_service_map = - std::make_unique<AlternativeServiceMap>(); + // Prepare |server_info_map| to be loaded by OnServerInfoLoadedForTesting(). + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); const AlternativeService alternative_service3(kProtoHTTP2, "bar3", 123); base::Time expiration3 = now + base::TimeDelta::FromDays(3); const AlternativeServiceInfo alternative_service_info1 = AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( alternative_service3, expiration3); // Simulate updating data for 0th entry with data from Preferences. - alternative_service_map->Put( - test_server2, - AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1)); + server_info_map->GetOrPut(CreateSimpleKey(test_server2)) + ->second.alternative_services = + AlternativeServiceInfoVector(/*size=*/1, alternative_service_info1); url::SchemeHostPort test_server3("http", "foo3", 80); const AlternativeService alternative_service4(kProtoHTTP2, "bar4", 1234); @@ -439,37 +630,128 @@ TEST_F(AlternateProtocolServerPropertiesTest, Set) { alternative_service4, expiration4); // Add an old entry from Preferences, this will be added to end of recency // list. - alternative_service_map->Put( - test_server3, - AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2)); + server_info_map->GetOrPut(CreateSimpleKey(test_server3)) + ->second.alternative_services = + AlternativeServiceInfoVector(/*size=*/1, alternative_service_info2); // MRU list will be test_server2, test_server1, test_server3. - impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); + impl_.OnServerInfoLoadedForTesting(std::move(server_info_map)); - // Verify alternative_service_map. - const AlternativeServiceMap& map = impl_.alternative_service_map(); + // Verify server_info_map. + const HttpServerProperties::ServerInfoMap& map = + impl_.server_info_map_for_testing(); ASSERT_EQ(3u, map.size()); auto map_it = map.begin(); - EXPECT_EQ(map_it->first, test_server2); - ASSERT_EQ(1u, map_it->second.size()); - EXPECT_EQ(alternative_service3, map_it->second[0].alternative_service()); - EXPECT_EQ(expiration3, map_it->second[0].expiration()); + EXPECT_EQ(test_server2, map_it->first.server); + EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(map_it->second.alternative_services.has_value()); + const AlternativeServiceInfoVector* service_info = + &map_it->second.alternative_services.value(); + ASSERT_EQ(1u, service_info->size()); + EXPECT_EQ(alternative_service3, (*service_info)[0].alternative_service()); + EXPECT_EQ(expiration3, (*service_info)[0].expiration()); + ++map_it; - EXPECT_EQ(map_it->first, test_server1); - ASSERT_EQ(1u, map_it->second.size()); - EXPECT_EQ(alternative_service1, map_it->second[0].alternative_service()); - EXPECT_EQ(expiration1, map_it->second[0].expiration()); + EXPECT_EQ(test_server1, map_it->first.server); + EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(map_it->second.alternative_services.has_value()); + service_info = &map_it->second.alternative_services.value(); + ASSERT_EQ(1u, service_info->size()); + EXPECT_EQ(alternative_service1, (*service_info)[0].alternative_service()); + EXPECT_EQ(expiration1, (*service_info)[0].expiration()); + ++map_it; - EXPECT_EQ(map_it->first, test_server3); - ASSERT_EQ(1u, map_it->second.size()); - EXPECT_EQ(alternative_service4, map_it->second[0].alternative_service()); - EXPECT_EQ(expiration4, map_it->second[0].expiration()); + EXPECT_EQ(map_it->first.server, test_server3); + EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(map_it->second.alternative_services.has_value()); + service_info = &map_it->second.alternative_services.value(); + ASSERT_EQ(1u, service_info->size()); + EXPECT_EQ(alternative_service4, (*service_info)[0].alternative_service()); + EXPECT_EQ(expiration4, (*service_info)[0].expiration()); +} + +TEST_F(AlternateProtocolServerPropertiesTest, SetWithNetworkIsolationKey) { + const url::SchemeHostPort kServer("https", "foo.test", 443); + const AlternativeServiceInfoVector kAlternativeServices( + {AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + AlternativeService(kProtoHTTP2, "foo", 443), + base::Time::Now() + base::TimeDelta::FromDays(1) /* expiration */)}); + const url::Origin kOrigin = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey(kOrigin, kOrigin); + + EXPECT_TRUE( + impl_.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey).empty()); + EXPECT_TRUE( + impl_.GetAlternativeServiceInfos(kServer, NetworkIsolationKey()).empty()); + + // Without network isolation keys enabled for HttpServerProperties, passing in + // a NetworkIsolationKey should have no effect on behavior. + for (const auto network_isolation_key_to_set : + {NetworkIsolationKey(), kNetworkIsolationKey}) { + impl_.SetAlternativeServices(kServer, network_isolation_key_to_set, + kAlternativeServices); + EXPECT_EQ(kAlternativeServices, + impl_.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey)); + EXPECT_EQ(kAlternativeServices, + impl_.GetAlternativeServiceInfos(kServer, NetworkIsolationKey())); + + impl_.SetAlternativeServices(kServer, network_isolation_key_to_set, + AlternativeServiceInfoVector()); + EXPECT_TRUE(impl_.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey) + .empty()); + EXPECT_TRUE(impl_.GetAlternativeServiceInfos(kServer, NetworkIsolationKey()) + .empty()); + } + + // Check that with network isolation keys enabled for HttpServerProperties, + // the NetworkIsolationKey argument is respected. + + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + // Since HttpServerProperties caches the feature value, have to create a new + // one. + HttpServerProperties properties(nullptr /* pref_delegate */, + nullptr /* net_log */, test_tick_clock_, + &test_clock_); + + properties.SetAlternativeServices(kServer, kNetworkIsolationKey, + kAlternativeServices); + EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos( + kServer, kNetworkIsolationKey)); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(kServer, NetworkIsolationKey()) + .empty()); + + properties.SetAlternativeServices(kServer, NetworkIsolationKey(), + kAlternativeServices); + EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos( + kServer, kNetworkIsolationKey)); + EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos( + kServer, NetworkIsolationKey())); + + properties.SetAlternativeServices(kServer, kNetworkIsolationKey, + AlternativeServiceInfoVector()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey) + .empty()); + EXPECT_EQ(kAlternativeServices, properties.GetAlternativeServiceInfos( + kServer, NetworkIsolationKey())); + + properties.SetAlternativeServices(kServer, NetworkIsolationKey(), + AlternativeServiceInfoVector()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(kServer, kNetworkIsolationKey) + .empty()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(kServer, NetworkIsolationKey()) + .empty()); } // Regression test for https://crbug.com/504032: -// SetAlternativeServiceServers() should not crash if there is an empty -// hostname is the mapping. +// OnServerInfoLoadedForTesting() should not crash if there is an +// empty hostname is the mapping. TEST_F(AlternateProtocolServerPropertiesTest, SetWithEmptyHostname) { url::SchemeHostPort server("https", "foo", 443); const AlternativeService alternative_service_with_empty_hostname(kProtoHTTP2, @@ -479,21 +761,21 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetWithEmptyHostname) { SetAlternativeService(server, alternative_service_with_empty_hostname); impl_.MarkAlternativeServiceBroken(alternative_service_with_foo_hostname); - std::unique_ptr<AlternativeServiceMap> alternative_service_map = - std::make_unique<AlternativeServiceMap>(); - impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + impl_.OnServerInfoLoadedForTesting(std::move(server_info_map)); EXPECT_TRUE( impl_.IsAlternativeServiceBroken(alternative_service_with_foo_hostname)); const AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(server); + impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service_with_foo_hostname, alternative_service_info_vector[0].alternative_service()); } // Regression test for https://crbug.com/516486: -// GetAlternativeServiceInfos() should remove |alternative_service_map_| +// GetAlternativeServiceInfos() should remove |server_info_map_| // elements with empty value. TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { url::SchemeHostPort server("https", "foo", 443); @@ -502,29 +784,31 @@ TEST_F(AlternateProtocolServerPropertiesTest, EmptyVector) { const AlternativeServiceInfo alternative_service_info = AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( alternative_service, expiration); - std::unique_ptr<AlternativeServiceMap> alternative_service_map = - std::make_unique<AlternativeServiceMap>(); - alternative_service_map->Put( - server, - AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + server_info_map->GetOrPut(CreateSimpleKey(server)) + ->second.alternative_services = AlternativeServiceInfoVector( + /*size=*/1, alternative_service_info); - // Prepare |alternative_service_map_| with a single key that has a single + // Prepare |server_info_map_| with a single key that has a single // AlternativeServiceInfo with identical hostname and port. - impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); + impl_.OnServerInfoLoadedForTesting(std::move(server_info_map)); // GetAlternativeServiceInfos() should remove such AlternativeServiceInfo from - // |alternative_service_map_|, emptying the AlternativeServiceInfoVector + // |server_info_map_|, emptying the AlternativeServiceInfoVector // corresponding to |server|. - ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); + ASSERT_TRUE( + impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty()); // GetAlternativeServiceInfos() should remove this key from - // |alternative_service_map_|, and SetAlternativeServices() should not crash. + // |server_info_map_|, and SetAlternativeServices() should not crash. impl_.SetAlternativeServices( - server, + server, NetworkIsolationKey(), AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); // There should still be no alternative service assigned to |server|. - ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); + ASSERT_TRUE( + impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty()); } // Regression test for https://crbug.com/516486 for the canonical host case. @@ -536,31 +820,34 @@ TEST_F(AlternateProtocolServerPropertiesTest, EmptyVectorForCanonical) { const AlternativeServiceInfo alternative_service_info = AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( alternative_service, expiration); - std::unique_ptr<AlternativeServiceMap> alternative_service_map = - std::make_unique<AlternativeServiceMap>(); - alternative_service_map->Put( - canonical_server, - AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + server_info_map->GetOrPut(CreateSimpleKey(canonical_server)) + ->second.alternative_services = + AlternativeServiceInfoVector(/*size=*/1, alternative_service_info); - // Prepare |alternative_service_map_| with a single key that has a single + // Prepare |server_info_map_| with a single key that has a single // AlternativeServiceInfo with identical hostname and port. - impl_.SetAlternativeServiceServers(std::move(alternative_service_map)); + impl_.OnServerInfoLoadedForTesting(std::move(server_info_map)); // GetAlternativeServiceInfos() should remove such AlternativeServiceInfo from - // |alternative_service_map_|, emptying the AlternativeServiceInfoVector + // |server_info_map_|, emptying the AlternativeServiceInfoVector // corresponding to |canonical_server|, even when looking up // alternative services for |server|. - ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); + ASSERT_TRUE( + impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty()); // GetAlternativeServiceInfos() should remove this key from - // |alternative_service_map_|, and SetAlternativeServices() should not crash. + // |server_info_map_|, and SetAlternativeServices() should not crash. impl_.SetAlternativeServices( - canonical_server, + canonical_server, NetworkIsolationKey(), AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); // There should still be no alternative service assigned to // |canonical_server|. - ASSERT_TRUE(impl_.GetAlternativeServiceInfos(canonical_server).empty()); + ASSERT_TRUE( + impl_.GetAlternativeServiceInfos(canonical_server, NetworkIsolationKey()) + .empty()); } TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { @@ -574,12 +861,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { HttpNetworkSession::Params().quic_params.supported_versions); impl_.SetAlternativeServices( - canonical_server, + canonical_server, NetworkIsolationKey(), AlternativeServiceInfoVector(/*size=*/1, alternative_service_info)); // Make sure the canonical service is returned for the other server. const AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(server); + impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(kProtoQUIC, alternative_service_info_vector[0].alternative_service().protocol); @@ -588,10 +875,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearServerWithCanonical) { // Now clear the alternatives for the other server and make sure it stays // cleared. // GetAlternativeServices() should remove this key from - // |alternative_service_map_|, and SetAlternativeServices() should not crash. - impl_.SetAlternativeServices(server, AlternativeServiceInfoVector()); + // |server_info_map_|, and SetAlternativeServices() should not crash. + impl_.SetAlternativeServices(server, NetworkIsolationKey(), + AlternativeServiceInfoVector()); - ASSERT_TRUE(impl_.GetAlternativeServiceInfos(server).empty()); + ASSERT_TRUE( + impl_.GetAlternativeServiceInfos(server, NetworkIsolationKey()).empty()); } TEST_F(AlternateProtocolServerPropertiesTest, MRUOfGetAlternativeServiceInfos) { @@ -602,23 +891,30 @@ TEST_F(AlternateProtocolServerPropertiesTest, MRUOfGetAlternativeServiceInfos) { const AlternativeService alternative_service2(kProtoHTTP2, "foo2", 1234); SetAlternativeService(test_server2, alternative_service2); - const AlternativeServiceMap& map = impl_.alternative_service_map(); + const HttpServerProperties::ServerInfoMap& map = + impl_.server_info_map_for_testing(); auto it = map.begin(); - EXPECT_EQ(it->first, test_server2); - ASSERT_EQ(1u, it->second.size()); - EXPECT_EQ(alternative_service2, it->second[0].alternative_service()); + EXPECT_EQ(test_server2, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.alternative_services.has_value()); + ASSERT_EQ(1u, it->second.alternative_services->size()); + EXPECT_EQ(alternative_service2, + it->second.alternative_services.value()[0].alternative_service()); const AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server1); + impl_.GetAlternativeServiceInfos(test_server1, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); // GetAlternativeServices should reorder the AlternateProtocol map. it = map.begin(); - EXPECT_EQ(it->first, test_server1); - ASSERT_EQ(1u, it->second.size()); - EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); + EXPECT_EQ(test_server1, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.alternative_services.has_value()); + ASSERT_EQ(1u, it->second.alternative_services->size()); + EXPECT_EQ(alternative_service1, + it->second.alternative_services.value()[0].alternative_service()); } TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) { @@ -626,7 +922,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) { const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); SetAlternativeService(test_server, alternative_service1); AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -635,7 +931,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) { // GetAlternativeServiceInfos should return the broken alternative service. impl_.MarkAlternativeServiceBroken(alternative_service1); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -651,9 +947,10 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) { alternative_service_info_vector2.push_back( AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( alternative_service2, expiration)); - impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + alternative_service_info_vector2); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(2u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -665,7 +962,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) { // SetAlternativeService should add a broken alternative service to the map. SetAlternativeService(test_server, alternative_service1); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -678,7 +975,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, const AlternativeService alternative_service1(kProtoHTTP2, "foo", 443); SetAlternativeService(test_server, alternative_service1); AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -689,7 +986,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, alternative_service1); // The alternative service should be persisted and marked as broken. alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -705,9 +1002,10 @@ TEST_F(AlternateProtocolServerPropertiesTest, alternative_service_info_vector2.push_back( AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( alternative_service2, expiration)); - impl_.SetAlternativeServices(test_server, alternative_service_info_vector2); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + alternative_service_info_vector2); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(2u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -719,7 +1017,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, // SetAlternativeService should add a broken alternative service to the map. SetAlternativeService(test_server, alternative_service1); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(alternative_service1, alternative_service_info_vector[0].alternative_service()); @@ -746,10 +1044,11 @@ TEST_F(AlternateProtocolServerPropertiesTest, MaxAge) { alternative_service2, now + one_day)); url::SchemeHostPort test_server("http", "foo", 80); - impl_.SetAlternativeServices(test_server, alternative_service_info_vector); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + alternative_service_info_vector); AlternativeServiceInfoVector alternative_service_info_vector2 = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector2.size()); EXPECT_EQ(alternative_service2, alternative_service_info_vector2[0].alternative_service()); @@ -775,12 +1074,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, MaxAgeCanonical) { alternative_service2, now + one_day)); url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); - impl_.SetAlternativeServices(canonical_server, + impl_.SetAlternativeServices(canonical_server, NetworkIsolationKey(), alternative_service_info_vector); url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); AlternativeServiceInfoVector alternative_service_info_vector2 = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector2.size()); EXPECT_EQ(alternative_service2, alternative_service_info_vector2[0].alternative_service()); @@ -799,29 +1098,47 @@ TEST_F(AlternateProtocolServerPropertiesTest, AlternativeServiceWithScheme) { alternative_service2, expiration)); // Set Alt-Svc list for |http_server|. url::SchemeHostPort http_server("http", "foo", 80); - impl_.SetAlternativeServices(http_server, alternative_service_info_vector); + impl_.SetAlternativeServices(http_server, NetworkIsolationKey(), + alternative_service_info_vector); - const net::AlternativeServiceMap& map = impl_.alternative_service_map(); + const net::HttpServerProperties::ServerInfoMap& map = + impl_.server_info_map_for_testing(); auto it = map.begin(); - EXPECT_EQ(it->first, http_server); - ASSERT_EQ(2u, it->second.size()); - EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); - EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); + EXPECT_EQ(http_server, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.alternative_services.has_value()); + ASSERT_EQ(2u, it->second.alternative_services->size()); + EXPECT_EQ(alternative_service1, + it->second.alternative_services.value()[0].alternative_service()); + EXPECT_EQ(alternative_service2, + it->second.alternative_services.value()[1].alternative_service()); // Check Alt-Svc list should not be set for |https_server|. url::SchemeHostPort https_server("https", "foo", 80); - EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(https_server).size()); + EXPECT_EQ( + 0u, impl_.GetAlternativeServiceInfos(https_server, NetworkIsolationKey()) + .size()); // Set Alt-Svc list for |https_server|. - impl_.SetAlternativeServices(https_server, alternative_service_info_vector); - EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); - EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(http_server).size()); + impl_.SetAlternativeServices(https_server, NetworkIsolationKey(), + alternative_service_info_vector); + EXPECT_EQ( + 2u, impl_.GetAlternativeServiceInfos(https_server, NetworkIsolationKey()) + .size()); + EXPECT_EQ(2u, + impl_.GetAlternativeServiceInfos(http_server, NetworkIsolationKey()) + .size()); // Clear Alt-Svc list for |http_server|. - impl_.SetAlternativeServices(http_server, AlternativeServiceInfoVector()); + impl_.SetAlternativeServices(http_server, NetworkIsolationKey(), + AlternativeServiceInfoVector()); - EXPECT_EQ(0u, impl_.GetAlternativeServiceInfos(http_server).size()); - EXPECT_EQ(2u, impl_.GetAlternativeServiceInfos(https_server).size()); + EXPECT_EQ(0u, + impl_.GetAlternativeServiceInfos(http_server, NetworkIsolationKey()) + .size()); + EXPECT_EQ( + 2u, impl_.GetAlternativeServiceInfos(https_server, NetworkIsolationKey()) + .size()); } TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { @@ -836,16 +1153,23 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearAlternativeServices) { AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( alternative_service2, expiration)); url::SchemeHostPort test_server("http", "foo", 80); - impl_.SetAlternativeServices(test_server, alternative_service_info_vector); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + alternative_service_info_vector); - const net::AlternativeServiceMap& map = impl_.alternative_service_map(); + const net::HttpServerProperties::ServerInfoMap& map = + impl_.server_info_map_for_testing(); auto it = map.begin(); - EXPECT_EQ(it->first, test_server); - ASSERT_EQ(2u, it->second.size()); - EXPECT_EQ(alternative_service1, it->second[0].alternative_service()); - EXPECT_EQ(alternative_service2, it->second[1].alternative_service()); + EXPECT_EQ(test_server, it->first.server); + EXPECT_TRUE(it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(it->second.alternative_services.has_value()); + ASSERT_EQ(2u, it->second.alternative_services->size()); + EXPECT_EQ(alternative_service1, + it->second.alternative_services.value()[0].alternative_service()); + EXPECT_EQ(alternative_service2, + it->second.alternative_services.value()[1].alternative_service()); - impl_.SetAlternativeServices(test_server, AlternativeServiceInfoVector()); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + AlternativeServiceInfoVector()); EXPECT_TRUE(map.empty()); } @@ -860,7 +1184,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, BrokenShadowsCanonical) { "bar.c.youtube.com", 1234); SetAlternativeService(canonical_server, canonical_alternative_service); AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(canonical_alternative_service, alternative_service_info_vector[0].alternative_service()); @@ -871,7 +1195,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, BrokenShadowsCanonical) { SetAlternativeService(test_server, broken_alternative_service); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(broken_alternative_service, alternative_service_info_vector[0].alternative_service()); @@ -883,11 +1207,12 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearBroken) { const AlternativeService alternative_service(kProtoHTTP2, "foo", 443); SetAlternativeService(test_server, alternative_service); impl_.MarkAlternativeServiceBroken(alternative_service); - ASSERT_TRUE(HasAlternativeService(test_server)); + ASSERT_TRUE(HasAlternativeService(test_server, NetworkIsolationKey())); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service)); // SetAlternativeServices should leave a broken alternative service marked // as such. - impl_.SetAlternativeServices(test_server, AlternativeServiceInfoVector()); + impl_.SetAlternativeServices(test_server, NetworkIsolationKey(), + AlternativeServiceInfoVector()); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service)); } @@ -941,7 +1266,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, OnDefaultNetworkChanged) { EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); // Default network change clears alt svc broken until default network changes. - EXPECT_TRUE(impl_.OnDefaultNetworkChanged()); + impl_.OnDefaultNetworkChanged(); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); @@ -956,7 +1281,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, OnDefaultNetworkChanged) { // Default network change doesn't affect alt svc that was simply marked broken // most recently. - EXPECT_FALSE(impl_.OnDefaultNetworkChanged()); + impl_.OnDefaultNetworkChanged(); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service)); EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); @@ -968,17 +1293,17 @@ TEST_F(AlternateProtocolServerPropertiesTest, OnDefaultNetworkChanged) { // Default network change clears alt svc that was marked broken until default // network change most recently even if the alt svc was initially marked // broken. - EXPECT_TRUE(impl_.OnDefaultNetworkChanged()); + impl_.OnDefaultNetworkChanged(); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); } TEST_F(AlternateProtocolServerPropertiesTest, Canonical) { url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); url::SchemeHostPort canonical_server("https", "bar.c.youtube.com", 443); - EXPECT_FALSE(HasAlternativeService(canonical_server)); + EXPECT_FALSE(HasAlternativeService(canonical_server, NetworkIsolationKey())); AlternativeServiceInfoVector alternative_service_info_vector; const AlternativeService canonical_alternative_service1( @@ -992,13 +1317,13 @@ TEST_F(AlternateProtocolServerPropertiesTest, Canonical) { alternative_service_info_vector.push_back( AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( canonical_alternative_service2, expiration)); - impl_.SetAlternativeServices(canonical_server, + impl_.SetAlternativeServices(canonical_server, NetworkIsolationKey(), alternative_service_info_vector); // Since |test_server| does not have an alternative service itself, // GetAlternativeServiceInfos should return those of |canonical_server|. AlternativeServiceInfoVector alternative_service_info_vector2 = - impl_.GetAlternativeServiceInfos(test_server); + impl_.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()); ASSERT_EQ(2u, alternative_service_info_vector2.size()); EXPECT_EQ(canonical_alternative_service1, alternative_service_info_vector2[0].alternative_service()); @@ -1014,9 +1339,10 @@ TEST_F(AlternateProtocolServerPropertiesTest, Canonical) { alternative_service_info_vector2[1].alternative_service().port); // Verify the canonical suffix. - EXPECT_EQ(".c.youtube.com", *impl_.GetCanonicalSuffix(test_server.host())); EXPECT_EQ(".c.youtube.com", - *impl_.GetCanonicalSuffix(canonical_server.host())); + *impl_.GetCanonicalSuffixForTesting(test_server.host())); + EXPECT_EQ(".c.youtube.com", + *impl_.GetCanonicalSuffixForTesting(canonical_server.host())); } TEST_F(AlternateProtocolServerPropertiesTest, ClearCanonical) { @@ -1026,9 +1352,99 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearCanonical) { "bar.c.youtube.com", 1234); SetAlternativeService(canonical_server, canonical_alternative_service); - impl_.SetAlternativeServices(canonical_server, + impl_.SetAlternativeServices(canonical_server, NetworkIsolationKey(), AlternativeServiceInfoVector()); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); +} + +TEST_F(AlternateProtocolServerPropertiesTest, + CanonicalWithNetworkIsolationKey) { + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + // Since HttpServerProperties caches the feature value, have to create a new + // one. + HttpServerProperties properties(nullptr /* pref_delegate */, + nullptr /* net_log */, test_tick_clock_, + &test_clock_); + + url::SchemeHostPort test_server("https", "foo.c.youtube.com", 443); + EXPECT_FALSE(HasAlternativeService(test_server, kNetworkIsolationKey1)); + + url::SchemeHostPort canonical_server1("https", "bar.c.youtube.com", 443); + EXPECT_FALSE(HasAlternativeService(canonical_server1, kNetworkIsolationKey1)); + + AlternativeServiceInfoVector alternative_service_info_vector; + const AlternativeService canonical_alternative_service1( + kProtoQUIC, "bar.c.youtube.com", 1234); + base::Time expiration = test_clock_.Now() + base::TimeDelta::FromDays(1); + alternative_service_info_vector.push_back( + AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + canonical_alternative_service1, expiration, + HttpNetworkSession::Params().quic_params.supported_versions)); + const AlternativeService canonical_alternative_service2(kProtoHTTP2, "", 443); + alternative_service_info_vector.push_back( + AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( + canonical_alternative_service2, expiration)); + properties.SetAlternativeServices(canonical_server1, kNetworkIsolationKey1, + alternative_service_info_vector); + + // Since |test_server| does not have an alternative service itself, + // GetAlternativeServiceInfos should return those of |canonical_server|. + AlternativeServiceInfoVector alternative_service_info_vector2 = + properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1); + ASSERT_EQ(2u, alternative_service_info_vector2.size()); + EXPECT_EQ(canonical_alternative_service1, + alternative_service_info_vector2[0].alternative_service()); + + // Canonical information should not be visible for other NetworkIsolationKeys. + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2) + .empty()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); + + // Now add an alternative service entry for kNetworkIsolationKey2 for a + // different server and different NetworkIsolationKey, but with the same + // canonical suffix. + url::SchemeHostPort canonical_server2("https", "shrimp.c.youtube.com", 443); + properties.SetAlternativeServices(canonical_server2, kNetworkIsolationKey2, + {alternative_service_info_vector[0]}); + + // The canonical server information should reachable, and different, for both + // NetworkIsolationKeys. + EXPECT_EQ( + 1u, + properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2) + .size()); + EXPECT_EQ( + 2u, + properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1) + .size()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); + + // Clearing the alternate service state of kNetworkIsolationKey1's canonical + // server should only affect kNetworkIsolationKey1. + properties.SetAlternativeServices(canonical_server1, kNetworkIsolationKey1, + {}); + EXPECT_EQ( + 1u, + properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey2) + .size()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(test_server, kNetworkIsolationKey1) + .empty()); + EXPECT_TRUE( + properties.GetAlternativeServiceInfos(test_server, NetworkIsolationKey()) + .empty()); } TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBroken) { @@ -1038,9 +1454,9 @@ TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBroken) { "bar.c.youtube.com", 1234); SetAlternativeService(canonical_server, canonical_alternative_service); - EXPECT_TRUE(HasAlternativeService(test_server)); + EXPECT_TRUE(HasAlternativeService(test_server, NetworkIsolationKey())); impl_.MarkAlternativeServiceBroken(canonical_alternative_service); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); } TEST_F(AlternateProtocolServerPropertiesTest, @@ -1051,10 +1467,10 @@ TEST_F(AlternateProtocolServerPropertiesTest, "bar.c.youtube.com", 1234); SetAlternativeService(canonical_server, canonical_alternative_service); - EXPECT_TRUE(HasAlternativeService(test_server)); + EXPECT_TRUE(HasAlternativeService(test_server, NetworkIsolationKey())); impl_.MarkAlternativeServiceBrokenUntilDefaultNetworkChanges( canonical_alternative_service); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); } // Adding an alternative service for a new host overrides canonical host. @@ -1065,7 +1481,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, CanonicalOverride) { 1234); SetAlternativeService(bar_server, bar_alternative_service); AlternativeServiceInfoVector alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(foo_server); + impl_.GetAlternativeServiceInfos(foo_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(bar_alternative_service, alternative_service_info_vector[0].alternative_service()); @@ -1075,7 +1491,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, CanonicalOverride) { 443); SetAlternativeService(qux_server, qux_alternative_service); alternative_service_info_vector = - impl_.GetAlternativeServiceInfos(foo_server); + impl_.GetAlternativeServiceInfos(foo_server, NetworkIsolationKey()); ASSERT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(qux_alternative_service, alternative_service_info_vector[0].alternative_service()); @@ -1089,7 +1505,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, ClearWithCanonical) { SetAlternativeService(canonical_server, canonical_alternative_service); impl_.Clear(base::OnceClosure()); - EXPECT_FALSE(HasAlternativeService(test_server)); + EXPECT_FALSE(HasAlternativeService(test_server, NetworkIsolationKey())); } TEST_F(AlternateProtocolServerPropertiesTest, @@ -1097,18 +1513,18 @@ TEST_F(AlternateProtocolServerPropertiesTest, url::SchemeHostPort server("https", "foo", 443); AlternativeService alternative_service(kProtoQUIC, "foo", 443); SetAlternativeService(server, alternative_service); - EXPECT_TRUE(HasAlternativeService(server)); + EXPECT_TRUE(HasAlternativeService(server, NetworkIsolationKey())); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); base::TimeTicks past = test_tick_clock_->NowTicks() - base::TimeDelta::FromSeconds(42); - HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime( + HttpServerPropertiesPeer::AddBrokenAlternativeServiceWithExpirationTime( &impl_, alternative_service, past); EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service)); EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); - HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(&impl_); + HttpServerPropertiesPeer::ExpireBrokenAlternateProtocolMappings(&impl_); EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service)); EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service)); } @@ -1118,33 +1534,33 @@ TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc) { url::SchemeHostPort foo_server("https", "foo", 443); AlternativeService bar_alternative_service(kProtoQUIC, "bar", 443); SetAlternativeService(foo_server, bar_alternative_service); - EXPECT_TRUE(HasAlternativeService(foo_server)); + EXPECT_TRUE(HasAlternativeService(foo_server, NetworkIsolationKey())); url::SchemeHostPort bar_server1("http", "bar", 80); AlternativeService nohost_alternative_service(kProtoQUIC, "", 443); SetAlternativeService(bar_server1, nohost_alternative_service); - EXPECT_TRUE(HasAlternativeService(bar_server1)); + EXPECT_TRUE(HasAlternativeService(bar_server1, NetworkIsolationKey())); url::SchemeHostPort bar_server2("https", "bar", 443); AlternativeService baz_alternative_service(kProtoQUIC, "baz", 1234); SetAlternativeService(bar_server2, baz_alternative_service); - EXPECT_TRUE(HasAlternativeService(bar_server2)); + EXPECT_TRUE(HasAlternativeService(bar_server2, NetworkIsolationKey())); // Mark "bar:443" as broken. base::TimeTicks past = test_tick_clock_->NowTicks() - base::TimeDelta::FromSeconds(42); - HttpServerPropertiesImplPeer::AddBrokenAlternativeServiceWithExpirationTime( + HttpServerPropertiesPeer::AddBrokenAlternativeServiceWithExpirationTime( &impl_, bar_alternative_service, past); // Expire brokenness of "bar:443". - HttpServerPropertiesImplPeer::ExpireBrokenAlternateProtocolMappings(&impl_); + HttpServerPropertiesPeer::ExpireBrokenAlternateProtocolMappings(&impl_); // "foo:443" should have no alternative service now. - EXPECT_FALSE(HasAlternativeService(foo_server)); + EXPECT_FALSE(HasAlternativeService(foo_server, NetworkIsolationKey())); // "bar:80" should have no alternative service now. - EXPECT_FALSE(HasAlternativeService(bar_server1)); + EXPECT_FALSE(HasAlternativeService(bar_server1, NetworkIsolationKey())); // The alternative service of "bar:443" should be unaffected. - EXPECT_TRUE(HasAlternativeService(bar_server2)); + EXPECT_TRUE(HasAlternativeService(bar_server2, NetworkIsolationKey())); EXPECT_TRUE( impl_.WasAlternativeServiceRecentlyBroken(bar_alternative_service)); @@ -1209,6 +1625,33 @@ TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc2) { EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service2)); } +// Regression test for https://crbug.com/994537. Having a ServerInfo entry +// without a populated |alternative_services| value would cause +// OnExpireBrokenAlternativeService() to hang.. +TEST_F(AlternateProtocolServerPropertiesTest, RemoveExpiredBrokenAltSvc3) { + // Add an altertive service entry. + const url::SchemeHostPort kServer1("https", "foo", 443); + const AlternativeService kAltService(kProtoQUIC, "bar", 443); + SetAlternativeService(kServer1, kAltService); + EXPECT_TRUE(HasAlternativeService(kServer1, NetworkIsolationKey())); + + // Add an entry to ServerInfo for another server, without an alternative + // service value. + const url::SchemeHostPort kServer2("http", "bar", 80); + impl_.SetSupportsSpdy(kServer2, NetworkIsolationKey(), false); + + // Mark kAltService as broken. + base::TimeTicks past = + test_tick_clock_->NowTicks() - base::TimeDelta::FromSeconds(42); + HttpServerPropertiesPeer::AddBrokenAlternativeServiceWithExpirationTime( + &impl_, kAltService, past); + + // Expire brokenness of kAltService. This call should not hang. + HttpServerPropertiesPeer::ExpireBrokenAlternateProtocolMappings(&impl_); + + EXPECT_FALSE(HasAlternativeService(kServer1, NetworkIsolationKey())); +} + TEST_F(AlternateProtocolServerPropertiesTest, GetAlternativeServiceInfoAsValue) { base::Time::Exploded now_exploded; @@ -1242,6 +1685,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, HttpNetworkSession::Params().quic_params.supported_versions)); impl_.SetAlternativeServices(url::SchemeHostPort("https", "youtube.com", 443), + NetworkIsolationKey(), alternative_service_info_vector); impl_.MarkAlternativeServiceBroken( @@ -1256,6 +1700,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, AlternativeService(kProtoHTTP2, "foo2", 443), now + base::TimeDelta::FromDays(1))); impl_.SetAlternativeServices(url::SchemeHostPort("http", "test.com", 80), + NetworkIsolationKey(), alternative_service_info_vector); const char expected_json[] = @@ -1263,6 +1708,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, "{" "\"alternative_service\":" "[\"h2 foo2:443, expires 2018-01-25 15:12:53\"]," + "\"network_isolation_key\":\"null\"," "\"server\":\"http://test.com\"" "}," "{" @@ -1272,6 +1718,7 @@ TEST_F(AlternateProtocolServerPropertiesTest, " (broken until 2018-01-24 15:17:53)\"," "\"quic baz:443, expires 2018-01-24 16:12:53" " (broken until 2018-01-24 15:17:53)\"]," + "\"network_isolation_key\":\"null\"," "\"server\":\"https://youtube.com\"" "}" "]"; @@ -1284,14 +1731,14 @@ TEST_F(AlternateProtocolServerPropertiesTest, EXPECT_EQ(expected_json, alternative_service_info_json); } -typedef HttpServerPropertiesImplTest SupportsQuicServerPropertiesTest; +typedef HttpServerPropertiesTest SupportsQuicServerPropertiesTest; TEST_F(SupportsQuicServerPropertiesTest, Set) { HostPortPair quic_server_google("www.google.com", 443); // Check by initializing empty address. IPAddress initial_address; - impl_.SetSupportsQuic(initial_address); + impl_.OnSupportsQuicLoadedForTesting(initial_address); IPAddress address; EXPECT_FALSE(impl_.GetSupportsQuic(&address)); @@ -1299,7 +1746,7 @@ TEST_F(SupportsQuicServerPropertiesTest, Set) { // Check by initializing with a valid address. initial_address = IPAddress::IPv4Localhost(); - impl_.SetSupportsQuic(initial_address); + impl_.OnSupportsQuicLoadedForTesting(initial_address); EXPECT_TRUE(impl_.GetSupportsQuic(&address)); EXPECT_EQ(initial_address, address); @@ -1321,112 +1768,128 @@ TEST_F(SupportsQuicServerPropertiesTest, SetSupportsQuic) { EXPECT_FALSE(impl_.GetSupportsQuic(&address)); } -typedef HttpServerPropertiesImplTest ServerNetworkStatsServerPropertiesTest; - -TEST_F(ServerNetworkStatsServerPropertiesTest, Set) { +TEST_F(HttpServerPropertiesTest, LoadServerNetworkStats) { url::SchemeHostPort google_server("https", "www.google.com", 443); // Check by initializing empty ServerNetworkStats. - std::unique_ptr<ServerNetworkStatsMap> init_server_network_stats_map = - std::make_unique<ServerNetworkStatsMap>(); - impl_.SetServerNetworkStats(std::move(init_server_network_stats_map)); - const ServerNetworkStats* stats = impl_.GetServerNetworkStats(google_server); - EXPECT_EQ(NULL, stats); + std::unique_ptr<HttpServerProperties::ServerInfoMap> load_server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + impl_.OnServerInfoLoadedForTesting(std::move(load_server_info_map)); + const ServerNetworkStats* stats = + impl_.GetServerNetworkStats(google_server, NetworkIsolationKey()); + EXPECT_EQ(nullptr, stats); // Check by initializing with www.google.com:443. ServerNetworkStats stats_google; stats_google.srtt = base::TimeDelta::FromMicroseconds(10); stats_google.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(100); - init_server_network_stats_map = std::make_unique<ServerNetworkStatsMap>(); - init_server_network_stats_map->Put(google_server, stats_google); - impl_.SetServerNetworkStats(std::move(init_server_network_stats_map)); + load_server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); + load_server_info_map->GetOrPut(CreateSimpleKey(google_server)) + ->second.server_network_stats = stats_google; + impl_.OnServerInfoLoadedForTesting(std::move(load_server_info_map)); // Verify data for www.google.com:443. - ASSERT_EQ(1u, impl_.server_network_stats_map().size()); - EXPECT_EQ(stats_google, *(impl_.GetServerNetworkStats(google_server))); + ASSERT_EQ(1u, impl_.server_info_map_for_testing().size()); + EXPECT_EQ(stats_google, *(impl_.GetServerNetworkStats( + google_server, NetworkIsolationKey()))); // Test recency order and overwriting of data. // // |docs_server| has a ServerNetworkStats, which will be overwritten by - // SetServerNetworkStats(), because |server_network_stats_map| has an + // OnServerInfoLoadedForTesting(), because |server_network_stats_map| has an // entry for |docs_server|. url::SchemeHostPort docs_server("https", "docs.google.com", 443); ServerNetworkStats stats_docs; stats_docs.srtt = base::TimeDelta::FromMicroseconds(20); stats_docs.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(200); // Recency order will be |docs_server| and |google_server|. - impl_.SetServerNetworkStats(docs_server, stats_docs); + impl_.SetServerNetworkStats(docs_server, NetworkIsolationKey(), stats_docs); - // Prepare |server_network_stats_map| to be loaded by - // SetServerNetworkStats(). - std::unique_ptr<ServerNetworkStatsMap> server_network_stats_map = - std::make_unique<ServerNetworkStatsMap>(); + // Prepare |server_info_map| to be loaded by OnServerInfoLoadedForTesting(). + std::unique_ptr<HttpServerProperties::ServerInfoMap> server_info_map = + std::make_unique<HttpServerProperties::ServerInfoMap>(); // Change the values for |docs_server|. ServerNetworkStats new_stats_docs; new_stats_docs.srtt = base::TimeDelta::FromMicroseconds(25); new_stats_docs.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(250); - server_network_stats_map->Put(docs_server, new_stats_docs); + server_info_map->GetOrPut(CreateSimpleKey(docs_server)) + ->second.server_network_stats = new_stats_docs; // Add data for mail.google.com:443. url::SchemeHostPort mail_server("https", "mail.google.com", 443); ServerNetworkStats stats_mail; stats_mail.srtt = base::TimeDelta::FromMicroseconds(30); stats_mail.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(300); - server_network_stats_map->Put(mail_server, stats_mail); + server_info_map->GetOrPut(CreateSimpleKey(mail_server)) + ->second.server_network_stats = stats_mail; // Recency order will be |docs_server|, |google_server| and |mail_server|. - impl_.SetServerNetworkStats(std::move(server_network_stats_map)); + impl_.OnServerInfoLoadedForTesting(std::move(server_info_map)); - const ServerNetworkStatsMap& map = impl_.server_network_stats_map(); + const HttpServerProperties::ServerInfoMap& map = + impl_.server_info_map_for_testing(); ASSERT_EQ(3u, map.size()); auto map_it = map.begin(); - EXPECT_EQ(map_it->first, docs_server); - EXPECT_EQ(new_stats_docs, map_it->second); + EXPECT_EQ(docs_server, map_it->first.server); + EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(map_it->second.server_network_stats.has_value()); + EXPECT_EQ(new_stats_docs, *map_it->second.server_network_stats); ++map_it; - EXPECT_EQ(map_it->first, google_server); - EXPECT_EQ(stats_google, map_it->second); + EXPECT_EQ(google_server, map_it->first.server); + EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(map_it->second.server_network_stats.has_value()); + EXPECT_EQ(stats_google, *map_it->second.server_network_stats); ++map_it; - EXPECT_EQ(map_it->first, mail_server); - EXPECT_EQ(stats_mail, map_it->second); + EXPECT_EQ(mail_server, map_it->first.server); + EXPECT_TRUE(map_it->first.network_isolation_key.IsEmpty()); + ASSERT_TRUE(map_it->second.server_network_stats.has_value()); + EXPECT_EQ(stats_mail, *map_it->second.server_network_stats); } -TEST_F(ServerNetworkStatsServerPropertiesTest, SetServerNetworkStats) { +TEST_F(HttpServerPropertiesTest, SetServerNetworkStats) { url::SchemeHostPort foo_http_server("http", "foo", 443); url::SchemeHostPort foo_https_server("https", "foo", 443); - EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_http_server)); - EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_https_server)); + EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_http_server, + NetworkIsolationKey())); + EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server, + NetworkIsolationKey())); ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); stats1.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(100); - impl_.SetServerNetworkStats(foo_http_server, stats1); + impl_.SetServerNetworkStats(foo_http_server, NetworkIsolationKey(), stats1); const ServerNetworkStats* stats2 = - impl_.GetServerNetworkStats(foo_http_server); + impl_.GetServerNetworkStats(foo_http_server, NetworkIsolationKey()); EXPECT_EQ(10, stats2->srtt.ToInternalValue()); EXPECT_EQ(100, stats2->bandwidth_estimate.ToBitsPerSecond()); // Https server should have nothing set for server network stats. - EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_https_server)); + EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server, + NetworkIsolationKey())); impl_.Clear(base::OnceClosure()); - EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_http_server)); - EXPECT_EQ(NULL, impl_.GetServerNetworkStats(foo_https_server)); + EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_http_server, + NetworkIsolationKey())); + EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server, + NetworkIsolationKey())); } -TEST_F(ServerNetworkStatsServerPropertiesTest, ClearServerNetworkStats) { +TEST_F(HttpServerPropertiesTest, ClearServerNetworkStats) { ServerNetworkStats stats; stats.srtt = base::TimeDelta::FromMicroseconds(10); stats.bandwidth_estimate = quic::QuicBandwidth::FromBitsPerSecond(100); url::SchemeHostPort foo_https_server("https", "foo", 443); - impl_.SetServerNetworkStats(foo_https_server, stats); + impl_.SetServerNetworkStats(foo_https_server, NetworkIsolationKey(), stats); - impl_.ClearServerNetworkStats(foo_https_server); - EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server)); + impl_.ClearServerNetworkStats(foo_https_server, NetworkIsolationKey()); + EXPECT_EQ(nullptr, impl_.GetServerNetworkStats(foo_https_server, + NetworkIsolationKey())); } -typedef HttpServerPropertiesImplTest QuicServerInfoServerPropertiesTest; +typedef HttpServerPropertiesTest QuicServerInfoServerPropertiesTest; TEST_F(QuicServerInfoServerPropertiesTest, Set) { quic::QuicServerId google_quic_server_id("www.google.com", 443, true); @@ -1438,7 +1901,8 @@ TEST_F(QuicServerInfoServerPropertiesTest, Set) { // Check empty map. std::unique_ptr<QuicServerInfoMap> init_quic_server_info_map = std::make_unique<QuicServerInfoMap>(kMaxQuicServerEntries); - impl_.SetQuicServerInfoMap(std::move(init_quic_server_info_map)); + impl_.OnQuicServerInfoMapLoadedForTesting( + std::move(init_quic_server_info_map)); EXPECT_EQ(0u, impl_.quic_server_info_map().size()); // Check by initializing with www.google.com:443. @@ -1446,7 +1910,8 @@ TEST_F(QuicServerInfoServerPropertiesTest, Set) { init_quic_server_info_map = std::make_unique<QuicServerInfoMap>(kMaxQuicServerEntries); init_quic_server_info_map->Put(google_quic_server_id, google_server_info); - impl_.SetQuicServerInfoMap(std::move(init_quic_server_info_map)); + impl_.OnQuicServerInfoMapLoadedForTesting( + std::move(init_quic_server_info_map)); // Verify data for www.google.com:443. EXPECT_EQ(1u, impl_.quic_server_info_map().size()); @@ -1483,7 +1948,7 @@ TEST_F(QuicServerInfoServerPropertiesTest, Set) { quic::QuicServerId mail_quic_server_id("mail.google.com", 443, true); std::string mail_server_info("mail_quic_server_info"); quic_server_info_map->Put(mail_quic_server_id, mail_server_info); - impl_.SetQuicServerInfoMap(std::move(quic_server_info_map)); + impl_.OnQuicServerInfoMapLoadedForTesting(std::move(quic_server_info_map)); // Recency order will be |docs_server|, |google_server| and |mail_server|. const QuicServerInfoMap& memory_map = impl_.quic_server_info_map(); @@ -1645,7 +2110,7 @@ TEST_F(QuicServerInfoServerPropertiesTest, TestCanonicalSuffixMatchSetInfoMap) { new QuicServerInfoMap(kMaxQuicServerEntries)); quic_server_info_map->Put(h2_server_id, h2_server_info); quic_server_info_map->Put(h3_server_id, h3_server_info); - impl_.SetQuicServerInfoMap(std::move(quic_server_info_map)); + impl_.OnQuicServerInfoMapLoadedForTesting(std::move(quic_server_info_map)); // Check that the server info from the memory cache is returned since unique // entries from the memory cache are added after entries from the diff --git a/chromium/net/http/http_stream_factory.cc b/chromium/net/http/http_stream_factory.cc index 51bcae28729..55df8648cbb 100644 --- a/chromium/net/http/http_stream_factory.cc +++ b/chromium/net/http/http_stream_factory.cc @@ -20,6 +20,7 @@ #include "base/trace_event/process_memory_dump.h" #include "net/base/host_mapping_rules.h" #include "net/base/host_port_pair.h" +#include "net/base/network_isolation_key.h" #include "net/base/parse_number.h" #include "net/base/port_util.h" #include "net/http/http_network_session.h" @@ -40,6 +41,11 @@ namespace net { +namespace { +const char kAlternativeServiceHeader[] = "Alt-Svc"; + +} // namespace + HttpStreamFactory::HttpStreamFactory(HttpNetworkSession* session) : session_(session), job_factory_(std::make_unique<JobFactory>()) {} @@ -47,6 +53,7 @@ HttpStreamFactory::~HttpStreamFactory() {} void HttpStreamFactory::ProcessAlternativeServices( HttpNetworkSession* session, + const net::NetworkIsolationKey& network_isolation_key, const HttpResponseHeaders* headers, const url::SchemeHostPort& http_server) { if (!headers->HasHeader(kAlternativeServiceHeader)) @@ -62,49 +69,13 @@ void HttpStreamFactory::ProcessAlternativeServices( return; } - // Convert spdy::SpdyAltSvcWireFormat::AlternativeService entries - // to net::AlternativeServiceInfo. - AlternativeServiceInfoVector alternative_service_info_vector; - for (const spdy::SpdyAltSvcWireFormat::AlternativeService& - alternative_service_entry : alternative_service_vector) { - NextProto protocol = - NextProtoFromString(alternative_service_entry.protocol_id); - if (!IsAlternateProtocolValid(protocol) || - !session->IsProtocolEnabled(protocol) || - !IsPortValid(alternative_service_entry.port)) { - continue; - } - // Check if QUIC version is supported. Filter supported QUIC versions. - quic::ParsedQuicVersionVector advertised_versions; - if (protocol == kProtoQUIC && !alternative_service_entry.version.empty()) { - advertised_versions = FilterSupportedAltSvcVersions( - alternative_service_entry, - session->params().quic_params.supported_versions, - session->params().quic_params.support_ietf_format_quic_altsvc); - if (advertised_versions.empty()) - continue; - } - AlternativeService alternative_service(protocol, - alternative_service_entry.host, - alternative_service_entry.port); - base::Time expiration = - base::Time::Now() + - base::TimeDelta::FromSeconds(alternative_service_entry.max_age); - AlternativeServiceInfo alternative_service_info; - if (protocol == kProtoQUIC) { - alternative_service_info = - AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( - alternative_service, expiration, advertised_versions); - } else { - alternative_service_info = - AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( - alternative_service, expiration); - } - alternative_service_info_vector.push_back(alternative_service_info); - } - session->http_server_properties()->SetAlternativeServices( - RewriteHost(http_server), alternative_service_info_vector); + RewriteHost(http_server), network_isolation_key, + net::ProcessAlternativeServices( + alternative_service_vector, session->params().enable_http2, + session->params().enable_quic, + session->params().quic_params.supported_versions, + session->params().quic_params.support_ietf_format_quic_altsvc)); } url::SchemeHostPort HttpStreamFactory::RewriteHost( @@ -199,7 +170,7 @@ void HttpStreamFactory::PreconnectStreams(int num_streams, SSLConfig server_ssl_config; SSLConfig proxy_ssl_config; - session_->GetSSLConfig(request_info, &server_ssl_config, &proxy_ssl_config); + session_->GetSSLConfig(&server_ssl_config, &proxy_ssl_config); auto job_controller = std::make_unique<JobController>( this, nullptr, session_, job_factory_.get(), request_info, @@ -302,8 +273,11 @@ bool HttpStreamFactory::ProxyServerSupportsPriorities( url::SchemeHostPort scheme_host_port("https", host_port_pair.host(), host_port_pair.port()); + // TODO(https://crbug.com/993517): Figure out what NetworkIsolationKey() to + // use here, and what to do about this and |preconnecting_proxy_servers_|, + // which leaks data across NetworkIsolationKeys. return session_->http_server_properties()->SupportsRequestPriority( - scheme_host_port); + scheme_host_port, NetworkIsolationKey()); } void HttpStreamFactory::DumpMemoryStats( diff --git a/chromium/net/http/http_stream_factory.h b/chromium/net/http/http_stream_factory.h index 067b6e5348c..b7909cc036a 100644 --- a/chromium/net/http/http_stream_factory.h +++ b/chromium/net/http/http_stream_factory.h @@ -62,9 +62,11 @@ class NET_EXPORT HttpStreamFactory { explicit HttpStreamFactory(HttpNetworkSession* session); virtual ~HttpStreamFactory(); - void ProcessAlternativeServices(HttpNetworkSession* session, - const HttpResponseHeaders* headers, - const url::SchemeHostPort& http_server); + void ProcessAlternativeServices( + HttpNetworkSession* session, + const net::NetworkIsolationKey& network_isolation_key, + const HttpResponseHeaders* headers, + const url::SchemeHostPort& http_server); // Request a stream. // Will call delegate->OnStreamReady on successful completion. diff --git a/chromium/net/http/http_stream_factory_job.cc b/chromium/net/http/http_stream_factory_job.cc index ed7b2346906..6dc97fa5f73 100644 --- a/chromium/net/http/http_stream_factory_job.cc +++ b/chromium/net/http/http_stream_factory_job.cc @@ -250,7 +250,8 @@ int HttpStreamFactory::Job::Preconnect(int num_streams) { !http_server_properties->IsInitialized() && request_info_.url.SchemeIsCryptographic(); if (connect_one_stream || http_server_properties->SupportsRequestPriority( - url::SchemeHostPort(request_info_.url))) { + url::SchemeHostPort(request_info_.url), + request_info_.network_isolation_key)) { num_streams_ = 1; } else { num_streams_ = num_streams; @@ -390,7 +391,9 @@ bool HttpStreamFactory::Job::CanUseExistingSpdySession() const { DCHECK(!using_quic_); if (proxy_info_.is_direct() && - session_->http_server_properties()->RequiresHTTP11(destination_)) { + session_->http_server_properties()->RequiresHTTP11( + HttpServerProperties::GetNormalizedSchemeHostPort(request_info_.url), + request_info_.network_isolation_key)) { return false; } @@ -764,9 +767,8 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() { // delay the main job. delegate_->MaybeSetWaitTimeForMainJob( quic_request_.GetTimeDelayForWaitingJob()); - expect_on_quic_host_resolution_ = - quic_request_.WaitForHostResolution(base::BindRepeating( - &Job::OnQuicHostResolution, base::Unretained(this))); + expect_on_quic_host_resolution_ = quic_request_.WaitForHostResolution( + base::BindOnce(&Job::OnQuicHostResolution, base::Unretained(this))); } return rv; } @@ -840,10 +842,16 @@ int HttpStreamFactory::Job::DoInitConnectionImpl() { HttpServerProperties* http_server_properties = session_->http_server_properties(); if (http_server_properties) { - http_server_properties->MaybeForceHTTP11(destination_, &server_ssl_config_); - if (proxy_info_.is_http() || proxy_info_.is_https()) { + http_server_properties->MaybeForceHTTP11( + HttpServerProperties::GetNormalizedSchemeHostPort(request_info_.url), + request_info_.network_isolation_key, &server_ssl_config_); + if (proxy_info_.is_https()) { http_server_properties->MaybeForceHTTP11( - proxy_info_.proxy_server().host_port_pair(), &proxy_ssl_config_); + url::SchemeHostPort( + url::kHttpsScheme, + proxy_info_.proxy_server().host_port_pair().host(), + proxy_info_.proxy_server().host_port_pair().port()), + request_info_.network_isolation_key, &proxy_ssl_config_); } } @@ -1143,8 +1151,11 @@ int HttpStreamFactory::Job::DoCreateStream() { HttpServerProperties* http_server_properties = session_->http_server_properties(); - if (http_server_properties) - http_server_properties->SetSupportsSpdy(scheme_host_port, true); + if (http_server_properties) { + http_server_properties->SetSupportsSpdy(scheme_host_port, + request_info_.network_isolation_key, + true /* supports_spdy */); + } // Create a SpdyHttpStream or a BidirectionalStreamImpl attached to the // session. @@ -1336,7 +1347,8 @@ bool HttpStreamFactory::Job::ShouldThrottleConnectForSpdy() const { spdy_session_key_.host_port_pair().host(), spdy_session_key_.host_port_pair().port()); // Only throttle the request if the server is believed to support H2. - return session_->http_server_properties()->GetSupportsSpdy(scheme_host_port); + return session_->http_server_properties()->GetSupportsSpdy( + scheme_host_port, request_info_.network_isolation_key); } } // namespace net diff --git a/chromium/net/http/http_stream_factory_job_controller.cc b/chromium/net/http/http_stream_factory_job_controller.cc index 45a9e840014..0d0665b085e 100644 --- a/chromium/net/http/http_stream_factory_job_controller.cc +++ b/chromium/net/http/http_stream_factory_job_controller.cc @@ -627,7 +627,7 @@ int HttpStreamFactory::JobController::DoResolveProxy() { GURL origin_url = ApplyHostMappingRules(request_info_.url, &destination); CompletionOnceCallback io_callback = - base::Bind(&JobController::OnIOComplete, base::Unretained(this)); + base::BindOnce(&JobController::OnIOComplete, base::Unretained(this)); return session_->proxy_resolution_service()->ResolveProxy( origin_url, request_info_.method, &proxy_info_, std::move(io_callback), &proxy_resolve_request_, net_log_); @@ -993,7 +993,8 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal( HttpServerProperties& http_server_properties = *session_->http_server_properties(); const AlternativeServiceInfoVector alternative_service_info_vector = - http_server_properties.GetAlternativeServiceInfos(origin); + http_server_properties.GetAlternativeServiceInfos( + origin, request_info.network_isolation_key); if (alternative_service_info_vector.empty()) return AlternativeServiceInfo(); @@ -1079,7 +1080,7 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal( destination)) return alternative_service_info; - if (!IsQuicWhitelistedForHost(destination.host())) + if (!IsQuicAllowedForHost(destination.host())) continue; // Cache this entry if we don't have a non-broken Alt-Svc yet. @@ -1205,8 +1206,8 @@ int HttpStreamFactory::JobController::ReconsiderProxyAfterError(Job* job, if (request_info_.load_flags & LOAD_BYPASS_PROXY) return error; - if (proxy_info_.is_https() && proxy_ssl_config_.send_client_cert) { - session_->ssl_client_auth_cache()->Remove( + if (proxy_info_.is_https()) { + session_->ssl_client_context()->ClearClientCertificate( proxy_info_.proxy_server().host_port_pair()); } @@ -1233,15 +1234,15 @@ int HttpStreamFactory::JobController::ReconsiderProxyAfterError(Job* job, return OK; } -bool HttpStreamFactory::JobController::IsQuicWhitelistedForHost( +bool HttpStreamFactory::JobController::IsQuicAllowedForHost( const std::string& host) { - const base::flat_set<std::string>& host_whitelist = - session_->params().quic_host_whitelist; - if (host_whitelist.empty()) + const base::flat_set<std::string>& host_allowlist = + session_->params().quic_host_allowlist; + if (host_allowlist.empty()) return true; std::string lowered_host = base::ToLowerASCII(host); - return base::Contains(host_whitelist, lowered_host); + return base::Contains(host_allowlist, lowered_host); } } // namespace net diff --git a/chromium/net/http/http_stream_factory_job_controller.h b/chromium/net/http/http_stream_factory_job_controller.h index 783759ead81..d91a559c768 100644 --- a/chromium/net/http/http_stream_factory_job_controller.h +++ b/chromium/net/http/http_stream_factory_job_controller.h @@ -282,8 +282,8 @@ class HttpStreamFactory::JobController // given error code is simply returned. int ReconsiderProxyAfterError(Job* job, int error); - // Returns true if QUIC is whitelisted for |host|. - bool IsQuicWhitelistedForHost(const std::string& host); + // Returns true if QUIC is allowed for |host|. + bool IsQuicAllowedForHost(const std::string& host); HttpStreamFactory* factory_; HttpNetworkSession* session_; diff --git a/chromium/net/http/http_stream_factory_job_controller_unittest.cc b/chromium/net/http/http_stream_factory_job_controller_unittest.cc index b3407f02428..9d3c0521512 100644 --- a/chromium/net/http/http_stream_factory_job_controller_unittest.cc +++ b/chromium/net/http/http_stream_factory_job_controller_unittest.cc @@ -16,16 +16,19 @@ #include "base/strings/stringprintf.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/test/test_mock_time_task_runner.h" #include "base/threading/platform_thread.h" #include "net/base/completion_once_callback.h" +#include "net/base/features.h" #include "net/base/host_port_pair.h" #include "net/base/proxy_server.h" #include "net/base/test_proxy_delegate.h" #include "net/dns/mock_host_resolver.h" #include "net/http/http_basic_stream.h" #include "net/http/http_network_session_peer.h" +#include "net/http/http_server_properties.h" +#include "net/http/http_server_properties_manager.h" #include "net/http/http_stream_factory.h" #include "net/http/http_stream_factory_job.h" #include "net/http/http_stream_factory_test_util.h" @@ -44,13 +47,14 @@ #include "net/socket/socket_test_util.h" #include "net/spdy/spdy_session_key.h" #include "net/spdy/spdy_test_util_common.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/third_party/quiche/src/quic/core/quic_utils.h" #include "net/third_party/quiche/src/quic/test_tools/mock_random.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock_mutant.h" #include "testing/gtest/include/gtest/gtest.h" +#include "url/origin.h" using ::testing::_; using ::testing::Contains; @@ -97,12 +101,23 @@ class FailingProxyResolverFactory : public ProxyResolverFactory { } }; -// A mock HttpServerProperties that always returns false for IsInitialized(). -class MockHttpServerProperties : public HttpServerPropertiesImpl { +// A mock HttpServerProperties::PrefDelegate that never finishes loading, so +// HttpServerProperties::IsInitialized() always returns false. +class MockPrefDelegate : public HttpServerProperties::PrefDelegate { public: - MockHttpServerProperties() = default; - ~MockHttpServerProperties() override = default; - bool IsInitialized() const override { return false; } + MockPrefDelegate() = default; + ~MockPrefDelegate() override = default; + + // HttpServerProperties::PrefDelegate implementation: + const base::DictionaryValue* GetServerProperties() const override { + return nullptr; + } + void SetServerProperties(const base::DictionaryValue& value, + base::OnceClosure callback) override {} + void WaitForPrefLoad(base::OnceClosure pref_loaded_callback) override {} + + private: + DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate); }; } // anonymous namespace @@ -172,12 +187,11 @@ class JobControllerPeer { } }; -class HttpStreamFactoryJobControllerTest - : public TestWithScopedTaskEnvironment { +class HttpStreamFactoryJobControllerTest : public TestWithTaskEnvironment { public: HttpStreamFactoryJobControllerTest() - : TestWithScopedTaskEnvironment( - base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) { + : TestWithTaskEnvironment( + base::test::TaskEnvironment::TimeSource::MOCK_TIME) { session_deps_.enable_quic = true; session_deps_.host_resolver->set_synchronous_mode(true); } @@ -272,11 +286,11 @@ class HttpStreamFactoryJobControllerTest base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); if (alternative_service.protocol == kProtoQUIC) { session_->http_server_properties()->SetQuicAlternativeService( - server, alternative_service, expiration, + server, NetworkIsolationKey(), alternative_service, expiration, session_->params().quic_params.supported_versions); } else { session_->http_server_properties()->SetHttp2AlternativeService( - server, alternative_service, expiration); + server, NetworkIsolationKey(), alternative_service, expiration); } } @@ -284,7 +298,8 @@ class HttpStreamFactoryJobControllerTest bool should_mark_broken) { const url::SchemeHostPort server(request_info.url); const AlternativeServiceInfoVector alternative_service_info_vector = - session_->http_server_properties()->GetAlternativeServiceInfos(server); + session_->http_server_properties()->GetAlternativeServiceInfos( + server, NetworkIsolationKey()); EXPECT_EQ(1u, alternative_service_info_vector.size()); EXPECT_EQ(should_mark_broken, session_->http_server_properties()->IsAlternativeServiceBroken( @@ -702,7 +717,8 @@ TEST_F(JobControllerReconsiderProxyAfterErrorTest, ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromSeconds(100); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("http://www.example.com")), stats1); + url::SchemeHostPort(GURL("http://www.example.com")), + NetworkIsolationKey(), stats1); // Prepare the mocked data. MockQuicData quic_data( @@ -841,7 +857,7 @@ TEST_F(HttpStreamFactoryJobControllerTest, AlternativeService alternative_service(kProtoQUIC, server.host(), 443); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); session_->http_server_properties()->SetQuicAlternativeService( - server, alternative_service, expiration, + server, NetworkIsolationKey(), alternative_service, expiration, {quic::UnsupportedQuicVersion()}); request_ = @@ -1030,7 +1046,12 @@ TEST_F(HttpStreamFactoryJobControllerTest, AltJobSucceedsMainJobBlockedControllerDestroyed) { quic_data_ = std::make_unique<MockQuicData>( HttpNetworkSession::Params().quic_params.supported_versions.front()); - quic_data_->AddWrite(SYNCHRONOUS, client_maker_.MakeInitialSettingsPacket(1)); + if (VersionUsesQpack(HttpNetworkSession::Params() + .quic_params.supported_versions.front() + .transport_version)) { + quic_data_->AddWrite(SYNCHRONOUS, + client_maker_.MakeInitialSettingsPacket(1)); + } quic_data_->AddRead(ASYNC, OK); HttpRequestInfo request_info; @@ -1698,7 +1719,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, HostResolutionHang) { ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://www.google.com")), stats1); + url::SchemeHostPort(GURL("https://www.google.com")), + NetworkIsolationKey(), stats1); url::SchemeHostPort server(request_info.url); AlternativeService alternative_service(kProtoQUIC, server.host(), 443); @@ -1771,7 +1793,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, DelayedTCP) { ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://www.google.com")), stats1); + url::SchemeHostPort(GURL("https://www.google.com")), + NetworkIsolationKey(), stats1); url::SchemeHostPort server(request_info.url); AlternativeService alternative_service(kProtoQUIC, server.host(), 443); @@ -1834,7 +1857,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, ResumeMainJobLaterCanceled) { ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://www.google.com")), stats1); + url::SchemeHostPort(GURL("https://www.google.com")), + NetworkIsolationKey(), stats1); url::SchemeHostPort server(request_info.url); AlternativeService alternative_service(kProtoQUIC, server.host(), 443); @@ -1912,7 +1936,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, DelayedTCPWithLargeSrtt) { ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromSeconds(100); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://www.google.com")), stats1); + url::SchemeHostPort(GURL("https://www.google.com")), + NetworkIsolationKey(), stats1); url::SchemeHostPort server(request_info.url); AlternativeService alternative_service(kProtoQUIC, server.host(), 443); @@ -1972,7 +1997,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://www.google.com")), stats1); + url::SchemeHostPort(GURL("https://www.google.com")), + NetworkIsolationKey(), stats1); url::SchemeHostPort server(request_info.url); AlternativeService alternative_service(kProtoQUIC, server.host(), 443); @@ -2094,7 +2120,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, DelayedTCPAlternativeProxy) { ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(10); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://myproxy.org")), stats1); + url::SchemeHostPort(GURL("https://myproxy.org")), NetworkIsolationKey(), + stats1); url::SchemeHostPort server(request_info.url); AlternativeService alternative_service(kProtoQUIC, server.host(), 443); @@ -2164,7 +2191,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, FailAlternativeProxy) { ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://myproxy.org")), stats1); + url::SchemeHostPort(GURL("https://myproxy.org")), NetworkIsolationKey(), + stats1); request_ = job_controller_->Start(&request_delegate_, nullptr, net_log_.bound(), @@ -2216,7 +2244,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, ServerNetworkStats stats1; stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000); session_->http_server_properties()->SetServerNetworkStats( - url::SchemeHostPort(GURL("https://myproxy.org")), stats1); + url::SchemeHostPort(GURL("https://myproxy.org")), NetworkIsolationKey(), + stats1); request_ = job_controller_->Start(&request_delegate_, nullptr, net_log_.bound(), @@ -2297,9 +2326,13 @@ TEST_F(HttpStreamFactoryJobControllerTest, } TEST_F(HttpStreamFactoryJobControllerTest, PreconnectToHostWithValidAltSvc) { - quic_data_ = std::make_unique<MockQuicData>( - HttpNetworkSession::Params().quic_params.supported_versions.front()); - quic_data_->AddWrite(SYNCHRONOUS, client_maker_.MakeInitialSettingsPacket(1)); + auto version = + HttpNetworkSession::Params().quic_params.supported_versions.front(); + quic_data_ = std::make_unique<MockQuicData>(version); + if (VersionUsesQpack(version.transport_version)) { + quic_data_->AddWrite(SYNCHRONOUS, + client_maker_.MakeInitialSettingsPacket(1)); + } quic_data_->AddRead(ASYNC, OK); HttpRequestInfo request_info; @@ -2337,7 +2370,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); job_controller_->Preconnect(/*num_streams=*/5); // Only one job is started. @@ -2353,6 +2387,95 @@ TEST_F(HttpStreamFactoryJobControllerTest, EXPECT_TRUE(HttpStreamFactoryPeer::IsJobControllerDeleted(factory_)); } +// Check that the logic to only preconnect a single socket to servers with H2 +// support respects NetworkIsolationKeys. +TEST_F(HttpStreamFactoryJobControllerTest, + PreconnectMultipleStreamsToH2ServerWithNetworkIsolationKey) { + base::test::ScopedFeatureList feature_list; + // It's not strictly necessary to enable + // |kPartitionConnectionsByNetworkIsolationKey|, but the second phase of the + // test would only make 4 connections, reusing the first connection, without + // it. + feature_list.InitWithFeatures( + {// enabled_features + features::kPartitionHttpServerPropertiesByNetworkIsolationKey, + features::kPartitionConnectionsByNetworkIsolationKey}, + // disabled_features + {}); + // Need to re-create HttpServerProperties after enabling the field trial, + // since it caches the field trial value on construction. + session_deps_.http_server_properties = + std::make_unique<HttpServerProperties>(); + + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + tcp_data_ = std::make_unique<SequencedSocketData>(); + tcp_data_->set_connect_data(MockConnect(ASYNC, OK)); + SetPreconnect(); + + HttpRequestInfo request_info; + request_info.method = "GET"; + request_info.url = GURL("http://www.example.com"); + request_info.network_isolation_key = kNetworkIsolationKey1; + Initialize(request_info); + + // Sets server support HTTP/2, using kNetworkIsolationKey. + url::SchemeHostPort server(request_info.url); + session_->http_server_properties()->SetSupportsSpdy( + server, kNetworkIsolationKey1, true); + + job_controller_->Preconnect(/*num_streams=*/5); + // Only one job is started. + EXPECT_TRUE(job_controller_->main_job()); + EXPECT_FALSE(job_controller_->alternative_job()); + EXPECT_EQ(HttpStreamFactory::PRECONNECT, + job_controller_->main_job()->job_type()); + // There is only 1 connect even though multiple streams were requested. + EXPECT_EQ( + 1, HttpStreamFactoryJobPeer::GetNumStreams(job_controller_->main_job())); + + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(HttpStreamFactoryPeer::IsJobControllerDeleted(factory_)); + + // Now try using two different NetworkIsolationKeys, one empty, one not, and + // make sure that 5 sockets are preconnected with each one. + std::vector<std::unique_ptr<SequencedSocketData>> socket_data; + for (auto other_network_isolation_key : + {NetworkIsolationKey(), kNetworkIsolationKey2}) { + for (int i = 0; i < 5; ++i) { + socket_data.emplace_back(std::make_unique<SequencedSocketData>( + MockConnect(ASYNC, OK), base::span<const MockRead>(), + base::span<const MockWrite>())); + session_deps_.socket_factory->AddSocketDataProvider( + socket_data.back().get()); + } + + request_info.network_isolation_key = other_network_isolation_key; + MockHttpStreamRequestDelegate request_delegate; + HttpStreamFactory::JobController* job_controller = + new HttpStreamFactory::JobController( + factory_, &request_delegate, session_.get(), &job_factory_, + request_info, is_preconnect_, false /* is_websocket */, + enable_ip_based_pooling_, enable_alternative_services_, SSLConfig(), + SSLConfig()); + HttpStreamFactoryPeer::AddJobController(factory_, job_controller); + job_controller->Preconnect(/*num_streams=*/5); + // Five jobs should be started. + EXPECT_TRUE(job_controller->main_job()); + EXPECT_FALSE(job_controller->alternative_job()); + EXPECT_EQ(HttpStreamFactory::PRECONNECT, + job_controller->main_job()->job_type()); + EXPECT_EQ( + 5, HttpStreamFactoryJobPeer::GetNumStreams(job_controller->main_job())); + + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(HttpStreamFactoryPeer::IsJobControllerDeleted(factory_)); + } +} + // Check the case that while a preconnect is waiting in the H2 request queue, // and a SPDY session appears, the job completes successfully. TEST_F(HttpStreamFactoryJobControllerTest, SpdySessionInterruptsPreconnect) { @@ -2372,7 +2495,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, SpdySessionInterruptsPreconnect) { // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); // Start a non-preconnect request. std::unique_ptr<HttpStreamRequest> stream_request = job_controller_->Start( @@ -2442,7 +2566,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequests) { // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates; std::vector<std::unique_ptr<HttpStreamRequest>> requests; @@ -2480,6 +2605,98 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequests) { } } +// Check that throttling simultaneous requests to a single H2 server respects +// NetworkIsolationKeys. +TEST_F(JobControllerLimitMultipleH2Requests, + MultipleRequestsNetworkIsolationKey) { + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeatures( + {// enabled_features + features::kPartitionHttpServerPropertiesByNetworkIsolationKey, + features::kPartitionConnectionsByNetworkIsolationKey}, + // disabled_features + {}); + // Need to re-create HttpServerProperties after enabling the field trial, + // since it caches the field trial value on construction. + session_deps_.http_server_properties = + std::make_unique<HttpServerProperties>(); + + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + tcp_data_ = std::make_unique<SequencedSocketData>( + MockConnect(SYNCHRONOUS, ERR_IO_PENDING), base::span<MockRead>(), + base::span<MockWrite>()); + HttpRequestInfo request_info; + request_info.method = "GET"; + request_info.url = GURL("https://www.example.com"); + Initialize(request_info); + + // Sets server support HTTP/2. + url::SchemeHostPort server(request_info.url); + session_->http_server_properties()->SetSupportsSpdy( + server, kNetworkIsolationKey1, true); + + std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates; + std::vector<std::unique_ptr<HttpStreamRequest>> requests; + std::vector<std::unique_ptr<SequencedSocketData>> socket_data; + for (int i = 0; i < kNumRequests; ++i) { + // Shouldn't matter whether requests are interleaved by NetworkIsolationKey + // or not. + for (const auto& network_isolation_key : + {NetworkIsolationKey(), kNetworkIsolationKey1, + kNetworkIsolationKey2}) { + request_info.network_isolation_key = network_isolation_key; + // For kNetworkIsolationKey1, all requests but the first will be + // throttled. + if (i == 0 || network_isolation_key != kNetworkIsolationKey1) { + socket_data.emplace_back(std::make_unique<SequencedSocketData>( + MockConnect(ASYNC, OK), base::span<const MockRead>(), + base::span<const MockWrite>())); + session_deps_.socket_factory->AddSocketDataProvider( + socket_data.back().get()); + } + request_delegates.emplace_back( + std::make_unique<MockHttpStreamRequestDelegate>()); + HttpStreamFactory::JobController* job_controller = + new HttpStreamFactory::JobController( + factory_, request_delegates[i].get(), session_.get(), + &job_factory_, request_info, is_preconnect_, + false /* is_websocket */, enable_ip_based_pooling_, + enable_alternative_services_, SSLConfig(), SSLConfig()); + HttpStreamFactoryPeer::AddJobController(factory_, job_controller); + auto request = job_controller->Start( + request_delegates[i].get(), nullptr, net_log_.bound(), + HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY); + EXPECT_TRUE(job_controller->main_job()); + EXPECT_FALSE(job_controller->alternative_job()); + requests.push_back(std::move(request)); + } + } + TransportClientSocketPool* socket_pool = + reinterpret_cast<TransportClientSocketPool*>(session_->GetSocketPool( + HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct())); + ClientSocketPool::GroupId group_id0(HostPortPair::FromURL(request_info.url), + ClientSocketPool::SocketType::kSsl, + request_info.privacy_mode, + NetworkIsolationKey()); + ClientSocketPool::GroupId group_id1(HostPortPair::FromURL(request_info.url), + ClientSocketPool::SocketType::kSsl, + request_info.privacy_mode, + kNetworkIsolationKey1); + ClientSocketPool::GroupId group_id2(HostPortPair::FromURL(request_info.url), + ClientSocketPool::SocketType::kSsl, + request_info.privacy_mode, + kNetworkIsolationKey2); + EXPECT_EQ(static_cast<uint32_t>(kNumRequests), + socket_pool->NumConnectJobsInGroupForTesting(group_id0)); + EXPECT_EQ(1u, socket_pool->NumConnectJobsInGroupForTesting(group_id1)); + EXPECT_EQ(static_cast<uint32_t>(kNumRequests), + socket_pool->NumConnectJobsInGroupForTesting(group_id2)); +} + TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequestsFirstRequestHang) { // First socket connect hang. SequencedSocketData hangdata; @@ -2514,7 +2731,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultipleRequestsFirstRequestHang) { // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates; std::vector<std::unique_ptr<HttpStreamRequest>> requests; @@ -2587,7 +2805,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates; std::vector<std::unique_ptr<HttpStreamRequest>> requests; @@ -2642,7 +2861,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, MultiplePreconnects) { // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates; for (int i = 0; i < kNumRequests; ++i) { @@ -2688,7 +2908,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, H1NegotiatedForFirstRequest) { // Sets server support HTTP/2. url::SchemeHostPort server(request_info.url); - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); std::vector<std::unique_ptr<MockHttpStreamRequestDelegate>> request_delegates; std::vector<std::unique_ptr<HttpStreamRequest>> requests; @@ -2753,7 +2974,8 @@ TEST_F(JobControllerLimitMultipleH2Requests, QuicJobNotThrottled) { SetAlternativeService(request_info, alternative_service); // Sets server support HTTP/2. - session_->http_server_properties()->SetSupportsSpdy(server, true); + session_->http_server_properties()->SetSupportsSpdy( + server, NetworkIsolationKey(), true); // Use default job factory so that Resume() is not mocked out. HttpStreamFactory::JobFactory default_job_factory; @@ -2792,11 +3014,14 @@ TEST_P(HttpStreamFactoryJobControllerMisdirectedRequestRetry, const bool enable_ip_based_pooling = ::testing::get<0>(GetParam()); const bool enable_alternative_services = ::testing::get<1>(GetParam()); if (enable_alternative_services) { - quic_data_ = std::make_unique<MockQuicData>( - HttpNetworkSession::Params().quic_params.supported_versions.front()); + auto version = + HttpNetworkSession::Params().quic_params.supported_versions.front(); + quic_data_ = std::make_unique<MockQuicData>(version); quic_data_->AddConnect(SYNCHRONOUS, OK); - quic_data_->AddWrite(SYNCHRONOUS, - client_maker_.MakeInitialSettingsPacket(1)); + if (VersionUsesQpack(version.transport_version)) { + quic_data_->AddWrite(SYNCHRONOUS, + client_maker_.MakeInitialSettingsPacket(1)); + } quic_data_->AddRead(ASYNC, OK); } tcp_data_ = std::make_unique<SequencedSocketData>(); @@ -2847,7 +3072,8 @@ class HttpStreamFactoryJobControllerPreconnectTest void Initialize() { session_deps_.http_server_properties = - std::make_unique<MockHttpServerProperties>(); + std::make_unique<HttpServerProperties>( + std::make_unique<MockPrefDelegate>(), nullptr /* net_log */); session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); factory_ = session_->http_stream_factory(); request_info_.method = "GET"; @@ -2917,7 +3143,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) { // Set alternative service with no advertised version. session_->http_server_properties()->SetQuicAlternativeService( - server, alternative_service, expiration, quic::ParsedQuicVersionVector()); + server, NetworkIsolationKey(), alternative_service, expiration, + quic::ParsedQuicVersionVector()); AlternativeServiceInfo alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( @@ -2930,8 +3157,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) { // that is supported. quic::ParsedQuicVersionVector supported_versions = session_->params().quic_params.supported_versions; - ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService( - server, alternative_service, expiration, supported_versions)); + session_->http_server_properties()->SetQuicAlternativeService( + server, NetworkIsolationKey(), alternative_service, expiration, + supported_versions); alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( job_controller_, request_info, &request_delegate_, @@ -2966,8 +3194,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) { quic::ParsedQuicVersionVector mixed_quic_versions = { unsupported_version_1, session_->params().quic_params.supported_versions[0]}; - ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService( - server, alternative_service, expiration, mixed_quic_versions)); + session_->http_server_properties()->SetQuicAlternativeService( + server, NetworkIsolationKey(), alternative_service, expiration, + mixed_quic_versions); alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( job_controller_, request_info, &request_delegate_, @@ -2983,9 +3212,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) { // Set alternative service for the same server with two unsupported QUIC // versions: |unsupported_version_1|, |unsupported_version_2|. - ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService( - server, alternative_service, expiration, - {unsupported_version_1, unsupported_version_2})); + session_->http_server_properties()->SetQuicAlternativeService( + server, NetworkIsolationKey(), alternative_service, expiration, + {unsupported_version_1, unsupported_version_2}); alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( job_controller_, request_info, &request_delegate_, @@ -2995,19 +3224,19 @@ TEST_F(HttpStreamFactoryJobControllerTest, GetAlternativeServiceInfoFor) { EXPECT_EQ(0u, alt_svc_info.advertised_versions().size()); } -// Tests that if HttpNetworkSession has a non-empty QUIC host whitelist, +// Tests that if HttpNetworkSession has a non-empty QUIC host allowlist, // then GetAlternativeServiceFor() will not return any QUIC alternative service -// that's not on the whitelist. -TEST_F(HttpStreamFactoryJobControllerTest, QuicHostWhitelist) { +// that's not on the allowlist. +TEST_F(HttpStreamFactoryJobControllerTest, QuicHostAllowlist) { HttpRequestInfo request_info; request_info.method = "GET"; request_info.url = GURL("https://www.google.com"); Initialize(request_info); - // Set HttpNetworkSession's QUIC host whitelist to only have www.example.com + // Set HttpNetworkSession's QUIC host allowlist to only have www.example.com HttpNetworkSessionPeer session_peer(session_.get()); - session_peer.params()->quic_host_whitelist.insert("www.example.com"); + session_peer.params()->quic_host_allowlist.insert("www.example.com"); session_peer.params()->quic_params.allow_remote_alt_svc = true; // Set alternative service for www.google.com to be www.example.com over QUIC. @@ -3016,8 +3245,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, QuicHostWhitelist) { quic::ParsedQuicVersionVector supported_versions = session_->params().quic_params.supported_versions; session_->http_server_properties()->SetQuicAlternativeService( - server, AlternativeService(kProtoQUIC, "www.example.com", 443), - expiration, supported_versions); + server, NetworkIsolationKey(), + AlternativeService(kProtoQUIC, "www.example.com", 443), expiration, + supported_versions); AlternativeServiceInfo alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( @@ -3033,8 +3263,9 @@ TEST_F(HttpStreamFactoryJobControllerTest, QuicHostWhitelist) { EXPECT_EQ(supported_versions, alt_svc_info.advertised_versions()); session_->http_server_properties()->SetQuicAlternativeService( - server, AlternativeService(kProtoQUIC, "www.example.org", 443), - expiration, supported_versions); + server, NetworkIsolationKey(), + AlternativeService(kProtoQUIC, "www.example.org", 443), expiration, + supported_versions); alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor( job_controller_, request_info, &request_delegate_, diff --git a/chromium/net/http/http_stream_factory_unittest.cc b/chromium/net/http/http_stream_factory_unittest.cc index be453dc1fa3..e4226c36d77 100644 --- a/chromium/net/http/http_stream_factory_unittest.cc +++ b/chromium/net/http/http_stream_factory_unittest.cc @@ -22,6 +22,7 @@ #include "build/build_config.h" #include "net/base/completion_once_callback.h" #include "net/base/features.h" +#include "net/base/network_isolation_key.h" #include "net/base/port_util.h" #include "net/base/privacy_mode.h" #include "net/base/proxy_server.h" @@ -40,7 +41,6 @@ #include "net/http/http_proxy_connect_job.h" #include "net/http/http_request_info.h" #include "net/http/http_server_properties.h" -#include "net/http/http_server_properties_impl.h" #include "net/http/http_stream.h" #include "net/http/transport_security_state.h" #include "net/log/net_log_with_source.h" @@ -69,22 +69,22 @@ #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "net/third_party/quiche/src/quic/core/quic_server_id.h" #include "net/third_party/quiche/src/quic/core/quic_utils.h" #include "net/third_party/quiche/src/quic/test_tools/crypto_test_utils.h" #include "net/third_party/quiche/src/quic/test_tools/mock_random.h" #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/origin.h" // This file can be included from net/http even though // it is in net/websockets because it doesn't // introduce any link dependency to net/websockets. #include "net/websockets/websocket_handshake_stream_base.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - using ::testing::Contains; using ::testing::ElementsAre; using ::testing::IsEmpty; @@ -407,8 +407,7 @@ class CapturePreconnectsTransportSocketPool : public TransportClientSocketPool { base::TimeDelta(), ProxyServer::Direct(), false /* is_for_websockets */, - common_connect_job_params, - nullptr /* ssl_config_service */), + common_connect_job_params), last_num_streams_(-1) {} int last_num_streams() const { return last_num_streams_; } @@ -481,7 +480,7 @@ class CapturePreconnectsTransportSocketPool : public TransportClientSocketPool { ClientSocketPool::GroupId last_group_id_; }; -using HttpStreamFactoryTest = TestWithScopedTaskEnvironment; +using HttpStreamFactoryTest = TestWithTaskEnvironment; // TODO(950069): Add testing for frame_origin in NetworkIsolationKey using // kAppendInitiatingFrameOriginToNetworkIsolationKey. @@ -791,7 +790,7 @@ TEST_F(HttpStreamFactoryTest, QuicProxyMarkedAsBad) { HttpNetworkSession::Context session_context; SSLConfigServiceDefaults ssl_config_service; - HttpServerPropertiesImpl http_server_properties; + HttpServerProperties http_server_properties; MockClientSocketFactory socket_factory; session_context.client_socket_factory = &socket_factory; MockHostResolver host_resolver; @@ -924,7 +923,7 @@ void SetupForQuicAlternativeProxyTest( MockClientSocketFactory* socket_factory, ProxyResolutionService* proxy_resolution_service, TestProxyDelegate* test_proxy_delegate, - HttpServerPropertiesImpl* http_server_properties, + HttpServerProperties* http_server_properties, MockCertVerifier* cert_verifier, CTPolicyEnforcer* ct_policy_enforcer, MultiLogCTVerifier* ct_verifier, @@ -973,7 +972,7 @@ TEST_F(HttpStreamFactoryTest, WithQUICAlternativeProxyMarkedAsBad) { "HTTPS badproxy:99; HTTPS badfallbackproxy:98; DIRECT", TRAFFIC_ANNOTATION_FOR_TESTS); TestProxyDelegate test_proxy_delegate; - HttpServerPropertiesImpl http_server_properties; + HttpServerProperties http_server_properties; MockCertVerifier cert_verifier; DefaultCTPolicyEnforcer ct_policy_enforcer; MultiLogCTVerifier ct_verifier; @@ -1087,7 +1086,7 @@ TEST_F(HttpStreamFactoryTest, WithQUICAlternativeProxyNotMarkedAsBad) { ProxyResolutionService::CreateFixedFromPacResult( "HTTPS badproxy:99; DIRECT", TRAFFIC_ANNOTATION_FOR_TESTS); TestProxyDelegate test_proxy_delegate; - HttpServerPropertiesImpl http_server_properties; + HttpServerProperties http_server_properties; MockCertVerifier cert_verifier; DefaultCTPolicyEnforcer ct_policy_enforcer; MultiLogCTVerifier ct_verifier; @@ -1182,7 +1181,7 @@ TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) { session_params.enable_quic = true; // Set up QUIC as alternative_service. - HttpServerPropertiesImpl http_server_properties; + HttpServerProperties http_server_properties; const AlternativeService alternative_service(kProtoQUIC, url.host().c_str(), url.IntPort()); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); @@ -1190,7 +1189,7 @@ TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) { url::SchemeHostPort server("https", host_port_pair.host(), host_port_pair.port()); http_server_properties.SetQuicAlternativeService( - server, alternative_service, expiration, + server, NetworkIsolationKey(), alternative_service, expiration, session_params.quic_params.supported_versions); HttpNetworkSession::Context session_context = @@ -1228,10 +1227,11 @@ TEST_F(HttpStreamFactoryTest, OnlyOnePreconnectToProxyServer) { "HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS); // Set up the proxy server as a server that supports request priorities. - HttpServerPropertiesImpl http_server_properties; + HttpServerProperties http_server_properties; if (set_http_server_properties) { url::SchemeHostPort spdy_server("https", "myproxy.org", 443); - http_server_properties.SetSupportsSpdy(spdy_server, true); + http_server_properties.SetSupportsSpdy(spdy_server, + NetworkIsolationKey(), true); } SpdySessionDependencies session_deps; @@ -1312,10 +1312,11 @@ TEST_F(HttpStreamFactoryTest, ProxyServerPreconnectDifferentPrivacyModes) { "HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS); // Set up the proxy server as a server that supports request priorities. - HttpServerPropertiesImpl http_server_properties; + HttpServerProperties http_server_properties; url::SchemeHostPort spdy_server("https", "myproxy.org", 443); - http_server_properties.SetSupportsSpdy(spdy_server, true); + http_server_properties.SetSupportsSpdy(spdy_server, NetworkIsolationKey(), + true); SpdySessionDependencies session_deps; HttpNetworkSession::Params session_params = @@ -1382,11 +1383,11 @@ namespace { // Return count of distinct groups in given socket pool. int GetSocketPoolGroupCount(ClientSocketPool* pool) { int count = 0; - std::unique_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "")); - EXPECT_TRUE(dict != nullptr); - base::DictionaryValue* groups = nullptr; - if (dict->GetDictionary("groups", &groups) && (groups != nullptr)) { - count = static_cast<int>(groups->size()); + base::Value dict = pool->GetInfoAsValue("", ""); + EXPECT_TRUE(dict.is_dict()); + const base::Value* groups = dict.FindDictKey("groups"); + if (groups) { + count = groups->DictSize(); } return count; } @@ -1403,12 +1404,9 @@ int GetSpdySessionCount(HttpNetworkSession* session) { // Return count of sockets handed out by a given socket pool. int GetHandedOutSocketCount(ClientSocketPool* pool) { - int count = 0; - std::unique_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "")); - EXPECT_TRUE(dict != nullptr); - if (!dict->GetInteger("handed_out_socket_count", &count)) - return -1; - return count; + base::Value dict = pool->GetInfoAsValue("", ""); + EXPECT_TRUE(dict.is_dict()); + return dict.FindIntKey("handed_out_socket_count").value_or(-1); } #if defined(OS_ANDROID) @@ -1710,9 +1708,10 @@ TEST_F(HttpStreamFactoryTest, RequestHttpStreamOverProxyWithPreconnects) { "https://myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS)); // Set up the proxy server as a server that supports request priorities. - auto http_server_properties = std::make_unique<HttpServerPropertiesImpl>(); + auto http_server_properties = std::make_unique<HttpServerProperties>(); url::SchemeHostPort spdy_server("https", "myproxy.org", 443); - http_server_properties->SetSupportsSpdy(spdy_server, true); + http_server_properties->SetSupportsSpdy(spdy_server, NetworkIsolationKey(), + true); session_deps.http_server_properties = std::move(http_server_properties); StaticSocketDataProvider socket_data; @@ -1991,7 +1990,8 @@ TEST_F(HttpStreamFactoryTest, RequestSpdyHttpStreamHttpURL) { HttpServerProperties* http_server_properties = session->spdy_session_pool()->http_server_properties(); - EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port)); + EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port, + NetworkIsolationKey())); // Now request a stream. HttpRequestInfo request_info; @@ -2018,7 +2018,84 @@ TEST_F(HttpStreamFactoryTest, RequestSpdyHttpStreamHttpURL) { 0, GetSocketPoolGroupCount(session->GetSocketPool( HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct()))); EXPECT_FALSE(waiter.used_proxy_info().is_direct()); - EXPECT_TRUE(http_server_properties->GetSupportsSpdy(scheme_host_port)); + EXPECT_TRUE(http_server_properties->GetSupportsSpdy(scheme_host_port, + NetworkIsolationKey())); +} + +// Same as above, but checks HttpServerProperties is updated using the correct +// NetworkIsolationKey. When/if NetworkIsolationKey is enabled by default, this +// should probably be merged into the above test. +TEST_F(HttpStreamFactoryTest, + RequestSpdyHttpStreamHttpURLWithNetworkIsolationKey) { + const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/")); + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin1, kOrigin1); + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/")); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + features::kPartitionHttpServerPropertiesByNetworkIsolationKey); + + url::SchemeHostPort scheme_host_port("http", "myproxy.org", 443); + auto session_deps = std::make_unique<SpdySessionDependencies>( + ProxyResolutionService::CreateFixedFromPacResult( + "HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS)); + std::unique_ptr<ProxyResolutionService> proxy_resolution_service = + ProxyResolutionService::CreateFixedFromPacResult( + "HTTPS myproxy.org:443", TRAFFIC_ANNOTATION_FOR_TESTS); + + MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); + SequencedSocketData socket_data(base::make_span(&mock_read, 1), + base::span<MockWrite>()); + socket_data.set_connect_data(MockConnect(ASYNC, OK)); + session_deps->socket_factory->AddSocketDataProvider(&socket_data); + + SSLSocketDataProvider ssl_socket_data(ASYNC, OK); + ssl_socket_data.next_proto = kProtoHTTP2; + session_deps->socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); + session_deps->proxy_resolution_service = std::move(proxy_resolution_service); + + std::unique_ptr<HttpNetworkSession> session( + SpdySessionDependencies::SpdyCreateSession(session_deps.get())); + + HttpServerProperties* http_server_properties = + session->spdy_session_pool()->http_server_properties(); + EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port, + kNetworkIsolationKey1)); + + // Now request a stream. + HttpRequestInfo request_info; + request_info.method = "GET"; + request_info.url = GURL("http://www.google.com"); + request_info.load_flags = 0; + request_info.network_isolation_key = kNetworkIsolationKey1; + request_info.traffic_annotation = + MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + + SSLConfig ssl_config; + StreamRequestWaiter waiter; + std::unique_ptr<HttpStreamRequest> request( + session->http_stream_factory()->RequestStream( + request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, + /* enable_ip_based_pooling = */ true, + /* enable_alternative_services = */ true, NetLogWithSource())); + waiter.WaitForStream(); + EXPECT_TRUE(waiter.stream_done()); + EXPECT_TRUE(nullptr == waiter.websocket_stream()); + ASSERT_TRUE(nullptr != waiter.stream()); + + EXPECT_EQ(1, GetSpdySessionCount(session.get())); + EXPECT_EQ( + 0, GetSocketPoolGroupCount(session->GetSocketPool( + HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct()))); + EXPECT_FALSE(waiter.used_proxy_info().is_direct()); + EXPECT_TRUE(http_server_properties->GetSupportsSpdy(scheme_host_port, + kNetworkIsolationKey1)); + // Other NetworkIsolationKeys should not be recorded as supporting SPDY. + EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port, + NetworkIsolationKey())); + EXPECT_FALSE(http_server_properties->GetSupportsSpdy(scheme_host_port, + kNetworkIsolationKey2)); } // Tests that when a new SpdySession is established, duplicated idle H2 sockets @@ -2222,7 +2299,7 @@ TEST_F(HttpStreamFactoryTest, RequestBidirectionalStreamImpl) { } class HttpStreamFactoryBidirectionalQuicTest - : public TestWithScopedTaskEnvironment, + : public TestWithTaskEnvironment, public ::testing::WithParamInterface< std::tuple<quic::ParsedQuicVersion, bool>> { protected: @@ -2301,7 +2378,8 @@ class HttpStreamFactoryBidirectionalQuicTest 443); base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); http_server_properties_.SetQuicAlternativeService( - url::SchemeHostPort(default_url_), alternative_service, expiration, + url::SchemeHostPort(default_url_), NetworkIsolationKey(), + alternative_service, expiration, session_->params().quic_params.supported_versions); } @@ -2338,7 +2416,7 @@ class HttpStreamFactoryBidirectionalQuicTest MockCertVerifier cert_verifier_; ProofVerifyDetailsChromium verify_details_; MockCryptoClientStreamFactory crypto_client_stream_factory_; - HttpServerPropertiesImpl http_server_properties_; + HttpServerProperties http_server_properties_; TransportSecurityState transport_security_state_; MultiLogCTVerifier ct_verifier_; DefaultCTPolicyEnforcer ct_policy_enforcer_; @@ -2360,9 +2438,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest, spdy::SpdyPriority priority = ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); size_t spdy_headers_frame_length; - mock_quic_data.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1)); + int packet_num = 1; + if (VersionUsesQpack(version().transport_version)) { + mock_quic_data.AddWrite( + client_packet_maker().MakeInitialSettingsPacket(packet_num++)); + } mock_quic_data.AddWrite(client_packet_maker().MakeRequestHeadersPacket( - 2, GetNthClientInitiatedBidirectionalStreamId(0), + packet_num++, GetNthClientInitiatedBidirectionalStreamId(0), /*should_include_version=*/true, /*fin=*/true, priority, client_packet_maker().GetRequestHeaders("GET", "https", "/"), @@ -2485,9 +2567,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest, spdy::SpdyPriority priority = ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); size_t spdy_headers_frame_length; - mock_quic_data.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1)); + int packet_num = 1; + if (VersionUsesQpack(version().transport_version)) { + mock_quic_data.AddWrite( + client_packet_maker().MakeInitialSettingsPacket(packet_num++)); + } mock_quic_data.AddWrite(client_packet_maker().MakeRequestHeadersPacket( - 2, GetNthClientInitiatedBidirectionalStreamId(0), + packet_num++, GetNthClientInitiatedBidirectionalStreamId(0), /*should_include_version=*/true, /*fin=*/true, priority, client_packet_maker().GetRequestHeaders("GET", "https", "/"), @@ -2736,9 +2822,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest, Tag) { spdy::SpdyPriority priority = ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); size_t spdy_headers_frame_length; - mock_quic_data.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1)); + int packet_num = 1; + if (VersionUsesQpack(version().transport_version)) { + mock_quic_data.AddWrite( + client_packet_maker().MakeInitialSettingsPacket(packet_num++)); + } mock_quic_data.AddWrite(client_packet_maker().MakeRequestHeadersPacket( - 2, GetNthClientInitiatedBidirectionalStreamId(0), + packet_num++, GetNthClientInitiatedBidirectionalStreamId(0), /*should_include_version=*/true, /*fin=*/true, priority, client_packet_maker().GetRequestHeaders("GET", "https", "/"), @@ -2755,9 +2845,13 @@ TEST_P(HttpStreamFactoryBidirectionalQuicTest, Tag) { // Prepare mock QUIC data for a second session establishment. client_packet_maker().Reset(); MockQuicData mock_quic_data2(version()); - mock_quic_data2.AddWrite(client_packet_maker().MakeInitialSettingsPacket(1)); + packet_num = 1; + if (VersionUsesQpack(version().transport_version)) { + mock_quic_data2.AddWrite( + client_packet_maker().MakeInitialSettingsPacket(packet_num++)); + } mock_quic_data2.AddWrite(client_packet_maker().MakeRequestHeadersPacket( - 2, GetNthClientInitiatedBidirectionalStreamId(0), + packet_num++, GetNthClientInitiatedBidirectionalStreamId(0), /*should_include_version=*/true, /*fin=*/true, priority, client_packet_maker().GetRequestHeaders("GET", "https", "/"), @@ -3354,6 +3448,188 @@ TEST_F(HttpStreamFactoryTest, MultiIPAliases) { HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct()))); } +class ProcessAlternativeServicesTest : public TestWithTaskEnvironment { + public: + ProcessAlternativeServicesTest() { + session_params_.enable_quic = true; + + session_context_.proxy_resolution_service = proxy_resolution_service_.get(); + session_context_.host_resolver = &host_resolver_; + session_context_.cert_verifier = &cert_verifier_; + session_context_.transport_security_state = &transport_security_state_; + session_context_.cert_transparency_verifier = &ct_verifier_; + session_context_.client_socket_factory = &socket_factory_; + session_context_.ct_policy_enforcer = &ct_policy_enforcer_; + session_context_.ssl_config_service = &ssl_config_service_; + session_context_.http_server_properties = &http_server_properties_; + } + + protected: + HttpNetworkSession::Params session_params_; + HttpNetworkSession::Context session_context_; + std::unique_ptr<HttpNetworkSession> session_; + HttpServerProperties http_server_properties_; + + private: + std::unique_ptr<ProxyResolutionService> proxy_resolution_service_ = + ProxyResolutionService::CreateDirect(); + SSLConfigServiceDefaults ssl_config_service_; + MockClientSocketFactory socket_factory_; + MockHostResolver host_resolver_; + MockCertVerifier cert_verifier_; + TransportSecurityState transport_security_state_; + MultiLogCTVerifier ct_verifier_; + DefaultCTPolicyEnforcer ct_policy_enforcer_; +}; + +TEST_F(ProcessAlternativeServicesTest, ProcessEmptyAltSvc) { + session_ = + std::make_unique<HttpNetworkSession>(session_params_, session_context_); + url::SchemeHostPort origin; + NetworkIsolationKey network_isolation_key; + + scoped_refptr<HttpResponseHeaders> headers( + base::MakeRefCounted<HttpResponseHeaders>("")); + session_->http_stream_factory()->ProcessAlternativeServices( + session_.get(), network_isolation_key, headers.get(), origin); + + AlternativeServiceInfoVector alternatives = + http_server_properties_.GetAlternativeServiceInfos(origin, + network_isolation_key); + EXPECT_TRUE(alternatives.empty()); +} + +TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcClear) { + session_ = + std::make_unique<HttpNetworkSession>(session_params_, session_context_); + url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443); + ; + NetworkIsolationKey network_isolation_key( + url::Origin::Create(GURL("https://example.com")), + url::Origin::Create(GURL("https://example.com"))); + + http_server_properties_.SetAlternativeServices( + origin, network_isolation_key, + {AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( + {kProtoQUIC, "", 443}, + base::Time::Now() + base::TimeDelta::FromSeconds(30), + quic::AllSupportedVersions())}); + + EXPECT_FALSE(http_server_properties_ + .GetAlternativeServiceInfos(origin, network_isolation_key) + .empty()); + + scoped_refptr<HttpResponseHeaders> headers( + base::MakeRefCounted<HttpResponseHeaders>("")); + headers->AddHeader("alt-svc: clear"); + + session_->http_stream_factory()->ProcessAlternativeServices( + session_.get(), network_isolation_key, headers.get(), origin); + + AlternativeServiceInfoVector alternatives = + http_server_properties_.GetAlternativeServiceInfos(origin, + network_isolation_key); + EXPECT_TRUE(alternatives.empty()); +} + +TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcQuic) { + session_params_.quic_params.supported_versions = quic::AllSupportedVersions(); + session_ = + std::make_unique<HttpNetworkSession>(session_params_, session_context_); + url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443); + + NetworkIsolationKey network_isolation_key( + url::Origin::Create(GURL("https://example.com")), + url::Origin::Create(GURL("https://example.com"))); + + scoped_refptr<HttpResponseHeaders> headers( + base::MakeRefCounted<HttpResponseHeaders>("")); + headers->AddHeader("alt-svc: quic=\":443\"; v=\"99,48,47,46,43,39\""); + + session_->http_stream_factory()->ProcessAlternativeServices( + session_.get(), network_isolation_key, headers.get(), origin); + + AlternativeServiceInfoVector alternatives = + http_server_properties_.GetAlternativeServiceInfos(origin, + network_isolation_key); + ASSERT_EQ(1u, alternatives.size()); + EXPECT_EQ(kProtoQUIC, alternatives[0].protocol()); + EXPECT_EQ(HostPortPair("example.com", 443), alternatives[0].host_port_pair()); + EXPECT_EQ(quic::AllSupportedVersions().size(), + alternatives[0].advertised_versions().size()); + for (quic::ParsedQuicVersion version : quic::AllSupportedVersions()) { + EXPECT_TRUE(base::Contains(alternatives[0].advertised_versions(), version)) + << version; + } +} + +TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcQuicIetf) { + session_params_.quic_params.supported_versions = quic::AllSupportedVersions(); + session_ = + std::make_unique<HttpNetworkSession>(session_params_, session_context_); + url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443); + + NetworkIsolationKey network_isolation_key( + url::Origin::Create(GURL("https://example.com")), + url::Origin::Create(GURL("https://example.com"))); + + scoped_refptr<HttpResponseHeaders> headers( + base::MakeRefCounted<HttpResponseHeaders>("")); + headers->AddHeader( + "alt-svc: " + "h3-Q099=\":443\",h3-Q048=\":443\",h3-Q047=\":443\",h3-Q043=\":443\",h3-" + "Q039=\":443\""); + + session_->http_stream_factory()->ProcessAlternativeServices( + session_.get(), network_isolation_key, headers.get(), origin); + + quic::ParsedQuicVersionVector versions = { + {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_99}, + {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_48}, + {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_47}, + {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_43}, + {quic::PROTOCOL_QUIC_CRYPTO, quic::QUIC_VERSION_39}, + }; + AlternativeServiceInfoVector alternatives = + http_server_properties_.GetAlternativeServiceInfos(origin, + network_isolation_key); + ASSERT_EQ(versions.size(), alternatives.size()); + for (size_t i = 0; i < alternatives.size(); ++i) { + EXPECT_EQ(kProtoQUIC, alternatives[i].protocol()); + EXPECT_EQ(HostPortPair("example.com", 443), + alternatives[i].host_port_pair()); + EXPECT_EQ(1u, alternatives[i].advertised_versions().size()); + EXPECT_EQ(versions[i], alternatives[i].advertised_versions()[0]); + } +} + +TEST_F(ProcessAlternativeServicesTest, ProcessAltSvcHttp2) { + session_params_.quic_params.supported_versions = quic::AllSupportedVersions(); + session_ = + std::make_unique<HttpNetworkSession>(session_params_, session_context_); + url::SchemeHostPort origin(url::kHttpsScheme, "example.com", 443); + + NetworkIsolationKey network_isolation_key( + url::Origin::Create(GURL("https://example.com")), + url::Origin::Create(GURL("https://example.com"))); + + scoped_refptr<HttpResponseHeaders> headers( + base::MakeRefCounted<HttpResponseHeaders>("")); + headers->AddHeader("alt-svc: h2=\"other.example.com:443\""); + + session_->http_stream_factory()->ProcessAlternativeServices( + session_.get(), network_isolation_key, headers.get(), origin); + + AlternativeServiceInfoVector alternatives = + http_server_properties_.GetAlternativeServiceInfos(origin, + network_isolation_key); + ASSERT_EQ(1u, alternatives.size()); + EXPECT_EQ(kProtoHTTP2, alternatives[0].protocol()); + EXPECT_EQ(HostPortPair("other.example.com", 443), + alternatives[0].host_port_pair()); + EXPECT_EQ(0u, alternatives[0].advertised_versions().size()); +} + } // namespace } // namespace net diff --git a/chromium/net/http/http_stream_parser_fuzzer.cc b/chromium/net/http/http_stream_parser_fuzzer.cc index 3f99250d7a9..bb5543a399d 100644 --- a/chromium/net/http/http_stream_parser_fuzzer.cc +++ b/chromium/net/http/http_stream_parser_fuzzer.cc @@ -7,6 +7,8 @@ #include <stddef.h> #include <stdint.h> +#include <fuzzer/FuzzedDataProvider.h> + #include <algorithm> #include <memory> #include <string> @@ -24,7 +26,6 @@ #include "net/log/test_net_log.h" #include "net/socket/fuzzed_socket.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "third_party/libFuzzer/src/utils/FuzzedDataProvider.h" #include "url/gurl.h" // Fuzzer for HttpStreamParser. diff --git a/chromium/net/http/http_stream_parser_unittest.cc b/chromium/net/http/http_stream_parser_unittest.cc index a74972cfe23..81fbaac2d70 100644 --- a/chromium/net/http/http_stream_parser_unittest.cc +++ b/chromium/net/http/http_stream_parser_unittest.cc @@ -19,7 +19,7 @@ #include "base/run_loop.h" #include "base/stl_util.h" #include "base/strings/string_piece.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "net/base/chunked_upload_data_stream.h" #include "net/base/elements_upload_data_stream.h" @@ -153,7 +153,7 @@ TEST(HttpStreamParser, DataReadErrorSynchronous) { } TEST(HttpStreamParser, DataReadErrorAsynchronous) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockWrite writes[] = { MockWrite(ASYNC, 0, "POST / HTTP/1.1\r\n"), @@ -219,7 +219,7 @@ class InitAsyncUploadDataStream : public ChunkedUploadDataStream { }; TEST(HttpStreamParser, InitAsynchronousUploadDataStream) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; InitAsyncUploadDataStream upload_data_stream(0); @@ -370,8 +370,8 @@ TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) { } TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) { - base::test::ScopedTaskEnvironment scoped_task_environment( - base::test::ScopedTaskEnvironment::MainThreadType::IO); + base::test::TaskEnvironment task_environment( + base::test::TaskEnvironment::MainThreadType::IO); // Create an empty temporary file. base::ScopedTempDir temp_dir; @@ -600,7 +600,7 @@ TEST(HttpStreamParser, SentBytesPost) { } TEST(HttpStreamParser, SentBytesChunkedPostError) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; static const char kChunk[] = "Chunk 1"; @@ -657,7 +657,7 @@ TEST(HttpStreamParser, SentBytesChunkedPostError) { // when sending a request with a chunked body with only one chunk that becomes // available asynchronously. TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; static const char kChunk[] = "Chunk"; @@ -739,7 +739,7 @@ TEST(HttpStreamParser, AsyncSingleChunkAndAsyncSocket) { // when sending a request with a chunked body with only one chunk that is // available synchronously. TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; static const char kChunk[] = "Chunk"; @@ -818,7 +818,7 @@ TEST(HttpStreamParser, SyncSingleChunkAndAsyncSocket) { // asynchronously. // This is a regression test for http://crbug.com/132243 TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; // The chunks that will be written in the request, as reflected in the // MockWrites below. @@ -916,7 +916,7 @@ TEST(HttpStreamParser, AsyncChunkAndAsyncSocketWithMultipleChunks) { // when there's only one "chunk" with 0 bytes, and is received from the // UploadStream only after sending the request headers successfully. TEST(HttpStreamParser, AsyncEmptyChunkedUpload) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockWrite writes[] = { MockWrite(ASYNC, 0, @@ -993,7 +993,7 @@ TEST(HttpStreamParser, AsyncEmptyChunkedUpload) { // when there's only one "chunk" with 0 bytes, which was already appended before // the request was started. TEST(HttpStreamParser, SyncEmptyChunkedUpload) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; MockWrite writes[] = { MockWrite(ASYNC, 0, diff --git a/chromium/net/http/http_stream_request_unittest.cc b/chromium/net/http/http_stream_request_unittest.cc index 031cb77ddc5..1b6f0d17ac7 100644 --- a/chromium/net/http/http_stream_request_unittest.cc +++ b/chromium/net/http/http_stream_request_unittest.cc @@ -7,7 +7,7 @@ #include <utility> #include "base/run_loop.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "net/http/http_stream_factory.h" #include "net/http/http_stream_factory_job.h" #include "net/http/http_stream_factory_job_controller.h" @@ -22,7 +22,7 @@ namespace net { // Make sure that Request passes on its priority updates to its jobs. TEST(HttpStreamRequestTest, SetPriority) { - base::test::ScopedTaskEnvironment scoped_task_environment; + base::test::TaskEnvironment task_environment; SequencedSocketData data; data.set_connect_data(MockConnect(ASYNC, OK)); diff --git a/chromium/net/http/http_transaction.h b/chromium/net/http/http_transaction.h index f8ddc87879c..aa496f5924f 100644 --- a/chromium/net/http/http_transaction.h +++ b/chromium/net/http/http_transaction.h @@ -128,14 +128,6 @@ class NET_EXPORT_PRIVATE HttpTransaction { // ignore. virtual void StopCaching() = 0; - // Gets the full request headers sent to the server. This is guaranteed to - // work only if Start returns success and the underlying transaction supports - // it. (Right now, this is only network transactions, not cache ones.) - // - // Returns true and overwrites headers if it can get the request headers; - // otherwise, returns false and does not modify headers. - virtual bool GetFullRequestHeaders(HttpRequestHeaders* headers) const = 0; - // Get the number of bytes received from network. virtual int64_t GetTotalReceivedBytes() const = 0; diff --git a/chromium/net/http/http_transaction_test_util.cc b/chromium/net/http/http_transaction_test_util.cc index 28b65dd1704..5f75d668b8b 100644 --- a/chromium/net/http/http_transaction_test_util.cc +++ b/chromium/net/http/http_transaction_test_util.cc @@ -195,9 +195,11 @@ TestTransactionConsumer::~TestTransactionConsumer() = default; void TestTransactionConsumer::Start(const HttpRequestInfo* request, const NetLogWithSource& net_log) { state_ = STARTING; - int result = trans_->Start( - request, base::Bind(&TestTransactionConsumer::OnIOComplete, - base::Unretained(this)), net_log); + int result = + trans_->Start(request, + base::BindOnce(&TestTransactionConsumer::OnIOComplete, + base::Unretained(this)), + net_log); if (result != ERR_IO_PENDING) DidStart(result); } @@ -229,10 +231,10 @@ void TestTransactionConsumer::DidFinish(int result) { void TestTransactionConsumer::Read() { state_ = READING; read_buf_ = base::MakeRefCounted<IOBuffer>(1024); - int result = trans_->Read(read_buf_.get(), - 1024, - base::Bind(&TestTransactionConsumer::OnIOComplete, - base::Unretained(this))); + int result = + trans_->Read(read_buf_.get(), 1024, + base::BindOnce(&TestTransactionConsumer::OnIOComplete, + base::Unretained(this))); if (result != ERR_IO_PENDING) DidRead(result); } @@ -368,11 +370,6 @@ void MockNetworkTransaction::StopCaching() { transaction_factory_->TransactionStopCaching(); } -bool MockNetworkTransaction::GetFullRequestHeaders( - HttpRequestHeaders* headers) const { - return false; -} - int64_t MockNetworkTransaction::GetTotalReceivedBytes() const { return received_bytes_; } @@ -501,6 +498,11 @@ int MockNetworkTransaction::StartInternal(const HttpRequestInfo* request, if (request_->load_flags & LOAD_PREFETCH) response_.unused_since_prefetch = true; + if (request_->load_flags & LOAD_RESTRICTED_PREFETCH) { + DCHECK(response_.unused_since_prefetch); + response_.restricted_prefetch = true; + } + // Pause and resume. if (!before_network_start_callback_.is_null()) { bool defer = false; diff --git a/chromium/net/http/http_transaction_test_util.h b/chromium/net/http/http_transaction_test_util.h index f1724b0b4bd..513d8715039 100644 --- a/chromium/net/http/http_transaction_test_util.h +++ b/chromium/net/http/http_transaction_test_util.h @@ -31,7 +31,6 @@ namespace net { -class HttpRequestHeaders; class IOBuffer; class SSLPrivateKey; class X509Certificate; @@ -209,8 +208,6 @@ class MockNetworkTransaction void StopCaching() override; - bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override; - int64_t GetTotalReceivedBytes() const override; int64_t GetTotalSentBytes() const override; diff --git a/chromium/net/http/mock_http_cache.cc b/chromium/net/http/mock_http_cache.cc index 3ab7e86742f..b9cc0fc71ec 100644 --- a/chromium/net/http/mock_http_cache.cc +++ b/chromium/net/http/mock_http_cache.cc @@ -17,6 +17,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "net/base/features.h" #include "net/base/net_errors.h" +#include "net/disk_cache/disk_cache_test_util.h" #include "net/http/http_cache_writers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -84,7 +85,7 @@ MockDiskEntry::MockDiskEntry(const std::string& key) max_file_size_(std::numeric_limits<int>::max()), doomed_(false), sparse_(false), - fail_requests_(false), + fail_requests_(0), fail_sparse_requests_(false), busy_(false), delayed_(false), @@ -127,7 +128,7 @@ int MockDiskEntry::ReadData(int index, DCHECK(index >= 0 && index < kNumCacheEntryDataIndices); DCHECK(!callback.is_null()); - if (fail_requests_) + if (fail_requests_ & FAIL_READ) return ERR_CACHE_READ_FAILURE; if (offset < 0 || offset > static_cast<int>(data_[index].size())) @@ -169,7 +170,7 @@ int MockDiskEntry::WriteData(int index, DCHECK(!callback.is_null()); DCHECK(truncate); - if (fail_requests_) { + if (fail_requests_ & FAIL_WRITE) { CallbackLater(std::move(callback), ERR_CACHE_READ_FAILURE); return ERR_IO_PENDING; } @@ -211,7 +212,7 @@ int MockDiskEntry::ReadSparseData(int64_t offset, if (offset < 0) return ERR_FAILED; - if (fail_requests_) + if (fail_requests_ & FAIL_READ_SPARSE) return ERR_CACHE_READ_FAILURE; DCHECK(offset < std::numeric_limits<int32_t>::max()); @@ -251,7 +252,7 @@ int MockDiskEntry::WriteSparseData(int64_t offset, if (!buf_len) return 0; - if (fail_requests_) + if (fail_requests_ & FAIL_WRITE_SPARSE) return ERR_CACHE_READ_FAILURE; DCHECK(offset < std::numeric_limits<int32_t>::max()); @@ -280,7 +281,7 @@ int MockDiskEntry::GetAvailableRange(int64_t offset, if (offset < 0) return ERR_FAILED; - if (fail_requests_) + if (fail_requests_ & FAIL_GET_AVAILABLE_RANGE) return ERR_CACHE_READ_FAILURE; *start = offset; @@ -417,14 +418,13 @@ MockDiskCache::MockDiskCache() doomed_count_(0), max_file_size_(std::numeric_limits<int>::max()), fail_requests_(false), - soft_failures_(false), - soft_failures_one_instance_(false), + soft_failures_(0), + soft_failures_one_instance_(0), double_create_check_(true), fail_sparse_requests_(false), support_in_memory_entry_data_(true), force_fail_callback_later_(false), - defer_op_(MockDiskEntry::DEFER_NONE), - resume_return_code_(0) {} + defer_op_(MockDiskEntry::DEFER_NONE) {} MockDiskCache::~MockDiskCache() { ReleaseAll(); @@ -434,95 +434,97 @@ int32_t MockDiskCache::GetEntryCount() const { return static_cast<int32_t>(entries_.size()); } -net::Error MockDiskCache::OpenOrCreateEntry( +disk_cache::EntryResult MockDiskCache::OpenOrCreateEntry( const std::string& key, net::RequestPriority request_priority, - disk_cache::EntryWithOpened* entry_struct, - CompletionOnceCallback callback) { + EntryResultCallback callback) { DCHECK(!callback.is_null()); - base::RepeatingCallback<void(int)> copyable_callback; + base::RepeatingCallback<void(EntryResult)> copyable_callback; if (callback) copyable_callback = base::AdaptCallbackForRepeating(std::move(callback)); if (force_fail_callback_later_) { - CallbackLater(copyable_callback, ERR_CACHE_OPEN_OR_CREATE_FAILURE); - return ERR_IO_PENDING; + CallbackLater(base::BindOnce( + copyable_callback, + EntryResult::MakeError(ERR_CACHE_OPEN_OR_CREATE_FAILURE))); + return EntryResult::MakeError(ERR_IO_PENDING); } if (fail_requests_) - return ERR_CACHE_OPEN_OR_CREATE_FAILURE; + return EntryResult::MakeError(ERR_CACHE_OPEN_OR_CREATE_FAILURE); - disk_cache::Entry** entry = &(entry_struct->entry); + EntryResult result; // First try opening the entry. - entry_struct->opened = true; - net::Error rv = OpenEntry(key, request_priority, entry, copyable_callback); - if (rv == OK || rv == ERR_IO_PENDING) - return rv; + result = OpenEntry(key, request_priority, copyable_callback); + if (result.net_error() == OK || result.net_error() == ERR_IO_PENDING) + return result; // Unable to open, try creating the entry. - entry_struct->opened = false; - rv = CreateEntry(key, request_priority, entry, copyable_callback); - if (rv == OK || rv == ERR_IO_PENDING) - return rv; + result = CreateEntry(key, request_priority, copyable_callback); + if (result.net_error() == OK || result.net_error() == ERR_IO_PENDING) + return result; - return ERR_CACHE_OPEN_OR_CREATE_FAILURE; + return EntryResult::MakeError(ERR_CACHE_OPEN_OR_CREATE_FAILURE); } -net::Error MockDiskCache::OpenEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::Entry** entry, - CompletionOnceCallback callback) { +disk_cache::EntryResult MockDiskCache::OpenEntry( + const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) { DCHECK(!callback.is_null()); if (force_fail_callback_later_) { - CallbackLater(std::move(callback), ERR_CACHE_OPEN_FAILURE); - return ERR_IO_PENDING; + CallbackLater(base::BindOnce( + std::move(callback), EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE))); + return EntryResult::MakeError(ERR_IO_PENDING); } if (fail_requests_) - return ERR_CACHE_OPEN_FAILURE; + return EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE); auto it = entries_.find(key); if (it == entries_.end()) - return ERR_CACHE_OPEN_FAILURE; + return EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE); if (it->second->is_doomed()) { it->second->Release(); entries_.erase(it); - return ERR_CACHE_OPEN_FAILURE; + return EntryResult::MakeError(ERR_CACHE_OPEN_FAILURE); } open_count_++; - it->second->AddRef(); - *entry = it->second; + MockDiskEntry* entry = it->second; + entry->AddRef(); if (soft_failures_ || soft_failures_one_instance_) { - it->second->set_fail_requests(); - soft_failures_one_instance_ = false; + entry->set_fail_requests(soft_failures_ | soft_failures_one_instance_); + soft_failures_one_instance_ = 0; } - it->second->set_max_file_size(max_file_size_); + entry->set_max_file_size(max_file_size_); + EntryResult result = EntryResult::MakeOpened(entry); if (GetTestModeForEntry(key) & TEST_MODE_SYNC_CACHE_START) - return OK; + return result; - CallbackLater(std::move(callback), OK); - return ERR_IO_PENDING; + CallbackLater(base::BindOnce(std::move(callback), std::move(result))); + return EntryResult::MakeError(ERR_IO_PENDING); } -net::Error MockDiskCache::CreateEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::Entry** entry, - CompletionOnceCallback callback) { +disk_cache::EntryResult MockDiskCache::CreateEntry( + const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) { DCHECK(!callback.is_null()); if (force_fail_callback_later_) { - CallbackLater(std::move(callback), ERR_CACHE_CREATE_FAILURE); - return ERR_IO_PENDING; + CallbackLater(base::BindOnce( + std::move(callback), EntryResult::MakeError(ERR_CACHE_CREATE_FAILURE))); + return EntryResult::MakeError(ERR_IO_PENDING); } if (fail_requests_) - return ERR_CACHE_CREATE_FAILURE; + return EntryResult::MakeError(ERR_CACHE_CREATE_FAILURE); auto it = entries_.find(key); if (it != entries_.end()) { @@ -530,7 +532,7 @@ net::Error MockDiskCache::CreateEntry(const std::string& key, if (double_create_check_) NOTREACHED(); else - return ERR_CACHE_CREATE_FAILURE; + return EntryResult::MakeError(ERR_CACHE_CREATE_FAILURE); } it->second->Release(); entries_.erase(it); @@ -544,11 +546,10 @@ net::Error MockDiskCache::CreateEntry(const std::string& key, entries_[key] = new_entry; new_entry->AddRef(); - *entry = new_entry; if (soft_failures_ || soft_failures_one_instance_) { - new_entry->set_fail_requests(); - soft_failures_one_instance_ = false; + new_entry->set_fail_requests(soft_failures_ | soft_failures_one_instance_); + soft_failures_one_instance_ = 0; } if (fail_sparse_requests_) @@ -556,19 +557,19 @@ net::Error MockDiskCache::CreateEntry(const std::string& key, new_entry->set_max_file_size(max_file_size_); + EntryResult result = EntryResult::MakeCreated(new_entry); if (GetTestModeForEntry(key) & TEST_MODE_SYNC_CACHE_START) - return OK; + return result; // Pause and resume. if (defer_op_ == MockDiskEntry::DEFER_CREATE) { defer_op_ = MockDiskEntry::DEFER_NONE; - resume_callback_ = std::move(callback); - resume_return_code_ = OK; - return ERR_IO_PENDING; + resume_callback_ = base::BindOnce(std::move(callback), std::move(result)); + return EntryResult::MakeError(ERR_IO_PENDING); } - CallbackLater(std::move(callback), OK); - return ERR_IO_PENDING; + CallbackLater(base::BindOnce(std::move(callback), std::move(result))); + return EntryResult::MakeError(ERR_IO_PENDING); } net::Error MockDiskCache::DoomEntry(const std::string& key, @@ -576,7 +577,7 @@ net::Error MockDiskCache::DoomEntry(const std::string& key, CompletionOnceCallback callback) { DCHECK(!callback.is_null()); if (force_fail_callback_later_) { - CallbackLater(std::move(callback), ERR_CACHE_DOOM_FAILURE); + CallbackLater(base::BindOnce(std::move(callback), ERR_CACHE_DOOM_FAILURE)); return ERR_IO_PENDING; } @@ -593,7 +594,7 @@ net::Error MockDiskCache::DoomEntry(const std::string& key, if (GetTestModeForEntry(key) & TEST_MODE_SYNC_CACHE_START) return OK; - CallbackLater(std::move(callback), OK); + CallbackLater(base::BindOnce(std::move(callback), OK)); return ERR_IO_PENDING; } @@ -619,9 +620,8 @@ int64_t MockDiskCache::CalculateSizeOfAllEntries( class MockDiskCache::NotImplementedIterator : public Iterator { public: - net::Error OpenNextEntry(disk_cache::Entry** next_entry, - CompletionOnceCallback callback) override { - return ERR_NOT_IMPLEMENTED; + EntryResult OpenNextEntry(EntryResultCallback callback) override { + return EntryResult::MakeError(ERR_NOT_IMPLEMENTED); } }; @@ -668,9 +668,8 @@ void MockDiskCache::ReleaseAll() { entries_.clear(); } -void MockDiskCache::CallbackLater(CompletionOnceCallback callback, int result) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), result)); +void MockDiskCache::CallbackLater(base::OnceClosure callback) { + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(callback)); } bool MockDiskCache::IsDiskEntryDoomed(const std::string& key) { @@ -683,8 +682,7 @@ bool MockDiskCache::IsDiskEntryDoomed(const std::string& key) { void MockDiskCache::ResumeCacheOperation() { DCHECK(!resume_callback_.is_null()); - CallbackLater(std::move(resume_callback_), resume_return_code_); - resume_return_code_ = 0; + CallbackLater(std::move(resume_callback_)); } scoped_refptr<MockDiskEntry> MockDiskCache::GetDiskEntryRef( @@ -790,17 +788,31 @@ bool MockHttpCache::WriteResponseInfo(disk_cache::Entry* disk_entry, bool MockHttpCache::OpenBackendEntry(const std::string& key, disk_cache::Entry** entry) { - TestCompletionCallback cb; - int rv = backend()->OpenEntry(key, net::HIGHEST, entry, cb.callback()); - return (cb.GetResult(rv) == OK); + TestEntryResultCompletionCallback cb; + disk_cache::EntryResult result = + backend()->OpenEntry(key, net::HIGHEST, cb.callback()); + result = cb.GetResult(std::move(result)); + if (result.net_error() == OK) { + *entry = result.ReleaseEntry(); + return true; + } else { + return false; + } } bool MockHttpCache::CreateBackendEntry(const std::string& key, disk_cache::Entry** entry, NetLog* net_log) { - TestCompletionCallback cb; - int rv = backend()->CreateEntry(key, net::HIGHEST, entry, cb.callback()); - return (cb.GetResult(rv) == OK); + TestEntryResultCompletionCallback cb; + disk_cache::EntryResult result = + backend()->CreateEntry(key, net::HIGHEST, cb.callback()); + result = cb.GetResult(std::move(result)); + if (result.net_error() == OK) { + *entry = result.ReleaseEntry(); + return true; + } else { + return false; + } } // Static. @@ -848,11 +860,11 @@ int MockHttpCache::GetCountWriterTransactions(const std::string& key) { //----------------------------------------------------------------------------- -net::Error MockDiskCacheNoCB::CreateEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::Entry** entry, - CompletionOnceCallback callback) { - return ERR_IO_PENDING; +disk_cache::EntryResult MockDiskCacheNoCB::CreateEntry( + const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) { + return EntryResult::MakeError(ERR_IO_PENDING); } //----------------------------------------------------------------------------- diff --git a/chromium/net/http/mock_http_cache.h b/chromium/net/http/mock_http_cache.h index f4fa2e7af54..f0736c17e69 100644 --- a/chromium/net/http/mock_http_cache.h +++ b/chromium/net/http/mock_http_cache.h @@ -40,6 +40,16 @@ class MockDiskEntry : public disk_cache::Entry, DEFER_WRITE, }; + // Bit mask used for set_fail_requests(). + enum FailOp { + FAIL_READ = 0x01, + FAIL_WRITE = 0x02, + FAIL_READ_SPARSE = 0x04, + FAIL_WRITE_SPARSE = 0x08, + FAIL_GET_AVAILABLE_RANGE = 0x10, + FAIL_ALL = 0xFF + }; + explicit MockDiskEntry(const std::string& key); bool is_doomed() const { return doomed_; } @@ -82,8 +92,8 @@ class MockDiskEntry : public disk_cache::Entry, uint8_t in_memory_data() const { return in_memory_data_; } void set_in_memory_data(uint8_t val) { in_memory_data_ = val; } - // Fail most subsequent requests. - void set_fail_requests() { fail_requests_ = true; } + // Fail subsequent requests, specified via FailOp bits. + void set_fail_requests(int mask) { fail_requests_ = mask; } void set_fail_sparse_requests() { fail_sparse_requests_ = true; } @@ -132,7 +142,7 @@ class MockDiskEntry : public disk_cache::Entry, int max_file_size_; bool doomed_; bool sparse_; - bool fail_requests_; + int fail_requests_; bool fail_sparse_requests_; bool busy_; bool delayed_; @@ -152,18 +162,15 @@ class MockDiskCache : public disk_cache::Backend { ~MockDiskCache() override; int32_t GetEntryCount() const override; - net::Error OpenOrCreateEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::EntryWithOpened* entry_struct, - CompletionOnceCallback callback) override; - net::Error OpenEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::Entry** entry, - CompletionOnceCallback callback) override; - net::Error CreateEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::Entry** entry, - CompletionOnceCallback callback) override; + EntryResult OpenOrCreateEntry(const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) override; + EntryResult OpenEntry(const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) override; + EntryResult CreateEntry(const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) override; net::Error DoomEntry(const std::string& key, net::RequestPriority request_priority, CompletionOnceCallback callback) override; @@ -198,11 +205,13 @@ class MockDiskCache : public disk_cache::Backend { void set_fail_requests(bool value) { fail_requests_ = value; } // Return entries that fail some of their requests. - void set_soft_failures(bool value) { soft_failures_ = value; } + // The value is formed as a bitmask of MockDiskEntry::FailOp. + void set_soft_failures_mask(int value) { soft_failures_ = value; } // Returns entries that fail some of their requests, but only until - // the entry is re-created. - void set_soft_failures_one_instance(bool value) { + // the entry is re-created. The value is formed as a bitmask of + // MockDiskEntry::FailOp. + void set_soft_failures_one_instance(int value) { soft_failures_one_instance_ = value; } @@ -251,7 +260,7 @@ class MockDiskCache : public disk_cache::Backend { using EntryMap = std::map<std::string, MockDiskEntry*>; class NotImplementedIterator; - void CallbackLater(CompletionOnceCallback callback, int result); + void CallbackLater(base::OnceClosure callback); EntryMap entries_; std::vector<std::string> external_cache_hits_; @@ -260,8 +269,8 @@ class MockDiskCache : public disk_cache::Backend { int doomed_count_; int max_file_size_; bool fail_requests_; - bool soft_failures_; - bool soft_failures_one_instance_; + int soft_failures_; + int soft_failures_one_instance_; bool double_create_check_; bool fail_sparse_requests_; bool support_in_memory_entry_data_; @@ -269,8 +278,7 @@ class MockDiskCache : public disk_cache::Backend { // Used for pause and restart. MockDiskEntry::DeferOp defer_op_; - CompletionOnceCallback resume_callback_; - int resume_return_code_; + base::OnceClosure resume_callback_; }; class MockBackendFactory : public HttpCache::BackendFactory { @@ -351,10 +359,9 @@ class MockHttpCache { // This version of the disk cache doesn't invoke CreateEntry callbacks. class MockDiskCacheNoCB : public MockDiskCache { - net::Error CreateEntry(const std::string& key, - net::RequestPriority request_priority, - disk_cache::Entry** entry, - CompletionOnceCallback callback) override; + EntryResult CreateEntry(const std::string& key, + net::RequestPriority request_priority, + EntryResultCallback callback) override; }; class MockBackendNoCbFactory : public HttpCache::BackendFactory { diff --git a/chromium/net/http/mock_sspi_library_win.cc b/chromium/net/http/mock_sspi_library_win.cc index 1d3379cd278..95a3deb27f4 100644 --- a/chromium/net/http/mock_sspi_library_win.cc +++ b/chromium/net/http/mock_sspi_library_win.cc @@ -4,16 +4,108 @@ #include "net/http/mock_sspi_library_win.h" +#include <algorithm> +#include <cstring> +#include <memory> + +#include "base/logging.h" +#include "base/strings/string16.h" +#include "base/strings/stringprintf.h" +#include "base/strings/utf_string_conversions.h" +#include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" +// Comparator so we can use CredHandle and CtxtHandle with std::set. Both of +// those classes are typedefs for _SecHandle. +bool operator<(const _SecHandle left, const _SecHandle right) { + return left.dwUpper < right.dwUpper || left.dwLower < right.dwLower; +} + namespace net { +namespace { + +int uniquifier_ = 0; + +struct MockCredential { + base::string16 source_principal; + base::string16 package; + bool has_explicit_credentials = false; + int uniquifier = ++uniquifier_; + + // CredHandle and CtxtHandle both shared the following definition: + // + // typedef struct _SecHandle { + // ULONG_PTR dwLower; + // ULONG_PTR dwUpper; + // } SecHandle, * PSecHandle; + // + // ULONG_PTR type can hold a pointer. This function stuffs |this| into dwUpper + // and adds a uniquifier to dwLower. This ensures that all PCredHandles issued + // by this method during the lifetime of this process is unique. + void StoreInHandle(PCredHandle handle) { + DCHECK(uniquifier > 0); + EXPECT_FALSE(SecIsValidHandle(handle)); + + handle->dwLower = uniquifier; + handle->dwUpper = reinterpret_cast<ULONG_PTR>(this); + + DCHECK(SecIsValidHandle(handle)); + } + + static MockCredential* FromHandle(PCredHandle handle) { + return reinterpret_cast<MockCredential*>(handle->dwUpper); + } +}; + +struct MockContext { + MockCredential* credential = nullptr; + base::string16 target_principal; + int uniquifier = ++uniquifier_; + int rounds = 0; + + // CredHandle and CtxtHandle both shared the following definition: + // + // typedef struct _SecHandle { + // ULONG_PTR dwLower; + // ULONG_PTR dwUpper; + // } SecHandle, * PSecHandle; + // + // ULONG_PTR type can hold a pointer. This function stuffs |this| into dwUpper + // and adds a uniquifier to dwLower. This ensures that all PCredHandles issued + // by this method during the lifetime of this process is unique. + void StoreInHandle(PCtxtHandle handle) { + EXPECT_FALSE(SecIsValidHandle(handle)); + DCHECK(uniquifier > 0); + + handle->dwLower = uniquifier; + handle->dwUpper = reinterpret_cast<ULONG_PTR>(this); + + DCHECK(SecIsValidHandle(handle)); + } + + std::string ToString() const { + return base::StringPrintf( + "%s's token #%d for %S", + base::UTF16ToUTF8(credential->source_principal).c_str(), rounds + 1, + base::as_wcstr(target_principal)); + } + + static MockContext* FromHandle(PCtxtHandle handle) { + return reinterpret_cast<MockContext*>(handle->dwUpper); + } +}; + +} // namespace + MockSSPILibrary::MockSSPILibrary() { } MockSSPILibrary::~MockSSPILibrary() { EXPECT_TRUE(expected_package_queries_.empty()); EXPECT_TRUE(expected_freed_packages_.empty()); + EXPECT_TRUE(active_credentials_.empty()); + EXPECT_TRUE(active_contexts_.empty()); } SECURITY_STATUS MockSSPILibrary::AcquireCredentialsHandle( @@ -26,8 +118,21 @@ SECURITY_STATUS MockSSPILibrary::AcquireCredentialsHandle( void* pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry) { - // Fill in phCredential with arbitrary value. - phCredential->dwLower = phCredential->dwUpper = ((ULONG_PTR) ((INT_PTR)0)); + DCHECK(!SecIsValidHandle(phCredential)); + auto* credential = new MockCredential; + credential->source_principal = pszPrincipal ? base::as_u16cstr(pszPrincipal) + : STRING16_LITERAL("<Default>"); + credential->package = base::as_u16cstr(pszPackage); + credential->has_explicit_credentials = !!pvAuthData; + + credential->StoreInHandle(phCredential); + + if (ptsExpiry) { + ptsExpiry->LowPart = 0xBAA5B780; + ptsExpiry->HighPart = 0x01D54E17; + } + + active_credentials_.insert(*phCredential); return SEC_E_OK; } @@ -44,19 +149,88 @@ SECURITY_STATUS MockSSPILibrary::InitializeSecurityContext( PSecBufferDesc pOutput, unsigned long* contextAttr, PTimeStamp ptsExpiry) { - // Fill in the outbound buffer with garbage data. + MockContext* new_context = new MockContext; + new_context->credential = MockCredential::FromHandle(phCredential); + new_context->target_principal = base::as_u16cstr(pszTargetName); + new_context->rounds = 0; + + // Always rotate contexts. That way tests will fail if the caller's context + // management is broken. + if (phContext && SecIsValidHandle(phContext)) { + std::unique_ptr<MockContext> old_context{ + MockContext::FromHandle(phContext)}; + EXPECT_EQ(old_context->credential, new_context->credential); + EXPECT_EQ(1u, active_contexts_.erase(*phContext)); + + new_context->rounds = old_context->rounds + 1; + SecInvalidateHandle(phContext); + } + + new_context->StoreInHandle(phNewContext); + active_contexts_.insert(*phNewContext); + + auto token = new_context->ToString(); PSecBuffer out_buffer = pOutput->pBuffers; - out_buffer->cbBuffer = 2; - uint8_t* buf = reinterpret_cast<uint8_t*>(out_buffer->pvBuffer); - buf[0] = 0xAB; - buf[1] = 0xBA; - - // Fill in phNewContext with arbitrary value if it's invalid. - if (phNewContext != phContext) - phNewContext->dwLower = phNewContext->dwUpper = ((ULONG_PTR) ((INT_PTR)0)); + out_buffer->cbBuffer = std::min<ULONG>(out_buffer->cbBuffer, token.size()); + std::memcpy(out_buffer->pvBuffer, token.data(), out_buffer->cbBuffer); + + if (ptsExpiry) { + ptsExpiry->LowPart = 0xBAA5B780; + ptsExpiry->HighPart = 0x01D54E15; + } return SEC_E_OK; } +SECURITY_STATUS MockSSPILibrary::QueryContextAttributesEx(PCtxtHandle phContext, + ULONG ulAttribute, + PVOID pBuffer, + ULONG cbBuffer) { + static const SecPkgInfoW kNegotiatedPackage = { + 0, + 0, + 0, + 0, + const_cast<SEC_WCHAR*>(L"Itsa me Kerberos!!"), + const_cast<SEC_WCHAR*>(L"I like turtles")}; + + auto* context = MockContext::FromHandle(phContext); + + switch (ulAttribute) { + case SECPKG_ATTR_NATIVE_NAMES: { + auto* native_names = + reinterpret_cast<SecPkgContext_NativeNames*>(pBuffer); + DCHECK_EQ(sizeof(*native_names), cbBuffer); + native_names->sClientName = + base::as_writable_wcstr(context->credential->source_principal); + native_names->sServerName = + base::as_writable_wcstr(context->target_principal); + return SEC_E_OK; + } + + case SECPKG_ATTR_NEGOTIATION_INFO: { + auto* negotiation_info = + reinterpret_cast<SecPkgContext_NegotiationInfo*>(pBuffer); + DCHECK_EQ(sizeof(*negotiation_info), cbBuffer); + negotiation_info->PackageInfo = + const_cast<SecPkgInfoW*>(&kNegotiatedPackage); + negotiation_info->NegotiationState = (context->rounds == 1) + ? SECPKG_NEGOTIATION_COMPLETE + : SECPKG_NEGOTIATION_IN_PROGRESS; + return SEC_E_OK; + } + + case SECPKG_ATTR_AUTHORITY: { + auto* authority = reinterpret_cast<SecPkgContext_Authority*>(pBuffer); + DCHECK_EQ(sizeof(*authority), cbBuffer); + authority->sAuthorityName = const_cast<SEC_WCHAR*>(L"Dodgy Server"); + return SEC_E_OK; + } + + default: + return SEC_E_UNSUPPORTED_FUNCTION; + } +} + SECURITY_STATUS MockSSPILibrary::QuerySecurityPackageInfo( LPWSTR pszPackageName, PSecPkgInfoW *pkgInfo) { EXPECT_TRUE(!expected_package_queries_.empty()); @@ -72,15 +246,17 @@ SECURITY_STATUS MockSSPILibrary::QuerySecurityPackageInfo( SECURITY_STATUS MockSSPILibrary::FreeCredentialsHandle( PCredHandle phCredential) { - EXPECT_TRUE(phCredential->dwLower == ((ULONG_PTR) ((INT_PTR) 0))); - EXPECT_TRUE(phCredential->dwUpper == ((ULONG_PTR) ((INT_PTR) 0))); + DCHECK(SecIsValidHandle(phCredential)); + EXPECT_EQ(1u, active_credentials_.erase(*phCredential)); + std::unique_ptr<MockCredential> owned{ + MockCredential::FromHandle(phCredential)}; SecInvalidateHandle(phCredential); return SEC_E_OK; } SECURITY_STATUS MockSSPILibrary::DeleteSecurityContext(PCtxtHandle phContext) { - EXPECT_TRUE(phContext->dwLower == ((ULONG_PTR) ((INT_PTR) 0))); - EXPECT_TRUE(phContext->dwUpper == ((ULONG_PTR) ((INT_PTR) 0))); + std::unique_ptr<MockContext> context{MockContext::FromHandle(phContext)}; + EXPECT_EQ(1u, active_contexts_.erase(*phContext)); SecInvalidateHandle(phContext); return SEC_E_OK; } diff --git a/chromium/net/http/mock_sspi_library_win.h b/chromium/net/http/mock_sspi_library_win.h index c0b76925c38..d3b82d3218c 100644 --- a/chromium/net/http/mock_sspi_library_win.h +++ b/chromium/net/http/mock_sspi_library_win.h @@ -19,9 +19,12 @@ class MockSSPILibrary : public SSPILibrary { MockSSPILibrary(); ~MockSSPILibrary() override; - // TODO(cbentzel): Only QuerySecurityPackageInfo and FreeContextBuffer - // are properly handled currently. // SSPILibrary methods: + + // AcquireCredentialsHandle() returns a handle that must be freed using + // FreeCredentialsHandle(). The credentials handle records the principal name. + // + // On return ptsExpiry is set to a constant. SECURITY_STATUS AcquireCredentialsHandle(LPWSTR pszPrincipal, LPWSTR pszPackage, unsigned long fCredentialUse, @@ -31,6 +34,26 @@ class MockSSPILibrary : public SSPILibrary { void* pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry) override; + + // InitializeSecurityContext() returns a handle in phContext that must be + // freed via FreeContextBuffer() or by passing it into another + // InitializeSecurityContext() call. + // + // On return ptsExpiry is set to a constant. + // + // The output buffer will contain a token consisting of the ASCII string: + // + // "<source principal>'s token #<n> for <target principal>" + // + // <source principal> is the security principal derived from explicit + // credentials that were passed to a prior AcquireCredentialsHandle() call, or + // the string "<Default>" if ambient credentials were requested. + // + // <n> is the 1-based invocation counter for InitializeSecurityContext() for + // the same context. + // + // <target principal> is the contents of the pszTargetName. Note that the + // function expects the same target name on every invocation. SECURITY_STATUS InitializeSecurityContext(PCredHandle phCredential, PCtxtHandle phContext, SEC_WCHAR* pszTargetName, @@ -43,6 +66,14 @@ class MockSSPILibrary : public SSPILibrary { PSecBufferDesc pOutput, unsigned long* contextAttr, PTimeStamp ptsExpiry) override; + + // QueryContextAttributesEx() supports querying the same attributes as + // required by HttpAuthSSPI. + SECURITY_STATUS QueryContextAttributesEx(PCtxtHandle phContext, + ULONG ulAttribute, + PVOID pBuffer, + ULONG cbBuffer) override; + SECURITY_STATUS QuerySecurityPackageInfo(LPWSTR pszPackageName, PSecPkgInfoW* pkgInfo) override; SECURITY_STATUS FreeCredentialsHandle(PCredHandle phCredential) override; @@ -104,6 +135,10 @@ class MockSSPILibrary : public SSPILibrary { // Set of packages which should be freed. std::set<PSecPkgInfoW> expected_freed_packages_; + + // These sets keep track of active credentials and contexts. + std::set<CredHandle> active_credentials_; + std::set<CtxtHandle> active_contexts_; }; using MockAuthLibrary = MockSSPILibrary; diff --git a/chromium/net/http/transport_security_persister_unittest.cc b/chromium/net/http/transport_security_persister_unittest.cc index e74c84198c9..178ff97e74b 100644 --- a/chromium/net/http/transport_security_persister_unittest.cc +++ b/chromium/net/http/transport_security_persister_unittest.cc @@ -12,12 +12,12 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" -#include "base/message_loop/message_loop.h" +#include "base/message_loop/message_loop_current.h" #include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "base/threading/thread_task_runner_handle.h" #include "net/http/transport_security_state.h" -#include "net/test/test_with_scoped_task_environment.h" +#include "net/test/test_with_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { @@ -26,7 +26,7 @@ namespace { const char kReportUri[] = "http://www.example.test/report"; -class TransportSecurityPersisterTest : public TestWithScopedTaskEnvironment { +class TransportSecurityPersisterTest : public TestWithTaskEnvironment { public: TransportSecurityPersisterTest() = default; diff --git a/chromium/net/http/transport_security_state.cc b/chromium/net/http/transport_security_state.cc index 275553cd42b..460b958531f 100644 --- a/chromium/net/http/transport_security_state.cc +++ b/chromium/net/http/transport_security_state.cc @@ -25,6 +25,7 @@ #include "base/time/time.h" #include "base/time/time_to_iso8601.h" #include "base/values.h" +#include "build/branding_buildflags.h" #include "build/build_config.h" #include "crypto/sha2.h" #include "net/base/hash_value.h" @@ -41,6 +42,9 @@ namespace net { +const base::Feature kEnforceCTForNewCerts{"EnforceCTForNewCerts", + base::FEATURE_DISABLED_BY_DEFAULT}; + namespace { #include "net/http/transport_security_state_ct_policies.inc" @@ -66,10 +70,6 @@ const size_t kReportCacheKeyLength = 16; // 1: Unless a delegate says otherwise, require CT. int g_ct_required_for_testing = 0; -// Controls whether or not Certificate Transparency should be enforced for -// newly-issued certificates. -const base::Feature kEnforceCTForNewCerts{"EnforceCTForNewCerts", - base::FEATURE_DISABLED_BY_DEFAULT}; // The date (as the number of seconds since the Unix Epoch) to enforce CT for // new certificates. constexpr base::FeatureParam<int> kEnforceCTForNewCertsDate{ @@ -404,6 +404,10 @@ void SetTransportSecurityStateSourceForTesting( } TransportSecurityState::TransportSecurityState() + : TransportSecurityState(std::vector<std::string>()) {} + +TransportSecurityState::TransportSecurityState( + std::vector<std::string> hsts_host_bypass_list) : enable_static_pins_(true), enable_static_expect_ct_(true), enable_pkp_bypass_for_local_trust_anchors_(true), @@ -411,10 +415,15 @@ TransportSecurityState::TransportSecurityState() sent_expect_ct_reports_cache_(kMaxReportCacheEntries) { // Static pinning is only enabled for official builds to make sure that // others don't end up with pins that cannot be easily updated. -#if !defined(GOOGLE_CHROME_BUILD) || defined(OS_ANDROID) || defined(OS_IOS) +#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_ANDROID) || defined(OS_IOS) enable_static_pins_ = false; enable_static_expect_ct_ = false; #endif + // Check that there no invalid entries in the static HSTS bypass list. + for (auto& host : hsts_host_bypass_list) { + DCHECK(host.find('.') == std::string::npos); + hsts_host_bypass_list_.insert(host); + } DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } @@ -1140,7 +1149,8 @@ bool TransportSecurityState::GetStaticDomainState(const std::string& host, if (!DecodeHSTSPreload(host, &result)) return false; - if (result.force_https) { + if (hsts_host_bypass_list_.find(host) == hsts_host_bypass_list_.end() && + result.force_https) { sts_result->domain = host.substr(result.hostname_offset); sts_result->include_subdomains = result.sts_include_subdomains; sts_result->last_observed = base::GetBuildTime(); diff --git a/chromium/net/http/transport_security_state.h b/chromium/net/http/transport_security_state.h index 48ccb74e2e1..5758da25065 100644 --- a/chromium/net/http/transport_security_state.h +++ b/chromium/net/http/transport_security_state.h @@ -34,6 +34,10 @@ class HostPortPair; class SSLInfo; class X509Certificate; +// Controls whether or not Certificate Transparency should be enforced for +// newly-issued certificates. +extern const NET_EXPORT_PRIVATE base::Feature kEnforceCTForNewCerts; + void NET_EXPORT_PRIVATE SetTransportSecurityStateSourceForTesting( const TransportSecurityStateSource* source); @@ -330,6 +334,13 @@ class NET_EXPORT TransportSecurityState { static const base::Feature kDynamicExpectCTFeature; TransportSecurityState(); + + // Creates a TransportSecurityState object that will skip the check to force + // HTTPS from static entries for the given set of hosts. All hostnames in the + // bypass list must consist of a single label, i.e. they must be a TLD. + explicit TransportSecurityState( + std::vector<std::string> hsts_host_bypass_list); + ~TransportSecurityState(); // These functions search for static and dynamic STS and PKP states, and @@ -655,6 +666,8 @@ class NET_EXPORT TransportSecurityState { ReportCache sent_hpkp_reports_cache_; ReportCache sent_expect_ct_reports_cache_; + std::set<std::string> hsts_host_bypass_list_; + THREAD_CHECKER(thread_checker_); DISALLOW_COPY_AND_ASSIGN(TransportSecurityState); diff --git a/chromium/net/http/transport_security_state_static.json b/chromium/net/http/transport_security_state_static.json index abd1519f4a1..5992995c8de 100644 --- a/chromium/net/http/transport_security_state_static.json +++ b/chromium/net/http/transport_security_state_static.json @@ -353,7 +353,8 @@ { "name": "crosbug.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, { "name": "crrev.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, { "name": "firebaseio.com", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, - { "name": "g.co", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, + { "name": "g.co", "policy": "google", "mode": "force-https", "pins": "google" }, + { "name": "www.g.co", "policy": "google", "mode": "force-https", "pins": "google" }, { "name": "g4w.co", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, { "name": "gmail.com", "policy": "google", "mode": "force-https", "pins": "google" }, { "name": "goo.gl", "policy": "google", "mode": "force-https", "include_subdomains": true, "pins": "google" }, @@ -848,7 +849,6 @@ { "name": "carezone.com", "policy": "custom", "mode": "force-https" }, { "name": "bcrook.com", "policy": "custom", "mode": "force-https" }, { "name": "lumi.do", "policy": "custom", "mode": "force-https" }, - { "name": "bitbucket.org", "policy": "custom", "mode": "force-https" }, { "name": "kinsights.com", "policy": "custom", "mode": "force-https" }, { "name": "simbolo.co.uk", "policy": "custom", "mode": "force-https" }, { "name": "www.simbolo.co.uk", "policy": "custom", "mode": "force-https" }, @@ -1303,7 +1303,6 @@ { "name": "irische-segenswuensche.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "it-schwerin.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "janus-engineering.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jfreitag.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "julian-kipka.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kardize24.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kernel-error.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -1375,7 +1374,6 @@ { "name": "thepaymentscompany.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xps2pdf.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ansdell.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "brunosouza.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bugzil.la", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ethitter.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "firemail.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -1796,7 +1794,6 @@ { "name": "johners.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kdyby.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kupschke.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "leibniz-remscheid.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "manicode.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ouvirmusica.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pharmaboard.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -1809,7 +1806,6 @@ { "name": "snakehosting.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "srevilak.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "strasweb.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "todesschaf.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "twisto.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "webassadors.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wundi.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -2055,7 +2051,6 @@ { "name": "bonitabrazilian.co.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "brandbuilderwebsites.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "breeswish.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bundaberg.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bustimes.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "calories.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "capitaltg.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -2551,7 +2546,6 @@ { "name": "festember.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fidelapp.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "floweslawncare.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "foxelbox.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "getcolor.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "getsello.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gheorghesarcov.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -3588,7 +3582,6 @@ { "name": "ehipaa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ehipaadev.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "emanuelduss.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "enjen.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "envygeeks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "envygeeks.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fayolle.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -3912,7 +3905,6 @@ { "name": "ulrik.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "utopians.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vanetv.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "varunagw.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vistb.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vyber-odhadce.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "webyazilimankara.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -4909,7 +4901,6 @@ { "name": "file-pdf.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "findtutorsnearme.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "flawlesscowboy.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "floorball-haunwoehr.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "flowersandclouds.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fmarchal.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "frankierprofi.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -4955,7 +4946,6 @@ { "name": "jayharris.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jcraft.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jennythebaker.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jobss.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jonaskjodt.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jonathan-apps.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jonathancarter.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -5697,7 +5687,6 @@ { "name": "clarkeaward.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "classicday.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cldly.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "clearkonjac.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "clsimplex.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "clywedogmaths.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cocaine.ninja", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -5727,7 +5716,6 @@ { "name": "cubeserver.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cubua.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cuibonobo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cuisinezest.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "curlyroots.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "custe.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "daduke.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -6516,7 +6504,6 @@ { "name": "0x.cx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "1022996493.rsc.cdn77.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "14it.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "1stcapital.com.sg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "24ip.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "28spots.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "2or3.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7039,7 +7026,6 @@ { "name": "soumikghosh.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "soundforsound.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sovereignshare.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sportwette.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "spot-events.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "spuffin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "spydersec.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7219,7 +7205,6 @@ { "name": "empleostampico.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "enteente.club", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "enteente.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "eskriett.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fakeletters.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "familie-sander.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fargtorget.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7350,7 +7335,6 @@ { "name": "tescoirelandpayslips.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thelapine.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "themostexpensiveworkofart.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "thetechnical.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thinkcoding.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thomasnet.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tictactux.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7644,11 +7628,9 @@ { "name": "gifzilla.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "glubbforum.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "godesigner.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "goerner.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "goldmark.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "graciousmay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "greatnet.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "grunex.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "grytics.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gtlfsonlinepay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gunwatch.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7834,7 +7816,6 @@ { "name": "sampoznay.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sandviks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sardegnatirocini.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sat4all.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "schont.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "schwarzkopfforyou.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "serveradminz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8198,7 +8179,6 @@ { "name": "aberdeenjudo.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "abilitylist.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "abthorpe.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "accelerole.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acheritage.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acisonline.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acritelli.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8617,8 +8597,6 @@ { "name": "ctpe.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cultiv.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "curacao-license.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cyberguerrilla.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cyberguerrilla.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cyberwire.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cybozu.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cyclebeads.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8716,7 +8694,6 @@ { "name": "doku-gilde.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dolarcanadense.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "domadillo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "donotspellitgav.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dontcageus.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "doodledraw.ninja", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "doordecor.bg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8746,7 +8723,6 @@ { "name": "e-teacher.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "e3amn2l.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "e3kids.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "eagleridgecampground.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "earga.sm", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "easyconstat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "easycosmetic.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -9155,7 +9131,6 @@ { "name": "informatiebeveiliging.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "infotics.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "inkable.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "inkstory.gr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "insightera.co.th", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "inspire-av.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "instantdev.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -9346,7 +9321,6 @@ { "name": "leesilvey.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "legarage.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "leilonorte.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "leitner.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "leiyun.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lengzzz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lenovogaming.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -9587,7 +9561,6 @@ { "name": "networkingphoenix.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "netzwerkwerk.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "neuronasdigitales.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "never-afk.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "newedivideo.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "newlooknow.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "newstone-tech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -9653,7 +9626,6 @@ { "name": "okutama.in.th", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "olcso-vps-szerver.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ollehbizev.co.kr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "olymp-arts.world", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "omniasl.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onefour.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "oneweb.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -10045,7 +10017,6 @@ { "name": "slowfood.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "slxh.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "slxh.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "smallplanet.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "smart-ov.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "smartftp.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "smarthdd.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -10371,7 +10342,6 @@ { "name": "vdrpro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "venturepro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vetdnacenter.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "victorjacobs.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "videogamesartwork.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "videotogel.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vidid.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -10590,7 +10560,6 @@ { "name": "amerimex.cc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alpencam.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aluroof.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "affordableazdivorce.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alpencams.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amihub.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "antons.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11119,7 +11088,6 @@ { "name": "marriottvetcareers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mastellone.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "maxmilton.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "markoh.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lsp-sports.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "masteringtheterminal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "marines-shop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11206,7 +11174,6 @@ { "name": "neuhaus-city.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "new-process.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "newpathintegratedtherapy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "netsigna.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nfrost.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "netzzwerg4u.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "newtonhaus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11559,7 +11526,6 @@ { "name": "typeblog.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "uesociedadlimitada.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "unitedcyberdevelopment.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "truebred-labradors.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "unisyssecurity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "uniq.site", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ungegamere.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -11939,7 +11905,6 @@ { "name": "hpbn.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hsts-preload-test.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ime.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "imitza.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "immunicity.date", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "immunicity.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "immunicity.press", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12178,7 +12143,6 @@ { "name": "rentbrowser.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "reuter-shop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "reuter.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ricardobalk.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "richardb.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rickweijers.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "right2.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12212,7 +12176,6 @@ { "name": "sefru.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seoinc.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seon.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "septillion.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "server-bg.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "server-daten.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "settleapp.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12809,7 +12772,6 @@ { "name": "enigmacpt.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "enlightened.si", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "entrainr.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "epoch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "equalparts.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "equidam.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ericbond.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -12922,7 +12884,6 @@ { "name": "genie-seiner-generation.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gerwinvanderkamp.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ges-bo.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "get4x.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "getbooks.co.il", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "getgeek.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "getmondo.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -13102,7 +13063,6 @@ { "name": "jing.su", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jlhmedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jncde.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jncie.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jncip.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "joehenry.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "johannes-sprink.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -13533,7 +13493,6 @@ { "name": "qwikdash.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ra4wvpn.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "radioilusion.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "railgun.com.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "raissarobles.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ralfs-zusizone.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ranzbak.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -14236,7 +14195,6 @@ { "name": "bws16.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "campaign.gov.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "c-webdesign.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "calc.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "captianseb.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beehive42.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beehive42.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -14357,7 +14315,6 @@ { "name": "directinsure.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "danielmostertman.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "devcu.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cybertu.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "danielmostertman.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "domenic.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "designville.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -14850,7 +14807,6 @@ { "name": "lefebvristes.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "leseditionsbraquage.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "livi.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "lojix.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "listahu.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "laussat.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lawly.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15082,7 +15038,6 @@ { "name": "mssys.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nerds-gegen-stephan.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "oddnumber.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "niehage.name", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nsworks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nickstories.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nethruster.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15153,7 +15108,6 @@ { "name": "partyvan.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "opensource-cms.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "parckwart.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "osao.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pa-w.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "plusstreamfeed.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "paw.cloud", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15438,7 +15392,6 @@ { "name": "stammtisch.domains", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "storyland.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stevensheffey.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "spacecafe.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sobieray.dyndns.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "snip.host", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sperohub.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15500,10 +15453,8 @@ { "name": "studybay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tetrarch.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "studio-panic.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sudaraka.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "teamtrack.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "solariiknight.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "techace.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "suckmyan.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "talun.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tidmore.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15599,7 +15550,6 @@ { "name": "unrealircd.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ticfleet.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "toool.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "tremolosoftware.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tuja.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tomend.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "unblocked.vip", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15662,7 +15612,6 @@ { "name": "wanybug.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "whitworth.nyc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "volcain.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "weizenspr.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "udbhav.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wybmabiity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xn--detrkl13b9sbv53j.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15758,7 +15707,6 @@ { "name": "ximens.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xp2.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yunjishou.pro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "zopyx.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "we-bb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zymbit.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zulu.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -15875,7 +15823,6 @@ { "name": "andrea-wirthensohn.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "7x24servis.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bobobox.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "advanced.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amsterdamian.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "burgers.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bradler.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -16495,7 +16442,6 @@ { "name": "mdma.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "matthewkenny.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "marksouthall.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kinniyaonlus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "martins.im", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "marmotte.love", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "liuboznaiko.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17005,7 +16951,6 @@ { "name": "vrijstaandhuis-in-zwartewaterland-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "weltverschwoerung.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wormdisk.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wrbunderwriting.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ukrigging.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wardow.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vscale.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17035,7 +16980,6 @@ { "name": "yux.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wmfinanz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xn--3px.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wkz.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wuji.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yourciso.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xn--80aocgsfei.xn--p1ai", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17298,7 +17242,6 @@ { "name": "bgenlisted.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "autodalmacija.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "boiadeirodeberna.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "blameomar.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bestcellular.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "belge.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beauty24.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17514,7 +17457,6 @@ { "name": "cryptoshot.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "codedump.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "countryoutlaws.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "codebrahma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chorkley.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "coresolutions.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "crockett.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17582,7 +17524,6 @@ { "name": "damedrogy.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dehydrated.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dcl.re", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "dejure.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "davepage.me.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "daku.gdn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "datenschutztag.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17814,7 +17755,6 @@ { "name": "fojtova.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "flauschig.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "felixhefner.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "famvsomeren.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ehomusicgear.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "fojtovi.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "central4.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -17885,7 +17825,6 @@ { "name": "g-rickroll-o.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "graphsearchengine.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "geschmacksache.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "grepmaste.rs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gradients.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gramati.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gracetini.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18351,7 +18290,6 @@ { "name": "matthias-muenzner.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lorenadumitrascu.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lovelyblogacademy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "manufacturing.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mentalhealth.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "laurelblack.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "melhorproduto.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18402,7 +18340,6 @@ { "name": "meanevo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "minitrucktalk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mexican.dating", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mgrossklaus.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "michaelsulzer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "minenash.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mikori.sk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18467,7 +18404,6 @@ { "name": "naughty.audio", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kinmunity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "newday.host", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mlvbphotography.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ncands.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "n8ch.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mosfet.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18568,7 +18504,6 @@ { "name": "newhdmovies.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "numm.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ocad.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "orangetravel.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pastordocaucaso.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pastorbelgagroenendael.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pastorcanadense.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18639,7 +18574,6 @@ { "name": "parabhairavayoga.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "paulrotter.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "physicalism.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "pamaniqu.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pinpayments.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "paulrobertlloyd.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pi-eng.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18684,7 +18618,6 @@ { "name": "r-rickroll-u.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rally-base.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "novurania.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nandex.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "qqj.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rasagiline.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "questsocial.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -18708,7 +18641,6 @@ { "name": "relaybox.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "recurly.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rhodesianridgeback.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "policedriver.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pwfrance.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rei.ki", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pugovka72.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19142,7 +19074,6 @@ { "name": "uctarna.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "utilitarianism.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "twee-onder-een-kap-woning-in-leeuwarden-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "uggedal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "twee-onder-een-kap-woning-in-zwartewaterland-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "twee-onder-een-kap-woning-in-sudwest-fryslan-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "trixexpressweb.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19150,7 +19081,6 @@ { "name": "twee-onder-een-kap-woning-in-veendam-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tweeondereenkapwoningverkopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tussengelegenwoningverkopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "unblocked.world", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "usmint.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "twee-onder-een-kap-woning-in-alphen-aan-den-rijn-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "twee-onder-een-kap-woning-in-de-friese-meren-kopen.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19323,7 +19253,6 @@ { "name": "yingatech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ywei.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vanacht.co.za", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "xiazhanjian.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zohar.link", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zh1.li", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zabszk.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19443,7 +19372,6 @@ { "name": "analteengirls.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "allcloud.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "allshousedesigns.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "3bakayottu.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "analpantyhose.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aliacraft.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aicial.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19475,7 +19403,6 @@ { "name": "actilove.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "andersonshatch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ameza.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "anderskp.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alexs.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "androidtamer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "andarpersassi.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19711,7 +19638,6 @@ { "name": "bragasoft.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cdmhp.org.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bsktweetup.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "censys.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "canalsidehouse.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "caipai.fm", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "buyshoe.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19755,7 +19681,6 @@ { "name": "beersandco.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chatxtutti.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chriswbarry.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ccl-sti.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chocolatesandhealth.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "canlidoviz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chatt-gratis.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -19817,7 +19742,6 @@ { "name": "clovissantos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "codelitmus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "craigwfox.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "craftyguy.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cnbs.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "coreum.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "confuddledpenguin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20065,7 +19989,6 @@ { "name": "educators.co.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "erudicia.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "erethon.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "englishstudio.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "embellir-aroma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "erudicia.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "erudicia.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20601,7 +20524,6 @@ { "name": "kueche-co.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "l18.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "knowdebt.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kaisakura.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "knigadel.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "koha.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jichi.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -20817,7 +20739,6 @@ { "name": "modehaus-marionk.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "moosemanstudios.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mkfs.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "moa.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mofohome.dyndns.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lucasgaland.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "miya.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -21542,7 +21463,6 @@ { "name": "thejobauction.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "startuppeople.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "techday.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "thefox.com.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thairehabassociation.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sportchirp-internal.azurewebsites.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "techday.co.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -21813,9 +21733,7 @@ { "name": "yuxingxin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yagi2.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xn--80azelb.xn--p1ai", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "zfo.gg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zhangsir.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "yogoeasy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "zhen-chen.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xxiz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xombitgames.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -21996,7 +21914,6 @@ { "name": "bloomzoomy.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "boatme.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bocamo.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bookluk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "booq.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "boozinyan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bottaerisposta.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -22822,7 +22739,6 @@ { "name": "vackerbetong.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vacuumpump.co.id", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vadodesign.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "valesdigital.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vandeput.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vaphone.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vawebsite.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23029,7 +22945,6 @@ { "name": "acme.beer", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acrepairdrippingsprings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acs-chantal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "actgruppe.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "actiontowingroundrock.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "active-escape.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "addicional.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23050,7 +22965,6 @@ { "name": "aetherc0r3.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "afdkompakt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "affiliatetest.azurewebsites.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "affinity.vc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "affordablemudjacking.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "affordableracingparts.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ag-websolutions.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23210,7 +23124,6 @@ { "name": "atviras.lt", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "audialbuquerqueparts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "augen-seite.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "augenblicke-blog.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "auri.ga", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aurora-terraria.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aurorarecordings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23567,7 +23480,6 @@ { "name": "cmskeyholding.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cmskeyholding.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cmskh.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cncfraises.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cnetw.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "co-driversphoto.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "co-factor.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -24102,7 +24014,6 @@ { "name": "freeasyshop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "freedev.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "freegutters.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "freela.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "freifahrt.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "freifunk-in-solingen.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "freifunk-lindlar.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -24130,7 +24041,6 @@ { "name": "furkot.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "furkot.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "furkot.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "furlan.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "furnishedproperty.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "furtivelook.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "futbolvivo.tv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -24212,7 +24122,6 @@ { "name": "goedeke.ml", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gofoiayourself.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "goldendawnapersonalaffair.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gomiblog.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gondawa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gongjianwei.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gongjuhao.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -24507,7 +24416,6 @@ { "name": "isowosi.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "issue.watch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "istsi.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "isuzupartscenter.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "isv.online", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "itactiq.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "itamservices.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -24643,7 +24551,6 @@ { "name": "keyinfo.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "khaganat.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kheshtar.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kiapartscenter.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kibibit.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kibriscicek.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kickasscanadians.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25122,7 +25029,6 @@ { "name": "nanubo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nanubo.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "napolinissanctparts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "narko.space", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "naroska.name", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nastoletni.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nataliedawnhanson.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25246,7 +25152,6 @@ { "name": "onionscan.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "online-consulting-corp.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onlinecasinobluebook.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "onlinestoreninjas.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onmyoji.biz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onsennuie.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ontheboard.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25751,7 +25656,6 @@ { "name": "security201.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "securitykey.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seefirm.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "seekers.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sehnenweh.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seiler-bad.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seiryokuzai-ch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26445,7 +26349,6 @@ { "name": "xn--wmq.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xnaas.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xs2a.no", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "xts3636.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xtu2.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xupeng.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xxffo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26612,7 +26515,6 @@ { "name": "abn-consultants.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "0005.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "adprospb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "abcdef.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "affordablepapers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "africantourer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "3778xl.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26642,7 +26544,6 @@ { "name": "abox-kb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "afrikarl.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alexandros.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "airclass.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ahiru3.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "adamas-magicus.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "8azino777.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26673,7 +26574,6 @@ { "name": "alex97000.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "anime1video.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "anime1.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "andschwa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ampledesigners.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alusta.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "alarmcomplete.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26798,7 +26698,6 @@ { "name": "avspot.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "andrea-m.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "audiolibri.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "auvernet.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "autos-retro-plaisir.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "360live.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "b-boom.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26966,7 +26865,6 @@ { "name": "booktracker-org.appspot.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "brenden.net.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "brightonchilli.org.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "botserver.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "boutiquedecanetas.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "brrd.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bubhub.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26981,7 +26879,6 @@ { "name": "burnerfitness.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "burlapsac.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bulgarien.guide", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bunzy.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bubba.cc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "buergerdialog.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "britelocate.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27122,7 +27019,6 @@ { "name": "codeux.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "codesyncro.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "codeux.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "communityflow.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "clubfamily.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "collegepaperworld.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "colorsbycarin.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27133,7 +27029,6 @@ { "name": "cobaltgp.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "computehealth.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "coincealed.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "chocolat-suisse.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cloudfren.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cncbazar365.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "conservados.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27195,7 +27090,6 @@ { "name": "creeks-coworking.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "costa-rica-reisen.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "crunchy.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cuongthach.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "currynissanmaparts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "customwritingservice.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "chasafilli.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27329,7 +27223,6 @@ { "name": "domycreativewritings.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dogft.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "diamondcare.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "digiworks.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "domainsilk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "domydissertations.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "domyessay.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27409,7 +27302,6 @@ { "name": "echoanalytics.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dejw.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "drastosasports.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "e3q.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "durdle.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "divvymonkey.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eesistumine2017.ee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -27989,7 +27881,6 @@ { "name": "itis.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "iskai.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ichasco.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "interview-suite.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ilamparas.mx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "islief.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ipal.tel", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28154,7 +28045,6 @@ { "name": "kuruppa.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kolizaskrap.bg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kovspace.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "knight-industries.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kpop.re", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "labrasaq8.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "koalapress.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28465,7 +28355,6 @@ { "name": "mirch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "meremeti-online.gr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "moresw.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "markus.design", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mattbsg.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mamastore.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mostlyinfinite.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28507,7 +28396,6 @@ { "name": "minamo.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mundodapoesia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mumbaionlinegifts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mrjooz.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mtrock.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "movienang.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "myfreemp3.click", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28586,7 +28474,6 @@ { "name": "nicolasiung.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "night2stay.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nebulae.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nexgeneration-solutions.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "night2stay.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "net4it.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "night2stay.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28616,7 +28503,6 @@ { "name": "myspicer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nodeselect.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nirvanashop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "nipe-systems.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nihon-no-sake.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ngtoys.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "normalady.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28708,7 +28594,6 @@ { "name": "paizinhovirgula.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "owapi.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "p3.marketing", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "paavolastudio.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "one-s.co.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "otako.pl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "p4chivtac.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -28794,7 +28679,6 @@ { "name": "peterandjoelle.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pinterest.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pera.gs", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "pietechsf.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "philipdb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "orthotictransfers.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pips.rocks", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -29038,7 +28922,6 @@ { "name": "rockhounds.co.za", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "runebet.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rustbyexample.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "rubytune.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ristorantefattoamano.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "roryneville.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rob006.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -29184,7 +29067,6 @@ { "name": "shieldofachilles.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shichibukai.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sexshopnet.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "sheying.tm", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shining.gifts", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shadowsocks.vc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "showmethemoney.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -29783,7 +29665,6 @@ { "name": "wsup.social", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "writing-expert.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "writecustomessay.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wpturnedup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "victoreriksson.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "writingcities.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wpdirecto.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -30102,7 +29983,6 @@ { "name": "amoozesh98.ir", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "arox.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "azlo.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "arxell.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "astral.gq", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "acendealuz.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "amorimendes.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -30358,7 +30238,6 @@ { "name": "colyakootees.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "datatree.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "coverdat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cssps.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dashboard.run", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dandymrsb.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "danielzuzevich.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -30450,7 +30329,6 @@ { "name": "drogoz.moe", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dosomeworks.biz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "droidgyan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "dorfbrunnen.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "discoveryottawa.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dukec.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eashwar.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31100,7 +30978,6 @@ { "name": "michel.pt", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "miss-platinum.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mjmnagy.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "marketing.limited", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mj420.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "madeinstudio3.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "minorshadows.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31588,7 +31465,6 @@ { "name": "sidongkim.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sepie.gob.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "serienstream.to", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "simpip.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sfg-nordholz.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sheratan.web.id", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sellmoretires.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31685,7 +31561,6 @@ { "name": "svc-sitec.com.mx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stuttgart-gablenberg.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "streamer.tips", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "suareforma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "studentforums.biz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "summa-prefis.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "straka.name", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31706,7 +31581,6 @@ { "name": "spdepartamentos.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stayme.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sunn.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "termitemounds.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "telugu4u.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "svm-basketball.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "t-net.org.hu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -31904,7 +31778,6 @@ { "name": "weareincognito.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "valentineapparel.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wearewithyou.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "vonborstelboerner.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tutiendarosa.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "vw-touranclub.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "walk.onl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32249,7 +32122,6 @@ { "name": "searchbrothers.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "secumail.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "world-education-association.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "promohunt.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "8522.am", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "snapserv.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "limeres.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32358,7 +32230,6 @@ { "name": "emporiodosperfumes.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "equinecoaching.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "equipeferramentas.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "equityflows.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "esite.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "esprit-cloture.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "faciledireto.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32495,7 +32366,6 @@ { "name": "pontodogame.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "portalkla.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "powerdent.net.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "prelogica.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "prestonandsons.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "provitec.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pwm.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32651,18 +32521,15 @@ { "name": "avidcruiser.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "aviv.nyc", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ayatk.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "b9110.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "badai.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bandally.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "basilicaknights.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bass-pro.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bat909.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bcnet.com.hk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beehive.govt.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ben2.co.il", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bengalurugifts.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "besthotsales.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bet-99.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "beyondtodaymediagroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bfrailwayclub.cf", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bilimoe.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32785,7 +32652,6 @@ { "name": "fzx750.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gaines-sodiamex.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gamoice.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "geekclubbooks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "geertdegraaf.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gehreslaw.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "genia-life.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32833,7 +32699,6 @@ { "name": "houtinee.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "howmanymilesfrom.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "htlball.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "hua-in.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "humanesources.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "huzurmetal.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hybridiyhdistys.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32860,7 +32725,6 @@ { "name": "jakewalker.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "janada.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jeremy-chen.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jevisite.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jinmaguoji.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jm22.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "joespaintingpgh.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -32939,7 +32803,6 @@ { "name": "mosaic-design.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "moube.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mrpropop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "mubiflex.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "multimail.work", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "multivpn.com.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "my-host.ovh", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -33162,7 +33025,6 @@ { "name": "voltimax.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "voxfilmeonline.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wahidhasan.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "waka88.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wandercue.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "warschild.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "washingtonregisteredagent.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -33290,7 +33152,6 @@ { "name": "ma-eir.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "mail4geek.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "malte-kiefer.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "maslife365.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "masterhelenaroma.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "matchboxdesigngroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "maynardnetworks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -33798,7 +33659,6 @@ { "name": "ereader.uno", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ericorporation.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "erspro.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.tv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eshepperd.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "esp.community", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "esslm.sk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -33948,7 +33808,6 @@ { "name": "gs93.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gtravers-basketmaker.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "guarajubaimoveis.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "guardianproject.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "guelphhydropool.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "guid2steamid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "guidedselling.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34144,7 +34003,6 @@ { "name": "krasavchik.by", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "krokodent.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kudo.co.id", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kuehnel-online.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kupid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kusochi.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kutus.ee", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34177,7 +34035,6 @@ { "name": "learnplayground.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ledzom.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "leideninternationalreview.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "leinfelder.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lennyfaces.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "leon.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "lexpartsofac.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34401,7 +34258,6 @@ { "name": "onestepfootcare.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onlinebillingform.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onlinecasino.vlaanderen", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "onlinerollout.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onlineth.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "onsite4u.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ontdekhetzelf.nu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34732,7 +34588,6 @@ { "name": "tc.nz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tcb-a.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tcb-b.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "tdchrom.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "teatrarium.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "techask.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "technoinfogroup.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34749,7 +34604,6 @@ { "name": "thecuriouscat.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thedrunkencabbage.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "theeducationchannel.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "theevergreen.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thefrk.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thehookup.be", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thestoritplace.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -35320,7 +35174,6 @@ { "name": "kimamass.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kinnikinnick.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kogro.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "kollect.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kredit-abzocke.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "krypt.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ktw.lv", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -35386,13 +35239,11 @@ { "name": "nagashi.ma", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nawir.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nbriresearch.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "netweaver.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nevntech.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nfl.dedyn.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nfl.duckdns.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "niagarafallsmuseums.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "noslite.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "novinhabucetuda.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nsdev.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "nsmail.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "oblondata.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -35484,7 +35335,6 @@ { "name": "seedsofangelica.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seltendoof.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "seo-analyse.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "server-datenrettung.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sewinginsight.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shift-record.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "shokola.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -35509,7 +35359,6 @@ { "name": "spasicilia.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "splarty.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sportnesia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "ssl.doctor", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "steborio.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stephenj.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stevenz.science", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -35531,7 +35380,6 @@ { "name": "teyssedre.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tgamobility.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "tgtv.tn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "thanabh.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thebigbitch.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thecolumnist.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "thecskr.in", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -36358,7 +36206,6 @@ { "name": "inpas.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "insgesamt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "integrityoklahoma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "intensifyrsvp.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "interimages.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "internaluse.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "investarholding.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -36488,7 +36335,6 @@ { "name": "laindonleisure.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lakehavasucitynews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lakesherwoodelectrical.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lanonfire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lasseleegaard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lasseleegaard.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lasseleegaard.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -37570,7 +37416,6 @@ { "name": "maly.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mamadoma.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mamiecouscous.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mamochka.org.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "manawill.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "manuelrueger.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maquettage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -37817,7 +37662,6 @@ { "name": "vollans.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vosgym.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vreeman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vrsgames.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wacky.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "waf.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wallpaperup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38116,7 +37960,6 @@ { "name": "ims-sargans.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "inixal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "inkvisual.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "iserv.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "isfriday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "isotope.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "isotopes.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38360,7 +38203,6 @@ { "name": "ur.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "urcentral.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vaindil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vales.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vapecom-shop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vectro.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "venninvestorplatform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38948,37 +38790,12 @@ { "name": "yurinet.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z-coder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zenics.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00100010.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00120012.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00130013.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00140014.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00150015.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00160016.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00180018.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "00190019.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "00330033.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00440044.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00550055.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "00660066.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00770077.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "00880088.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "110110110.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "112112112.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "113113113.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "118118118.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481481.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481481.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481482.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481482.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481483.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481483.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481485.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481485.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1481486.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1481486.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "168bet9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "168bo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "168bo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "168esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "174343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1day1ac.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -38992,35 +38809,15 @@ { "name": "404.guide", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "439050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4flex.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5214889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5214889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "52b9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "52b9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5310899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5310899.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "53ningen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "546802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "598598598.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "788da.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "81uc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8888esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8901178.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8901178.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8910899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8910899.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8917168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8917168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8917818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8917818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8951889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8951889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8992088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8992088.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9617818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9617818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9696178.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9696178.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9bingo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a-1basements.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aa6688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abckam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39079,7 +38876,6 @@ { "name": "amosng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andariegocusco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andys-place.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ankya9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ansermfg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "antennisti.milano.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anthony.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39133,70 +38929,17 @@ { "name": "avietech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "awxg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ayon.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b0618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b0618.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b0868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b0868.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b1236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b1758.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b1758.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b1768.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b1768.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b1788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b1rd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b2486.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b2486.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5189.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5189.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5289.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b5289.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b5989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5989.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b61688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b8591.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b8591.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b8979.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b8979.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9018.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9108.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9108.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9110.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9112.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9112.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b911gt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b911gt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b91688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b91688.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b91688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b91688.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9175.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9175.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9258.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9258.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9318.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9418.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9418.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9428.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9428.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9453.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9453.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9468.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9468.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9488.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9488.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9498.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9498.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9518.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9518.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9518.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9528.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9528.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9538.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9538.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9568.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9586.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9588.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39205,15 +38948,7 @@ { "name": "b9598.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9598.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9658.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b96899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9758.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9758.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9858.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9883.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9884.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9885.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39223,62 +38958,38 @@ { "name": "b9888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b98886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9920.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9930.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9948.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9948.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b99520.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9960.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9980.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b99881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b99882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b99883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b99885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b99886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9best.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9best.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9king.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9king.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9king.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9winner.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9winner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b9winner.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bachata.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baka-gamer.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ballinarsl.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bamboorelay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "banduhn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "banknet.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bao-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bao-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baodan666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baptistedeleris.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barabrume.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barryswebdesign.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bat909.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bat9vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bat9vip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "batvip9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bayz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bbnbb.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bbswin9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bbswin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bbxin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bbxin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bcdonadio.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bcdonadio.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bcodeur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "be9418.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9418.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "be9418.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9418.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9458.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9458.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9458.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9458.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "be958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be958.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "be958.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be958.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be9966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bealpha.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39294,21 +39005,12 @@ { "name": "bessettenotaire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestattorney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestbatteriesonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bestesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestinductioncooktop.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestoffert.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet-99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet-99.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet168wy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet168wy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bet909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bet990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet9bet9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "betgo9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "betterjapanese.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "betwin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "betwin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beylikduzum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beylikduzuvaillant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bh.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39319,8 +39021,6 @@ { "name": "biletyplus.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "biletyplus.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bill-nye-the.science", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "binbin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "binbin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bingo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "binkanhada.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "biocheminee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39330,16 +39030,10 @@ { "name": "bitenose.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bitenose.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bitgrapes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bjl5689.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bjl5689.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bkhayes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blackislegroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blackscreen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blazing.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bling9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bling999.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bling999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bling999.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blip.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blobfolio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blockshopauto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39351,16 +39045,6 @@ { "name": "blunderify.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluproducts.com.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bmriv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo1689.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo1689.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9club.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9club.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9club.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9fun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9fun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9game.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9game.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bo9king.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boards.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bodypainting.waw.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bolgarnyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39401,7 +39085,6 @@ { "name": "bytema.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bytema.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bythen.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bywin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "caarecord.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cadams.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "calcedge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39588,14 +39271,7 @@ { "name": "e-techsolution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e-techsolutions.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e-vo-linka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e1488.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e4metech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e52888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e52888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e53888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e53888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e59888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e59888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eagle.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eaglemessaging.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eastsidecottages.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39620,7 +39296,6 @@ { "name": "eleicoes2018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "elektronickakancelar.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eleonorengland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eline168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "elviraszabo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "elwix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "elysiria.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39638,115 +39313,42 @@ { "name": "equinetherapy.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eroimatome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "erwinpaal.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "es888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "es8888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "es888999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "es9999.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb-top.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb-top.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb1314.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb1668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb168168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb168168.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb168168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb168168.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1688.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1688.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1688.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb16888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1711.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1711.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1788.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1788.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb1788.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb17888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb2013.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb2013.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb2099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb2099.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb222.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb258.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb325.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb333.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb433.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb553.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb555.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb555.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb556.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb5889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb5889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb6.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb666.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb66666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb677.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb68888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb775.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb777.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb777.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb777.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb777.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb777.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb777.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb8886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb9527.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb9588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb9588.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb9588.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb999.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb999.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esb999.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esb999.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esba11.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esba11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esba11.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esba11.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esba11.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.bz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esball.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball518.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball518.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esball518.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esball888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esballs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbbon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbbon.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbfun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbfun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esbgood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbjon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbjon.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbm4.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esbm5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esmoney.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "esmoney.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etech-solution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etech-solution.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etech-solutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39787,12 +39389,9 @@ { "name": "feeriedesign-event.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feetpa.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "felger-times.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "feng-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "feng-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feudaltactics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feuerwehr-mehring.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ffiec.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fibo-forex.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "filanthropystar.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "finchnest.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fingerscrossed.style", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39837,8 +39436,6 @@ { "name": "frejasdal.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frugal-millennial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fs-community.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fu-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fu-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fullhost.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "futurehack.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fwest98.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39867,11 +39464,6 @@ { "name": "glaciernursery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gladystudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "globalgovernancewatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "god-esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "godbo9.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "godbo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "godbo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "godesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goedkopeonesies.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goetic.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goozp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39879,8 +39471,6 @@ { "name": "gorgias.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gorognyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gotrail.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gowin9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gowin9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grahamcluley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gram.tips", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grandcafetwist.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39927,7 +39517,6 @@ { "name": "helpwithmybank.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "henkboelman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hermann.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "herrenmuehle-wein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "heute.training", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "heyjournal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hf-tekst.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39950,18 +39539,12 @@ { "name": "hope-line-earth.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "horizonmoto.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "horvatnyelvkonyv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hotesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hotesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "housekeeperlondon.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "howgoodwasmysex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hstspreload.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hua-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hua-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hua-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "huangting.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hubrecht.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hui-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hui-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "huislijn.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "humboldtmfg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hunstoncanoeclub.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39990,8 +39573,6 @@ { "name": "inetsoftware.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infinite.hosting", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "infruction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ing89.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ing89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ingatlanneked.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ingi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "inmoodforsex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40033,8 +39614,6 @@ { "name": "jexler.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jfsa.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jiid.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jing-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jing-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jiosongs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jldp.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jlot.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40081,7 +39660,6 @@ { "name": "kin.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kinderjugendfreizeitverein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kirwandigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kissesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kissesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kivitelezesbiztositas.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "klseet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40145,15 +39723,11 @@ { "name": "letempsdunefleur.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leviaan.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lhajn.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lian-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lian-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "liang-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "liang-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "librarytools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "libre-service.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lichttechnik-tumler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lieblingsholz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lieuu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lifeinsurances.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lifeinsurances24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "light-up.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40173,8 +39747,6 @@ { "name": "loket.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loli.ski", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "losangelestown.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lovebo9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lovebo9.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lovingpenguin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lswim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ltaake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40305,8 +39877,6 @@ { "name": "nationalbank.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nationalbanknet.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nay.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nba669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nba686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nbad.al", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nc-beautypro.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nc-formation.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40367,7 +39937,6 @@ { "name": "online-calculator.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "online-stopwatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "online.net.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "onlyesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onlyesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onsgenoegen-waz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onspring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40462,10 +40031,8 @@ { "name": "praktijkdevecht.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pritchett.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "privatecapsecurity.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pro-esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pro-esb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prodware.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "proesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "proesb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "projectl1b1t1na.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "promotioncentre.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40506,9 +40073,6 @@ { "name": "raucris.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "raviparekh.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "raystark.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "raywin168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "raywin168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "raywin88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "recipex.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "red-trigger.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "red2fred2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40527,7 +40091,6 @@ { "name": "roboth.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rodarion.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roelbazuin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "roligprylar.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rollercoasteritalia.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rollingbarge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rook-playz.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40647,8 +40210,6 @@ { "name": "spotrebitelskecentrum.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sr-33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ssbgportal.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ssc8689.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ssc8689.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ssdservers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ssready.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "staktrace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40690,8 +40251,6 @@ { "name": "szlovennyelv.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tacklinglife.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tadluedtke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tai-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tai-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "takebackyourstate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "takebackyourstate.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "takebackyourstate.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40752,9 +40311,7 @@ { "name": "tomosm.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "toolkits.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "toothdoc.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "top-esb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "topbilan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "topesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "topicdesk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "toponlinecasinosites.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "topwindowcleaners.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40837,9 +40394,6 @@ { "name": "vinogradovka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vintagebandfestival.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vintagesouthernpicks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vipesball.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vipesball.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vipesball.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vipesball.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "visit-montenegro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vizija-nepremicnine.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40850,10 +40404,6 @@ { "name": "vucdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vynedmusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w84.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wai-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "waka168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "waka168.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "waka88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wakiminblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "waltzmanplasticsurgery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "walvi.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40868,8 +40418,6 @@ { "name": "webwednesday.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weiltoast.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weld.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wen-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wen-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "werkenvoorphiladelphia.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wezl.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "whistler-transfers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40895,9 +40443,6 @@ { "name": "wzfetish.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xanadu-taxi.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xilegames.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xin-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xin-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xing-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xinghuokeji.xin", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--lnakuten-9za.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--n8jubz39q0g0afpa985c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40908,13 +40453,9 @@ { "name": "xn--zr9h.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xnu.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xsec.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xuan-li88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xuan-li88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xxxlbox.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yacineboumaza.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yannick.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yao-in.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yao-in.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ybscareers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yenibilgi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yetishirt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40941,7 +40482,6 @@ { "name": "zeroseteatacado.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zgan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhiwei.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zhuweiyou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zitseng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zorki.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zrnieckapresny.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41242,7 +40782,6 @@ { "name": "europeanpreppers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evamachkova.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evenementenhoekvanholland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "evoting.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "examsmate.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "expoort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "expoort.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41270,7 +40809,6 @@ { "name": "frankedier.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frankierfachmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frankierstar.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "frauenarzt-niendorf.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frebib.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frebib.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frebib.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41371,7 +40909,6 @@ { "name": "ip-tanz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ipv6.jetzt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "isakssons.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ispitrade.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "issala.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "itaiferber.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jak-na-les.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41407,7 +40944,6 @@ { "name": "klinkenberg.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "knitfarious.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "knmv.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "knop.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koecollege.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kr0n.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kralovskapradelna.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41426,7 +40962,6 @@ { "name": "leadinfo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "led-tl-wereld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ledscontato.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lesjardinsdemathieu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lesterchan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "linkthis.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "linuxos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41452,7 +40987,6 @@ { "name": "marxmyths.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "masrur.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "massagetainha-hanoi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mattiascibien.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mauerwerkstag.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcpro.games", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "medhy.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -41774,7 +41308,6 @@ { "name": "toerclub-ing-arnhem.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tokka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tokugai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tomkwok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "toms.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tonguetechnology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tontonnews.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42160,7 +41693,6 @@ { "name": "generator.creditcard", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "genocidediary.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gesundheitswelt24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "giegler.software", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "git.tt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "glabiatoren-kst.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "globalcanineregistry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42800,7 +42332,6 @@ { "name": "buyritefairview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cadre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "caibi.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "callanbryant.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "canadian-nurse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cannahealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "carbontv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42831,7 +42362,6 @@ { "name": "cna-aiic.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cnaprograms.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cnatraining.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "codigo-bonus-bet.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "codigodelbonusbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "coins2001.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "colpacpackaging.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42886,7 +42416,6 @@ { "name": "dubbingkursus.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "duckduck.horse", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dupree.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dyn-dnhensel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dzsibi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e-baraxolka.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "easydumpsterrental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42980,7 +42509,6 @@ { "name": "greenhats.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "groentebesteld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "guides-et-admin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "guildbase.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hakaru.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hamburgerbesteld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "happydietplan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43059,7 +42587,6 @@ { "name": "kx197.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lakehavasuhomes.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lamp.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "landrovermerriamparts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laparoscopia.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laranjada.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "larbertbaptist.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43114,7 +42641,6 @@ { "name": "megauction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meine-reise-gut-versichert.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "menudieta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mercedespartscenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meshok.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mfacko.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mgtbaas.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44048,7 +43574,6 @@ { "name": "peinard.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pensionpilot.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "philsown.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pilot.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pilotgrowth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pix-geeks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "playyou.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44091,7 +43616,6 @@ { "name": "shlmail.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "showroom.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "showroom.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "shrug.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "silvobeat.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "simark.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sjv4u.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44134,7 +43658,6 @@ { "name": "transfers.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tsukeawase.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tulenceria.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tungstenroyce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uclip.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uktw.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ulovdomov.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44175,7 +43698,6 @@ { "name": "xn--80aejljbfwxn.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--dk8haaa.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--lckwg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--wq9h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xy1919.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xy6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xy6262.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44375,7 +43897,6 @@ { "name": "ddns-test.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "decis.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deepaero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "denbkh.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "detski.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deuchnord.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deutschebusiness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44688,9 +44209,7 @@ { "name": "plastovelehatko.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plob.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plumbingglenvista.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pluscbdoil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pmf.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "polly.spdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "poloniex.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "porkel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "porte.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44763,7 +44282,6 @@ { "name": "sho-tanaka.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "show-stream.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "signal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "simplithai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sirencallofficial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sisseastumine.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sistemos.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44867,7 +44385,6 @@ { "name": "wsadek.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "www-9822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wyrimaps.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wzfou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xbrl.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xiaxuejin.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--eckle6c0exa0b0modc7054g7h8ajw6f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45184,7 +44701,6 @@ { "name": "grunwaldzki.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gudangpangan.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "guidepointsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "guidesetc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gurucomi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hackerone.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hackmeimfamo.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45335,7 +44851,6 @@ { "name": "moucloud.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moyu.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mr-coffee.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "msopopop.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "multitec.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "murashun.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "my4thtelco.com.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45443,7 +44958,6 @@ { "name": "prodietix.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prosperontheweb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ps-sale.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pscr.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pself.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "psicologasandrabernal.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "psychiq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45605,7 +45119,6 @@ { "name": "vysvetluju.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wanderzoom.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wangyubao.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "watchpci.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "waxlrs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wbut.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "web-art.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45708,7 +45221,6 @@ { "name": "catalystapp.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "certfa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cfdcre5.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cgpe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chapelaria.tf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chaussenot.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cjhzp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45869,7 +45381,6 @@ { "name": "productoinnovador.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pureitsolutionsllp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quangngaimedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "realoteam.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rebelrebel.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "regenerapoint.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "renthelper.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46083,7 +45594,6 @@ { "name": "megarex.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "megustariasaber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "miki-boras.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mirfire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "motoreflex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "musikzentrale.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "my4thtelco.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46247,7 +45757,6 @@ { "name": "aluoblog.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amisderodin.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andre-lategan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "angelremigene.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anime-tip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anthonyloop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "antifraud.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46287,7 +45796,6 @@ { "name": "bluestardiabetes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bokka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boltbeat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bonsaimedia.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bookingentertainment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boonehenry.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boote.wien", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46323,7 +45831,6 @@ { "name": "cheapcaribbean.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chenkun.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "childstats.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "christopherandcharlotte.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ci-suite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cinay.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cineplex.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46760,7 +46267,6 @@ { "name": "purbd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qazcloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qoml.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "qoor.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quic.stream", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qx.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rahadiana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46778,7 +46284,6 @@ { "name": "reimaginebelonging.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rekisuta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rencontres-erotiques.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "retetop95.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "retrovideospiele.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "revisit.date", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rheinturm.nrw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46830,7 +46335,6 @@ { "name": "sircon.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sisgopro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sistov.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "skrivande.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smit.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smithchow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smmcab.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47164,7 +46668,6 @@ { "name": "emby.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "er-mgmt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etch.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eugeneyan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eve.ac", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eveswell.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "extensionschallenge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47361,7 +46864,6 @@ { "name": "kipa.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kirkforillinois.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kitchenalley.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kitchenalley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "knetterbak.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kommaer.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kooli.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47756,7 +47258,6 @@ { "name": "aaronhorler.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acgtalktw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "actc.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "actiefgeld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acyfxasia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "addisoncrump.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47867,7 +47368,6 @@ { "name": "cheezflix.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chenqinghua.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chiropraktik-riemann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "christianillies.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cio-ciso-interchange.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cipri.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cipri.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -47911,7 +47411,6 @@ { "name": "dafnik.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danselibre.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dariaburger.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "darkwebkittens.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datenschutz-consult.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "david-mallett.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davidsopas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48217,7 +47716,6 @@ { "name": "maguire.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maijia800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "majkassab.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "manufacturingusa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maoi.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mapservices.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "marianelaisashi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48315,7 +47813,6 @@ { "name": "niklasanderson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ninesix.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "niqex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nocmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nonametheme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "notepad.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nowitzki.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48379,7 +47876,6 @@ { "name": "pointsgame.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "polymorph.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ponydesignclub.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "popeyes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "porniwi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pornloupe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pors-sw.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -48791,7 +48287,6 @@ { "name": "cwgaming.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyber.je", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d-eisenbahn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "daniellockyer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danny-tittel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daylight-dream.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deepcode.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -49074,7 +48569,6 @@ { "name": "ldjb.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "learningman.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lebendige-heilkunst.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "legissa.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leter.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "letskick.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "liberdademg.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -49428,7 +48922,6 @@ { "name": "villa-anna-cilento.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vip4553.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viseum.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vivoregularizafacil.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viza.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "voidzehn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "von-lien-aluprofile.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -49471,7 +48964,6 @@ { "name": "xn--cfa.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--fp8h58f.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--y-5ga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xo7.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xposedornot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yawen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yell.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -49756,7 +49248,6 @@ { "name": "potenzmittelblog.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "privelust.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "programistka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "prophiler.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prosurveillancegear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prowebcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pru.com.hk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -49916,7 +49407,6 @@ { "name": "aftab-alam.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aisance-co.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ak-webit.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "akhealthconnection.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alaskajewelry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alicemaywebdesign.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alvis-audio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50016,7 +49506,6 @@ { "name": "classictheatrecumbria.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cleaningservicejulai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cloudns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cloudservices.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cocodroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "colinsnaith.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "collectorsystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50468,7 +49957,6 @@ { "name": "rctalk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rdv-prefecture.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rebtoor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "receiliart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rectecforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "redcatrampageforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reher.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50697,7 +50185,6 @@ { "name": "wumai.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wundernas.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wuppertal-2018.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wuppertaler-kurrende.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "www.org.gg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xants.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xdawn.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -50750,7 +50237,6 @@ { "name": "alquiaga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amcangroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amyfoundhermann.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "andrewbdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anegabawa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "angelesydemonios.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "animan.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51079,7 +50565,6 @@ { "name": "52hentai.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "55797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "656088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "66136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "666omg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "755k3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7570.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51198,9 +50683,6 @@ { "name": "baytalebaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bazos.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bbkaforum.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bc416.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bc418.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bc419.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beardic.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bebout.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "benhchuyenkhoa.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51304,9 +50786,7 @@ { "name": "cispeo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cjdby.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cjean.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cloudlessdreams.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clsfoundationrepairandwaterproofing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "clubcorsavenezuela.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cobcode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "codejots.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "codexpo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51358,9 +50838,6 @@ { "name": "danielran.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dansdiscounttools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dappworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "darkerlystormy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "darkerstormy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "darknessflickers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dashwebconsulting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dasteichwerk.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davesharpe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51370,7 +50847,6 @@ { "name": "dawgs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dbjc.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ddy.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "deathofspring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dentistesdarveauetrioux.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "der-fliesenzauberer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dereddingsklos.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51793,7 +51269,6 @@ { "name": "mobisium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "modulex-gmbh.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moeyoo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "moeyun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mojizuri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moneoci.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moneybird.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51921,7 +51396,6 @@ { "name": "pintosplumbing.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pizza-show.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pj009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pj02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pkisolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plaisirdumouvement.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "planetsoftware.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52054,7 +51528,6 @@ { "name": "saxotex.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sbrownbourne.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "scene.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "schbebtv.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schottenland.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schutterijschinveld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sciencehouse.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52070,7 +51543,6 @@ { "name": "selectsplat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "semiread.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "septentrionalist.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "serbianclimbing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "serversfrom.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sethjust.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "seventwentynine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52100,7 +51572,6 @@ { "name": "smartietop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smtpdev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snaptier.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sngallery.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snowpaws.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snowyluma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "social-media-strategy.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52221,7 +51692,6 @@ { "name": "treinmagazine.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "treinmagazine.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trevsanders.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tribe.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "troyhunt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "truncus-encephali.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ts3-legenda.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52232,7 +51702,6 @@ { "name": "turl.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tweetfinity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tweetfinityapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tz56789.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ulgc.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unicorn-systems.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "universal.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52253,7 +51722,6 @@ { "name": "vandorenscholars.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vandyhacks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vangoghcoaching.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "varalwamp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vendermicasarapido.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "verifiedjoseph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "verifiny.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52512,7 +51980,6 @@ { "name": "fashiondays.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fashiondays.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fatecdevday.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fearby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feildel.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fitinclass.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flavo.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52680,7 +52147,6 @@ { "name": "mcon.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mds-paris.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meditel.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "medmarkt24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "medvedikorenka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "merchant-automotive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "merlinsoap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -52770,7 +52236,6 @@ { "name": "pmheart.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "politicachubut.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "polska-robota.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "potenzprobleme-info.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "potzwonen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "poundwholesale.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "powerplaywashers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -53373,7 +52838,6 @@ { "name": "vretmaskin.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wb256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weekvandemediawijsheid.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "weixiaojun.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wezartt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpccu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wxzm.sx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -53570,7 +53034,6 @@ { "name": "cdshining.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cedarslodge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "centromasterin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cflsystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cg.al", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cgurtner.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chabik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -53612,7 +53075,6 @@ { "name": "darkrisks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dasignsource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davidtiffany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dbjc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "debkleinteam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "decoating.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deftig-und-fein.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -53888,7 +53350,6 @@ { "name": "martin-loewer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "matdogs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mathematris.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mathfinder.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "matome-surume.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcfipvt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mediabackoffice.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -53897,7 +53358,6 @@ { "name": "medsindex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "memesbee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meric-graphisme.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "merloat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meupainel.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mfz.mk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mhadot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54020,7 +53480,6 @@ { "name": "obesidadlavega.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ohmayonnaise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ohol.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "oi-wiki.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "oldno07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "olfnewcastle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "omarsuniagamusic.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54295,7 +53754,6 @@ { "name": "tsgkc1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tuasaude.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "turf-experts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "u-martfoods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ultrautoparts.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unblocked.gdn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ungeek.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54307,7 +53765,6 @@ { "name": "uptechbrasil.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "utahtravelcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uuid.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "uv.uy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "v2ray6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "v2ray66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "v2ray666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54357,7 +53814,6 @@ { "name": "wwww.me.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--obt757c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--trdler-xxa.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yannic.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ymoah.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ynxfh.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yoast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54556,7 +54012,6 @@ { "name": "bridgedirectoutreach.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "briffoud.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "browserleaks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "brunoproduit.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "brycecanyonnationalpark.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bso-buitengewoon.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bubblin.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54567,7 +54022,6 @@ { "name": "buy-out.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "byhe.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "caldoletto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "calendar.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cambridgesecuritygroup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "campaignhelpdesk.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "camshowverse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54748,7 +54202,6 @@ { "name": "geography-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "geology-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "georgepancescu.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "getenv.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gettopquality.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gifudodo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gishiko.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54758,7 +54211,6 @@ { "name": "goedkopelaptopshardenberg.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goldenruleemail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gondelvaartdwarsgracht.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goodquote.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "graphic-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "greatskillchecks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "greenwaylog.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -54967,7 +54419,6 @@ { "name": "miniwallaby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mitdip-mit-group-ch.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mizucoffee.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mkjl.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mlii.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moe.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moeali.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55046,7 +54497,6 @@ { "name": "pcreparatiehardenberg.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peertube.social", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peintrenomade.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "peoplerange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "performing-art-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "petroleum-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "petrotranz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55100,7 +54550,6 @@ { "name": "pxl-mailtracker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "q1q2q3.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qdabogados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "quote.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "r1a.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rada-group.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "radegundisfest.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55121,7 +54570,6 @@ { "name": "resinflooringcompany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "respecttheflame.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "revivalprayerfellowship.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rhetorical.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "riverbendroofingnd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "riverridgecc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robbiecrash.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55237,12 +54685,10 @@ { "name": "theatre-schools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thepharm.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "therapiemi.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "therhetorical.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thermorecetas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thestyleforme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thetotalemaildelivery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "theverybusyoffice.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "thevoya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thewayofthedojo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ticketdriver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tlyphed.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55333,16 +54779,10 @@ { "name": "wuwuwu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xmodule.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn----8sbjfacqfqshbh7afyeg.xn--80asehdb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--158h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--57h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--8bi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--et8h.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--is8h6d.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xr1s.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xss.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xsuper.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xtrememidlife.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xuehao.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xuehuang666.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xxxred.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xxxsuper.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55359,7 +54799,6 @@ { "name": "zeestraten.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zenram.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zjyifa.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zoop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zp25.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zqstudio.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zyzsdy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55485,7 +54924,6 @@ { "name": "eco2u.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "efipsactiva.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ekostrateg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eldercare.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "elderjustice.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eletor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eletor.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55626,7 +55064,6 @@ { "name": "mambas.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "manti.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maquininhamercadopoint.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "marinecadastre.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mariskavankasbergen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "marketingbrandingnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "marksmanhomes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55913,7 +55350,6 @@ { "name": "bothellwaygarage.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bryggebladet.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bulktshirtsjohannesburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bungee.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bungee.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "butteramotors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buyebook.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -55936,7 +55372,6 @@ { "name": "citizenslasvegas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "civicforum.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cleaningbyrosie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "codyscafesb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "coffeetime.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cognicom-gaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "communitymanagertorrejon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56173,7 +55608,6 @@ { "name": "petermaar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "philipzhan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "philslab.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "photosquare.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "piratebay.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "planview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plumbingandheatingspecialistnw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56510,7 +55944,6 @@ { "name": "chrisplankhomes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chrissx.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chshouyu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "chuill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "churchofscb.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ciania.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ciaracode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56572,14 +56005,12 @@ { "name": "darwinsearch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datajobs.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davidfetveit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ddoser.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "decay24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "demiranda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "desktopd.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "detecmon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "detuprovincia.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dev-gutools.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "deviser.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devstroke.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devtty.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dicksakowicz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56762,7 +56193,6 @@ { "name": "gmacedo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "golang.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goodth.ink", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goover.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goproinspectiongroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gpureport.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grantplatform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56914,7 +56344,6 @@ { "name": "lisanzauomo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "livingkingsinc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lonestarlandandcommercial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "looker.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loricozengeller.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loungepapillon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luca-steeb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57089,7 +56518,6 @@ { "name": "qianmo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "radioactivenetwork.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "raku.bzh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "reads.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "realestate-in-uruguay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "realestatecentralcoast.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "realestatemarketingblog.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57215,13 +56643,11 @@ { "name": "spikelands.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "splnk.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "spnitalianfestival.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sportwetten-anbieter.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sprax2013.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "springhillmaine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "src-el-main.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "staffexcellence.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stantabler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "stanthony-yonkers.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "staparishgm.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "starttls-everywhere.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "static.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57397,7 +56823,6 @@ { "name": "wcrca.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wcsi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "web-thinker.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "webcasinos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "webnetforce.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "webstart.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wedg.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57506,7 +56931,6 @@ { "name": "absolutcruceros.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "absolutviajes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abublog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "abundanteconomy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "academiadebomberosonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "accpl.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "actheater.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57735,7 +57159,6 @@ { "name": "christian-fischer.pictures", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "christian-folini.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "christiancoleman.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "christopher.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chybeck.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cibercactus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cierreperimetral.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -58309,7 +57732,6 @@ { "name": "loveai.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lovemiku.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lsy.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lucianoalbanes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lugimax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luloboutique.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lunalove.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -58935,7 +58357,6 @@ { "name": "topvision.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "torfbahn.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "torsquad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "toutelathailande.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tower.land", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "toycu.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trackfeed.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59390,7 +58811,6 @@ { "name": "scarvespalace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schmitt-etienne.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schwano-dent.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "scorpowines.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "seb-net.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "see.asso.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sesrdcem.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59528,7 +58948,6 @@ { "name": "adapptlabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "adativos.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "adelianz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "adiehard.party", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "administrator.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "adnolesh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "adresults.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59599,7 +59018,6 @@ { "name": "biblethoughts.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bigshopper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bigshopper.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "biomin.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bishopscourt-hawarden.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "biznesonline.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bizzdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59705,7 +59123,6 @@ { "name": "dnskeep.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dnskeeper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "doanhnhanplus.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "docudanang.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dodds.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dodomu.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "donnajeanbooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60046,14 +59463,12 @@ { "name": "proformer.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "propertysales-almeria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "proxybay.bet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pulsarsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pulsnitzer-lebkuchen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pumpandcash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pvamg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pwt.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pxgamer.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qarea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "qiukong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quickrelations.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quietboy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rabbitinternet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60440,7 +59855,6 @@ { "name": "aenterprise.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aeonct.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aff.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aflam4you.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "african-bay.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agenciamdg.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aimonline.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60542,7 +59956,6 @@ { "name": "bluepromocode.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blueswandaily.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bookzaga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "booplab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boothlabs.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bootsschule-weiss.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boreo.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60685,7 +60098,6 @@ { "name": "damjanovic.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danfromit.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danfromit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dara-berlin.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datingsite-vergelijken.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daveops.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davidandrewcoaching.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60713,7 +60125,6 @@ { "name": "deli-tochigi.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deltawolf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "depedtambayan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "desenfans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deskguide.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dev-greavesindia.pantheonsite.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devils-point.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60868,7 +60279,6 @@ { "name": "grenlandkiropraktor.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grupodatco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gtn-pravda.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gx3.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gyakori.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gzriedstadt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "haancommunity.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60965,7 +60375,6 @@ { "name": "itseeze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ivotemahdi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iwascoding.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "iyn.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iyoumu.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "izanah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "j-robertson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61301,7 +60710,6 @@ { "name": "pearlsonly.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pearlsonly.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pearlsonly.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "peatsbeast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peckcloths.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peepsfoundation.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pencil2d.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61344,14 +60752,12 @@ { "name": "publi-all.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "punchlinetheatre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "puntcunts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "puppo.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "purejewels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "purityclothing.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qaq.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qq885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qrpatrol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quallo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "qunzi.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qvq.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qxzg.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "radiolla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61410,7 +60816,6 @@ { "name": "rxguide.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ryuanerin.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "saga-umzuege.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sajtoskal.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "samorazvitie.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sangyoui.health", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sanovnik.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61441,7 +60846,6 @@ { "name": "seriousaboutsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "servicerequesthub.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "servidoresadmin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "shahar.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sharefox.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sharefox.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shopcord.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61807,7 +61211,6 @@ { "name": "cupoane-reducere.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cursosypostgrados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cvutdecin.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cyberonesol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d-imitacion.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d2qa61rbluifiq.cloudfront.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danielfeau.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62249,7 +61652,6 @@ { "name": "lolitalechat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luclu7.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "m-gaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "magbt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "managedhosting.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mayorcahill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mb-server.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62284,7 +61686,6 @@ { "name": "oxdl.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "palace-bayreuth.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paolotagliaferri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pareachat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "payjunction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pebblepointapartmentsstl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "persiart.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62370,7 +61771,6 @@ { "name": "thebirchwoods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thermia.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thermia.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "thing.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tio.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tipsport.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tokoplugin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62424,7 +61824,6 @@ { "name": "yourtime.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yumikori.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zenus-biometrics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zhang.fm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhangxuhu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zstu.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zumub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62576,7 +61975,6 @@ { "name": "frsnpwr.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fruityfitness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gakdigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gamerwares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "garbagedisposalguides.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gestsal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "giftlist.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62591,7 +61989,6 @@ { "name": "hawawa.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "healthyrecharge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "heikohessenkemper.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "helpwithinsomnia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hokung.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hostco.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hsg-kreuzberg.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62813,7 +62210,6 @@ { "name": "tryplo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "turingmind.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tusmedicamentos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "twoleftsticks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "u-chan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "u29dc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uitvaartvrouwenfriesland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62957,7 +62353,6 @@ { "name": "energysolutionstech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esu.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "etnoria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "evoting-test.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "farvisun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feestbierfusten.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "firstnetworksouth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62965,7 +62360,6 @@ { "name": "foroaranda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "foxbnc.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "foyer-laique-segre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "frankfurt-coworking.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frietzombie.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "funkfernbedienung-industrie.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "funknotaus.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63009,7 +62403,6 @@ { "name": "khg-orchester.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kibbesfusion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kindesfreude.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "krrn.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kt3i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kys.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "laceysfarm.ie", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63055,7 +62448,6 @@ { "name": "monitoringd.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mozilla-hispano.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mpu-ibbi.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mrhee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "muffs.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mussalains.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mxdvl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63155,7 +62547,6 @@ { "name": "symposium.beer", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teamtmgb.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techgadgetry.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tekanswer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "termee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tessierashpool.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "texasabrasiveblasting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63302,7 +62693,6 @@ { "name": "continental-zermatt.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "contourheating.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "controllertech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cradle.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crowdspire.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "current-usa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyberdiscoverycommunity.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63434,7 +62824,6 @@ { "name": "lecannabiste.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ledwereld.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lenalio.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "letshome.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lmsuitespagna.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lockoutgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loliblogs.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63487,7 +62876,6 @@ { "name": "nootroic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "noteboat.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nsoft.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "obzoroff.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "octomist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "olgcc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "olofsson.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63993,7 +63381,6 @@ { "name": "wangqr.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wanmen.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wardslager.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "webleedpixels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weblegion.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "webmaster-infographiste-lyon.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "websa.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64187,7 +63574,6 @@ { "name": "gameres.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gaycamvids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "getintopc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "giemall.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "globalinvestigations.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gmuh.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gr8engineer2b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64247,7 +63633,6 @@ { "name": "kevindavid.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keywalker.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kfz-service-wachtmann.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kindconcentrates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kitpartners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kjmedia.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kk.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64301,7 +63686,6 @@ { "name": "myhostvm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mytime.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "namu.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ndx.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nekorektni.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "netzklad.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newburghhistoryblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64388,7 +63772,6 @@ { "name": "starryvoid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "steamosaic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stefanfriedli.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "stopmodacruel.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stucki-bagger.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sun1218.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sun1245.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64534,7 +63917,6 @@ { "name": "bnusd.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bobbyhensley.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bol.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "booktoan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "botmastery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bovworkplacepensions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boxlink.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64624,7 +64006,6 @@ { "name": "haju.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hamikala.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hatcher.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hauntedfieldsofglory.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hellenicmusicacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hikawa.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hillier-swift.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64645,7 +64026,6 @@ { "name": "isabelmurillo-ordonez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "islightdown.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "istitutovivaldi.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "izt.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "izttech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jacksball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "james.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64661,7 +64041,6 @@ { "name": "kaizencraft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kakacon.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kassa.expert", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kenshobox.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kep-sbt.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kepsbt.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kodamail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64844,7 +64223,6 @@ { "name": "xn--anyd-7na.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--int-ru8ea.xn--6qq986b3xl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--kkcon-fwab.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xtremeperformance.co.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xtri.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ys6888.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zahnarzt-drvogel-rosenheim.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -65063,7 +64441,6 @@ { "name": "mt4programming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mydnshost.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "navigator.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "neasahourigan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nebuso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nederdraad.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nephology.net.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -65570,7 +64947,6 @@ { "name": "website-traffic.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wgdp.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "whatsthisword.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "whoit.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wir-machen-druck.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "with.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "woodminstermanagement.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66226,7 +65602,6 @@ { "name": "blackbam.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blackcountrymetalworks.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bloombrown.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "blueangel.org.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluecanvas.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bluffplumber.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boltenergy.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66491,7 +65866,6 @@ { "name": "hamiltonweather.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "haruhi.org.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "headlinesclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "helm-pokale.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "henryocallaghan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hentaipornography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "herbolarigranvida.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66592,7 +65966,6 @@ { "name": "kexino.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keymicrosystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keynes.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf5252.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "khetmaal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kievkiralikotel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kimitang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66611,7 +65984,6 @@ { "name": "korem011-tniad.mil.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "krikorianconstruction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks5000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks88.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ksoc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kumbayops.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66927,7 +66299,6 @@ { "name": "roussosmanos.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rrailto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rs-solution.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rtmoran.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rubbleremovalhillcrest.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rubenruiz.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rw-invest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -66970,7 +66341,6 @@ { "name": "sharer.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shieldblaze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shiji.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "shinomiya.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shopfazz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shopunilever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shsh.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67033,7 +66403,6 @@ { "name": "stadsbos013.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "star-one.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "startloop.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "stb-lemke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stehlik.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stephycom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "storm-family.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67075,7 +66444,6 @@ { "name": "tenthousandbottoms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "test1websiteboost.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "theblacklock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "theciso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thefizz.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thejoneshub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thekodester.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67295,7 +66663,6 @@ { "name": "736381.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "961621.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "977hghg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9988ty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aaa-racing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aaa-racing.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aaa-racing.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67330,7 +66697,6 @@ { "name": "basketforex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bazari.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "berkat-luqs.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bestartshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bf5.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bfh.science", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bibliotecadeseguranca.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67366,7 +66732,6 @@ { "name": "controlambientalbogota.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "counterenlol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crazypowered.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "createcpanama.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ctoin.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "czwartybrat.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dale-west.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67399,7 +66764,6 @@ { "name": "finanziero.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "findcheapmusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flameworked.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fontedoprazer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "franziskaherbert.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frappant.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freexmovie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67425,7 +66789,6 @@ { "name": "herrfirm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hi.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hmnd.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hookxlab.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "htdcomputer.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "i-voting.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "icetravellers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67483,13 +66846,11 @@ { "name": "lonwan.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lunite.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luosonghao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lvtrafficticketguy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lycetre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "magicroom.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "malenaamatomd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maniaiti.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mantachiepharmacy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "maridonlaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "marie-pettenbeck-schule.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "marxists.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "massconsultores.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67545,7 +66906,6 @@ { "name": "rbin.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rbs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rcmstream.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rdwh.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "recyclebin.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "redcarpetmonday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reidsupply.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67656,7 +67016,6 @@ { "name": "xbjt11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--80ahclcaoccacrhfebi0dcn5c1jh.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpertcube.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xrp.pp.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xylerfox.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yulaiz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zanshinkankarate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67669,7 +67028,6 @@ { "name": "0380l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "0531009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "0999sfce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0x0000.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "100086ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1049578.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1265353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67887,7 +67245,6 @@ { "name": "aramloebmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "art-et-tonneaux.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artigianociao.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "assetbacked.capital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "associatedwomenshealthcare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asu.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atf.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68046,7 +67403,6 @@ { "name": "gladiac.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "globe-flight.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "globologic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "gomelagromashplus.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grapheneos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "guytarrant.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "haarstudiok99.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68124,7 +67480,6 @@ { "name": "llsv666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "localcryptopremium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "londonindustryshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long228.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "longdie88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loteamentoabertoamparo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "louisvillefibroids.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68372,7 +67727,6 @@ { "name": "yusukesakai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yuvibrands.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zanzariere.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zcwtl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhengqiangonglue.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhouzeng1314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zjh6888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68381,7 +67735,6 @@ { "name": "zz0036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "066816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "09elektrik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "111zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1sand0s.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "293921.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3615jacky.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68440,9 +67793,6 @@ { "name": "5197zz.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "726127.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "790security.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8203d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8228d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8230d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "842844.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9297a.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68680,7 +68030,6 @@ { "name": "allcleaningservice.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "am-liaotian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "animefire.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "anyi.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aquamarin.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "archematerial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "armadale.wa.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68732,7 +68081,6 @@ { "name": "christianadventurecamps.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chwilrank.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clearpay.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "clearwaterbidets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "co-founder-stuttgart.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "competencyassessment.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "conftree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -68943,7 +68291,6 @@ { "name": "location-appartement-dakar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luminary.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lushan.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lust.works", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "luxurydistribution.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "m5197.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -69468,7 +68815,6 @@ { "name": "cyclonebikes.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyphar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "czech.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dadafterforty.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danielvanassen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "debraydesign.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -69498,7 +68844,6 @@ { "name": "employeemanual.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eneko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "englishtofrench.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "englishtype.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "epicfail.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eventerlebnis.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "exaktus.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -69582,16 +68927,12 @@ { "name": "j95xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "j95zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jaiestate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jake.wales", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jake1.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jakewales.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jbeta.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johngmchenrymd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "juristique.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kagicomb.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "katalogkapsli.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koboldmalade.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kotke.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kouponboket.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70047,7 +69388,6 @@ { "name": "shadowoftheoldgods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "short.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sicz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sillypoohbear.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "simon-czech.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sis.net.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sismit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70180,9 +69520,7 @@ { "name": "yoelelbaz.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yr8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zingpetfood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl9889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "01918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "05am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "06918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "08918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "09btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70381,9 +69719,6 @@ { "name": "7ka.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "86btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "876666365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8826ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8858ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8868ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "88btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "89btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70400,10 +69735,7 @@ { "name": "91891856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91891878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918aak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ajj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918akk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918amj.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918att.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bbm.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bcf.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70420,7 +69752,6 @@ { "name": "918dc16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918dp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ej.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918fq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918fr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70498,7 +69829,6 @@ { "name": "b6729.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bahadirh.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "barankababra.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bb6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bb6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bc-reloaded.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70518,32 +69848,20 @@ { "name": "bta55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt-39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt0303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt1212.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt138g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt2020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt2121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt213.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt219.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt381g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt529g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt8.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt88818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt891.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt8989a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt907.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt945g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt9898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btta13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btta15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btta27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btta30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bttna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bttt222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bttt333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70737,7 +70055,6 @@ { "name": "joinhahobby.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "joshjanzen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jttech.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jw1.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k6957.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70749,7 +70066,6 @@ { "name": "kk6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kk6957.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kli.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks0776.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kupiewszystkieauta.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "l6729.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -70944,7 +70260,6 @@ { "name": "tappezzeria.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taunusstein.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tda602-secure-login.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tegtech.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tentech.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "termoidraulica.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thealchemistatelier.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71103,18 +70418,10 @@ { "name": "6957pp.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6957q.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6957rr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918axx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bhh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918byy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dc19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918qs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918qz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918sa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918te.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918xe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "999btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a1post.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a6729.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "adamlee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71186,45 +70493,7 @@ { "name": "bishoptx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bongbabyhouse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boxlink.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt1111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt1313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt263.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt268.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt3311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt351.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt352.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt355.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt358.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt359.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt361.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt362.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt368.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt371.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt372.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt375.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt376.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt378.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt379.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt381.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt645g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt7676.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt775.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt818g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buyusa.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bwin2288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "caetanobenet.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71238,7 +70507,6 @@ { "name": "carmelon-digital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cashontime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cesarparedespacora.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "chancekorte.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "christianwitts.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clarkelectricalservices.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clocklab.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71249,7 +70517,6 @@ { "name": "contouring.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crackheros.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cruicky.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "crypto-clix.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyber-core.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cybercustodian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71277,7 +70544,6 @@ { "name": "dimomaint-sav.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dimosoftware.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "disabled-world.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "discountpokale.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "discountpokale.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "distortmotion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "divisasexpress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71292,7 +70558,6 @@ { "name": "dunyahalleri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e-mandataires.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "e-michiganinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ebooknetworking.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "echo-in.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eddy-vh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "edvinaspaliskis.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71420,7 +70685,6 @@ { "name": "munich-eventlocations.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "muntproever.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mvion.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mychancekorte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mysam.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mysql-real-escape-string.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "naberiusmedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71580,35 +70844,20 @@ { "name": "znakcomstva.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zoso.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zz6729.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "000btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "015kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "016kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "026kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "055kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "056kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "058kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "066kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "068kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "071k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0760ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0763ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "076k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "077k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "078kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "109k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "113k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "13-th.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "133ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "135416.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "159ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "160763.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1661618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "170376.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "170386.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "178kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "178ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "181k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "182ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "185k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "192569.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "210k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71619,13 +70868,8 @@ { "name": "2isk.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3333k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36594.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "398kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "39w66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "508kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "518k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "565kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "585kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "616btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "660887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66619991.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "666k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71637,31 +70881,12 @@ { "name": "76668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7666898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "76669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "787kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "806kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "819kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "856kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "869kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8801ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8859ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "885kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "886k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8885ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8886ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88kash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9108.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918aac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ayy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eej.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918yy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "97735.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "977kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9800.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "985kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "99989796.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "99989796.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9998k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71678,11 +70903,7 @@ { "name": "advancedpestspecialists.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ag88086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag978.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks133.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aglc8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agworkers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71719,10 +70940,7 @@ { "name": "brettpostin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "broadyexpress.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bsimyanmar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt0707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt269g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt932g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "butterflycare.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bytheglass.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "campaignlake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71822,7 +71040,6 @@ { "name": "hallaminternet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hanyingw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hashtagswimwear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hdwalldownloads.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "he.kg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "healthyhomesofmichigan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "heijmans.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71859,7 +71076,6 @@ { "name": "jobit.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "joeldbolivarc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "johnsongenealogy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "judaicaganeden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jumpbuttonnorth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "juszczak.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jvdz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71913,15 +71129,6 @@ { "name": "k8dc17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k8md01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k8md12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi006.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8844.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8864.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8875.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kebhanamyanmar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf0000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71934,77 +71141,7 @@ { "name": "kodikom.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koreanrandom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kr.cm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0098.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0550.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0577.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0599.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks0858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks098.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks15.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks16.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks16.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks1608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks200.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2000.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks28.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks28.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks32.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks36.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks55.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks58.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks66.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6601.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6602.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6605.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6609.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6612.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6615.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6617.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6619.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6620.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6621.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6623.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6625.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6627.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6628.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6629.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6630.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6631.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6632.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6637.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6638.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6650.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6653.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6659.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6670.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6671.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks68.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks81.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks86.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks86.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks888.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks89.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks98.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ladakhtrip.tours", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lasterhub.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lc1588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72205,7 +71342,6 @@ { "name": "010777a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "010kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "010ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "143918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2030411.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3040519.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "35898a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72245,15 +71381,11 @@ { "name": "7sdre.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "809kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8208d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "861kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8812ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8818ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8819ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8890ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8892ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bbt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bby.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "98d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aartsplastics.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acg.vc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72277,15 +71409,12 @@ { "name": "australianstrongmanalliance.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "axin888.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ayvalikgezgini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "baeckerei-wohlgemuth.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bank-tour.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barca-movie.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "becquerelgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestsingingbowls.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blogkuliah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boren.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt0707a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bttt111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buybutton.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buycccam.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casinorobots.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72312,7 +71441,6 @@ { "name": "costarellos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "coveredinspiders.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "crosswords123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cryptoclix.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyberme.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyberpathogen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cyllos.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72444,7 +71572,6 @@ { "name": "ks0788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks081.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks6665.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks680.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72529,7 +71656,6 @@ { "name": "rfxt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rheijmans.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "richie.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rthsoftware.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ru-e-business.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "russianrandom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "russianrandom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72573,7 +71699,6 @@ { "name": "tomthorogood.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "toparkinfo.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tourdatenarchiv.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tranvia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unclebens-specials.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "universovalve.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "upmon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72612,7 +71737,6 @@ { "name": "10365a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "135374.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "17187q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "177ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1ag777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1ag88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1ticks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72642,7 +71766,6 @@ { "name": "aeksistem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aetherlink.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "afterpay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ag0101g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag0202a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag0707a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag1515a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72671,7 +71794,6 @@ { "name": "ag80880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag855.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag87777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ag88-guide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag88001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag88018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag88028.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72776,7 +71898,6 @@ { "name": "colombiajeans.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "connexfilter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "contact.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "copticexchange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "corriel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creationsgate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "creermonsite-wp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72796,7 +71917,6 @@ { "name": "doublelist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dreatho.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drogavista.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "droperplus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dsgvo-analyse.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dziaduch.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ebteam.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -72880,25 +72000,17 @@ { "name": "jwr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k-sails.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kawaiicon.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0283.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb1717.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb2929.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb3636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb7373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb848.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb9292.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kbcso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kiokoman.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kk575757.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "konfekcjonowanie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koreanrandom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks3636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kusadasiforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "labworks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lamujerquesoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lelux.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leminhduong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lenafonster.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73015,7 +72127,6 @@ { "name": "selfiehome.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "serviciodebarralibreparaeventos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sewing-world.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sharingphotos.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shelvacu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sice-si.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sikademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73072,7 +72183,6 @@ { "name": "venetkaarsenovart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vigorspa.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vinktwebdesign.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vkwebsite.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vontainment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "voshod.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73139,7 +72249,6 @@ { "name": "axa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b-tree.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "banfor.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "banguilacoquette.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barbe-n-blues.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "basebyte.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bbcomcdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73185,7 +72294,6 @@ { "name": "cyberweightloss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d3dev.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dadycandoit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dandia.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datatruckers.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datatruckers.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "decipe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73229,7 +72337,6 @@ { "name": "eternalparking.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eternalparking.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eternalparking.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "eth1.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "exeye.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "f00f.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "f5la.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73240,7 +72347,6 @@ { "name": "filmcrewdb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "financecontrol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "floridawaterapparel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fmm-creative.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "forsaleinedmonton.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fossdaily.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freelancemw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73377,10 +72483,7 @@ { "name": "moowdesign.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "murmashi.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "myexams.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mylifeinsurancechoices.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "myplaystation.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nanshy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "natcheflife.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "naturalbijou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "navroopsahdev.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nerofox.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73622,66 +72725,12 @@ { "name": "zalaxx.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zerocash.msk.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl2020.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0011d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0013d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0014d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0015d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0020d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "002d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "003d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "004d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "005d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "007d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "00d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "022kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "02d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "03d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "03d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "04d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "05d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "06d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "06d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "07d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "07d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "09am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "09d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "09d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "0d111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "100up.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "100up.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1120313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1120327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1120328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1120330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73745,11 +72794,7 @@ { "name": "1220348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1220349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1220350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "127ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "131ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "132kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "136ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "151ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1520301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1520302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1520303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73767,138 +72812,13 @@ { "name": "1520325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1520326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1520327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520340.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520341.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520342.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520347.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "153z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "156ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620340.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620341.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620342.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1661618.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1720302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1720303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1720312.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720322.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1720336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720340.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720341.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720342.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720347.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "175ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820307.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820308.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820309.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820314.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820319.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820322.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -73918,109 +72838,35 @@ { "name": "1820344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820350.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "182kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "182ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "182zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "185zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "187kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "188zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1920301.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1920302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1920303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1920304.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1920305.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2030404.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "222zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3040507.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3040508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3040517.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "333zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "33btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "35d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "365d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "37879.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3dtootmine.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "4050601.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "4050607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "4050620.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "432web.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "456zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "46d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "46d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "47d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "47d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "48d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "518zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "555zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "588e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "58w66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "618btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "61d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "62222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "64d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "64d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "65d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "666zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "70872.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "70d88.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "74d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7minutemiles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8001d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8002d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8006d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8006d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8007d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8008d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8010d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8011d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8012d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8013d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8015d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8016d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8017d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8019d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8021d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8022d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8027d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8030d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8038d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8039d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8050d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8051d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8053d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8059d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8060d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8071d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8071d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8072d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8077d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8078d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8092d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8100d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8102d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8109d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8116d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8121d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8153d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8170d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8173d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8197d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8198d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8200d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8202d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8216d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8217d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8222d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8223d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8226d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8227d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8229d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8229d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8230d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8802ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8805ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8809ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8830ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "886666b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74047,54 +72893,22 @@ { "name": "886666y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "886666z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "88btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918aah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918aaj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ahh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918awx.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bio.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918caa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cqq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918db.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dc20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ddk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ddy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dgg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ess.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918hs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918hzoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918og.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918pn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918rh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918tx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ug.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ui.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918vk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918vs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918wv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918za.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91milk.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "999zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k228.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k287.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k295.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k586.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k587.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k589.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k632.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "a2os.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acapadena.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "accadia.academy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "acilicraft.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aftonpravdan.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag173168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag2983.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74114,7 +72928,6 @@ { "name": "amerion.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amtsinfo.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andrewjphotography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "animekaizoku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anxietyspecialistsofatlanta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anythinggraphic.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aptekakolska.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74144,22 +72957,11 @@ { "name": "bolamarela.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boughariosbros.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "boxtreeclinic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bread.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "brickadia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btopc.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt043g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt192.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt217.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt285.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt289.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt6262a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt776.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt8383a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt918.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt9292a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt9595.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt99.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btta18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buysoft.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "byfeldt.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "c886666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74188,128 +72990,40 @@ { "name": "codedynasty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cointosh.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "comedimagrire.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "computerguardians.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "corsisicurezza.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cuteselfie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d8812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8812.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8813.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8815.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8817.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d881vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d882vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d883vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d884vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d8850.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d885188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8852.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8853.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8856.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8857.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d885vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d8860.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d8861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8861.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d886119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8863.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8865.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d886vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d8870.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8873.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8876.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8879.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d888508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88870.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d888vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d8890.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8891.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8892.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8893.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8897.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d889vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc04.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88dc09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc14.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88girls.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88md03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md14.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88md24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88md29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88promo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88zl.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daidr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danel.ski", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danelska.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "danelski.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datasafeassurance.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datatypes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd112d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd118d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd11d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd201d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd202d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd203d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd204d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd205d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd207d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd208d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd209d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd210d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd212d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd214d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd215d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd22d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd33d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dd44d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd55d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd66d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd77d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deepnet.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dekasegi-supportcenter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dentistryateastpiedmont.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74384,7 +73098,6 @@ { "name": "issoexiste.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "itdutchie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jaculus.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "japansm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jehelpdesk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jeps.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jeroendev.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74396,8 +73109,6 @@ { "name": "kartikmohta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kashbet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb4393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb882.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb88818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74415,69 +73126,41 @@ { "name": "klupper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "korob-ok.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kreyolgym.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks-29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks-89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks068.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks1519.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks162.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks181.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks204.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks382.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks901.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks905.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks907.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks920.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ksvip15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kuscheln.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "larpkalender.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "larryandprisca.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lebanonbitcoin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lichtletters-huren.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai2222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai5566.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "linosky.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "littles.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lkw-servis.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ll8807.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "llyq8866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "llyq9988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lofstad.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loheprobado.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long-8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long266.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long510.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long566.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long68.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "long8097.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loteamentoabertocapivari.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ludovic-frank.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74487,14 +73170,12 @@ { "name": "manuelguerra.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "marisasitaliankitchen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "markandev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "marsble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maxmuen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcstaralliance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcwrapper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mdconnect.asia", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mens-health.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "meodihoang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mercelo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mhcdesignstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "micluz.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "microjovem.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74518,7 +73199,6 @@ { "name": "negativeentropy.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "negocios-imatore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "newworldnewlife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nguyenminhhung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nhv-vintagelemans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "noites.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "notariuszprzybylowicz.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74585,7 +73265,6 @@ { "name": "setptusa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sheilagranger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "shigaben.or.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "simple-e-world.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "siscompt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "skelleypiano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "skinstyleglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74656,27 +73335,17 @@ { "name": "voevm.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "volvoconnect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0185.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w0189.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0195.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0198.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0202w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w4040w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w5050w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6609.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w661122.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66133.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w66136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66138.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w661616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w66191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66191.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w662211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w663w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6698.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wallisch.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wearefrantic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "websiteboost.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74712,94 +73381,28 @@ { "name": "yamei9955.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yourbetterkitchen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yuer.sytes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8010.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8011.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8013.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8015.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8021.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8026.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8027.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8028.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8032.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8062.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8063.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8066.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8068.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8079.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8081.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8082.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zi5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-49.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-69.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl0783.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl0iu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl0sz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl1038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl16h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2704.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl3289.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl3597.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl3782.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl4231.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl4290.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl4454.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl4538.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl638.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl6xw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl7393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl7615.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl9052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl9372.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlam2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlf8h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zllpa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlong6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlong6.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlong888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlong888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zls9p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlvd7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zunlong0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zunlong918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "glassrom.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0016d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0017d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0019d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "003zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "006d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "008d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "009d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "009zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "010203.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "010ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "011zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "012zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "013zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "015zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "017zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "018zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "019zl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "020ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "020ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "022ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "025ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "029kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "029ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "03637.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "05d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0799ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "08kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1020302.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "10365001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "10365002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "10365003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74816,77 +73419,27 @@ { "name": "10365f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "10365g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "10365h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1120325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1120334.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "113ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "116ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "116vip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "118vip.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1220315.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1220324.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1220327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1220346.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "122kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "130ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "133ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "135ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "147ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1520328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1520344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "154kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "155kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "156ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "158ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "159ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1620349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "16agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "170ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "171ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720320.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720328.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1720332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "173ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "180ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "181ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820331.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820347.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1820348.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1820349.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "183ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "183zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "185ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "186kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "186ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "188kb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "18agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1941-45.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "198ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "199ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1blazing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1onehouse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "200ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "217778.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "23ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "285551.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "288kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "288kb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "288ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "28agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "28ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "299ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2blazing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "301ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "33kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "355ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36506000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36506011.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36506022.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -74902,231 +73455,40 @@ { "name": "36506555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36506777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36506999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "399ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3elife.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "404ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "428northampton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "456666365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4761.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4762.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "499ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "51club8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "52dashboard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "58agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "58ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "599ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66.tn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "668ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "66agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "68agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "698ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "69agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "69ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "6agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "6wbz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7214.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7214.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8001d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8013d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8057d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8061d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8069d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8083d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8092d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8093d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8109d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8111d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8115d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8130d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8133d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8133d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8135d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8139d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8150d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8151d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8158d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8171d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8176d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8178d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8181d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8182d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8183d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8190d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8191d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8192d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8193d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8193d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8195d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8196d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8197d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8198d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8199d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8207d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8209d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8210d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8211d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8215d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8216d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8217d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8218d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8219d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8219d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8220d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8221d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8223d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8225d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8227d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8228d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8232d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8236d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "82kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "83kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "85kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "866ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "86kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "87kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8805d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8806d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8809d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8815d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8815ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8816d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8816d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8816ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8817d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8822d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8826d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8826d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8827d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8828d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8828ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8829d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8829d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8831ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8832ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8835ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8838ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8850d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8850d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8850ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8851d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8852d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8852ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8855d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8856d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8856d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8856ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8857d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8857d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8858d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8859d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8860d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8860d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8860ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8861ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8862ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8866d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8869ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8880ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8881ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8882ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8887ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8889ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8891ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8895ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8896ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8898ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "889999vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88zl.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8918d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8925d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8926d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8927d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8927d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8928d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8929d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "898ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "89kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d17.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d32.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d35.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d36.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d37.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d38.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d50.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d51.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d52.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d53.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d56.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d57.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d60.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d61.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d62.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d63.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d65.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d67.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d69.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d70.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d71.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d72.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d73.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d77.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d80.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d83.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d87.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d90.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d93.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d96.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d97.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d98.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "92kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "93kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "95kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9666ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "96kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "98agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "98kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "98ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "99agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "99kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k223.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k227.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k229.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k235.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k237.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k238.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75156,7 +73518,6 @@ { "name": "9k322.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k325.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k327.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k332.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75189,25 +73550,14 @@ { "name": "9k569.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k572.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k573.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k577.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k579.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k582.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k583.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k592.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k622.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k623.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k625.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k627.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k629.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k633.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k636.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k637.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k639.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k653.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75219,8 +73569,6 @@ { "name": "9k668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k672.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k673.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k675.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k677.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k679.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k682.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75231,7 +73579,6 @@ { "name": "9k693.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k698.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k699.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k823.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k825.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75265,66 +73612,24 @@ { "name": "9k892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k893.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aaex.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "acacia-gardens.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aceitedelcampo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ad4msan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ad4msan.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "adonai.eti.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "advens.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ag518518.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag58ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag68ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ag818818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ag818818.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ag88ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks006.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks007.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks112.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks114.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks115.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks131.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks134.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks137.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks138.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks150.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks96.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "airanyumi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "allthings.how", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "americorps.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "amtcd88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "andesnevadotours.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "angelinaangulo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anhqv.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75335,14 +73640,11 @@ { "name": "areis.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "arsenal-charodeya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artlabdentistry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "as395.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "as397.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ashtonbromleyceramics.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "assosfi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "athomedeco.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "atlanticyellowpages.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "auditready.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "babyboutique.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "baka.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barashek.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barnettville.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75358,13 +73660,10 @@ { "name": "birkenwasser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bitking-trading.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bizlatinhub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bk622.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bk725.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "blockchainmagazine.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bryanfalchuk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btshenqi.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btsou.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "budgetinsurance.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buhex.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "burbankdental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75397,38 +73696,9 @@ { "name": "cuentamecomopaso.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "curexengine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cybernetivdigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d868.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d881.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88118.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8867.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d887.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d8875.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88871.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88873.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88dc27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88siteintro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "david-merkel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daysinnaustin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd206d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd213d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dd99d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deedyinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "delvickokolo.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dizzie.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75440,28 +73710,12 @@ { "name": "dogboarding.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dogeboy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "draemar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon00.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon53.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon57.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon61.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon63.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon67.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon70.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon75.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon80.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon81.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon87.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drcp.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dressingmaternity.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "droidchart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drthalhammer.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ds915.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dumb-laws.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dwilawyer.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "e7180.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eichinger-stelzl.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eismaschine-vergleich.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "electrolivefest.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75502,22 +73756,6 @@ { "name": "get-quick-bits-fast-2018.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gielectrical.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "goeikan.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug78.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gpfitness.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gqyyingshi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gqyyy.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75553,7 +73791,6 @@ { "name": "infotelecharge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ingestion.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "injurylawyer.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "innotab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "innovacoachgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "inoio.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "insanelyelegant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75565,7 +73802,6 @@ { "name": "javiscoffee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jerome.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jewelers.expert", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jiangzhuyun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jiji.co.ke", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jijistatic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jiu99shipin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75574,158 +73810,33 @@ { "name": "juweliervanwillegen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k81.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kaanhaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi005.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi009.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "karodos.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kashsports.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kathy.lgbt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kawaii.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kayit.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb03.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0404.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb05.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb059.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb0707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb091.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb096.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb1313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb2121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb2323.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb2626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb3030.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb3232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb367.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb372.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb3737.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb3838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4040.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb415.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb4545.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb458.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4646.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4783.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb481.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4949.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb514.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb545.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5454.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5648.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5757.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb5959.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb6060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb659.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb709.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb7171.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb750.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb756.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb7575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb7979.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb840.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8484.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb881.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8831.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8841.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb885.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8855.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb886119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8871.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8872.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb888508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md10.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md14.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb9191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb9494.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb952.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb957.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb9595.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kbjri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kidonng.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kieskundig.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kimkhisaigon.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75736,10 +73847,6 @@ { "name": "kokosnusswasser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kreditkoll.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "krumpf.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks168158.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks208.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ksvip07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kubabrussel.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kyotokitsune.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lacuerba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75756,23 +73863,10 @@ { "name": "lohvinau.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lolcloud.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lolio.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long-6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long0310.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long0316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long0317.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long0318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long186.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8021.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8026.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8040.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8076.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8078.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long88.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lotc.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lts-tec.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lulua.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lyness.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "m271809.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "magebrawl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "majormedicalinsurance.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "malond.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75802,7 +73896,6 @@ { "name": "moosikapp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "moraffpritchard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mundosuiri.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mygg32235.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mynaturalmood.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mysteriesandmargaritasblogspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nachrichten-heute.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75837,7 +73930,6 @@ { "name": "plaintextpledge.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "plaintextpledge.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pmi.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "premrev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "productliabilityinsurance.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "proeski.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "proseo4u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75846,11 +73938,9 @@ { "name": "providential.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "puteulanus.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "raqoo.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ratedever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "re-crawl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reindersfoodfashion.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "richieheijmans.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rixcloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robertnankervis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rottamazioni.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roughtime.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75944,15 +74034,12 @@ { "name": "webmail.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "weissdorntee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wermuttee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wf336.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "whojoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "willi-roth-holzbau.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "williejackson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wism.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "workersshop.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "workthings.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wtprecife.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wxxcxd88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xinetwork.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xlyingyuan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn---35-6cdk1dnenygj.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -75975,66 +74062,15 @@ { "name": "yourkrabivilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yporti.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yuzu-tee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z66.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8023.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8031.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8056.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8059.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8067.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8075.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8078.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8083.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8087.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8089.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8095.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8097.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8106.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8109.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8120.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8122.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8125.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8130.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8133.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8137.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8138.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8155.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8162.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8170.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8182.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8195.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8196.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8199.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8200.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8207.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8208.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8209.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8210.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8212.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8215.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8217.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8821.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8860.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8865.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8905.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8906.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8922.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76042,12 +74078,7 @@ { "name": "z8929.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zaffke.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zakonu.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd0808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd1616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd1717.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd203.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd205.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76070,7 +74101,6 @@ { "name": "zd267.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd270.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd273.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd275.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd276.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd279.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76092,123 +74122,48 @@ { "name": "zd3232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd3939.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd4747.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd4848.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd5252.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6893.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd7575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8836.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd8878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd8898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhis.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhou28d88vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhuktrans.msk.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zigarn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zinniazorgverlening.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ziqijiang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zitronengras-tee.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl-19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl-89.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl016.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl0202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl026.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl031.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl056.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl071.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl072.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl073.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl076.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl0909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl1010.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl1212.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl1616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl2020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2424.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2525.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2929.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl3737.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl3838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl6475.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl7171.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl738.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl760.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl7979.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8484.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl850.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl8686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl8824.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl8862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8870.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl9191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl9292.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl969.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl9898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zlhgc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zlhuodong.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zltymacau.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "00004048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "000a1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "000a2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76286,22 +74241,15 @@ { "name": "068663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "071552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "0737399.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "0768ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "078663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "083832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "084552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "085851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "093113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1-345.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1003365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "100pudov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "100visits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "107996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "10n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1112365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1116365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1119365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "111b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1120344.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1188bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76367,68 +74315,19 @@ { "name": "1517883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1517886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1517889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "153kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "154552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "154922.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "16-qw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "16qw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "16region.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "178btt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1831365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1832365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1834365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1837365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "188kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "1981365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990gg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990hh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "19990kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990oo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990rr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990uu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "19990zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1baks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1cprosto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1hfree.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1malaysian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "2-678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2012review.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2013review.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2015review.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76459,13 +74358,8 @@ { "name": "2033x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2033y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2033z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "205jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "207ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "207vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "209vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "20n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2155hg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "216vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "22245j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "22256j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "22267j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76475,8 +74369,6 @@ { "name": "2288bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "22b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "23454048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "23732.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "240vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "241552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "242552.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "246773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76541,13 +74433,9 @@ { "name": "2evip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2kvn.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2lovebirdsblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3-789.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3-800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3006789.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "30n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3165365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3175365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "317811111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "31782222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "317822222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76596,16 +74484,9 @@ { "name": "33b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "33n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "348663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "350vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "351365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3539783.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3557365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3558365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3559365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "360365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "362590.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3650607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3658200.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36588801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365888012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "36588812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76629,8 +74510,6 @@ { "name": "365888dddd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3659801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3659867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3659868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3659869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3659980.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365eib.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76662,12 +74541,9 @@ { "name": "365y9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365y99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365ypw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "365zg.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365zg.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365zzz.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "369-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "37987.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3800611.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "380111000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "380111111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "380111222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76750,68 +74626,13 @@ { "name": "3970700.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3970800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3970900.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970gg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970hh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970oo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970pp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970qq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970rr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970uu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "39news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3danimation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3djava.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3w-solutions.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4001365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4002365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "4003365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "4004365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "4005365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4025360.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4025361.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4025362.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76900,12 +74721,10 @@ { "name": "4345.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "436773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "438663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "443658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "444b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4455bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "44b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "451365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "456-3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "45674048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "458663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "476773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76916,8 +74735,6 @@ { "name": "4dillusion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4evip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4tgw34.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5-600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "5-890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "500wordessay.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5017503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76957,7 +74774,6 @@ { "name": "52002x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "52002y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "520xpjxpj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "538vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "55554048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "555b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5566bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -76966,7 +74782,6 @@ { "name": "55n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "56784048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5898657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "593-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "59759vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "59759z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5981168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77024,20 +74839,13 @@ { "name": "598877.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "59rus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5ilg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "6-600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "6-800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "605vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "60n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "611121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "611125.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "611165.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "611195.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "616675.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "616btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "621nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "621vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "628vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "635-488.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "635-588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "635-788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77108,7 +74916,6 @@ { "name": "6396hhh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6396iii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6396jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "6520265.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "657843.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66321aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66321bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77161,7 +74968,6 @@ { "name": "6669255.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "666999bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "666b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "666btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6671365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6672365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6673365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77179,7 +74985,6 @@ { "name": "678678365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "67894048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "67y7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "681vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "68522.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "68522c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "68522k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77190,17 +74995,13 @@ { "name": "68622b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "6863070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "68722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "7-890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7004233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "70365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "70n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "7111365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "71365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "721aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "733575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "73365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "74365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "753-9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "75365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "755204.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "755243.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77221,7 +75022,6 @@ { "name": "77018ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "77774048.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "77789j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "777btt.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7788bet.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "77b58.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "78365aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77243,7 +75043,6 @@ { "name": "792ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "793ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "80365365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "805vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "80651a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "80n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "811121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77301,12 +75100,10 @@ { "name": "842365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "846773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "848663.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "852-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8521.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8521.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8602012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8602013.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "860vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "861365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "861365.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "861365a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77362,35 +75159,7 @@ { "name": "878365mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "878365nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "878989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8810ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8836ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8855650.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8855950.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8866012.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "88740n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88740z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8881234j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8882345j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "888234j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77410,117 +75179,34 @@ { "name": "8me.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9009019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "906vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "908vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "90920.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "90n13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9110365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9111365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918-siteinfo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918101.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918aait.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918aav.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918aff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918agr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918arr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918baa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bbd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bbg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bdd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bip.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bis.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918bit.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bkk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918bzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918cce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ccq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ccz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cdd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cgg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cmm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918crr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918css.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ctt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cvv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918cxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dcc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dde.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ddf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ddj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ddo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ddp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ddq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ddr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ddw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ddx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dkk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918dpp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ebb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ecc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918edd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eef.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918een.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eeq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ees.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eew.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ejj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918emm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918epp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918err.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918euu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918fdd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918fee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ffa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918ffn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918hi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918hw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918iwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ji.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918jt.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918jwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918lwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918mh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918mo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918mz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918mzoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918pt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918qg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918qi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918rs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918rt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918sj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "918ze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d91.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "940365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "946773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "953-7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "956jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "96002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "961705.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "96678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77570,7 +75256,6 @@ { "name": "a6695.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aa4888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aa7666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "aa793.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aadv.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abanilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "abc-solutions.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77613,20 +75298,6 @@ { "name": "agarioforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agenux.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agiosthomas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks116.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks135.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks158.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agrargruppe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agroplas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77754,22 +75425,9 @@ { "name": "b03aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b03bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b03cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b0607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b0708.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b1111.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b3177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b31aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b31bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b31cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b31dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b31ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b31ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b3333.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b3390.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b3391.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b3392.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b33app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b36510.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b36512.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b36513.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77783,12 +75441,6 @@ { "name": "b365h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b365k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b538.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5706.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5708.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5709.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b57bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b57cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b58365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b58app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b58appb58app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77803,39 +75455,9 @@ { "name": "b5908.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b5909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b5910.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62103.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62104.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b62g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b62h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6701.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6702.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6703.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6704.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6705.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b6710.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b6720.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6730.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6740.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b6750.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b67771.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b67772.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b67773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b67774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b67775.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b68.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b7306.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b73app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77843,15 +75465,6 @@ { "name": "b73dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b73ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b73ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b750.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7501.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7507.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7509.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b83.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b83aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77865,7 +75478,6 @@ { "name": "b83ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b83jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b83kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b8831.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b88aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b88cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b88dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77904,8 +75516,6 @@ { "name": "bazar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bb057.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bb087.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bb211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bb321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bb882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "be4lead.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beachpoint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77921,7 +75531,6 @@ { "name": "benazir-reaction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "benetcasablancas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "berksnetworking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bernudrebes.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "best-book.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestboot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestechgadgets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78000,7 +75609,6 @@ { "name": "betaa6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "betaa8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "betaa9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "betb33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "betb73.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "betxx1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "betxx2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78073,42 +75681,27 @@ { "name": "bt3655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bt3657.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bt3658.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bta22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bta88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bte365app.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bteapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt0101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt0505.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt0606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt11.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt175.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt187.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt216.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt221.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt222g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt226.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt2323a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt238.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt2525.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt273g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt2929a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt494g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt583g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt6363a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt690g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt7272a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt7878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt830g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt8787a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt888g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt889g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btt918958.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt9494.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btta16.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btta26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bttp7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78213,7 +75806,6 @@ { "name": "codesgroup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "coeurdesushi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "coginti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "colchonminicuna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "colley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "comeoneileen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "comlipa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78271,7 +75863,6 @@ { "name": "d-soft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d365.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d588.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daemon-hentai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dahobo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78329,16 +75920,6 @@ { "name": "devcore.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devildog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devils-co.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5103.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5104.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5aa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "df5ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dfc52.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dieta-figura.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "differentgirleveryday.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78384,7 +75965,6 @@ { "name": "doubleness.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "downloadfiles.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "doxycyclineprices.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dranik.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dream-pools.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dreamcrack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78428,11 +76008,6 @@ { "name": "ee396.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ee397.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ee575.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee631.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee632.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee653.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ee735.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ee736.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ee951.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78610,10 +76185,6 @@ { "name": "goquiqstatus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gorodrostov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gosaavd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goug7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gougeaway.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gpswebsoft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gpz500s.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78785,14 +76356,6 @@ { "name": "j51365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "j5563.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "j5573.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j70111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j70222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j70333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j70444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j7051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j7052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j7053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "j70555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "j8846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "j9943.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jackrussel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78844,13 +76407,6 @@ { "name": "kabachok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kafel-ufa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kai-ruecker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi007.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kak-pohudet-legko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kalashnikov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kaliningrad.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78858,70 +76414,10 @@ { "name": "kandhamal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "karantholdings.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "karapuzz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kashbet666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "katalog-serverov.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "katalog-tovarov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kathleendeisher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb021.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb0303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb035.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb06.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb07.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb283.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb3131.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb3434.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4141.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4242.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4343.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb4747.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5252.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb5pt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb673.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb702.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb7070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb7474.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kb7676.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb786.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb864.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb8898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc03.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88dc29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb88md30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb930.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb963.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb965.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kb975.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kbhgi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kbty0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kbxlu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kegelschiene.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kemerovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "keramed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78955,154 +76451,16 @@ { "name": "kravmagaangers.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kresimir-blazevic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kryptologie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks-19.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks-39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks-49.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks-59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks-79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks01.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks016.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks02.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks023.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0316.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0404.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks05.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks051.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks0566.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks06.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks0668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks07.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0718.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0758.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0766.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0768.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0770.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0778.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks08.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks080.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks082.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks083.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0855.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks087.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0877.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks09.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0977.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks0996.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks1010.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks143.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks156.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks182.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks191.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks196.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks209.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks210.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks213.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks214.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks256.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks257.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks281.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks285.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks286.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks288.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks296.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks298.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks299.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks299.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks337.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks338.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks338.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks339.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks3535.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks3737.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks380.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks381.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks385.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks386.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks388.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks3939.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks4040.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks4242.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5014.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks516.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks541.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks549.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks556.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks556.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks596.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks597.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks600.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks602.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks626.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks641.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks668.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6690.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks687.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks69.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks692.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks7373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks79.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8186.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks88.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks883.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8884.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8887.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks89.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks9.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks915.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks9393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks960.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks9797.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks9888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks99.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks996.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kst-service.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ksvip02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ksvip04.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ksvip09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kswinwin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ktuluweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kukeri-karlovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kupislivki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79130,7 +76488,6 @@ { "name": "lesbianlovers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "letaman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "letdownloads.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "leu365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lg.gz.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "li.gz.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "liberty-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79157,9 +76514,7 @@ { "name": "locksmithservice-humble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "locksmithssanmarcostx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "locksmithstaffordtx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "locomen.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "london-mafia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8079.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lorimullins.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lorisfnotary.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loveismystyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79173,7 +76528,6 @@ { "name": "luxhome.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lyna.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "m30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "m365m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "macon.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "madeira.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "madgeandpaul.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79230,11 +76584,8 @@ { "name": "mayito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mayre-idol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mazavto.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mbetb33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mbetb73.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mbetbtt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mbte365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mbtt365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "me-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "med-line.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "medalofvalor.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79345,7 +76696,6 @@ { "name": "naturelk.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nay.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nazarenoviso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nba-officecenter.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "neboley.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "neofilia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "neoverso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79426,7 +76776,6 @@ { "name": "omretreats.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "one-news.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onlineautodealered.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "onlinecasinolisboa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onurerhan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ooo-santal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "operanavigation.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79473,7 +76822,6 @@ { "name": "p91ag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "p91ah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "p91aj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "p9cq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "paintbrush.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pakistan24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pamc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79578,7 +76926,6 @@ { "name": "pj21y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pj21z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pjshop.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pkq5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "planeta-remontika.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "playingvideojuegos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pleasanton-daycare-childcare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79600,7 +76947,6 @@ { "name": "potgrowersunion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "potkani.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pozharnyi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pp234.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pradeek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "praiss.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pravoslavie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79658,7 +77004,6 @@ { "name": "razgon.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "razvlekuha.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "razvlekuhablog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rdviitd.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reallycooljobs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "realpaella.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "recherchegruppe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79734,7 +77079,6 @@ { "name": "salvadorinfantil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sambuchanan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "samiratv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "samvui.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sandwichcouncil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sanfranciscopersonalinjuryattorney.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sangen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79912,7 +77256,6 @@ { "name": "surveer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "suseki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "swissurf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sy635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "t30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "t8803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "t8805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80060,7 +77403,6 @@ { "name": "tribistovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tricountyathome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tridentmedia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "trilogyforce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "triplicate.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "troop89medfield.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "trotter.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80169,7 +77511,6 @@ { "name": "utahrealestatepodcast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "utbosbeekhuuske.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "utevai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "uu378.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uzbekkizlari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uzbektumblers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uzhas-uzhasny.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80233,9 +77574,6 @@ { "name": "varjo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vasheradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vatav.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vbm11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vbm22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vbm33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vegetarier-sind-moerder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "veggies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vektlofting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80277,24 +77615,14 @@ { "name": "vns377h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns377i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns377j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns5353.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns5656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns5757.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns5858.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns5959.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns6262.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns6767.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns68611.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns68655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns68669.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns6868.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vns68722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vns6969.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vnsr112233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "voetbalclubinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "volosnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80303,23 +77631,11 @@ { "name": "vrostove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs106.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs107.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs1177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs1717.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs2277.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs2828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs5050.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs5151.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs601.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs6060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vs680.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs7711.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs8899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs9911.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vs9977.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vsaratove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vsem-privet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vstavropole.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80360,7 +77676,6 @@ { "name": "wajs1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wajs2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wangshengze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wapbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wapnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wash-house.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "water-polo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80467,64 +77782,9 @@ { "name": "x77qq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x77tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x77ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8100000.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8111111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8122222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8133333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8144444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8155555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8166666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8177777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8188888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x8199999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81ee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81ff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81gg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81hh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81ii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81jj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81kk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81ll.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81mm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81nn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81oo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81pp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81qq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81rr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81ss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81uu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x81zz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x9015.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x9701.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x98t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x98z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x993.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "x998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xab123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xab199.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xab4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80542,19 +77802,7 @@ { "name": "xarangallomangallo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xenical.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xerdeso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7aaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7bbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7ccc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7ddd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xh7eee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7fff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7ggg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7hhh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7iii.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xh7xx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xloud.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xmyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--4brt03c.xn--io0a7i", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80563,17 +77811,11 @@ { "name": "xn--bcherbestseller-zvb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--eebao6b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--schcke-yxa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj000444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj000555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj000666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpj567088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpj567288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpj567388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpj567888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj678678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpjai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpjbeting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpjcs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xucha.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xx6396.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y09a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80610,7 +77852,6 @@ { "name": "y3654.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y3656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y36577.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "y6180.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y68ah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y68am.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "y68bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80757,8 +77998,6 @@ { "name": "yourmagicstory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yuandan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yukoslibrary.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yy153.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "yy393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yy6396.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z30365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zackiarfan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80792,7 +78031,6 @@ { "name": "ziroux.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zizibook.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl8585.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8873.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zloybot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "znanje.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "znich.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80819,11 +78057,6 @@ { "name": "052ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "05am8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1080.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "181lilai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "188188688.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "188lilai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "188wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "198wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1lc11.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1lc22.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "1lc55.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80839,25 +78072,15 @@ { "name": "2025j95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2026j95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2226321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "228wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "230110.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "233wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2346321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "253205.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "2earn-online.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "308wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "318wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3336321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "333wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365888456.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365securitymg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "365yapan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "369028.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "369038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "380wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3963dd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3970.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "400wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "4566321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5017501.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5017502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80867,14 +78090,11 @@ { "name": "5017602.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5017603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5017604.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "518wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "52062z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "535wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5536z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5539z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5556321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5676321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "586540.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5981688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5goglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "611136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80919,49 +78139,20 @@ { "name": "690918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "690928.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "700wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "707wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "757wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7666321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7776321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7g31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7win.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "800139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8122d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8191d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8192d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8200d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8220d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8238d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8666321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "868wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8809d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8852d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8859d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "888xpjxpj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "88yabo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8900d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "898wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8win.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "900823.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "907vv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918duu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918eeg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918exx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918izoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918lzoz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918mwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "918nwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d12.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d75.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d76.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d78.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d81.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "91d82.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "91d92.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "939wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "946321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9499060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9499066.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81015,8 +78206,6 @@ { "name": "9499yyyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9499zzzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "95am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "988am8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "998wei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k236.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k239.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81038,9 +78227,7 @@ { "name": "9k399.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k566.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k576.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k578.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k628.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9k638.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k687.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k827.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9k832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81069,40 +78256,6 @@ { "name": "africanhosting.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agaveandpine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agks02.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks20.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks21.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks31.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks32.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks36.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks38.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks39.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks46.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks49.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks52.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks53.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks56.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks57.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks60.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks61.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks69.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks71.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks72.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks75.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks79.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks80.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks82.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks83.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks85.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks87.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks90.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks92.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks93.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "agks97.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agrodronechile.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agweili.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agzlapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81129,16 +78282,12 @@ { "name": "alternatiwa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alushta-vostorg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alwayshowher.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "am2288m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "am5188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "am615.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "am8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "am8136.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "am8833.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "am8883.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amandahamilton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "americanunicornparty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "amm6610.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amoxil.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "amputated.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "anabolickdieta.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81277,11 +78426,6 @@ { "name": "bssolvfagen-pre-storeswa-wap.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btc-alpha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "btc-doge.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt128.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt229.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt230.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "btt789g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "buddy-acceptance-banking-api.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "businesspartner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "busphotos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81386,15 +78530,6 @@ { "name": "czprothz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d-vision-web.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "d88-livechat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d882.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d885.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d886.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d889.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88agqj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md04.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d88md13.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "d898.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dagrs.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dakinecoupons.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "daniel-leblanc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81417,7 +78552,6 @@ { "name": "denkmalsetzung.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "departmentofdefense.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "desish.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "despertartransforma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deti-vse.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "devopsish.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diebetriebsraete.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81439,24 +78573,6 @@ { "name": "download-knigi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "doxepin1.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dozor.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon05.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon07.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon23.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon29.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon59.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon62.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon71.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon72.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon91.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon92.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon93.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon95.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dragon96.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "drogariasantoantonio.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dukeandduchessdrivingschool.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "durin-art.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81502,7 +78618,6 @@ { "name": "eviction.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evil-empire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "evsinemasistemleri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "expeditions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "f8003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "f8007.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "familleshilton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81543,7 +78658,6 @@ { "name": "fredhook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freecookies.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freelancerinc.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "freelanceunleashed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freundinnenausflug.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "frode.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fulige.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81695,7 +78809,6 @@ { "name": "jwimps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jysk-kornteknik.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kadvi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kaishi77.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kalamos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kaliboairport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kamildrozd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81751,38 +78864,12 @@ { "name": "ks06.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks17.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks19.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2251.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2298.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2375.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks2652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks35.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks3533.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks410.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5525.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5531.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5532.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks56.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks5822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6872.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks6875.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8112.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8128.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8129.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8135.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8152.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8176.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks82.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks82.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8218.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8233.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8266.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8278.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks8281.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks85.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ks87.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks96.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ks97.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kudinilam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81831,13 +78918,9 @@ { "name": "lilai18.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai2211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai3366.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai520.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai634.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai6677.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai8866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lilai9898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lilai9966.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "limstash.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lince-bonares.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81863,15 +78946,11 @@ { "name": "llgj888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "llgw8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "llw0x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "llw2h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "localtownhouses.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "logicdream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lojadkstore.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lomayko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lonavla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long0311.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8032.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "long8059.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "loomis.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "losaucas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lossaicos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82019,7 +79098,6 @@ { "name": "moyideal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mpgu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mrston.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ms295.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mtcpuntosalud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "muchotrolley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mudasobwa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82435,7 +79513,6 @@ { "name": "savemylicence.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "saveusfromavril.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "savin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "sc019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "scandalindo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "scfpensante.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "schastie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82529,8 +79606,6 @@ { "name": "srochnozaim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "srochnyj-zajm.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ss-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ss09.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ss9288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stajka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stalker-eyes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stangeland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82743,11 +79818,8 @@ { "name": "villalmanzo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vincura.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viphackers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "viplilai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viporiflame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vippclub.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vipw6600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "vipw6603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vipw6608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viraljobs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "viraloffer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82774,50 +79846,24 @@ { "name": "w-ws.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w0115.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w0118.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w0138.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w045w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w1010w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w1515w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w158w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w1717w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w233w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w2929w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w3330.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w4141w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w556w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w5858w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w61516.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w61518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w61616.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6363w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w6603.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w6612.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66133.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66136.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6631.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w66655.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6671.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6673.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w66828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6684.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w668686.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w668866.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w668899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w668989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w66919.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w66hao.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6803.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w6808.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w682w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w6863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w6880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w692w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w696w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w7355.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w7474w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w8093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w8094.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w8605.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82913,9 +79959,6 @@ { "name": "xn--uasacrilicas-9gb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--v4q.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xpa.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj100.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xpj90.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xtravans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xurl.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xxxoopz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82935,69 +79978,8 @@ { "name": "yeti.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yinduyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ym063.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym069.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym181.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym2121g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym2727.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ym966.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ymm234.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yourloan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "yura.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8025.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8029.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8039.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8057.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8061.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8065.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8069.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8071.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8072.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8073.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8077.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8085.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8091.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8092.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8119.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8127.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8129.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8139.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8150.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8158.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8160.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8165.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8167.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8172.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8173.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8175.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8176.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8177.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8178.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8179.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8187.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8190.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8192.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8198.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8201.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8203.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8205.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8206.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8213.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8218.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8219.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8230.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8231.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8251.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8875.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "z8879.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "z8918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zaimdengi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zaimexpress.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83010,15 +79992,6 @@ { "name": "zaracraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zarbis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zaympodzalog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd1313.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6363.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6879.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6886.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd6899.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zd7474.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zd9090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zeanweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zentrumfuerchemie.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83028,17 +80001,7 @@ { "name": "zhestokiemechtyi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zhurnalyu.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zinchenko.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl200.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl2121.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl6060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zl7070.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8874.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zl8891.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zlatan-ibrahimovic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zlotykameleon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "znakomim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83051,13 +80014,3007 @@ { "name": "zoloftprice.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zolushka-1950.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zooforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "zosia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zovirax-cream.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zrinski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zrs-meissen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zuitaotu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zwergenfreiheit.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zxfiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "030ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "035ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "080261.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1000wordsevents.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "166jk.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1698k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "192ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "197jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "198jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "208wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "225485.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2gether.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "301355.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "30365.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178ppp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178qqq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178rrr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178ttt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178uuu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178vvv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178www.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178xxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178yyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3178zzz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3344981.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3344982.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3344983.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3344986.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3358m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "350533.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3518k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "360videoshare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "380805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "390933.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "39708888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970abc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970bc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970ccc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970fa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970go.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970ku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970ok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970win.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970yes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3970ylc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3blazing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3dprinterwiki.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3dprintinggear.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3dreactions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3k188.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3k288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3k788.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3k878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3k988.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "406811.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "406833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "437844.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "459022.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "463855.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47788z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "487511.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "487522.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "487866.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "492977.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "497773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "517jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52067.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "529kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "541651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "55558744.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56564z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "57574z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "581kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "5889k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "589ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "595ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "606722.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "608885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "619kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "633663.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "633663.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "63gaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "652kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6556z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "659ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "661326.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6619k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6685m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6689m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "670633.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6u55ooxpo38mnikkxqvbmwfwauiiv35bsmm-2yj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "775018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "77778744.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81818z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "827774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278a.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278b.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278c.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278g.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278h.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8278j.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "847773.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744i.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744j.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744m.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744n.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744q.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8744z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "89386l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8938885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "897774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "917jjj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "927774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "937774.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "9499bbbb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "998wns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "99998744.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "a899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "achieveinternet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "activeaerogels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "activespaceautomation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "activespacetech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adamtatusko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ag8819-livechat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ai-cuisine.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aktive-arbeitslose.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alentadoras.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alessandrobasi.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alyanak.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andrewisidoro.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelspabeauty.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antifa.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apitodemestre.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appbooks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arouparia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "assis.partners", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrong.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "audiomaze.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auf-nach-mallorca.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autoccaz.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "automuovifix.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avocats-fiscal.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awaygroundguide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aymerick-dupouey.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ayudacloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ayudalabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ayudapreview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b9618.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bankheadvegetables.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bazar-24.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "behemot.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belroyale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestgearlist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackteam.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blacktownbuildingsupplies.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blessedgeeks.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blessedgeeks.social", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blm69.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blonde.style", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluebie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boese.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bolsashidrosolubles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bongoo.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandingcoapps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bride-forever.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "briefkasten-welt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "btcbenthuizen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bugteam.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burmesecats.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bwin58.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "c899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cannacun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cannagoals.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cateringvanhetland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cc8833.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdmdisinfestazioni.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "civmob.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cjsounds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clientesendemanda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coevostudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cokomi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comprauncelular.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "connectionstrings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conocedordigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copyrightcoinsnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crew.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryoblaster.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crystalroad.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dafe2021.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dajiale.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "damaskena.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daretogain.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darklang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dashabi.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dashabi.ws", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dealbx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dealosa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "decorarmicasa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "defesa.gov.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "degeeks.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demadryn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denince.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "der-rohrstock.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dermo-concept.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "df63.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalch.ng", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalchurch.ng", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitaldaily.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalpiloten.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dildosconsoladores.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djl63.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djl63001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dogandoganay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "domainstaff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dominictaylor.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "domsoty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dondiabolo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dracula.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "druzya.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duoyin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easywio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebenda.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "echosnature.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "echoteam.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "efoood.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "efzh2so1cuskp9j3evlqa1m68id-m9p1tzb05zo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enjin.zone", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "envoker.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epidastudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erisys.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erkenntniswen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eson.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "essextimbercraft.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estahl.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eurowaage.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evntage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exechip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "extinctionrebellion.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f899365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fapflix.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feltons.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finext.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fishme.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flokkr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "focanocliente.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fourxone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freelance-webdesigner.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freewerkt.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "friend.tours", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "from.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fuuko.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadgets-cars.com.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garbott.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gerinet.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghana.bz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "giac.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gieschke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gnmlive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gqyys.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gregmarziomedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gse.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gt-himmel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guyfletcher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gyaou-ek1njb79xkfsyxemzmauhkvxszyua7v2t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackdown.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hallhireforevents.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hanteln-fitness.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heartycorp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hemp.je", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "henkrensing.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hj556.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hlg66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hlx86.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hn122.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "houby-studio.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "housingneedz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hsimrall.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htcvina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hx56.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hx678.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i86666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ijazjewelers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imcassociation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "impresadipulizieantonella.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indexcesmad.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indianvisa.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indoorpaintball.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infrarot-thermometer.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inge.ec", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iniby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intranetcrowd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "introes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iplist.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ippawards.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipvbook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irxoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itqh0pk67wngbob5suh-c7glbmvtfa0dqhokufs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ivocopro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jdd888.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jinduoduo369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jinduoduo888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jmbmexico.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "js80651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsh318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsh517.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsh799.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsh916.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsh917.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsh918.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jss6868.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "julesroovers.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "juraciimoveis.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jw66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kajabutik.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamagraerektion.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb82.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kf2000.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kocka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kocka.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kp0808.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kpaycoin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6813.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6821.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6822.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8127.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuadey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lakeandriverrestoration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavabit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lb366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "learnsait2.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ledcpu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lgygf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linestep.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lirico.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livingword.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lkdpp.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lore-seeker.cards", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loteamentoabertopiracicaba.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lowcostvehicleinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ls-mapping-team.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lunarflake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luv-scent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luvscent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "m-team.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "man-stuff.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maneql.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maneql.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marcus.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "martin-renze.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masarn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mbadika.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mdihi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medstatix.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meilleursavis.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meugamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miasonne.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaeljacksonforsale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraft.gen.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miravelli.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mismart.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mitfx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "motherwell.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mserve.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mydevops.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n3domains.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nastycomics.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "neriumrx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsnew2020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nimanranch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obistarltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ohome.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ojk.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olivia-smith.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ontstoppingsdienst123.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "open.net.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oplatki-charistia.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ops.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opticaltest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otixz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otooil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ottxz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otzyvy2.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ovodev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333a.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333b.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333c.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333g.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333h.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p333j.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pagamentosdigitais.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pandagifts.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panezasociados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paradordelgitano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parsuv.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "payment.ac.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pepime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "personskadeadvokater.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pinksec.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playocean.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portafoliodenegocios.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prdelka.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pricesim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proactivo.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proastec.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prodwa.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promods.web.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proyectosx.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qbtechs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qdon.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qgr.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "queryquinton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quhyu.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r85555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ramsaver.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raphaelschmid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realgogo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rebelbranding.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "renyiyou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "republicghana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revisores.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rggraphics.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rickycbenitez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rights.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rinsepimp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "risounokareshi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robotenmihogar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rod.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rossilber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roy-buehring.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rps-auto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubblerock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s550.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s551.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s552.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s553.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s554.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s556.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s557.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s558.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s559.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sa68.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sam66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sand66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanderstech.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sandr0.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanierungskonzept.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scanwords.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sda.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "searx.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sefinancial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seguimosganando.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seicochimica.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shoparbonne.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simplydesk.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartmones.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartpheromones.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartsitio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solyplaya.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "someog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "somosbrujas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "songdew.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sormeyli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "speedtemplate.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spielmit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spruijtparket.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srilankan-hope-for-children.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stardawg.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startlemusic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stupidest.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stylusgroup.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subven.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supersandro.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swgenetx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swlabs.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sycca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "symplexia.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "systemausfall.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "t6370.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "t8003.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taguette.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taguette.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taguette.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "talsam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamacadia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamsuccess.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tech-professor.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teldak.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thaihong.co.th", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theaustinsevenworkshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thepavilionbanbury.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theqjourney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tholcomb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tielectric.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiemcayxanh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinycrm.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tld-list.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toiletable.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomoradexpert.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topeducationhelp.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trippen.travel", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tripsvia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tucocoon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twitterdriver.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ty7788.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyc009.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ufroo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulli.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "umount.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "undeadpirates.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unitedmatrix.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "universal-tutorial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unlocktechs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unternehmensbewertung.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upgradedpoints.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v800d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valordotrabalho.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vandrielschoenen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vidady.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "villavaltava.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vintagecarparts.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vns89386.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vorsco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vserus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wd63.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webdestiny.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weddingwire.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weliway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whymps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wlmhtrecoverycollege.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wort.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wpsermons.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xiaocg.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xlem.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--matua-n7a.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--s-0fa.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xolotto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xuehao.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xy366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yalcinkaya.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yashik.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yd169.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ydyy99.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yhndnzj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yl366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yoba.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yobasystems.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yogadeux.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yooptopian.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yorkshiregardensheds.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuce518.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yugodi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yy366.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yzh8.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8895.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8920.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8921.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeroanarchy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zerobajt.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeusec.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zixin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "053ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0x3bb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11335835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11445835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11555835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11665835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11775835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11885835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11995835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "20191r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "24hourlocksmithhoustontx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "24hourlocksmithspring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "282ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "30019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3311.com.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "375ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "377ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "378ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "492y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4y4a-arts.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "516ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "535kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "536kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "551365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "552365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6365dx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6365lt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6365yd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "80651c.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8897d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "9ungnir.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "active247.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adontenchambers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afilio.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airtable.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alles-nur-ge.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alonas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alonas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alxyjc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angora.freesite.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antispam.group", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apometria.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquaist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquarden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquarden.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "architecturequote.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artesaniastonalaytlaquepaque.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ashtonwealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avocad.studio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b303.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baufi24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bb168.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bea.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beatz-anime.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beticalia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bhat.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bibliology.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigbendcoffeeroasters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biggerpicture.agency", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bodegasvirei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandfolder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "broadbandchoices.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brols.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bruijns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bwin369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "byjamesrush.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "byteswave.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caffeinatedengineers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "campmackinaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canfazz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caphefin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carbonnel.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castiana.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ceylavi.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chat36.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chawa.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheapnhljerseys.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chemicalpharm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christianr.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cjs8866.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clnlboard.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coachbakery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cod88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codelyoko.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comercialroxana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comprarcl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "consultoresrey.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coptel.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coreup.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cornfestgiethoorn.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cpsurvey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crucibleofworlds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cst188.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberforensics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88.cn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8846.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8855.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8877.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88agent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88f.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "damifph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danielkeppler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "decologisticsgh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dependablehvacrefrigeration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devun.limited", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dhirendrayadav.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diariorealidad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "distributednya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djsanonimo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dk1818.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dnoid.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dogfriendly.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downtownsuiteliving.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dpim.org.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drjosebarrera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dronepilotgeorgia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ds168.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ds388.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dutkoteam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "earthava.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebaby.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eboocker.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "echarlascartas.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edstem.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edusercontent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ehealthfest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "einquiz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eisenhowerlibrary.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elasticshift.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emergency-federal-register.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "empoweren.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enerte.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicginger.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epikomagazine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escortsforu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escortslittleblackbook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estudiogarcia-rada.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "etny.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "etsservicios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "europa.jobs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exnoobstore.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eznetworks.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f1318.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f1318.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f8036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fbe.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fc8882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fc8882.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ff18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fh169.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finotax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "florian-lefevre.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fmcs.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fmeventcentre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freshair.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funerare-cazacu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fvap.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "g81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galerialamanai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garchi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gcdamp.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gkasper.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glitzafricafashionweek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goddg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldpetergood.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gooty.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groupeatrium.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grupoattia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gslaw.edu.gh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gtapg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guilde-dissection.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gunstatus.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "h81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackerone.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haderecker.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "halls.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haustierbedarf-shop24.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hipeople.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hohlhupe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hohlhupen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homeandliving.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homs.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hosting-tools.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "houstonlockout.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hugonote.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hugonote.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hugonote.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hugonote.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hxit.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icetwister.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idiot.trade", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ies911.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "illaadventure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "illinoiscaselaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "improv.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indigartbeading.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indigartbeading.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "injuryhotline.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inmigracion-florida.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "instagraph.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "instawierszyki.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internetloansdirect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iqskinclinics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irgendeine.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "issaias.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "it-journal.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "its.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "j81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jacquesdedixmude.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jawo2008.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jazerxx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jellyfloral.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jiayi.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jimmycarterlibrary.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joljeugdstad.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karakatoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kasperstad.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kassarsoap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katcr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb15.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb86.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb96.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kf200.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khojhealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kireilign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klocast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kloclabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knrt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knrt.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kodomo.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koflegend.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krillz.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks36.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6807.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6816.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6817.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6825.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6826.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6827.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6829.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6831.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks70.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8126.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8895.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8915.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks91.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuhnerts.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kupu.maori.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "l81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lakiernictwo.auto.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lars-kusch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lasvegasescortmagazine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legalband.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "letao18.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "likefluence.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lilysgrill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkzyovh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithdickinson-tx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lsbricks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luissotodesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lykope.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macnugget.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madhyrecords.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mancrates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marco-burmeister.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marquesgroup.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medundmed.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mehdimassage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merakiclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metakari.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mexicotopescorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "microsoftedgeinsider.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mitratech.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mjniessen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mkpdeepclean.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mlxysf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mokhan.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monkatos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monodejuegos.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mr-moulding-knives.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mralonas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mralonas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mralonas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mralonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrvnt.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "msha.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muku-flooring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "munera.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mychamberlain.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myekon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myeriri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nativeonestop.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nbm.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nkp.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nksky.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noobsrus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novacoaching.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuverabusiness.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuveratechtrends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "o-aconsult.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "o81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oaken.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onelifenutrition.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operrbilling.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operrgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osac.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osagenation-nsn.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oxsec.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pacificautobody.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paravroum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parkscandles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "passbolt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "passfindr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paul-sitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pauld.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pauld.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paulsitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paymongo.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcjsercon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pepperandpartner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petwatchersnj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pierreau.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piloten.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pisf.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playmytime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podcrto.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polarnova.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "porsi.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portaltudoaver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "practicalhomes.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "premiovapozicovna.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propertyfindercdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propertyflare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prosperandoemcasa.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proudplus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychotherapy-vienna.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "puppo.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "q81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quadron.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioheaven.co.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rainbowflowers.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rainturtle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rawcbd.shop", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rbuddenhagen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rebel.services", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reby.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reby.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "residentiallocksmithdallas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "resumeprime.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "resumeprofessionalwriters.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ritualesyamarresdelamor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rivers.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rochcloud.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romacoffee.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royaloz.ma", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saharacloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "samystic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "savorvip.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sebastian-kuhnert.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secondmileservice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "securewebcomputing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sellmyphone.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seyrederiz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sh68.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shelfplanner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shiftsecurityleft.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shopmacher.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simpleshirts.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sinalizeweb.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sit.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sjwheel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sk33t.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sk33t.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sk33t.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sk33t.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sk33t.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyros.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sliteapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartgrid.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sms-go.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "souspind.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanch.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanch.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanchelele.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanchelele.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanchelele.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanchelele.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanchelele.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spiritualityrise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sqlwrapper.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssr.llc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strandhaus-claassen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strandhaus-hinter-der-duene.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swrelay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "t5880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "t81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "temperandtantrum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "termbackti.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terra-24.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thealonas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thealonas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thealonas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thealonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thefuelcardpeople.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theoosmetalart.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theoutsiders.stream", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thriveafterabuse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "time.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokitover.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tommyemo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topappandroid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topcanadianescorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tourx.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trainingdigital.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transdevbus.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "translationge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "traveltomachupichu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tspdrits.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "u81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ucmjlawyers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "un.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unblocked.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unionreports.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upacores.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urlaubstipps.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uwe.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uxtag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v800g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "varlex.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vcm.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetcard.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetnet.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vettenburg.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virite.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virtuewisdomfund.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voloskova.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "votemate.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vv1234.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w3n14izy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w3n14izy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w3n14izy.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w3n14izy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w4tec.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waterheaterleaguecity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wealthsimple.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webanyti.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webdevinsider.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webmarketing.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wedenth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitesuithacking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "widgetmaker.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wireshocks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wolkenbauer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worio.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wp-cloud.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wpabzar.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ws.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wx6688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "x81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--strandhaus-hinter-der-dne-1wc.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xunleiyy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89a.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89b.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89c.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89d.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89e.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89f.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89g.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89h.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89i.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89j.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "y89ww.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yay.cam", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yolocast.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourpocketbook.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yspa.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8891.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8926.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeilenwind.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zenideen.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeta.hk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zgndh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhendre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhihe.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zormeloandassociates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zs6688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zuenkov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zz017.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zz993.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d222.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d333.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d444.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0d999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11assets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "168zz.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "173940.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1lc00.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1net.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "25percent.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2jhb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "40666888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "500promocodes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "500promokodov.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062e.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062f.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52062x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "556777.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011s.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011t.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011u.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011v.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011x.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011y.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "56011z.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "633663.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7782001.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "9allery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "9thwonder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acgqwq.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aeh5134.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "affordableinsurancenow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agenciacorujadesign.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albatrosswear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albert-yu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alejarod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allaboutgreg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allitcrm.sytes.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alonas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andresrios.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arenda247.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arnaudardans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "authenticate.computer", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aviteng.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aviteng.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "axault.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babyboutique.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bachmatt-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bachweid-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bastide-viens.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belkys.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "berksarl.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestcomputersecuritybooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beyondboxgifts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bhthome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biftin.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "binaries.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biographywiki.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bithausen.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bkkf.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blautiefe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bllb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blm36.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blueskyinsure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bongminhtam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "broerict.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bu-dun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burmakatze.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buttonizer.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bwin18.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cc8822.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chaturbate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chcuscojungle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrismarker.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ck1020.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copenhagenoptimization.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coppidesentupidora.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copyrightcoins.help", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "correotemporal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cou.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creamyfox.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctes.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8814.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8899.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88h.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daily-exps.herokuapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daimafengzi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danielkanchev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dark-nova.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "definitely.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denydarko.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "designartepublicidad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "df1nif.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dhde.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diegocoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "district.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "domein-direct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dpellegrini.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drandrewarnold.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "droid101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drweinrach.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duijf.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dukers-baelemans.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dwood.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dxmpay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dyneco.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "earthsgoldmine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easyeditcms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "echtgeld-casino.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricfenceboksburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricfenceroodepoort.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elo-rocket.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eltonpastilha.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emotive.productions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "encontra-me.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enviroli.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enviroli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enviroli.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enviroli.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eristajanmutka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esdacademy.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eseances.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esehospitalsabanagrande.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eumr.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ews1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exegese.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "facturama.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "familie-witzik.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festival-transform.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festival-transform.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feuerfestival.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fierykitchen.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firstchoicefriseur.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fitnesskarate.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flixstats.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "food4healthybones.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frasesdodia.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freakyaweso.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ftnpower.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fullreggaetonrd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamegear.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gealot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getinsuranceanywhere.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gliihc.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glk.partners", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "go-life.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gomega.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodsleep.pet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "h4kl4b.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hainanstar.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happylearning.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harvestcookrepeat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hearty.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herz-und-gemuet.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hex.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heyboldface.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hinyari.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hizliwp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hj555.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hlg88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hlx66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homeprivate.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hookshotdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "how-to-simply.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hx77.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hx789.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icecodenew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idn.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ieltslananhtruong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ihacker.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "img.ren", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imranraza.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "in1000worten.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ingfreelancer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "initialization.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intelmed.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intensify.pictures", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internetmusicexchange.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iplaycraft.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipoisk.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irose.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jairbehr.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jangl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "je.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "johndeisher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jonathanphoto.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jpoirierlavoie.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jpvtutoriales.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jrcmo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jw77.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalmykphilly.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kandoo.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kasiafricagroup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keller-sports.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khramtsov.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kirkae.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knallfrosch.ddnss.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knowpanamatours.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kp0809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kriskras99.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6805.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "langgasse-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lauralep.sy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavaggista.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lb369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseo.repair", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.ltd", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.services", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localseorepair.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lucille-thomas.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lucky-frog.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luxur.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "m81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macappstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macpress.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macreosolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mani.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mantenimientosenjardineriaypiscinasveracruz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mantul.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "markusjochim.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnet.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetforum.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetforum.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetforum.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "max-it.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mdcghana.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meevo.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mein-domizil.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mekanika.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metroplex.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mivm.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mjproduction.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modderday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moens.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nemhaisan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netface.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netfolio.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nix13.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "note64.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "notmyserver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuva.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nxtgenbroadband.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nylasercenter.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obu4alka.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oceanspraymiami.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oe2018.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oe2019.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinekocunuz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "only.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ontourmarketing.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ontrio.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opencpes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paradies-baar.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pinnakl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pixelecommerce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pixelmedianetwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planetpowershell.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "platform161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podlibre.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portugal.gov.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pousadaestreladapraia.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "precedencemedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "premiumhosting.com.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "previsora.gov.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pricena.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pro-co.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promocodius.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propiteer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychotherapie1220wien.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pubgbattleworld.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "punishment.institute", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "purple.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qcbrna.qa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r8100.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r89999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "readifycloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redeshoprural.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reputatiedesigners.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rizarus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robodeal.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rrvmz.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rwx.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sa88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sagnette.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sam88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanketsu.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scapdoors.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scheinerhaus.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seaborn.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "securelogin.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seminariosvip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sesturizm.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sglynp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shannapeeples.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shanshushu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shidai88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "short.cm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shota-sekkotsuin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sisterjoeworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sleepet.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "small-panda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smithings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sportsdrobe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssdpalermo.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starb.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupstack.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "storedieu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stromkomfort.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studio413.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunpig.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunpig.com.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunpig.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunpig.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tail.id.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tail.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tailwag.party", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "takeaimnow.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techlines.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teckgeekz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tempmail.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "texasholdemevents.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tfadictivo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebuttongame.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "themusic.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theocg.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thomas-steel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tian123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tian888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toronto-escorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toyopac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tranceattic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelerofcharleston.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tripasia.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tube8.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tube8.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twobitbusker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyc001.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unifestal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uppercap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vaisselle-nature.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vandijkmaatwerk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vch.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "venusbeautyproducts.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "verwimp.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "victorfiller.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vidadigitalecuador.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vnology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wd36.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webszolgaltatas.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wellsprung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wenjulebu.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wildandwonderfulketo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wils.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wintzenterprise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wormpress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wuyiwa.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xc9988.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xerbo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xiaojicdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xlunastore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80ageukloel.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--skmotoroptimering-zzb.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xoommit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xy369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yap26.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yavin4.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yd163.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ydiversa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yellowhawk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yihouse.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yl369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yorkieloverdiy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yy369.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z-cert.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z3u5.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8927.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8950.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zombmage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zoohaus.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "04d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "051ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "111plus.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "168fff.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "281ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3dlab.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3pestki.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "620207.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "623kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "633kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "655ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "698kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8888yule8888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "889w889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "889w889.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "88home9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "88wewin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "9kb.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aaapo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afashion.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aigner-club.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aigner-club.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aignerimage.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akmade.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albstaedter-kids-cup.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alibaba-test.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anonymoushackers.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antyfake.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arslonga.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aucospa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aumentada.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "av-systems.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b889b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "backupassist.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bahrevaran.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "banananet.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baokhangfood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bayltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beardsome.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "becleverwithyourcash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belebey.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belplombier.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "benu.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bepayd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestedeal.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betterselfbetterworld.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bicromoestudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bionovanaturalpools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biznesinfo.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bjl688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackmagickwitch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bogurl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bojiu99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonsi.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "borderless360.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bridgetroll.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brightpool-markets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "broodingblogger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bviphotovideo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carlosmfalves.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catalogobiblioteca.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdigitale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "censys.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chathund.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "checkrent.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clinicaarques.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cocbaoan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comparesolarquote.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conciencia.fit", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "connect-more.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conradboraboranuiresort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "countdowntrader.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cp015.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creativeideasagency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryptex.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryptoninjas.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctf-albstadt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88a.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88b.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88e.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88g.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daunatotala.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dbettenleur.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "de-kramers.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deckersheaven.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dermaldistinction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "descargar-apk.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desentupidorademais.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desheng28.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diananeves.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ds138.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dtinel.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dylnuge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebertlang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elainesearer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricfencemidrand.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eliasong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elisabethcasanova.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elitepainmanagement.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elsanoguera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emirefek.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "equisecu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ervinthagod.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escortbruxelles.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escortgigolo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "espherapromocional.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esteriliza-me.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "excerp.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exxpozed-image.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exxpozed.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exxpozed.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exxpozed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exxpozed.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exxpozed.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fctwo.download", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fdremodelingatlanta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fekir.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ferlc.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finestrina.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fins.money", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fivestartrader.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foodphotographyblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forsi.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frauen-etappenrennen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "g818city.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaci88play.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "game818play.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "game88play.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "game88yule.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gdpr.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gelaendermanufaktur.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gentledance.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gentledance.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getalitools.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "giaphaco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalesm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "go-datasecurity.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "go889w.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "golsportsoccer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "griswoldplumbingct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grizz.gdn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groupem6.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gruhn.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gstand.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hadleyluker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hammercast.fm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happybrush.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heartbound.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hemainteriors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hg661.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hgc369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hibanaworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hifumi.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horairetrain.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horairetrain.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horairetrain.lu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horairetrain.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hosoi-tax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hospeda1.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotelpalmas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hqon.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iberion.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idealog.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idesoft.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idesoft.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idesoft.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idkidknow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igmt-guinea.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imlhx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "immovit.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imperioth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inegol.mobi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infomundord.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inodari.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipsum.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irioka.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itzer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ivocotec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jadesong.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jasonwei.nctu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jb138.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jbc88.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jf886.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jinbijin.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jkland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jl-dx.com.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jof.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jplennard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jshub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "juezz.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "justeducationonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karoke.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kartoffel-tobi.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazmamall.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb98.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kcfmradio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kerner.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kettinggeleider.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kickingpixels.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinaesthetics-forschung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kobudo49.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6809.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6810.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6823.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6828.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6832.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6833.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks9211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuditel.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladiesofvietnam.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leeannescreations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lequocthai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liberta-me.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lideradigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lighthouseglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lilianejuchli.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linuxhub.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithfourways24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loli.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lonelypawn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loverngifts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lz898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lzh.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "m6pub.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "machinerysafety101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magicnethosting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magicvps.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marketing-apps.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnet.digital", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maryluzturismo.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "matchupmagic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxmusical.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mdaemon.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melda.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merdacz.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minload.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minton.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mllz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnszone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modell-lq.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "momentumdesign.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mothership.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mu105.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mudaomundo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musicsense.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myfiladelfia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mythen-fonds.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mythenfonds.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n-gram.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nationalaustriabank.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netfirmtextile.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nethorizon.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "networksolutionsconsultant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newstargeted.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noga4you.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nomzamo.spdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nsine.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "octopoos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "octopoos.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "official-sensitive.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "official-sensitive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "official-sensitive.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "official-sensitive.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ontogenese.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openwrt-dist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operrtel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operrwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orangelandgaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ouest-annonces.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parasca7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pari.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pastimeproject.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paulcloud.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcxserver.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pelosanimais.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "percloud.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pharmasana.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phoenixnow.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phukienchanh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pirateproxy.vet", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plus-aliance.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "praladofuturo.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "praveenravichandran.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "progaudio.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promodance.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proxybay.lat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pube.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "puntacanatransporte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "putasdelporno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qlinksgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quuck.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quuck.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r8369.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r8700.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "racevinyl.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radlina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raketa.travel", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raportdnia.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ratajczak.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raveboy.dyndns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raydius.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reeves-family.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "renedekoeijer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rheijmans.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ribella.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "richieheijmans.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruf888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runningandoutdoors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russstudios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ryanjarvis.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ryanjarvis.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s-pro.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safetysign.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salnet.wf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scriptslug.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seamus.party", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seblod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serkanceyhan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sham-group.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shoppingvrimini.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sksongs.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skuizy.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sm-kyoushitsu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smakoszwegrzynka.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartacademy.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartresumeservices.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smcj.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snj.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sofiawestergren.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "softly.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonderfloral.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "songyang.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spectrum-markets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spikefishdesigns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srfloki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srkb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stainhaufen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studiovictorialimited.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stuffie.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "summusglobal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suniru.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunnistan.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunpig.fit", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suroot.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sweetcalculus.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swiftbonds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swindontennisclub.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syncplay.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "szww99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tasadar.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taubin.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tehden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teriyakiweasel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terselubung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebarrypatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theedisoncapital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theilluminatisociety.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therudeworkout.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thierrymazue.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiochambita.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toddlerleaf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokky.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toprelatos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topstore.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transfersw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelingbagsmke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trelki.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trumtrimun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tugesha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uestc.icu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upvoted.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videogamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vigilantesporcolombia.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voicr.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volatilethunk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpsrussia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w889vip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wagonyard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wallmarketing.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wanghuiblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "watchhentai.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wattcontrol.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wck.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "we168168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "we88fun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "westmidlandslettings.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wew888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wewillfixyouripad.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wewillfixyourpc.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wewin889.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitemountainnaturalcreations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winall8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wiredmedia.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirkungs-forschung.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirkungs-forschung.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirkungs-forschung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirkungs-forschung.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirkungs-forschung.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wjg.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wordops.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "woxter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wsv-pfeffingen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ww8989.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wwin818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wwvip88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wy188.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xavita.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xcharge.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xeniox.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xiaojiyoupin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--nidar-tib.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--prfontaine-c7a.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xuehao.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yaseminuzumcu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesh.lk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesildiyetisyen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuleyule88game.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zestadionu.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zimtoel.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zmiguel.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znidar.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zollernalbtour.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zupzup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zz606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitbucket.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "00rfb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1lc1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1lc33.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1lc44.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "220control.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "33weishang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "369018.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "50milli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "5eki.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "690938.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "91fldz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "941988.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abbeyok.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abiscrane.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abminiplex.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "accademiapugilistica.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acuaticos.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acumed-diagnostic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "addo-addo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aievaluare.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akeenshort.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alpine-holiday.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amethystbodyart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andrey.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angkasa.net.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angular-software.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animalconnect.org.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antanavagefarbiarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aphelis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apod-portal-daily.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appsimplex.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appub.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabic-shirts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autolider.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autorijschoolstorm.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baneh-academic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "banglarfont.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bankruptcy.ky", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "basebalance.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bauingenieur24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "become-lucky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "berksabstract.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestremote.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "billgradywebdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biocrafting.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biofattorietoscane.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bisq.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bog8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bombayfashionclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boschsplit.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bread.red", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyplore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cambiemosjuegos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camshowhive.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camshowplace.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canobag.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carding.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cas-chauxdefonds.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celcelulares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chalupalokovka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chefkoch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheraghestan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chhlin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cirruslab.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cjenni.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clearspringinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "come2cook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "compliantbusinessprocessing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "concordiagaming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creandoydesarrollando.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crossformer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cubsbestteaminbaseball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cvtshop.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d88c.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dapperdom.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidschubert.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dbw678.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deanandnatalia.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deinsparen24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desanta.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "designs.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desktopgoldlink.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dewitteprins.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diabhal-staff.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digiepoxypaint.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalframe.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitaltrust.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "disruptiveadvertising.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dnssecandipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doctorcalefon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dotnetdocs.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dsbmradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dsdesign.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dse-assessments.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eciso.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecmeshltd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecrownoffire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eldercare.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elektrische-zahnbuerste24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enrico-caruso.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enzoic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "era.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estela-artes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "etalktome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "europainchemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "europastudien-chemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "europeanstudies-chemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everyvid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evilla.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairbairnrealty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairgreenlimited.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "falasteenjobs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fashworldtrends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fasthost.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fd020.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festx.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fgafsaneh.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fish4dogs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "florida-immigration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fluidpicturesinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flying-dudes.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forexarby.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fortdodgeradio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "franklinmagic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freefinancialhelp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freshbooks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "furgetmeknot.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "futuristacademy.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "g2jp.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadgets-and-accessories.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gavlix.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gehatrans.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genusbag.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getcertified.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "global1.gg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goiymua.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodfor.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "granli.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gregmarziomedia-dev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "griswoldwellwaterct.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gujun-sky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haitou.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harley-davidson-live.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hauora.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hauora.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hdbits.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthcaresuccess.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helkyn.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helkyn.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helkyn.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hella-secure.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herd-kaufen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hgyoseo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "highclasseducation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holacannx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holacbdoils.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holenergies.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holenergies.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hongbomiao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howmanypeoplearethereinthe.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howmanypeoplearethereintheworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "huangzenghao.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "huntcraft.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hurbascooter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hydra.ly", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hytopcp168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-make.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-make.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ibraphotography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igkabel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igkabel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igkabel.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igkabel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igkabel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ihacker.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ihacker.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "income.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inmedsm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innovairservices.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inspired-creations.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipv4.rip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipv6alizer.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ispmedipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itemstore.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jackspub.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "japansm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jennysarl.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jerseyink.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joedeblasio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "julienstalder.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kajakswaderki.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kapler.family", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katerinaverbovskaya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kevinpatel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kgt10.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khamphafood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kiir.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kokomu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kommunermeddnssec.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kommunermedipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kondomshop.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6835.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6836.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6837.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6838.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6839.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6850.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6851.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6853.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6857.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6861.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6862.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6870.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6871.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lackierereischmitt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lauresta.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lauresta.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lesptitspasdelyne.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lidl-stikeez.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localhost.cat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lostinlegends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "love4musik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovechester.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovelo.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lprcommunity.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lunepieters.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luv2watchmycam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manshatech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manzalud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marbledentalcentre.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "markusjanzen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marzio.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mbclegal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meran.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miklagard.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mlathrom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moca-2080.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "momocogames.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monitord.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ms-australia.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mummyandmephotography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musasdanet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybauingenieur24.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myfortdodge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myinsuranceauto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myinsurancelife.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myinsurancesource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mylifeinsurancerates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myndighetermeddnssec.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myndighetermedipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myroofandhome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n8solutions.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nadex.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netfoundry.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nextgen-life-insurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightscapesoutdoorlighting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nms-thoracic-surgery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novawatch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nucleuspanel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuestratecnologia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nycrerc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nyonator.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nysis.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obsessedwithknives.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olenergie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olenergie.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olenergies.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olenergies.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olhovirtual.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omanlover.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oneso.win", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onload.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operrhealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "origamitutorials.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pabloroblesminister.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pagatuarriendo.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paketbox-systems.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "papelpack.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parkr.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penguinworld.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pentools.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peterheery.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pick150.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pidibagrik.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plandegralba.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plasticosbiobasados.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "platformlms.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plusreed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "politsei.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pragata.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prgrmmr.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profiservis.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profits.fund", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profsaranya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pymeup.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quiqurl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r8600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reachout-ghana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recoba3d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remodelingfy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "resume4dummies.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rightreview.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robinloeffel.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "s2i.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salvameuba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salvandoalocombia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanix.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secureenduserconnection.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sevipro.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shakthifacility.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "siamericas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sianipestcontrolinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simplysmartgardening.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sipstix.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skaginn.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skalec.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sktorrent.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smaksbanken.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snizl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "songesdeplumes.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sphacks.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sporttomorrow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spoters.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srimakc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunshinecoastplumbingcompany.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svodjapan.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "synthv.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tacticalvote.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tara.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatard.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tdstoragebay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tech-leaders.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techchip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technochat.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techsystemsa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "templetattoo.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thefranknews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thegaucompany.healthcare", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theresabrant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thierrymazue.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thinkclic.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thornton-le-moors-ince-elton.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinclip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinekevanurk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinkerers-trunk.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomgaechter.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topyad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toyokawa-fan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trinityradioandvideo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tupianku.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twelvecornerspediatrics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twojapogoda.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unluco.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urologyoklahoma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v2x.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v800b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetustainversion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "victorunix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "violarenate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivianadavila.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volatile.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vunn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waifu.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-lab.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weydu.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whisky.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitesoxbestteaminbaseball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wine-route.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80akjfhoqm2h2a.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--pckm3a1bi21a.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--whlefamilie-l8a.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yana-co.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ykn.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yogamarlene.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "younameit.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youregeeks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zedeko.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhan.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhina.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zowedo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "020ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "026kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "029kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0510ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0511ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0691ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0724ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0732ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0766ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "07d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "09d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "106jamz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "134ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "134ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "135ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "151ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "153ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "155ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "157ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "157ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "166ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "170ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "176ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "17xrk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "181ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "184kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "185ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "186ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "188kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "199ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1fc0.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2000.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2255motion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "288kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "288ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2monkeysandme.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "301ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "33kb88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "46d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "47d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "48d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "499ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "499ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "555kb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "566ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "599ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "64d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "668ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "66agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "70d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "74d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "75d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "799ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8186d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8187d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8189d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8190d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "81d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8206d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8239d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8890d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8891d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8892d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8895d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8900d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8906d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8907d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8908d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8919d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8920d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8921d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8925d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "8926d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "899ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "967you.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "99agks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "9k898.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acicj.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acs-nettoyage-entretien-immeuble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actionverb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ae86.plus", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aeroalbrook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ag89ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ag9ks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agendaspectacles.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agentrisk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks111.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks150.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks4.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agks666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agktest1.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agpsn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agrolab.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akashdsouza.now.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alchemy-media-marketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alice-memorial.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aljaspod.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altorise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andreaassenti.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anjara.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anoracdn.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "app-scope.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apyha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquariu.ms", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabapps.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "articulatedmedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artrapid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asianfilmfestival.barcelona", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "attunedstore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auntiesnorkel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autodemolizioni.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autoklub.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azpogomap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azrhymes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bancastato.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beauty-form.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bengaldarpan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "berndbousard.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bevallarta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bgemi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitcoingambling.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bjs.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackhost.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluebnc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bobandducky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bolt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandonsample.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bravebooks.berlin", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bueromoebel-experte.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casaasia.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdc.cx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chilikin.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claude.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claude.photo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cleango.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clemency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clevermatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clwrota.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "compassionaterelease.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "confygo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coralreef.blue", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creafitchile.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyanhexagon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8824.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8834.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8841.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8842.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8843.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8845.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8847.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8874.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8878.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dayswithnostabbings.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deckenplatten.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "defis-franciliens.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demastglazenwasserij.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "despachomariscal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "despinavandi.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diabhal-staff.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "discord.gift", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djanpana.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djl188.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doerz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dogvolution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duarteeleiteconsultoria.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dyremyhr.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-boekhouden.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edefrutos.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "educative.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elementblend.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escritamusical.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eveil-et-savoirs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "excelsiorcomics.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exploringmorocco.tours", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f9marketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fibercoverage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fokus.ag", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fos-apps.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fos-games.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "franqois.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ftmc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "g7yy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaigelama.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ganodermatiendaonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gavr.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gavr.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gemsmarketplace.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genunlimited.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gheestore.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghull.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glamcosmetic.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldeneggs.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graddient.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grahamarthur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "growingsmiles.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "growwithdaylight.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gymlife.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackerflare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haitaka.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hana-groupsac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hayl.me.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hayobethlehem.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hbcm70.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hentaigogo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hentavfall.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "highenergy.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hiq.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hkmap.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hn75.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hoffnungberlin.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hoffnungdeutschland.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holyszko.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hrw66.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "human-shinri.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ialps.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iancu.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iancu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ifbagro.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igramming.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ihasco.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infans.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infinity3dengine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innoraft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inyourcornerinsurance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iosecurity.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jaluzelemoderne.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jamesrobertson.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jarmala.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jarmandental.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jasmyn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jg-skid.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jvrproductions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kabinett.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kais08.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kais68.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kais98.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaishi002.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaishi555.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaishi999.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaiwu.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaskocdn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaskocloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaskodev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaskojs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaskoqa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katsiavarasorthopedics.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazvel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb0101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb036.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb283.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb4242.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb4747.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb486.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb5454.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb6565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb756.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb787.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8800.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8815.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8837.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8841.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8843.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8848.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8849.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8854.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8856.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8859.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8863.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8874.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb8880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88dc06.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88dc15.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88dc25.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88dc27.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88dc30.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb88md26.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb890.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb965.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kb991.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kchomemed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kerryfoodscareers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keyex.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kfassessment.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kfo.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kimathilegal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinodrom.kiev.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klauswissmann.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kolrami.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kprem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kratochvilovi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks038.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks05.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks06.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks061.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks062.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks0688.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks078.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks096.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks204.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks208.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks2099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks281.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks2888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks2888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks291.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks299.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks329.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks335.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks335.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks337.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks339.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks3888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks3939.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks541.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks549.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks5888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks5888.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks610.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks635.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6600.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks6880.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks695.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks7272.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks7373.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks806.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8086.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks8852.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks9393.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ks9888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kunda.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "la-manufacture-du-nettoyage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lambda.sx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lbda.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leadership-conference.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lentivo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmith--richmond.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmith-pasadenatx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmith-springtx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithforcarshoustontx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithmidrand24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithresidentialspringtx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithservice-cypress.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "logactiond.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ltlec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lucacastelnuovo.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lukaszwojcik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luvhacks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mahalux.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mahalux.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mairie-sornay.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marc-beninca.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvnetdigital.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mashairi.co.ke", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medirota.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merlin-memorial.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mesvision.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metaljunkiez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metallschutz-direkt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mijnbeijesweb.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "milkaalpesiutazas.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mjrlegends.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mossaino.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "motto-iikoto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mricspatial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mvorisek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mvorisek.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mycakeangel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myinternist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myresearchtoolbox.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mytravelog.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "napiki.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nediapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nerdin.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netgaming.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightman.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nnnow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuits-franciliennes.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nut-dev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olinux.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinemoviewatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlycrumbsremain.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orxideya.az", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osszekotatermeszettel.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "owner.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oyungg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pajskr.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partiono.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peawo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photosgaia.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuoctran.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuoctran.com.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuoctran.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuoctran.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuoctran.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pmp6.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pokeforest.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "popcorncult.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "premiumdeal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "premkumar.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "primglaz.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proweb.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pugetsoundspas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "punematka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qosmoschools.edu.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quiz4math.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ra3y.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "railgun.com.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raynis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rciliberto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "re-inspect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "re-security.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reginaclinic.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "registr.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rfid-sicherheit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "riimihaku.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rime.com.hr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rimkereso.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robotstxt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rockypest.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roisu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roopakvenkatakrishnan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rotamap.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roxxz.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roys.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rrbts.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "run4gameplay.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusticpathways.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sambus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sand66.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanjosecolorectal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarjakuvakauppa.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sattamatkamobi.mobi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sattaresult.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secapp.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sedesignxtra.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seedno.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sehd.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senu.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seo-forum.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serv.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serveradmin.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "setxrm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sidsun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sieumod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sign.dog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "signaturedallas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skeriv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slalix.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slatemc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spillforum.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squarefootllcconstruction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squattra.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssone.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stats.do", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stavanger.kommune.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stefanengineering.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stghv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stonesfamilyrestaurant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stoutassociates.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sulabs.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suomika.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swatee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "t00ts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ta-nuth.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ta-soest.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taxicab4you.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telcodb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tenber.ge", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thalliman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tierradeayala.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tilde.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinminnow.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "titrespresse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tmailz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "todaslascafeteras.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokky.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokyoadultguide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-zdrave.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tpark.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trandanhland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ttfollower.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turiscar.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tutorcruncher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "txlocksmiththewoodlands.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uj2008.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultravip.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultrixus.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "utrantor.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vaxxwatch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vectomatic.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vijoe.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vinicius.sl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vipcards.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vlamir.dynu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vote2019.appspot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpsvz.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpsvz.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpsvz.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "w88-yes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webinstit.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webkindergarten.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikpa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "williamshomeheat.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "windmyroof.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wingchunboxtribe.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "womenshealthadvocate.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xaver.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xb052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xb053.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xb056.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xb057.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xb058.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xdown.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xhcmnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xiaoxia.li", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--lt9h.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yf128.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yijia.support", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "your-dns.run", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yz86.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yzarul.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yzh8.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yzh8.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z6.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8168.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8171.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8907.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8908.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8909.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "z8917.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zd1515.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zl8282.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znn.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, // END OF 1-YEAR BULK HSTS ENTRIES // Only eTLD+1 domains can be submitted automatically to hstspreload.org, diff --git a/chromium/net/http/transport_security_state_static_unittest_default.json b/chromium/net/http/transport_security_state_static_unittest_default.json index 11a2f4e797b..05179e44bdc 100644 --- a/chromium/net/http/transport_security_state_static_unittest_default.json +++ b/chromium/net/http/transport_security_state_static_unittest_default.json @@ -36,6 +36,7 @@ "entries": [ { "name": "hsts-preloaded.test", "policy": "test", "mode": "force-https" }, { "name": "include-subdomains-hsts-preloaded.test", "policy": "test", "mode": "force-https", "include_subdomains": true }, + { "name": "example", "policy": "test", "mode": "force-https", "include_subdomains": true }, { "name": "no-rejected-pins-pkp.preloaded.test", "policy": "test", "pins": "withoutRejectedPins" }, { "name": "with-report-uri-pkp.preloaded.test", "policy": "test", "pins": "withReportUri" }, diff --git a/chromium/net/http/transport_security_state_unittest.cc b/chromium/net/http/transport_security_state_unittest.cc index 7ff717fd731..e40e7495c58 100644 --- a/chromium/net/http/transport_security_state_unittest.cc +++ b/chromium/net/http/transport_security_state_unittest.cc @@ -1432,6 +1432,31 @@ TEST_F(TransportSecurityStateTest, DecodePreloadedMultipleMix) { EXPECT_FALSE(GetExpectCTState(&state, "simple-entry.example.com", &ct_state)); } +TEST_F(TransportSecurityStateTest, HstsHostBypassList) { + SetTransportSecurityStateSourceForTesting(&test_default::kHSTSSource); + + TransportSecurityState::STSState sts_state; + TransportSecurityState::PKPState pkp_state; + + std::string preloaded_tld = "example"; + std::string subdomain = "sub.example"; + + { + TransportSecurityState state; + // Check that "example" is preloaded with subdomains. + EXPECT_TRUE(state.ShouldUpgradeToSSL(preloaded_tld)); + EXPECT_TRUE(state.ShouldUpgradeToSSL(subdomain)); + } + + { + // Add "example" to the bypass list. + TransportSecurityState state({preloaded_tld}); + EXPECT_FALSE(state.ShouldUpgradeToSSL(preloaded_tld)); + // The preloaded entry should still apply to the subdomain. + EXPECT_TRUE(state.ShouldUpgradeToSSL(subdomain)); + } +} + // Tests that TransportSecurityState always consults the RequireCTDelegate, // if supplied. TEST_F(TransportSecurityStateTest, RequireCTConsultsDelegate) { @@ -1580,7 +1605,7 @@ TEST_F(TransportSecurityStateTest, RequireCTConsultsDelegate) { // Tests that Certificate Transparency is required for Symantec-issued // certificates, unless the certificate was issued prior to 1 June 2016 -// or the issuing CA is whitelisted as independently operated. +// or the issuing CA is permitted as independently operated. TEST_F(TransportSecurityStateTest, RequireCTForSymantec) { // Test certificates before and after the 1 June 2016 deadline. scoped_refptr<X509Certificate> before_cert = @@ -1711,26 +1736,14 @@ TEST_F(TransportSecurityStateTest, RequireCTViaFieldTrial) { // However, simulating a Field Trial in which CT is required for certificates // after 2017-12-01 should cause CT to be required for this certificate, as // it was issued 2017-12-20. - const char kTrialName[] = "EnforceCTForNewCertsTrial"; - const char kGroupName[] = "Unused"; // Value not used. - const char kFeatureName[] = "EnforceCTForNewCerts"; - base::test::ScopedFeatureList scoped_feature_list; - base::FieldTrialList field_trial_list( - std::make_unique<base::MockEntropyProvider>()); - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); - std::map<std::string, std::string> params; + base::FieldTrialParams params; // Set the enforcement date to 2017-12-01 00:00:00; params["date"] = "1512086400"; - base::FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams( - kTrialName, kGroupName, params); - std::unique_ptr<base::FeatureList> feature_list( - std::make_unique<base::FeatureList>()); - feature_list->RegisterFieldTrialOverride( - kFeatureName, base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - scoped_feature_list.InitWithFeatureList(std::move(feature_list)); + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeatureWithParameters(kEnforceCTForNewCerts, + params); // It should fail if it doesn't comply with policy. EXPECT_EQ(TransportSecurityState::CT_REQUIREMENTS_NOT_MET, @@ -2646,6 +2659,10 @@ TEST_F(TransportSecurityStateStaticTest, Preloaded) { EXPECT_TRUE( state.GetStaticDomainState("www.googlemail.com", &sts_state, &pkp_state)); + // fi.g.co should not force HTTPS because there are still HTTP-only services + // on it. + EXPECT_FALSE(StaticShouldRedirect("fi.g.co")); + // Other hosts: EXPECT_TRUE(StaticShouldRedirect("aladdinschools.appspot.com")); diff --git a/chromium/net/http/url_security_manager.cc b/chromium/net/http/url_security_manager.cc index 9c9424390e3..c7cbc4cfc03 100644 --- a/chromium/net/http/url_security_manager.cc +++ b/chromium/net/http/url_security_manager.cc @@ -10,35 +10,35 @@ namespace net { -URLSecurityManagerWhitelist::URLSecurityManagerWhitelist() = default; +URLSecurityManagerAllowlist::URLSecurityManagerAllowlist() = default; -URLSecurityManagerWhitelist::~URLSecurityManagerWhitelist() = default; +URLSecurityManagerAllowlist::~URLSecurityManagerAllowlist() = default; -bool URLSecurityManagerWhitelist::CanUseDefaultCredentials( - const GURL& auth_origin) const { - if (whitelist_default_.get()) - return whitelist_default_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); +bool URLSecurityManagerAllowlist::CanUseDefaultCredentials( + const GURL& auth_origin) const { + if (allowlist_default_.get()) + return allowlist_default_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); return false; } -bool URLSecurityManagerWhitelist::CanDelegate(const GURL& auth_origin) const { - if (whitelist_delegate_.get()) - return whitelist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); +bool URLSecurityManagerAllowlist::CanDelegate(const GURL& auth_origin) const { + if (allowlist_delegate_.get()) + return allowlist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); return false; } -void URLSecurityManagerWhitelist::SetDefaultWhitelist( - std::unique_ptr<HttpAuthFilter> whitelist_default) { - whitelist_default_ = std::move(whitelist_default); +void URLSecurityManagerAllowlist::SetDefaultAllowlist( + std::unique_ptr<HttpAuthFilter> allowlist_default) { + allowlist_default_ = std::move(allowlist_default); } -void URLSecurityManagerWhitelist::SetDelegateWhitelist( - std::unique_ptr<HttpAuthFilter> whitelist_delegate) { - whitelist_delegate_ = std::move(whitelist_delegate); +void URLSecurityManagerAllowlist::SetDelegateAllowlist( + std::unique_ptr<HttpAuthFilter> allowlist_delegate) { + allowlist_delegate_ = std::move(allowlist_delegate); } -bool URLSecurityManagerWhitelist::HasDefaultWhitelist() const { - return whitelist_default_.get() != nullptr; +bool URLSecurityManagerAllowlist::HasDefaultAllowlist() const { + return allowlist_default_.get() != nullptr; } } // namespace net diff --git a/chromium/net/http/url_security_manager.h b/chromium/net/http/url_security_manager.h index 8c2ef2f535d..83fc5e11ca0 100644 --- a/chromium/net/http/url_security_manager.h +++ b/chromium/net/http/url_security_manager.h @@ -25,20 +25,20 @@ class NET_EXPORT_PRIVATE URLSecurityManager { // Creates a platform-dependent instance of URLSecurityManager. // - // A security manager has two whitelists, a "default whitelist" that is a - // whitelist of servers with which default credentials can be used, and a - // "delegate whitelist" that is the whitelist of servers that are allowed to + // A security manager has two allowlists, a "default allowlist" that is a + // allowlist of servers with which default credentials can be used, and a + // "delegate allowlist" that is the allowlist of servers that are allowed to // have delegated Kerberos tickets. // - // On creation both whitelists are empty. + // On creation both allowlists are empty. // - // If the default whitelist is empty and the platform is Windows, it indicates + // If the default allowlist is empty and the platform is Windows, it indicates // that security zone mapping should be used to determine whether default - // credentials should be used. If the default whitelist is empty and the + // credentials should be used. If the default allowlist is empty and the // platform is non-Windows, it indicates that no servers should be - // whitelisted. + // allowlisted. // - // If the delegate whitelist is empty no servers can have delegated Kerberos + // If the delegate allowlist is empty no servers can have delegated Kerberos // tickets. // static std::unique_ptr<URLSecurityManager> Create(); @@ -51,36 +51,36 @@ class NET_EXPORT_PRIVATE URLSecurityManager { // |auth_origin| for HTTP Negotiate authentication. virtual bool CanDelegate(const GURL& auth_origin) const = 0; - virtual void SetDefaultWhitelist( - std::unique_ptr<HttpAuthFilter> whitelist_default) = 0; - virtual void SetDelegateWhitelist( - std::unique_ptr<HttpAuthFilter> whitelist_delegate) = 0; + virtual void SetDefaultAllowlist( + std::unique_ptr<HttpAuthFilter> allowlist_default) = 0; + virtual void SetDelegateAllowlist( + std::unique_ptr<HttpAuthFilter> allowlist_delegate) = 0; private: DISALLOW_COPY_AND_ASSIGN(URLSecurityManager); }; -class URLSecurityManagerWhitelist : public URLSecurityManager { +class URLSecurityManagerAllowlist : public URLSecurityManager { public: - URLSecurityManagerWhitelist(); - ~URLSecurityManagerWhitelist() override; + URLSecurityManagerAllowlist(); + ~URLSecurityManagerAllowlist() override; // URLSecurityManager methods. bool CanUseDefaultCredentials(const GURL& auth_origin) const override; bool CanDelegate(const GURL& auth_origin) const override; - void SetDefaultWhitelist( - std::unique_ptr<HttpAuthFilter> whitelist_default) override; - void SetDelegateWhitelist( - std::unique_ptr<HttpAuthFilter> whitelist_delegate) override; + void SetDefaultAllowlist( + std::unique_ptr<HttpAuthFilter> allowlist_default) override; + void SetDelegateAllowlist( + std::unique_ptr<HttpAuthFilter> allowlist_delegate) override; protected: - bool HasDefaultWhitelist() const; + bool HasDefaultAllowlist() const; private: - std::unique_ptr<const HttpAuthFilter> whitelist_default_; - std::unique_ptr<const HttpAuthFilter> whitelist_delegate_; + std::unique_ptr<const HttpAuthFilter> allowlist_default_; + std::unique_ptr<const HttpAuthFilter> allowlist_delegate_; - DISALLOW_COPY_AND_ASSIGN(URLSecurityManagerWhitelist); + DISALLOW_COPY_AND_ASSIGN(URLSecurityManagerAllowlist); }; } // namespace net diff --git a/chromium/net/http/url_security_manager_posix.cc b/chromium/net/http/url_security_manager_posix.cc index a0bc27d335f..c181a9087a3 100644 --- a/chromium/net/http/url_security_manager_posix.cc +++ b/chromium/net/http/url_security_manager_posix.cc @@ -12,7 +12,7 @@ namespace net { // static std::unique_ptr<URLSecurityManager> URLSecurityManager::Create() { - return std::make_unique<URLSecurityManagerWhitelist>(); + return std::make_unique<URLSecurityManagerAllowlist>(); } } // namespace net diff --git a/chromium/net/http/url_security_manager_unittest.cc b/chromium/net/http/url_security_manager_unittest.cc index 97dda33273d..93f31186037 100644 --- a/chromium/net/http/url_security_manager_unittest.cc +++ b/chromium/net/http/url_security_manager_unittest.cc @@ -19,16 +19,16 @@ namespace { struct TestData { const char* const url; bool succeds_in_windows_default; - bool succeeds_in_whitelist; + bool succeeds_in_allowlist; }; -const char kTestAuthWhitelist[] = "*example.com,*foobar.com,baz"; +const char kTestAuthAllowlist[] = "*example.com,*foobar.com,baz"; // Under Windows the following will be allowed by default: // localhost // host names without a period. -// In Posix systems (or on Windows if a whitelist is specified explicitly), -// everything depends on the whitelist. +// In Posix systems (or on Windows if an allowlist is specified explicitly), +// everything depends on the allowlist. const TestData kTestDataList[] = { { "http://localhost", true, false }, { "http://bat", true, false }, @@ -47,12 +47,12 @@ const TestData kTestDataList[] = { TEST(URLSecurityManager, UseDefaultCredentials) { std::unique_ptr<HttpAuthFilter> auth_filter( - new HttpAuthFilterWhitelist(kTestAuthWhitelist)); + new HttpAuthFilterAllowlist(kTestAuthAllowlist)); ASSERT_TRUE(auth_filter); // The URL security manager takes ownership of |auth_filter|. std::unique_ptr<URLSecurityManager> url_security_manager( URLSecurityManager::Create()); - url_security_manager->SetDefaultWhitelist(std::move(auth_filter)); + url_security_manager->SetDefaultAllowlist(std::move(auth_filter)); ASSERT_TRUE(url_security_manager.get()); for (size_t i = 0; i < base::size(kTestDataList); ++i) { @@ -60,30 +60,30 @@ TEST(URLSecurityManager, UseDefaultCredentials) { bool can_use_default = url_security_manager->CanUseDefaultCredentials(gurl); - EXPECT_EQ(kTestDataList[i].succeeds_in_whitelist, can_use_default) + EXPECT_EQ(kTestDataList[i].succeeds_in_allowlist, can_use_default) << " Run: " << i << " URL: '" << gurl << "'"; } } TEST(URLSecurityManager, CanDelegate) { std::unique_ptr<HttpAuthFilter> auth_filter( - new HttpAuthFilterWhitelist(kTestAuthWhitelist)); + new HttpAuthFilterAllowlist(kTestAuthAllowlist)); ASSERT_TRUE(auth_filter); // The URL security manager takes ownership of |auth_filter|. std::unique_ptr<URLSecurityManager> url_security_manager( URLSecurityManager::Create()); - url_security_manager->SetDelegateWhitelist(std::move(auth_filter)); + url_security_manager->SetDelegateAllowlist(std::move(auth_filter)); ASSERT_TRUE(url_security_manager.get()); for (size_t i = 0; i < base::size(kTestDataList); ++i) { GURL gurl(kTestDataList[i].url); bool can_delegate = url_security_manager->CanDelegate(gurl); - EXPECT_EQ(kTestDataList[i].succeeds_in_whitelist, can_delegate) + EXPECT_EQ(kTestDataList[i].succeeds_in_allowlist, can_delegate) << " Run: " << i << " URL: '" << gurl << "'"; } } -TEST(URLSecurityManager, CanDelegate_NoWhitelist) { +TEST(URLSecurityManager, CanDelegate_NoAllowlist) { // Nothing can delegate in this case. std::unique_ptr<URLSecurityManager> url_security_manager( URLSecurityManager::Create()); @@ -96,5 +96,4 @@ TEST(URLSecurityManager, CanDelegate_NoWhitelist) { } } - } // namespace net diff --git a/chromium/net/http/url_security_manager_win.cc b/chromium/net/http/url_security_manager_win.cc index 3d6b0100b43..a2cc1946b15 100644 --- a/chromium/net/http/url_security_manager_win.cc +++ b/chromium/net/http/url_security_manager_win.cc @@ -26,7 +26,7 @@ namespace net { -class URLSecurityManagerWin : public URLSecurityManagerWhitelist { +class URLSecurityManagerWin : public URLSecurityManagerAllowlist { public: URLSecurityManagerWin(); ~URLSecurityManagerWin() override; @@ -47,8 +47,8 @@ URLSecurityManagerWin::~URLSecurityManagerWin() {} bool URLSecurityManagerWin::CanUseDefaultCredentials( const GURL& auth_origin) const { - if (HasDefaultWhitelist()) - return URLSecurityManagerWhitelist::CanUseDefaultCredentials(auth_origin); + if (HasDefaultAllowlist()) + return URLSecurityManagerAllowlist::CanUseDefaultCredentials(auth_origin); if (!const_cast<URLSecurityManagerWin*>(this)->EnsureSystemSecurityManager()) return false; |