Version in base suite: 128.14.0esr-1~deb13u1 Version in overlay suite: 140.3.1esr-1~deb13u1 Base version: firefox-esr_140.3.1esr-1~deb13u1 Target version: firefox-esr_140.4.0esr-1~deb13u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/f/firefox-esr/firefox-esr_140.3.1esr-1~deb13u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/f/firefox-esr/firefox-esr_140.4.0esr-1~deb13u1.dsc /srv/release.debian.org/tmp/CmEC825M4L/firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpinstall/recommended.xpi |binary firefox-esr-140.4.0esr/.cargo/config.toml.in | 9 firefox-esr-140.4.0esr/CLOBBER | 2 firefox-esr-140.4.0esr/Cargo.lock | 37 firefox-esr-140.4.0esr/Cargo.toml | 25 firefox-esr-140.4.0esr/accessible/mac/GeckoTextMarker.mm | 7 firefox-esr-140.4.0esr/accessible/tests/browser/mac/browser_attributed_text.js | 32 firefox-esr-140.4.0esr/browser/base/content/browser-addons.js | 7 firefox-esr-140.4.0esr/browser/base/content/browser-context.inc | 2 firefox-esr-140.4.0esr/browser/base/content/nsContextMenu.sys.mjs | 12 firefox-esr-140.4.0esr/browser/components/enterprisepolicies/Policies.sys.mjs | 20 firefox-esr-140.4.0esr/browser/components/enterprisepolicies/schemas/policies-schema.json | 21 firefox-esr-140.4.0esr/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js | 15 firefox-esr-140.4.0esr/browser/components/genai/LinkPreview.sys.mjs | 13 firefox-esr-140.4.0esr/browser/components/genai/content/link-preview-card.mjs | 7 firefox-esr-140.4.0esr/browser/components/genai/tests/browser/browser_link_preview_optin.js | 51 firefox-esr-140.4.0esr/browser/components/places/content/bookmarksSidebar.xhtml | 2 firefox-esr-140.4.0esr/browser/components/urlbar/QuickActionsLoaderDefault.sys.mjs | 6 firefox-esr-140.4.0esr/browser/config/version.txt | 2 firefox-esr-140.4.0esr/browser/config/version_display.txt | 2 firefox-esr-140.4.0esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl | 2 firefox-esr-140.4.0esr/config/milestone.txt | 2 firefox-esr-140.4.0esr/config/system-headers.mozbuild | 1 firefox-esr-140.4.0esr/debian/changelog | 12 firefox-esr-140.4.0esr/debian/dh | 2 firefox-esr-140.4.0esr/debian/patches/debian-hacks/Set-DPI-to-system-settings.patch | 4 firefox-esr-140.4.0esr/debian/patches/fixes/Bug-1991041-Disable-SVE-parts-of-libyuv-when-the-SVE.patch | 98 firefox-esr-140.4.0esr/debian/patches/fixes/Bug-1991244-Add-a-system-header-wrapper-for-sys-plat.patch | 21 firefox-esr-140.4.0esr/debian/patches/series | 2 firefox-esr-140.4.0esr/debian/watch | 2 firefox-esr-140.4.0esr/devtools/client/netmonitor/test/browser_net_copy_as_curl.js | 17 firefox-esr-140.4.0esr/devtools/client/netmonitor/test/browser_net_curl-utils.js | 44 firefox-esr-140.4.0esr/devtools/client/shared/curl.js | 31 firefox-esr-140.4.0esr/devtools/client/shared/test/xpcshell/test_curl.js | 11 firefox-esr-140.4.0esr/docshell/base/nsDSURIContentListener.cpp | 2 firefox-esr-140.4.0esr/docshell/base/nsDSURIContentListener.h | 5 firefox-esr-140.4.0esr/docshell/base/nsDocShellEditorData.cpp | 4 firefox-esr-140.4.0esr/docshell/base/nsDocShellEditorData.h | 9 firefox-esr-140.4.0esr/dom/base/Document.cpp | 28 firefox-esr-140.4.0esr/dom/base/Document.h | 4 firefox-esr-140.4.0esr/dom/base/nsGlobalWindowOuter.cpp | 3 firefox-esr-140.4.0esr/dom/base/nsImageLoadingContent.cpp | 89 firefox-esr-140.4.0esr/dom/base/nsImageLoadingContent.h | 11 firefox-esr-140.4.0esr/dom/base/nsObjectLoadingContent.cpp | 47 firefox-esr-140.4.0esr/dom/canvas/CanvasRenderingContext2D.cpp | 57 firefox-esr-140.4.0esr/dom/canvas/CanvasRenderingContextHelper.h | 5 firefox-esr-140.4.0esr/dom/canvas/DrawTargetWebgl.cpp | 62 firefox-esr-140.4.0esr/dom/canvas/QueueParamTraits.h | 18 firefox-esr-140.4.0esr/dom/canvas/TexUnpackBlob.cpp | 28 firefox-esr-140.4.0esr/dom/canvas/WebGLTexelConversions.h | 5 firefox-esr-140.4.0esr/dom/html/HTMLImageElement.cpp | 58 firefox-esr-140.4.0esr/dom/html/HTMLImageElement.h | 1 firefox-esr-140.4.0esr/dom/html/nsHTMLContentSink.cpp | 40 firefox-esr-140.4.0esr/dom/media/MediaTrackGraph.cpp | 16 firefox-esr-140.4.0esr/dom/media/platforms/agnostic/bytestreams/H265.cpp | 10 firefox-esr-140.4.0esr/dom/notification/NotificationUtils.cpp | 3 firefox-esr-140.4.0esr/dom/webauthn/WebAuthnResult.cpp | 7 firefox-esr-140.4.0esr/dom/webauthn/WebAuthnResult.h | 6 firefox-esr-140.4.0esr/dom/webauthn/WebAuthnService.cpp | 23 firefox-esr-140.4.0esr/dom/webauthn/authrs_bridge/src/lib.rs | 5 firefox-esr-140.4.0esr/dom/webauthn/nsIWebAuthnResult.idl | 2 firefox-esr-140.4.0esr/dom/webauthn/tests/test_webauthn_attestation_conveyance.html | 2 firefox-esr-140.4.0esr/dom/webauthn/tests/test_webauthn_loopback.html | 2 firefox-esr-140.4.0esr/dom/workers/WorkerPrivate.cpp | 10 firefox-esr-140.4.0esr/dom/worklet/WorkletThread.cpp | 6 firefox-esr-140.4.0esr/extensions/auth/nsAuthSSPI.cpp | 84 firefox-esr-140.4.0esr/gfx/2d/DrawTargetSkia.cpp | 21 firefox-esr-140.4.0esr/gfx/2d/HelpersSkia.h | 7 firefox-esr-140.4.0esr/gfx/2d/RecordedEvent.h | 97 firefox-esr-140.4.0esr/gfx/2d/RecordedEventImpl.h | 271 firefox-esr-140.4.0esr/gfx/2d/RecordingTypes.h | 11 firefox-esr-140.4.0esr/gfx/2d/SourceSurfaceSkia.cpp | 10 firefox-esr-140.4.0esr/gfx/layers/client/TextureClient.cpp | 4 firefox-esr-140.4.0esr/gfx/layers/client/TextureClient.h | 2 firefox-esr-140.4.0esr/gfx/layers/ipc/CanvasTranslator.cpp | 89 firefox-esr-140.4.0esr/gfx/layers/ipc/CanvasTranslator.h | 11 firefox-esr-140.4.0esr/gfx/thebes/gfxFont.cpp | 10 firefox-esr-140.4.0esr/gfx/thebes/gfxFontEntry.h | 7 firefox-esr-140.4.0esr/gfx/thebes/gfxPlatform.cpp | 79 firefox-esr-140.4.0esr/gfx/thebes/gfxPlatform.h | 7 firefox-esr-140.4.0esr/intl/locale/EncodingToLang.cpp | 66 firefox-esr-140.4.0esr/intl/locale/EncodingToLang.h | 34 firefox-esr-140.4.0esr/intl/locale/EncodingsByFrequency.inc | 50 firefox-esr-140.4.0esr/intl/locale/encodingsgroups.properties | 40 firefox-esr-140.4.0esr/intl/locale/moz.build | 9 firefox-esr-140.4.0esr/intl/locale/nsLanguageAtomService.cpp | 16 firefox-esr-140.4.0esr/intl/locale/nsLanguageAtomService.h | 1 firefox-esr-140.4.0esr/intl/locale/props2arrays.py | 26 firefox-esr-140.4.0esr/js/public/CallArgs.h | 2 firefox-esr-140.4.0esr/js/src/jit/x86-shared/BaseAssembler-x86-shared.h | 21 firefox-esr-140.4.0esr/js/src/jsapi-tests/moz.build | 1 firefox-esr-140.4.0esr/js/src/jsapi-tests/testAssemblerCodeGen.cpp | 140 firefox-esr-140.4.0esr/js/src/vm/Iteration.cpp | 7 firefox-esr-140.4.0esr/js/src/wasm/WasmJS.cpp | 119 firefox-esr-140.4.0esr/layout/build/nsLayoutStatics.cpp | 5 firefox-esr-140.4.0esr/layout/generic/nsIFrame.cpp | 7 firefox-esr-140.4.0esr/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch | 27 firefox-esr-140.4.0esr/media/libyuv/libyuv/libyuv.gyp | 16 firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/crashhelper/ICrashHelper.aidl | 2 firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/java/org/mozilla/gecko/crashhelper/CrashHelper.java | 35 firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java | 3 firefox-esr-140.4.0esr/modules/libpref/init/StaticPrefList.yaml | 45 firefox-esr-140.4.0esr/netwerk/dns/effective_tld_names.dat | 50 firefox-esr-140.4.0esr/netwerk/protocol/http/Http2Session.cpp | 16 firefox-esr-140.4.0esr/netwerk/protocol/http/nsHttpConnectionMgr.cpp | 3 firefox-esr-140.4.0esr/security/ct/CTKnownLogs.h | 172 firefox-esr-140.4.0esr/security/manager/ssl/StaticHPKPins.h | 2 firefox-esr-140.4.0esr/security/manager/ssl/nsSTSPreloadList.inc | 5021 ++----- firefox-esr-140.4.0esr/security/manager/ssl/osclientcerts/src/backend_macos.rs | 16 firefox-esr-140.4.0esr/security/manager/tools/log_list.json | 325 firefox-esr-140.4.0esr/security/nss/doc/rst/releases/index.rst | 34 firefox-esr-140.4.0esr/security/nss/doc/rst/releases/nss_3_112_2.rst | 72 firefox-esr-140.4.0esr/security/nss/gtests/der_gtest/der_gtest.gyp | 1 firefox-esr-140.4.0esr/security/nss/gtests/der_gtest/secasn1decode_unittest.cc | 86 firefox-esr-140.4.0esr/security/nss/lib/nss/nss.h | 4 firefox-esr-140.4.0esr/security/nss/lib/pkcs12/p12d.c | 1 firefox-esr-140.4.0esr/security/nss/lib/softoken/softkver.h | 4 firefox-esr-140.4.0esr/security/nss/lib/util/nssutil.h | 4 firefox-esr-140.4.0esr/security/nss/lib/util/secasn1d.c | 21 firefox-esr-140.4.0esr/security/nss/moz.yaml | 4 firefox-esr-140.4.0esr/security/sandbox/linux/SandboxFilter.cpp | 24 firefox-esr-140.4.0esr/services/settings/dumps/blocklists/addons-bloomfilters.json | 3608 +++++ firefox-esr-140.4.0esr/services/settings/dumps/main/devtools-compatibility-browsers.json | 422 firefox-esr-140.4.0esr/services/settings/dumps/main/translations-models.json | 1978 +++ firefox-esr-140.4.0esr/services/settings/dumps/security-state/intermediates.json | 1027 - firefox-esr-140.4.0esr/services/settings/dumps/security-state/onecrl.json | 332 firefox-esr-140.4.0esr/sourcestamp.txt | 4 firefox-esr-140.4.0esr/supply-chain/audits.toml | 11 firefox-esr-140.4.0esr/supply-chain/config.toml | 2 firefox-esr-140.4.0esr/supply-chain/imports.lock | 12 firefox-esr-140.4.0esr/taskcluster/kinds/cron-bouncer-check/kind.yml | 2 firefox-esr-140.4.0esr/taskcluster/kinds/release-bouncer-aliases/kind.yml | 1 firefox-esr-140.4.0esr/taskcluster/kinds/release-update-verify-config-next/kind.yml | 107 firefox-esr-140.4.0esr/taskcluster/kinds/release-update-verify-next/kind.yml | 83 firefox-esr-140.4.0esr/testing/profiles/web-platform/user.js | 2 firefox-esr-140.4.0esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html.ini | 3 firefox-esr-140.4.0esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html.ini | 4 firefox-esr-140.4.0esr/testing/web-platform/meta/notifications/cross-origin-nested.tentative.https.sub.html.ini | 4 firefox-esr-140.4.0esr/testing/web-platform/tests/css/css-overflow/scrollable-overflow-transform-011.html | 45 firefox-esr-140.4.0esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html | 189 firefox-esr-140.4.0esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html | 377 firefox-esr-140.4.0esr/testing/web-platform/tests/notifications/cross-origin-nested.tentative.https.sub.html | 10 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/.cargo-checksum.json | 2 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/CHANGELOG.md | 14 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/Cargo.toml | 34 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/LICENSE-APACHE | 352 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/LICENSE-MIT | 46 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/README.md | 114 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/lib.rs | 42 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/nightly.rs | 10 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/global.rs | 374 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/mod.rs | 832 - firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/system.rs | 344 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/boxed.rs | 4427 +++--- firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/macros.rs | 170 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/mod.rs | 167 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/raw_vec.rs | 1284 - firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/slice.rs | 342 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/unique.rs | 106 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/drain.rs | 484 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/into_iter.rs | 389 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/mod.rs | 6520 ++++------ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/partial_eq.rs | 86 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/set_len_on_drop.rs | 62 firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/splice.rs | 270 firefox-esr-140.4.0esr/third_party/rust/webext-storage/.cargo-checksum.json | 2 firefox-esr-140.4.0esr/third_party/rust/webext-storage/src/lib.rs | 2 firefox-esr-140.4.0esr/toolkit/components/extensions/Extension.sys.mjs | 2 firefox-esr-140.4.0esr/toolkit/components/extensions/test/xpcshell/native_messaging.toml | 2 firefox-esr-140.4.0esr/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging_concurrent.js | 107 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper/crashhelper.cpp | 27 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper/crashhelper_android.cpp | 33 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_client/src/platform/unix.rs | 10 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_client/src/platform/windows.rs | 8 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/ipc_connector/unix.rs | 44 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/ipc_listener/unix.rs | 77 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/lib.rs | 5 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform.rs | 4 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform/linux.rs | 23 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform/macos.rs | 23 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/ipc_server.rs | 1 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/ipc_server/unix.rs | 56 firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/lib.rs | 20 firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_shared_win.js | 89 firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_win.sys.mjs | 25 firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_win.worker.js | 313 firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_worker_common.js | 8 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/data_test_child.py | 159 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/data_test_script.py | 19 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/head.js | 29 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess.js | 75 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_child.js | 203 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_polling.js | 63 firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/xpcshell.toml | 5 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs | 9 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs | 5 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/browser/browser_permission_prompt.js | 9 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/head_addons.js | 2 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/test_data_collection_not_in_db.js | 144 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml | 2 firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpinstall/browser_doorhanger_installs.js | 10 firefox-esr-140.4.0esr/toolkit/mozapps/update/UpdateService.sys.mjs | 11 firefox-esr-140.4.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in | 4 firefox-esr-140.4.0esr/xpcom/threads/Queue.h | 8 firefox-esr-140.4.0esr/xpcom/threads/TaskController.cpp | 16 205 files changed, 20775 insertions(+), 13904 deletions(-) diff -Nru firefox-esr-140.3.1esr/.cargo/config.toml.in firefox-esr-140.4.0esr/.cargo/config.toml.in --- firefox-esr-140.3.1esr/.cargo/config.toml.in 2025-09-22 21:16:06.000000000 +0000 +++ firefox-esr-140.4.0esr/.cargo/config.toml.in 2025-10-09 15:35:27.000000000 +0000 @@ -45,6 +45,11 @@ rev = "88862f1fa3fd0f0c1010e9fc999dcfe47b5ae8fc" replace-with = "vendored-sources" +[source."git+https://github.com/glandium/allocator-api2?rev=ad5f3d56a5a4519eff52af4ff85293431466ef5c"] +git = "https://github.com/glandium/allocator-api2" +rev = "ad5f3d56a5a4519eff52af4ff85293431466ef5c" +replace-with = "vendored-sources" + [source."git+https://github.com/glandium/rust-objc?rev=4de89f5aa9851ceca4d40e7ac1e2759410c04324"] git = "https://github.com/glandium/rust-objc" rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" @@ -70,9 +75,9 @@ rev = "eff105f6ad7ec9b79816cfc1985a28e5340ad14b" replace-with = "vendored-sources" -[source."git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954"] +[source."git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6"] git = "https://github.com/mozilla/application-services" -rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" +rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" replace-with = "vendored-sources" [source."git+https://github.com/mozilla/audioipc?rev=e6f44a2bd1e57d11dfc737632a9e849077632330"] diff -Nru firefox-esr-140.3.1esr/CLOBBER firefox-esr-140.4.0esr/CLOBBER --- firefox-esr-140.3.1esr/CLOBBER 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/CLOBBER 2025-10-09 15:35:28.000000000 +0000 @@ -22,4 +22,4 @@ # changes to stick? As of bug 928195, this shouldn't be necessary! Please # don't change CLOBBER for WebIDL changes any more. -Merge day clobber 2025-08-18 \ No newline at end of file +Merge day clobber 2025-09-15 \ No newline at end of file diff -Nru firefox-esr-140.3.1esr/Cargo.lock firefox-esr-140.4.0esr/Cargo.lock --- firefox-esr-140.3.1esr/Cargo.lock 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/Cargo.lock 2025-10-09 15:35:28.000000000 +0000 @@ -27,7 +27,8 @@ [[package]] name = "allocator-api2" -version = "0.2.999" +version = "0.2.21" +source = "git+https://github.com/glandium/allocator-api2?rev=ad5f3d56a5a4519eff52af4ff85293431466ef5c#ad5f3d56a5a4519eff52af4ff85293431466ef5c" dependencies = [ "serde", ] @@ -973,7 +974,7 @@ [[package]] name = "context_id" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "chrono", "error-support", @@ -1912,7 +1913,7 @@ [[package]] name = "error-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "env_logger", "error-support-macros", @@ -1925,7 +1926,7 @@ [[package]] name = "error-support-macros" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "proc-macro2", "quote", @@ -2044,7 +2045,7 @@ [[package]] name = "firefox-versioning" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "serde_json", "thiserror 1.999.999", @@ -3385,7 +3386,7 @@ [[package]] name = "interrupt-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "lazy_static", "parking_lot", @@ -5115,7 +5116,7 @@ [[package]] name = "payload-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "serde", "serde_derive", @@ -5622,7 +5623,7 @@ [[package]] name = "relevancy" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "anyhow", "base64 0.21.999", @@ -5646,7 +5647,7 @@ [[package]] name = "remote_settings" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "anyhow", "camino", @@ -5947,7 +5948,7 @@ [[package]] name = "search" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "error-support", "firefox-versioning", @@ -6239,7 +6240,7 @@ [[package]] name = "sql-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "error-support", "interrupt-support", @@ -6438,7 +6439,7 @@ [[package]] name = "suggest" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "anyhow", "chrono", @@ -6491,7 +6492,7 @@ [[package]] name = "sync-guid" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "base64 0.21.999", "rand", @@ -6502,7 +6503,7 @@ [[package]] name = "sync15" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "anyhow", "error-support", @@ -6541,7 +6542,7 @@ [[package]] name = "tabs" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "anyhow", "error-support", @@ -6899,7 +6900,7 @@ [[package]] name = "types" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "rusqlite 0.33.0", "serde", @@ -7311,7 +7312,7 @@ [[package]] name = "viaduct" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "error-support", "ffi-support", @@ -7480,7 +7481,7 @@ [[package]] name = "webext-storage" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954" +source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6" dependencies = [ "anyhow", "error-support", diff -Nru firefox-esr-140.3.1esr/Cargo.toml firefox-esr-140.4.0esr/Cargo.toml --- firefox-esr-140.3.1esr/Cargo.toml 2025-09-22 21:16:06.000000000 +0000 +++ firefox-esr-140.4.0esr/Cargo.toml 2025-10-09 15:35:27.000000000 +0000 @@ -264,16 +264,17 @@ # objc 0.2.7 + fa7ca43b862861dd1cd000d7ad01e6e0266cda13 objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" } -# application-services overrides to make updating them all simpler. -context_id = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -relevancy = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -search = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -sql-support = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -suggest = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -sync15 = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -tabs = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -viaduct = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } -webext-storage = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" } +# allocator-api2 + f95e3419ce41883904fcb2279b52aa35b5f04d76 + fdd92751afa7ce34408b677004b429d597e72c90 +allocator-api2 = { git = "https://github.com/glandium/allocator-api2", rev = "ad5f3d56a5a4519eff52af4ff85293431466ef5c" } -allocator-api2 = { path = "third_party/rust/allocator-api2" } +# application-services overrides to make updating them all simpler. +context_id = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +relevancy = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +search = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +sql-support = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +suggest = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +sync15 = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +tabs = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +viaduct = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } +webext-storage = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" } diff -Nru firefox-esr-140.3.1esr/accessible/mac/GeckoTextMarker.mm firefox-esr-140.4.0esr/accessible/mac/GeckoTextMarker.mm --- firefox-esr-140.3.1esr/accessible/mac/GeckoTextMarker.mm 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/accessible/mac/GeckoTextMarker.mm 2025-10-09 15:35:27.000000000 +0000 @@ -429,6 +429,13 @@ static RefPtr GetTextAttributes(TextLeafPoint aPoint) { RefPtr attrs = aPoint.GetTextAttributes(); + if (!attrs) { + // If we can't fetch text attributes for the given point, return null. + // We avoid creating a new AccAttributes here because our AttributedText() + // code below relies on this null return value to indicate we're dealing + // with a non-text control. + return nullptr; + } // Mac expects some object properties to be exposed as text attributes. We // add these here rather than in utils::StringAttributesFromAccAttributes so // we can use AccAttributes::Equal to determine whether we need to start a new diff -Nru firefox-esr-140.3.1esr/accessible/tests/browser/mac/browser_attributed_text.js firefox-esr-140.4.0esr/accessible/tests/browser/mac/browser_attributed_text.js --- firefox-esr-140.3.1esr/accessible/tests/browser/mac/browser_attributed_text.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/accessible/tests/browser/mac/browser_attributed_text.js 2025-10-09 15:35:27.000000000 +0000 @@ -276,3 +276,35 @@ ok(!attributedText[2].AXHighlight); } ); + +// Test the element, in conjunction with content that will +// prevent the creation of a text attributes object. +addAccessibleTask( + `ab`, + async function testMarkNoAttributes(browser, accDoc) { + const macDoc = accDoc.nativeInterface.QueryInterface( + Ci.nsIAccessibleMacInterface + ); + const range = macDoc.getParameterizedAttributeValue( + "AXTextMarkerRangeForUnorderedTextMarkers", + [ + macDoc.getAttributeValue("AXStartTextMarker"), + macDoc.getAttributeValue("AXEndTextMarker"), + ] + ); + const attributedText = macDoc.getParameterizedAttributeValue( + "AXAttributedStringForTextMarkerRange", + range + ); + ok(attributedText, "Document has attributed text"); + is(attributedText.length, 3, "3 pieces of attributed text exist"); + + ok(attributedText[0].AXHighlight, "0th pos text has highlight"); + is(attributedText[0].string, "a", "0th pos text is string `a`"); + + ok(!attributedText[1].AXHighlight, "1st pos text has no highlight"); + + ok(attributedText[2].AXHighlight, "2nd pos text has highlight"); + is(attributedText[2].string, "b", "2nd pos text is string `b`"); + } +); diff -Nru firefox-esr-140.3.1esr/browser/base/content/browser-addons.js firefox-esr-140.4.0esr/browser/base/content/browser-addons.js --- firefox-esr-140.3.1esr/browser/base/content/browser-addons.js 2025-09-22 21:16:06.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/base/content/browser-addons.js 2025-10-09 15:35:27.000000000 +0000 @@ -852,6 +852,13 @@ BrowserAddonUI.openAddonsMgr( "addons://detail/" + encodeURIComponent(addonId) ); + // The settings link element has its href set to "#" to be + // accessible with keyboard navigation, and so we call + // preventDefault to avoid the "#" href to be implicitly + // added to the browser chrome window url (See Bug 1983869 + // for more details of the regression that the implicit + // change to the chrome window urls triggers). + event.preventDefault(); } break; } diff -Nru firefox-esr-140.3.1esr/browser/base/content/browser-context.inc firefox-esr-140.4.0esr/browser/base/content/browser-context.inc --- firefox-esr-140.3.1esr/browser/base/content/browser-context.inc 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/base/content/browser-context.inc 2025-10-09 15:35:27.000000000 +0000 @@ -389,7 +389,7 @@ - + diff -Nru firefox-esr-140.3.1esr/browser/base/content/nsContextMenu.sys.mjs firefox-esr-140.4.0esr/browser/base/content/nsContextMenu.sys.mjs --- firefox-esr-140.3.1esr/browser/base/content/nsContextMenu.sys.mjs 2025-09-22 21:16:06.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/base/content/nsContextMenu.sys.mjs 2025-10-09 15:35:27.000000000 +0000 @@ -67,6 +67,13 @@ false ); +XPCOMUtils.defineLazyPreferenceGetter( + lazy, + "gPrintEnabled", + "print.enabled", + false +); + XPCOMUtils.defineLazyServiceGetter( lazy, "QueryStringStripper", @@ -838,7 +845,8 @@ "context-print-selection", !this.inAboutDevtoolsToolbox && this.isContentSelected && - this.selectionInfo.isDocumentLevelSelection + this.selectionInfo.isDocumentLevelSelection && + lazy.gPrintEnabled ); var shouldShow = !( @@ -946,6 +954,8 @@ this.showItem("context-openframeintab", !this.inSrcdocFrame); this.showItem("context-openframe", !this.inSrcdocFrame); this.showItem("context-bookmarkframe", !this.inSrcdocFrame); + this.showItem("context-printframe", lazy.gPrintEnabled); + this.showItem("print-frame-sep", lazy.gPrintEnabled); // Hide menu entries for images, show otherwise if (this.inFrame) { diff -Nru firefox-esr-140.3.1esr/browser/components/enterprisepolicies/Policies.sys.mjs firefox-esr-140.4.0esr/browser/components/enterprisepolicies/Policies.sys.mjs --- firefox-esr-140.3.1esr/browser/components/enterprisepolicies/Policies.sys.mjs 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/enterprisepolicies/Policies.sys.mjs 2025-10-09 15:35:27.000000000 +0000 @@ -1576,6 +1576,25 @@ }, }, + GenerativeAI: { + onBeforeAddons(manager, param) { + const defaultValue = "Enabled" in param ? param.Enabled : undefined; + + const features = [ + ["Chatbot", "browser.ml.chat.enabled"], + ["LinkPreviews", "browser.ml.linkPreview.optin"], + ["TabGroups", "browser.tabs.groups.smart.userEnabled"], + ]; + + for (const [key, pref] of features) { + const value = key in param ? param[key] : defaultValue; + if (value !== undefined) { + PoliciesUtils.setDefaultPref(pref, value, param.Locked); + } + } + }, + }, + GoToIntranetSiteForSingleWordEntryInAddressBar: { onBeforeAddons(manager, param) { setAndLockPref("browser.fixup.dns_first_for_single_words", param); @@ -2080,6 +2099,7 @@ "security.tls.hello_downgrade_check", "security.tls.version.enable-deprecated", "security.warn_submit_secure_to_insecure", + "security.webauthn.always_allow_direct_attestation", ]; const blockedPrefs = [ "app.update.channel", diff -Nru firefox-esr-140.3.1esr/browser/components/enterprisepolicies/schemas/policies-schema.json firefox-esr-140.4.0esr/browser/components/enterprisepolicies/schemas/policies-schema.json --- firefox-esr-140.3.1esr/browser/components/enterprisepolicies/schemas/policies-schema.json 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/enterprisepolicies/schemas/policies-schema.json 2025-10-09 15:35:28.000000000 +0000 @@ -850,6 +850,27 @@ } }, + "GenerativeAI": { + "type": "object", + "properties": { + "Chatbot": { + "type": "boolean" + }, + "LinkPreviews": { + "type": "boolean" + }, + "TabGroups": { + "type": "boolean" + }, + "Enabled": { + "type": "boolean" + }, + "Locked": { + "type": "boolean" + } + } + }, + "GoToIntranetSiteForSingleWordEntryInAddressBar": { "type": "boolean" }, diff -Nru firefox-esr-140.3.1esr/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js firefox-esr-140.4.0esr/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js --- firefox-esr-140.3.1esr/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js 2025-10-09 15:35:27.000000000 +0000 @@ -1184,6 +1184,21 @@ // browser/components/enterprisepolicies/tests/browser/browser_policy_usermessaging.js }, }, + + // Bug 1981587 + { + policies: { + Preferences: { + "security.webauthn.always_allow_direct_attestation": { + Value: true, + Status: "locked", + }, + }, + }, + lockedPrefs: { + "security.webauthn.always_allow_direct_attestation": true, + }, + }, ]; add_task(async function test_policy_simple_prefs() { diff -Nru firefox-esr-140.3.1esr/browser/components/genai/LinkPreview.sys.mjs firefox-esr-140.4.0esr/browser/components/genai/LinkPreview.sys.mjs --- firefox-esr-140.3.1esr/browser/components/genai/LinkPreview.sys.mjs 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/genai/LinkPreview.sys.mjs 2025-10-09 15:35:28.000000000 +0000 @@ -166,7 +166,7 @@ }, get canShowKeyPoints() { - return this._isRegionSupported(); + return this._isRegionSupported() && !this._isDisabledByPolicy(); }, get canShowLegacy() { @@ -752,6 +752,17 @@ }, /** + * Checks if key points generation is disabled by policy. + * + * @returns {boolean} True if disabled by policy, false otherwise. + */ + _isDisabledByPolicy() { + return ( + !lazy.optin && Services.prefs.prefIsLocked("browser.ml.linkPreview.optin") + ); + }, + + /** * Creates an Open Graph (OG) card using meta information from the page. * * @param {Document} doc - The document object where the OG card will be diff -Nru firefox-esr-140.3.1esr/browser/components/genai/content/link-preview-card.mjs firefox-esr-140.4.0esr/browser/components/genai/content/link-preview-card.mjs --- firefox-esr-140.3.1esr/browser/components/genai/content/link-preview-card.mjs 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/genai/content/link-preview-card.mjs 2025-10-09 15:35:27.000000000 +0000 @@ -419,6 +419,13 @@ return ""; } + if ( + !this.optin && + Services.prefs.prefIsLocked("browser.ml.linkPreview.optin") + ) { + return ""; + } + // Determine if there's any generation error state const isGenerationError = this.isMissingDataErrorState || this.generationError; diff -Nru firefox-esr-140.3.1esr/browser/components/genai/tests/browser/browser_link_preview_optin.js firefox-esr-140.4.0esr/browser/components/genai/tests/browser/browser_link_preview_optin.js --- firefox-esr-140.3.1esr/browser/components/genai/tests/browser/browser_link_preview_optin.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/genai/tests/browser/browser_link_preview_optin.js 2025-10-09 15:35:27.000000000 +0000 @@ -450,3 +450,54 @@ panel.remove(); generateStub.restore(); }); + +/** + * Test when the preference is false and locked, the opt-in prompt will not + * be shown and no attempt will be made to generate key points. + */ +add_task(async function test_locked_preference() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.ml.linkPreview.enabled", true], + ["browser.ml.linkPreview.optin", false], + ["browser.ml.linkPreview.collapsed", false], + ], + }); + + Services.prefs.lockPref("browser.ml.linkPreview.optin"); + + const generateStub = sinon.stub(LinkPreviewModel, "generateTextAI"); + + LinkPreview.keyboardComboActive = true; + XULBrowserWindow.setOverLink( + "https://example.com/browser/browser/components/genai/tests/browser/data/readableEn.html", + {} + ); + + let panel = await TestUtils.waitForCondition(() => + document.getElementById("link-preview-panel") + ); + await BrowserTestUtils.waitForEvent(panel, "popupshown"); + const card = panel.querySelector("link-preview-card"); + ok(card, "card created for link preview"); + + ok( + !LinkPreview.canShowKeyPoints, + "LinkPreview should indicate key points cannot be shown" + ); + + // Verify that the opt-in element is NOT present + const modelOptinElement = card.shadowRoot.querySelector("model-optin"); + ok(!modelOptinElement, "model-optin element should NOT be present"); + + is( + generateStub.callCount, + 0, + "generateTextAI should not be called in a disallowed region" + ); + + panel.remove(); + generateStub.restore(); + + Services.prefs.unlockPref("browser.ml.linkPreview.optin"); +}); diff -Nru firefox-esr-140.3.1esr/browser/components/places/content/bookmarksSidebar.xhtml firefox-esr-140.4.0esr/browser/components/places/content/bookmarksSidebar.xhtml --- firefox-esr-140.3.1esr/browser/components/places/content/bookmarksSidebar.xhtml 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/components/places/content/bookmarksSidebar.xhtml 2025-10-09 15:35:28.000000000 +0000 @@ -49,7 +49,7 @@ #include placesContextMenu.inc.xhtml #include bookmarksHistoryTooltip.inc.xhtml -

+ { + return Services.prefs.getBoolPref("print.enabled"); + }, onPick: () => { lazy.BrowserWindowTracker.getTopWindow() .document.getElementById("cmd_print") @@ -193,6 +196,9 @@ l10nCommands: ["quickactions-cmd-savepdf2"], label: "quickactions-savepdf", icon: "chrome://global/skin/icons/print.svg", + isVisible: () => { + return Services.prefs.getBoolPref("print.enabled"); + }, onPick: () => { // This writes over the users last used printer which we // should not do. Refactor to launch the print preview with diff -Nru firefox-esr-140.3.1esr/browser/config/version.txt firefox-esr-140.4.0esr/browser/config/version.txt --- firefox-esr-140.3.1esr/browser/config/version.txt 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/config/version.txt 2025-10-09 15:35:28.000000000 +0000 @@ -1 +1 @@ -140.3.1 +140.4.0 diff -Nru firefox-esr-140.3.1esr/browser/config/version_display.txt firefox-esr-140.4.0esr/browser/config/version_display.txt --- firefox-esr-140.3.1esr/browser/config/version_display.txt 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/config/version_display.txt 2025-10-09 15:35:28.000000000 +0000 @@ -1 +1 @@ -140.3.1esr +140.4.0esr diff -Nru firefox-esr-140.3.1esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl firefox-esr-140.4.0esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl --- firefox-esr-140.3.1esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl 2025-10-09 15:35:27.000000000 +0000 @@ -135,6 +135,8 @@ policy-FirefoxSuggest = Configure { -firefox-suggest-brand-name }. +policy-GenerativeAI = Configure generative AI features. + policy-GoToIntranetSiteForSingleWordEntryInAddressBar = Force direct intranet site navigation instead of searching when typing single word entries in the address bar. policy-Handlers = Configure default application handlers. diff -Nru firefox-esr-140.3.1esr/config/milestone.txt firefox-esr-140.4.0esr/config/milestone.txt --- firefox-esr-140.3.1esr/config/milestone.txt 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/config/milestone.txt 2025-10-09 15:35:28.000000000 +0000 @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -140.3.1 +140.4.0 diff -Nru firefox-esr-140.3.1esr/config/system-headers.mozbuild firefox-esr-140.4.0esr/config/system-headers.mozbuild --- firefox-esr-140.3.1esr/config/system-headers.mozbuild 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/config/system-headers.mozbuild 2025-10-09 15:35:28.000000000 +0000 @@ -845,6 +845,7 @@ "sys/msg.h", "sys/param.h", "sys/pda.h", + "sys/platform/ppc.h", "sys/poll.h", "sys/ppc.h", "sys/prctl.h", diff -Nru firefox-esr-140.3.1esr/debian/changelog firefox-esr-140.4.0esr/debian/changelog --- firefox-esr-140.3.1esr/debian/changelog 2025-09-27 00:57:32.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/changelog 2025-10-14 23:55:29.000000000 +0000 @@ -1,3 +1,15 @@ +firefox-esr (140.4.0esr-1~deb13u1) trixie-security; urgency=medium + + * New upstream release. + * Fixes for mfsa2025-83, also known as: + CVE-2025-11708, CVE-2025-11709, CVE-2025-11710, CVE-2025-11711, + CVE-2025-11712, CVE-2025-11714, CVE-2025-11715. + + * debian/watch: Refreshed. Somehow it was not refreshed for ESR. + * debian/dh: Properly handle multiple DEB_BUILD_OPTIONS. + + -- Mike Hommey Wed, 15 Oct 2025 08:55:29 +0900 + firefox-esr (140.3.1esr-1~deb13u1) trixie-security; urgency=medium * New upstream release. diff -Nru firefox-esr-140.3.1esr/debian/dh firefox-esr-140.4.0esr/debian/dh --- firefox-esr-140.3.1esr/debian/dh 2025-09-16 23:32:53.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/dh 2025-10-14 23:55:29.000000000 +0000 @@ -9,7 +9,7 @@ ;; *) parallel= - for opt in "$DEB_BUILD_OPTIONS"; do + for opt in $DEB_BUILD_OPTIONS; do case "$opt" in parallel=*) parallel=${opt#parallel=} diff -Nru firefox-esr-140.3.1esr/debian/patches/debian-hacks/Set-DPI-to-system-settings.patch firefox-esr-140.4.0esr/debian/patches/debian-hacks/Set-DPI-to-system-settings.patch --- firefox-esr-140.3.1esr/debian/patches/debian-hacks/Set-DPI-to-system-settings.patch 2025-09-16 23:33:25.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/patches/debian-hacks/Set-DPI-to-system-settings.patch 2025-10-14 23:55:29.000000000 +0000 @@ -7,10 +7,10 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml -index 04562fb..a48cc8f 100644 +index 03d1b39..98b4b6c 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml -@@ -9598,7 +9598,7 @@ +@@ -9630,7 +9630,7 @@ # interpretation of physical units such as "pt". - name: layout.css.dpi type: int32_t diff -Nru firefox-esr-140.3.1esr/debian/patches/fixes/Bug-1991041-Disable-SVE-parts-of-libyuv-when-the-SVE.patch firefox-esr-140.4.0esr/debian/patches/fixes/Bug-1991041-Disable-SVE-parts-of-libyuv-when-the-SVE.patch --- firefox-esr-140.3.1esr/debian/patches/fixes/Bug-1991041-Disable-SVE-parts-of-libyuv-when-the-SVE.patch 2025-09-27 00:57:32.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/patches/fixes/Bug-1991041-Disable-SVE-parts-of-libyuv-when-the-SVE.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -From: Mike Hommey -Date: Fri, 26 Sep 2025 17:42:19 +0900 -Subject: Bug 1991041 - Disable SVE parts of libyuv when the SVE flags are not - supported. r?gfx-reviewers - -While here, remove the LIBYUV_SVE define which is unused, and remove -the duplicate block adding it and the dependency on libyuv_sve. ---- - .../03_add_neon64_and_sve_gyp_targets.patch | 27 ++++++++++--------- - media/libyuv/libyuv/libyuv.gyp | 16 ++++------- - 2 files changed, 19 insertions(+), 24 deletions(-) - -diff --git a/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch b/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch -index ba7abf29..32ae05e 100644 ---- a/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch -+++ b/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch -@@ -13,7 +13,7 @@ index 45df0d2e26192..e2aa2d7c69404 100644 - ], - 'conditions': [ - # Disable LTO in libyuv_neon target due to gcc 4.9 compiler bug. --@@ -83,16 +81,6 @@ -+@@ -108,16 +106,6 @@ - '-ffat-lto-objects', - ], - }], -@@ -30,7 +30,19 @@ index 45df0d2e26192..e2aa2d7c69404 100644 - ], - }], - ['build_msa != 0', { --@@ -162,12 +150,105 @@ -+@@ -157,6 +145,11 @@ -+ }], -+ ], -+ }], -++ ['target_arch == "arm64" and moz_have_arm_sve2 != 1 and build_with_mozilla == 1', { -++ 'defines' :[ -++ 'LIBYUV_DISABLE_SVE', -++ ] -++ }], -+ ], #conditions -+ 'defines': [ -+ # Enable the following 3 macros to turn off assembly for specified CPU. -+@@ -186,12 +179,94 @@ - '-Wl,--dynamic-linker,/system/bin/linker', - ], - }], -@@ -43,17 +55,6 @@ index 45df0d2e26192..e2aa2d7c69404 100644 - + 'dependencies': [ - + ':libyuv_sve', - + ], --+ 'defines' :[ --+ 'LIBYUV_SVE', --+ ] --+ }], --+ ['target_arch == "arm64" and moz_have_arm_sve2 == 1 and build_with_mozilla == 1', { --+ 'dependencies': [ --+ ':libyuv_sve', --+ ], --+ 'defines' :[ --+ 'LIBYUV_SVE', --+ ] - + }], - ], #conditions - }, -diff --git a/media/libyuv/libyuv/libyuv.gyp b/media/libyuv/libyuv/libyuv.gyp -index 9d3621b6..4f6eae4 100644 ---- a/media/libyuv/libyuv/libyuv.gyp -+++ b/media/libyuv/libyuv/libyuv.gyp -@@ -130,6 +130,11 @@ - }], - ], - }], -+ ['target_arch == "arm64" and moz_have_arm_sve2 != 1 and build_with_mozilla == 1', { -+ 'defines' :[ -+ 'LIBYUV_DISABLE_SVE', -+ ] -+ }], - ], #conditions - 'defines': [ - 'LIBYUV_DISABLE_SME', -@@ -170,17 +175,6 @@ - 'dependencies': [ - ':libyuv_sve', - ], -- 'defines' :[ -- 'LIBYUV_SVE', -- ] -- }], -- ['target_arch == "arm64" and moz_have_arm_sve2 == 1 and build_with_mozilla == 1', { -- 'dependencies': [ -- ':libyuv_sve', -- ], -- 'defines' :[ -- 'LIBYUV_SVE', -- ] - }], - ], #conditions - }, diff -Nru firefox-esr-140.3.1esr/debian/patches/fixes/Bug-1991244-Add-a-system-header-wrapper-for-sys-plat.patch firefox-esr-140.4.0esr/debian/patches/fixes/Bug-1991244-Add-a-system-header-wrapper-for-sys-plat.patch --- firefox-esr-140.3.1esr/debian/patches/fixes/Bug-1991244-Add-a-system-header-wrapper-for-sys-plat.patch 2025-09-27 00:57:32.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/patches/fixes/Bug-1991244-Add-a-system-header-wrapper-for-sys-plat.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -From: Mike Hommey -Date: Sat, 27 Sep 2025 09:37:00 +0900 -Subject: Bug 1991244 - Add a system header wrapper for sys/platform/ppc.h. - r?build - ---- - config/system-headers.mozbuild | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild -index 028002a..3aee5500 100644 ---- a/config/system-headers.mozbuild -+++ b/config/system-headers.mozbuild -@@ -845,6 +845,7 @@ system_headers = [ - "sys/msg.h", - "sys/param.h", - "sys/pda.h", -+ "sys/platform/ppc.h", - "sys/poll.h", - "sys/ppc.h", - "sys/prctl.h", diff -Nru firefox-esr-140.3.1esr/debian/patches/series firefox-esr-140.4.0esr/debian/patches/series --- firefox-esr-140.3.1esr/debian/patches/series 2025-09-27 00:57:32.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/patches/series 2025-10-14 23:55:29.000000000 +0000 @@ -1,5 +1,3 @@ -fixes/Bug-1991041-Disable-SVE-parts-of-libyuv-when-the-SVE.patch -fixes/Bug-1991244-Add-a-system-header-wrapper-for-sys-plat.patch debian-hacks/Avoid-wrong-sessionstore-data-to-keep-windows-out-of.patch debian-hacks/Add-another-preferences-directory-for-applications-p.patch debian-hacks/Add-a-2-minutes-timeout-on-xpcshell-tests.patch diff -Nru firefox-esr-140.3.1esr/debian/watch firefox-esr-140.4.0esr/debian/watch --- firefox-esr-140.3.1esr/debian/watch 2025-09-16 23:32:53.000000000 +0000 +++ firefox-esr-140.4.0esr/debian/watch 2025-10-14 23:55:29.000000000 +0000 @@ -1,3 +1,3 @@ version=3 opts=dversionmangle=s/^(\d\.[\d\.]+)\+dfsg$/$1/ \ -https://archive.mozilla.org/pub/firefox/releases/([\d\.]+)/source/firefox-([\d\.]+)[\.-]source\.tar\.xz debian python3 debian/repack.py +https://archive.mozilla.org/pub/firefox/releases/([\d\.]+esr)/source/firefox-([\d\.]+esr)[\.-]source\.tar\.xz debian python3 debian/repack.py diff -Nru firefox-esr-140.3.1esr/devtools/client/netmonitor/test/browser_net_copy_as_curl.js firefox-esr-140.4.0esr/devtools/client/netmonitor/test/browser_net_copy_as_curl.js --- firefox-esr-140.3.1esr/devtools/client/netmonitor/test/browser_net_copy_as_curl.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/devtools/client/netmonitor/test/browser_net_copy_as_curl.js 2025-10-09 15:35:28.000000000 +0000 @@ -26,17 +26,17 @@ ? [ { menuItemId: "request-list-context-copy-as-curl-win", - data: buildTestData(QUOTE_WIN), + data: buildTestData(QUOTE_WIN, true), }, { menuItemId: "request-list-context-copy-as-curl-posix", - data: buildTestData(QUOTE_POSIX), + data: buildTestData(QUOTE_POSIX, false), }, ] : [ { menuItemId: "request-list-context-copy-as-curl", - data: buildTestData(QUOTE_POSIX), + data: buildTestData(QUOTE_POSIX, false), }, ]; @@ -45,7 +45,7 @@ await teardown(monitor); }); -function buildTestData(QUOTE) { +function buildTestData(QUOTE, isWin) { // Quote a string, escape the quotes inside the string function quote(str) { return QUOTE + str.replace(new RegExp(QUOTE, "g"), `\\${QUOTE}`) + QUOTE; @@ -56,9 +56,11 @@ return "-H " + quote(h); } + const CMD = isWin ? "curl.exe " : "curl "; + // Construct the expected command - const SIMPLE_BASE = ["curl " + quote(HTTPS_SIMPLE_SJS)]; - const SLOW_BASE = ["curl " + quote(HTTPS_SLOW_SJS)]; + const SIMPLE_BASE = [CMD + quote(HTTPS_SIMPLE_SJS)]; + const SLOW_BASE = [CMD + quote(HTTPS_SLOW_SJS)]; const BASE_RESULT = [ "--compressed", header("User-Agent: " + navigator.userAgent), @@ -220,8 +222,9 @@ // This monster regexp parses the command line into an array of arguments, // recognizing quoted args with matching quotes and escaped quotes inside: + // [ "curl.exe 'url'", "--standalone-arg", "-arg-with-quoted-string 'value\'s'" ] // [ "curl 'url'", "--standalone-arg", "-arg-with-quoted-string 'value\'s'" ] - const matchRe = /[-A-Za-z1-9]+(?: ([\^\\"']+)(?:\\\1|.)*?\1)?/g; + const matchRe = /[-\.A-Za-z1-9]+(?: ([\^\"']+)(?:\\\1|.)*?\1)?/g; const actual = result.match(matchRe); // Must begin with the same "curl 'URL'" segment diff -Nru firefox-esr-140.3.1esr/devtools/client/netmonitor/test/browser_net_curl-utils.js firefox-esr-140.4.0esr/devtools/client/netmonitor/test/browser_net_curl-utils.js --- firefox-esr-140.3.1esr/devtools/client/netmonitor/test/browser_net_curl-utils.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/devtools/client/netmonitor/test/browser_net_curl-utils.js 2025-10-09 15:35:28.000000000 +0000 @@ -153,7 +153,7 @@ } function testDataEscapeOnGeneratedCommand(data) { - const paramsWin = `--data-raw ^"{\\"param1\\":\\"value1\\",\\"param2\\":\\"value2\\"}^"`; + const paramsWin = `--data-raw ^"^{^\\^"param1^\\^":^\\^"value1^\\^",^\\^"param2^\\^":^\\^"value2^\\^"^}^`; const paramsPosix = `--data-raw '{"param1":"value1","param2":"value2"}'`; let curlCommand = Curl.generateCommand(data, "WINNT"); @@ -209,13 +209,13 @@ '^"', boundary, "^\u000A\u000A", - 'Content-Disposition: form-data; name=\\"param1\\"', + 'Content-Disposition: form-data; name=^\\^"param1^\\^"', "^\u000A\u000A^\u000A\u000A", "value1", "^\u000A\u000A", boundary, "^\u000A\u000A", - 'Content-Disposition: form-data; name=\\"file\\"; filename=\\"filename.png\\"', + 'Content-Disposition: form-data; name=^\\^"file^\\^"; filename=^\\^"filename.png^\\^"', "^\u000A\u000A", "Content-Type: image/png", "^\u000A\u000A^\u000A\u000A", @@ -269,7 +269,14 @@ const escapeChar = "'!ls:q:gs|ls|;ping 8.8.8.8;|"; is( CurlUtils.escapeStringPosix(escapeChar), - "$'\\'\\041ls:q:gs^|ls^|;ping 8.8.8.8;^|'", + "$'\\'\\041ls:q:gs|ls|;ping 8.8.8.8;|'", + "'!' should be escaped." + ); + + const escapeBangOnlyChar = "!"; + is( + CurlUtils.escapeStringPosix(escapeBangOnlyChar), + "$'\\041'", "'!' should be escaped." ); @@ -295,49 +302,34 @@ "$'\\xc3\\xa6 \\xc3\\xb8 \\xc3\\xbc \\xc3\\x9f \\xc3\\xb6 \\xc3\\xa9'", "Character codes outside of the decimal range 32 - 126 should be escaped." ); - - // Assert that ampersands are correctly escaped in case its tried to run on Windows - const evilCommand = `query=evil\n\ncmd & calc.exe\n\n`; - is( - CurlUtils.escapeStringPosix(evilCommand), - "$'query=evil\\n\\ncmd ^& calc.exe\\n\\n'", - "The evil command is escaped properly" - ); - - const str = "EvilHeader: &calc.exe&"; - is( - CurlUtils.escapeStringPosix(str), - "'EvilHeader: ^&calc.exe^&'", - "The evil command is escaped properly" - ); } function testEscapeStringWin() { const surroundedWithDoubleQuotes = "A simple string"; is( CurlUtils.escapeStringWin(surroundedWithDoubleQuotes), - '^"A simple string^"', + '^\"A simple string^\"', "The string should be surrounded with double quotes." ); const doubleQuotes = 'Quote: "Time is an illusion. Lunchtime doubly so."'; is( CurlUtils.escapeStringWin(doubleQuotes), - '^"Quote: \\"Time is an illusion. Lunchtime doubly so.\\"^"', + '^\"Quote: ^\\^\"Time is an illusion. Lunchtime doubly so.^\\^\"^\"', "Double quotes should be escaped." ); const percentSigns = "%TEMP% %@foo% %2XX% %_XX% %?XX%"; is( CurlUtils.escapeStringWin(percentSigns), - '^"^%^TEMP^% ^%^@foo^% ^%^2XX^% ^%^_XX^% ^%?XX^%^"', + '^\"^%^TEMP^% ^%^@foo^% ^%^2XX^% ^%^_XX^% ^%?XX^%^\"', "Percent signs should be escaped." ); const backslashes = "\\A simple string\\"; is( CurlUtils.escapeStringWin(backslashes), - '^"\\\\A simple string\\\\^"', + '^\"^\\A simple string^\\^\"', "Backslashes should be escaped." ); @@ -351,21 +343,21 @@ const dollarSignCommand = "$(calc.exe)"; is( CurlUtils.escapeStringWin(dollarSignCommand), - '^"\\$(calc.exe)^"', + '^\"^$(calc.exe)^\"', "Dollar sign should be escaped." ); const tickSignCommand = "`$(calc.exe)"; is( CurlUtils.escapeStringWin(tickSignCommand), - '^"\\`\\$(calc.exe)^"', + '^\"`^$(calc.exe)^\"', "Both the tick and dollar signs should be escaped." ); const evilCommand = `query=evil\r\rcmd" /c timeout /t 3 & calc.exe\r\r`; is( CurlUtils.escapeStringWin(evilCommand), - '^\"query=evil^\n\n^\n\ncmd\\\" /c timeout /t 3 & calc.exe^\n\n^\n\n^\"', + '^\"query=evil^\n\n^\n\ncmd^\\^\" /c timeout /t 3 ^& calc.exe^\n\n^\n\n^\"', "The evil command is escaped properly" ); } diff -Nru firefox-esr-140.3.1esr/devtools/client/shared/curl.js firefox-esr-140.4.0esr/devtools/client/shared/curl.js --- firefox-esr-140.3.1esr/devtools/client/shared/curl.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/devtools/client/shared/curl.js 2025-10-09 15:35:28.000000000 +0000 @@ -160,16 +160,15 @@ // Format with line breaks if the command has more than 2 parts // e.g - // Command with 2 parts - curl https://foo.com + // Command with 2 parts - curl https://foo.com // Commands with more than 2 parts - // curl https://foo.com // -X POST // -H "Accept : */*" // -H "accept-language: en-US" const joinStr = currentPlatform === "WINNT" ? " ^\n " : " \\\n "; - return ( - "curl " + commandParts.join(commandParts.length >= 3 ? joinStr : " ") - ); + const CMD = currentPlatform == "WINNT" ? "curl.exe " : "curl "; + return CMD + commandParts.join(commandParts.length >= 3 ? joinStr : " "); }, }; @@ -421,10 +420,9 @@ return "\\u" + ("0000" + code).substr(code.length, 4); } - // Escape & and |, which are special characters on Windows. - const winSpecialCharsRegEx = /([&\|])/g; - - if (/[^\x20-\x7E]|\'/.test(str)) { + // Escape characters which are not within the charater range + // SPACE to "~"(char codes 32 - 126), the `!` (code 33) and '(code 39); + if (/[^\x20-\x7E]|!|\'/.test(str)) { // Use ANSI-C quoting syntax. return ( "$'" + @@ -434,14 +432,13 @@ .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/!/g, "\\041") - .replace(winSpecialCharsRegEx, "^$1") .replace(/[^\x20-\x7E]/g, escapeCharacter) + "'" ); } // Use single quote syntax. - return "'" + str.replace(winSpecialCharsRegEx, "^$1") + "'"; + return "'" + str + "'"; }, /** @@ -453,24 +450,20 @@ Because cmd.exe parser and MS Crt arguments parsers use some of the same escape characters, they can interact with each other in horrible ways, the order of operations is critical. + + Also see https://ss64.com/nt/syntax-esc.html for details on + escaping characters on Windows. */ const encapsChars = '^"'; return ( encapsChars + str - // Replace \ with \\ first because it is an escape character for certain - // conditions in both parsers. - .replace(/\\/g, "\\\\") - - // Escape double quotes with double slashes. + // Replace all " with \" to ensure the first parser does not remove it. .replace(/"/g, '\\"') - // Escape ` and $ so commands do not get executed e.g $(calc.exe) or `\$(calc.exe) - .replace(/[`$]/g, "\\$&") - // Then escape all characters we are not sure about with ^ to ensure it // gets to MS Crt parser safely. - .replace(/[^a-zA-Z0-9\s_\-:=+~\/.',?;()*\$&\\{}\"`]/g, "^$&") + .replace(/[^a-zA-Z0-9\s_\-:=+~\/.',?;()*`]/g, "^$&") // The % character is special because MS Crt parser will try and look for // ENV variables and fill them in its place. We cannot escape them with % diff -Nru firefox-esr-140.3.1esr/devtools/client/shared/test/xpcshell/test_curl.js firefox-esr-140.4.0esr/devtools/client/shared/test/xpcshell/test_curl.js --- firefox-esr-140.3.1esr/devtools/client/shared/test/xpcshell/test_curl.js 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/devtools/client/shared/test/xpcshell/test_curl.js 2025-10-09 15:35:28.000000000 +0000 @@ -347,9 +347,7 @@ function quote(str) { let escaped; if (isWin()) { - escaped = str - .replace(new RegExp(QUOTE, "g"), `${QUOTE}${QUOTE}`) - .replace(/"/g, '\\"'); + escaped = str.replace(new RegExp('"', "g"), `^\\${QUOTE}`); } else { escaped = str.replace(new RegExp(QUOTE, "g"), `\\${QUOTE}`); } @@ -358,10 +356,10 @@ function escapeNewline(txt) { if (isWin()) { - // Replace new lines with ^ and TWO new lines because the first + // For windows we replace new lines with ^ and TWO new lines because the first // new line is there to enact the escape command the second is the character // to escape (in this case new line). - return txt.replace(/\r?\n/g, "^\n\n"); + return txt.replace(/\r?\n|\r/g, "^\n\n"); } return txt.replace(/\r/g, "\\r").replace(/\n/g, "\\n"); } @@ -396,7 +394,8 @@ function parseCurl(curlCmd) { // This monster regexp parses the command line into an array of arguments, // recognizing quoted args with matching quotes and escaped quotes inside: + // [ "curl.exe 'url'", "--standalone-arg", "-arg-with-quoted-string 'value\'s'" ] // [ "curl 'url'", "--standalone-arg", "-arg-with-quoted-string 'value\'s'" ] - const matchRe = /[-A-Za-z1-9]+(?: ([\^\\"']+)(?:\\\1|.)*?\1)?/g; + const matchRe = /[-\.A-Za-z1-9]+(?: ([\^\"']+)(?:\\\1|.)*?\1)?/g; return curlCmd.match(matchRe); } diff -Nru firefox-esr-140.3.1esr/docshell/base/nsDSURIContentListener.cpp firefox-esr-140.4.0esr/docshell/base/nsDSURIContentListener.cpp --- firefox-esr-140.3.1esr/docshell/base/nsDSURIContentListener.cpp 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/docshell/base/nsDSURIContentListener.cpp 2025-10-09 15:35:28.000000000 +0000 @@ -131,7 +131,7 @@ nsresult rv; NS_ENSURE_ARG_POINTER(aContentHandler); NS_ENSURE_TRUE(mDocShell, NS_ERROR_FAILURE); - RefPtr docShell = mDocShell; + RefPtr docShell = mDocShell.get(); *aAbortProcess = false; diff -Nru firefox-esr-140.3.1esr/docshell/base/nsDSURIContentListener.h firefox-esr-140.4.0esr/docshell/base/nsDSURIContentListener.h --- firefox-esr-140.3.1esr/docshell/base/nsDSURIContentListener.h 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/docshell/base/nsDSURIContentListener.h 2025-10-09 15:35:28.000000000 +0000 @@ -11,8 +11,9 @@ #include "nsIURIContentListener.h" #include "nsWeakReference.h" #include "nsITimer.h" +#include "mozilla/WeakPtr.h" +#include "nsDocShell.h" -class nsDocShell; class nsIInterfaceRequestor; class nsIWebNavigationInfo; class nsPIDOMWindowOuter; @@ -85,7 +86,7 @@ } protected: - nsDocShell* mDocShell; + mozilla::MainThreadWeakPtr mDocShell; // Hack to handle multipart images without creating a new viewer nsCOMPtr mExistingJPEGStreamListener; nsCOMPtr mExistingJPEGRequest; diff -Nru firefox-esr-140.3.1esr/docshell/base/nsDocShellEditorData.cpp firefox-esr-140.4.0esr/docshell/base/nsDocShellEditorData.cpp --- firefox-esr-140.3.1esr/docshell/base/nsDocShellEditorData.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/docshell/base/nsDocShellEditorData.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -17,7 +17,7 @@ using namespace mozilla; using namespace mozilla::dom; -nsDocShellEditorData::nsDocShellEditorData(nsIDocShell* aOwningDocShell) +nsDocShellEditorData::nsDocShellEditorData(nsDocShell* aOwningDocShell) : mDocShell(aOwningDocShell), mDetachedEditingState(Document::EditingState::eOff), mMakeEditable(false), @@ -121,7 +121,7 @@ return NS_OK; } -nsresult nsDocShellEditorData::ReattachToWindow(nsIDocShell* aDocShell) { +nsresult nsDocShellEditorData::ReattachToWindow(nsDocShell* aDocShell) { mDocShell = aDocShell; nsCOMPtr domWindow = diff -Nru firefox-esr-140.3.1esr/docshell/base/nsDocShellEditorData.h firefox-esr-140.4.0esr/docshell/base/nsDocShellEditorData.h --- firefox-esr-140.3.1esr/docshell/base/nsDocShellEditorData.h 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/docshell/base/nsDocShellEditorData.h 2025-10-09 15:35:29.000000000 +0000 @@ -12,8 +12,9 @@ #include "mozilla/RefPtr.h" #include "mozilla/dom/Document.h" +#include "mozilla/WeakPtr.h" +#include "nsDocShell.h" -class nsIDocShell; class nsEditingSession; namespace mozilla { @@ -22,7 +23,7 @@ class nsDocShellEditorData { public: - explicit nsDocShellEditorData(nsIDocShell* aOwningDocShell); + explicit nsDocShellEditorData(nsDocShell* aOwningDocShell); ~nsDocShellEditorData(); MOZ_CAN_RUN_SCRIPT_BOUNDARY nsresult MakeEditable(bool aWaitForUriLoad); @@ -33,14 +34,14 @@ SetHTMLEditor(mozilla::HTMLEditor* aHTMLEditor); MOZ_CAN_RUN_SCRIPT_BOUNDARY void TearDownEditor(); nsresult DetachFromWindow(); - nsresult ReattachToWindow(nsIDocShell* aDocShell); + nsresult ReattachToWindow(nsDocShell* aDocShell); bool WaitingForLoad() const { return mMakeEditable; } protected: void EnsureEditingSession(); // The doc shell that owns us. Weak ref, since it always outlives us. - nsIDocShell* mDocShell; + mozilla::WeakPtr mDocShell; // Only present for the content root docShell. Session is owned here. RefPtr mEditingSession; diff -Nru firefox-esr-140.3.1esr/dom/base/Document.cpp firefox-esr-140.4.0esr/dom/base/Document.cpp --- firefox-esr-140.3.1esr/dom/base/Document.cpp 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/base/Document.cpp 2025-10-09 15:35:28.000000000 +0000 @@ -276,6 +276,7 @@ #include "mozilla/gfx/ScaleFactor.h" #include "mozilla/glean/DomMetrics.h" #include "mozilla/glean/DomUseCounterMetrics.h" +#include "mozilla/intl/EncodingToLang.h" #include "mozilla/intl/LocaleService.h" #include "mozilla/ipc/IdleSchedulerChild.h" #include "mozilla/ipc/MessageChannel.h" @@ -417,7 +418,6 @@ #include "nsIXULRuntime.h" #include "nsImageLoadingContent.h" #include "nsImportModule.h" -#include "nsLanguageAtomService.h" #include "nsLayoutUtils.h" #include "nsMimeTypes.h" #include "nsNetCID.h" @@ -1500,6 +1500,7 @@ mInteractiveWidgetMode( InteractiveWidgetUtils::DefaultInteractiveWidgetMode()), mHeaderData(nullptr), + mLanguageFromCharset(nullptr), mServoRestyleRootDirtyBits(0), mThrowOnDynamicMarkupInsertionCounter(0), mIgnoreOpensDuringUnloadCounter(0), @@ -19746,7 +19747,7 @@ if (nsAtom* lang = GetContentLanguageAsAtomForStyle()) { return lang; } - return mLanguageFromCharset.get(); + return mLanguageFromCharset; } void Document::GetContentLanguageForBindings(DOMString& aString) const { @@ -19755,7 +19756,7 @@ const LangGroupFontPrefs* Document::GetFontPrefsForLang( nsAtom* aLanguage, bool* aNeedsToCache) const { - nsAtom* lang = aLanguage ? aLanguage : mLanguageFromCharset.get(); + nsAtom* lang = aLanguage ? aLanguage : mLanguageFromCharset; return StaticPresData::Get()->GetFontPrefsForLang(lang, aNeedsToCache); } @@ -19763,7 +19764,7 @@ MOZ_ASSERT(mMayNeedFontPrefsUpdate); RefPtr lang = GetLanguageForStyle(); StaticPresData* data = StaticPresData::Get(); - data->GetFontPrefsForLang(lang ? lang.get() : mLanguageFromCharset.get()); + data->GetFontPrefsForLang(lang ? lang.get() : mLanguageFromCharset); data->GetFontPrefsForLang(nsGkAtoms::x_math); // https://bugzilla.mozilla.org/show_bug.cgi?id=1362599#c12 data->GetFontPrefsForLang(nsGkAtoms::Unicode); @@ -19774,29 +19775,14 @@ } void Document::RecomputeLanguageFromCharset() { - RefPtr language; - // Optimize the default character sets. - if (mCharacterSet == WINDOWS_1252_ENCODING) { - language = nsGkAtoms::x_western; - } else { - nsLanguageAtomService* service = nsLanguageAtomService::GetService(); - if (mCharacterSet == UTF_8_ENCODING) { - language = nsGkAtoms::Unicode; - } else { - language = service->LookupCharSet(mCharacterSet); - } - - if (language == nsGkAtoms::Unicode) { - language = service->GetLocaleLanguage(); - } - } + nsAtom* language = mozilla::intl::EncodingToLang::Lookup(mCharacterSet); if (language == mLanguageFromCharset) { return; } mMayNeedFontPrefsUpdate = true; - mLanguageFromCharset = std::move(language); + mLanguageFromCharset = language; } nsICookieJarSettings* Document::CookieJarSettings() { diff -Nru firefox-esr-140.3.1esr/dom/base/Document.h firefox-esr-140.4.0esr/dom/base/Document.h --- firefox-esr-140.3.1esr/dom/base/Document.h 2025-09-22 21:16:07.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/base/Document.h 2025-10-09 15:35:28.000000000 +0000 @@ -5489,7 +5489,9 @@ nsTHashSet> mLanguagesUsed; // TODO(emilio): Is this hot enough to warrant to be cached? - RefPtr mLanguageFromCharset; + // EncodingToLang.cpp keeps the atom alive until shutdown, so + // no need for a RefPtr. + nsAtom* mLanguageFromCharset; // Restyle root for servo's style system. // diff -Nru firefox-esr-140.3.1esr/dom/base/nsGlobalWindowOuter.cpp firefox-esr-140.4.0esr/dom/base/nsGlobalWindowOuter.cpp --- firefox-esr-140.3.1esr/dom/base/nsGlobalWindowOuter.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/base/nsGlobalWindowOuter.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -1948,7 +1948,8 @@ } auto* compartmentPrivate = xpc::CompartmentPrivate::Get(aCompartment); - if (!compartmentPrivate->CanShareCompartmentWith(data->principal)) { + if (!compartmentPrivate || + !compartmentPrivate->CanShareCompartmentWith(data->principal)) { // Can't reuse this one, keep going. return JS::CompartmentIterResult::KeepGoing; } diff -Nru firefox-esr-140.3.1esr/dom/base/nsImageLoadingContent.cpp firefox-esr-140.4.0esr/dom/base/nsImageLoadingContent.cpp --- firefox-esr-140.3.1esr/dom/base/nsImageLoadingContent.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/base/nsImageLoadingContent.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -54,6 +54,7 @@ #include "mozilla/dom/ImageTracker.h" #include "mozilla/dom/PageLoadEventUtils.h" #include "mozilla/dom/ReferrerInfo.h" +#include "mozilla/dom/ResponsiveImageSelector.h" #include "mozilla/dom/ScriptSettings.h" #include "mozilla/intl/LocaleService.h" #include "mozilla/intl/Locale.h" @@ -1275,18 +1276,100 @@ return domPromise.forget(); } +CSSIntSize nsImageLoadingContent::NaturalSize( + DoDensityCorrection aDensityCorrection) { + if (!mCurrentRequest) { + return {}; + } + + nsCOMPtr image; + mCurrentRequest->GetImage(getter_AddRefs(image)); + if (!image) { + return {}; + } + + mozilla::image::ImageIntrinsicSize intrinsicSize; + nsresult rv = image->GetIntrinsicSize(&intrinsicSize); + if (NS_FAILED(rv)) { + return {}; + } + + CSSIntSize size; // defaults to 0,0 + if (!StaticPrefs::image_natural_size_fallback_enabled()) { + size.width = intrinsicSize.mWidth.valueOr(0); + size.height = intrinsicSize.mHeight.valueOr(0); + } else { + // Fallback case, for web-compatibility! + // See https://github.com/whatwg/html/issues/11287 and bug 1935269. + // If we lack an intrinsic size in either axis, then use the fallback size, + // unless we can transfer the size through the aspect ratio. + // (And if we *only* have an intrinsic aspect ratio, use the fallback width + // and transfer that through the aspect ratio to produce a height.) + size.width = intrinsicSize.mWidth.valueOr(kFallbackIntrinsicWidthInPixels); + size.height = + intrinsicSize.mHeight.valueOr(kFallbackIntrinsicHeightInPixels); + AspectRatio ratio = image->GetIntrinsicRatio(); + if (ratio) { + if (!intrinsicSize.mHeight) { + // Compute the height from the width & ratio. (Note that the width we + // use here might be kFallbackIntrinsicWidthInPixels, and that's fine.) + size.height = ratio.Inverted().ApplyTo(size.width); + } else if (!intrinsicSize.mWidth) { + // Compute the width from the height & ratio. + size.width = ratio.ApplyTo(size.height); + } + } + } + + ImageResolution resolution = image->GetResolution(); + if (aDensityCorrection == DoDensityCorrection::Yes) { + // NOTE(emilio): What we implement here matches the image-set() spec, but + // it's unclear whether this is the right thing to do, see + // https://github.com/whatwg/html/pull/5574#issuecomment-826335244. + if (auto* image = HTMLImageElement::FromNode(AsContent())) { + if (auto* sel = image->GetResponsiveImageSelector()) { + float density = sel->GetSelectedImageDensity(); + MOZ_ASSERT(density >= 0.0); + resolution.ScaleBy(density); + } + } + } + + resolution.ApplyTo(size.width, size.height); + return size; +} + CSSIntSize nsImageLoadingContent::GetWidthHeightForImage() { Element* element = AsContent()->AsElement(); if (nsIFrame* frame = element->GetPrimaryFrame(FlushType::Layout)) { return CSSIntSize::FromAppUnitsRounded(frame->GetContentRect().Size()); } - const nsAttrValue* value; + + CSSIntSize size; nsCOMPtr image; - if (mCurrentRequest) { + if (StaticPrefs::image_natural_size_fallback_enabled()) { + // Our image is not rendered (we don't have any frame); so we should should + // return the natural size, per: + // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-width + // + // Note that the spec says to use the "density-corrected natural width and + // height of the image", but we don't do that -- we specifically request + // the NaturalSize *without* density-correction here. This handles a case + // where browsers deviate from the spec in an interoperable way, which + // hopefully we'll address in the spec soon. See case (2) in this comment + // for more: + // https://github.com/whatwg/html/issues/11287#issuecomment-2923467541 + size = NaturalSize(DoDensityCorrection::No); + } else if (mCurrentRequest) { mCurrentRequest->GetImage(getter_AddRefs(image)); } - CSSIntSize size; + // If we have width or height attrs, we'll let those stomp on whatever + // NaturalSize we may have gotten above. This handles a case where browsers + // deviate from the spec in an interoperable way, which hopefully we'll + // address in the spec soon. See case (1) in this comment for more: + // https://github.com/whatwg/html/issues/11287#issuecomment-2923467541 + const nsAttrValue* value; if ((value = element->GetParsedAttr(nsGkAtoms::width)) && value->Type() == nsAttrValue::eInteger) { size.width = value->GetIntegerValue(); diff -Nru firefox-esr-140.3.1esr/dom/base/nsImageLoadingContent.h firefox-esr-140.4.0esr/dom/base/nsImageLoadingContent.h --- firefox-esr-140.3.1esr/dom/base/nsImageLoadingContent.h 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/base/nsImageLoadingContent.h 2025-10-09 15:35:29.000000000 +0000 @@ -240,6 +240,17 @@ virtual mozilla::dom::FetchPriority GetFetchPriorityForImage() const; /** + * Get the natural size of the current request, as defined here: + * https://html.spec.whatwg.org/multipage/images.html#preferred-density-corrected-dimensions + * + * By default, we return the density-corrected natural size, though we skip + * density-correction if DoDensityCorrection::No is passed. + */ + enum class DoDensityCorrection : bool { No, Yes }; + mozilla::CSSIntSize NaturalSize( + DoDensityCorrection = DoDensityCorrection::Yes); + + /** * Get width and height of the current request, using given image request if * attributes are unset. */ diff -Nru firefox-esr-140.3.1esr/dom/base/nsObjectLoadingContent.cpp firefox-esr-140.4.0esr/dom/base/nsObjectLoadingContent.cpp --- firefox-esr-140.3.1esr/dom/base/nsObjectLoadingContent.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/base/nsObjectLoadingContent.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -701,7 +701,6 @@ nsresult rv; nsAutoCString newMime; - nsAutoString typeAttr; nsCOMPtr newURI; nsCOMPtr newBaseURI; ObjectType newType; @@ -729,7 +728,6 @@ el->HasNonEmptyAttr(nsGkAtoms::classid)) { // We don't support class ID plugin references, so we should always treat // having class Ids as attributes as invalid, and fallback accordingly. - newMime.Truncate(); stateInvalid = true; } @@ -759,16 +757,6 @@ newBaseURI = docBaseURI; } - nsAutoString rawTypeAttr; - el->GetAttr(nsGkAtoms::type, rawTypeAttr); - if (!rawTypeAttr.IsEmpty()) { - typeAttr = rawTypeAttr; - nsAutoString params; - nsAutoString mime; - nsContentUtils::SplitMimeType(rawTypeAttr, mime, params); - CopyUTF16toUTF8(mime, newMime); - } - /// /// URI /// @@ -803,6 +791,41 @@ } } + /// + /// type + /// + nsAutoString rawTypeAttr; + el->GetAttr(nsGkAtoms::type, rawTypeAttr); + // YouTube embeds might be using type="application/x-shockwave-flash" + // which needs to be allowed, but must not override the text/html MIME set + // above. + if (!mRewrittenYoutubeEmbed && !rawTypeAttr.IsEmpty()) { + nsAutoString params; + nsAutoString mime; + nsContentUtils::SplitMimeType(rawTypeAttr, mime, params); + + if (!StaticPrefs::dom_object_embed_type_hint_enabled()) { + NS_ConvertUTF16toUTF8 mimeUTF8(mime); + if (imgLoader::SupportImageWithMimeType(mimeUTF8)) { + // Normally the type attribute should not be used as a hint, but for + // images it does seem to happen in Chrome and Safari. Images generally + // don't lead to code execution and we don't use + // AcceptedMimeTypes::IMAGES_AND_DOCUMENTS above. + newMime = mimeUTF8; + } else if (GetTypeOfContent(mimeUTF8) != ObjectType::Document) { + LOG( + ("OBJLC [%p]: MIME '%s' from type attribute is not supported, " + "forcing fallback.", + this, mimeUTF8.get())); + stateInvalid = true; + } + + // Don't use the type attribute as a Content-Type hint in other cases. + } else { + CopyUTF16toUTF8(mime, newMime); + } + } + /// /// Check if the original (pre-channel) content-type or URI changed, and /// record mOriginal{ContentType,URI} diff -Nru firefox-esr-140.3.1esr/dom/canvas/CanvasRenderingContext2D.cpp firefox-esr-140.4.0esr/dom/canvas/CanvasRenderingContext2D.cpp --- firefox-esr-140.3.1esr/dom/canvas/CanvasRenderingContext2D.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/canvas/CanvasRenderingContext2D.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -5503,20 +5503,20 @@ // - -Maybe ValidSurfaceDescriptorForRemoteCanvas2d( - const layers::SurfaceDescriptor& sdConst) { - auto sd = sdConst; // Copy, so we can mutate it. - if (sd.type() != layers::SurfaceDescriptor::TSurfaceDescriptorGPUVideo) { - return Nothing(); +bool ValidSurfaceDescriptorForRemoteCanvas2d( + const layers::SurfaceDescriptor& aSd, + Maybe* aResultSd) { + if (aSd.type() != layers::SurfaceDescriptor::TSurfaceDescriptorGPUVideo) { + return false; } - auto& sdv = sd.get_SurfaceDescriptorGPUVideo(); + const auto& sdv = aSd.get_SurfaceDescriptorGPUVideo(); if (sdv.type() != layers::SurfaceDescriptorGPUVideo::TSurfaceDescriptorRemoteDecoder) { - return Nothing(); + return false; } - auto& sdrd = sdv.get_SurfaceDescriptorRemoteDecoder(); - auto& subdesc = sdrd.subdesc(); + const auto& sdrd = sdv.get_SurfaceDescriptorRemoteDecoder(); + const auto& subdesc = sdrd.subdesc(); switch (subdesc.type()) { case layers::RemoteDecoderVideoSubDescriptor::Tnull_t: break; @@ -5525,7 +5525,7 @@ TSurfaceDescriptorMacIOSurface: { const auto& ssd = subdesc.get_SurfaceDescriptorMacIOSurface(); if (ssd.gpuFence()) { - return Nothing(); + return false; } break; } @@ -5533,18 +5533,31 @@ #ifdef XP_WIN case layers::RemoteDecoderVideoSubDescriptor::TSurfaceDescriptorD3D10: { if (!StaticPrefs::gfx_canvas_remote_use_draw_image_fast_path_d3d()) { - return Nothing(); + return false; } - auto& ssd = subdesc.get_SurfaceDescriptorD3D10(); - ssd.handle() = - nullptr; // Not IPC-able, but it's just an optimization to have this. - break; + const auto& ssd = subdesc.get_SurfaceDescriptorD3D10(); + if (aResultSd) { + *aResultSd = Some(aSd); + // Not IPC-able, but it's just an optimization to have this. + aResultSd->ref() + .get_SurfaceDescriptorGPUVideo() + .get_SurfaceDescriptorRemoteDecoder() + .subdesc() + .get_SurfaceDescriptorD3D10() + .handle() = nullptr; + } else if (ssd.handle()) { + return false; + } + return true; } #endif default: - return Nothing(); + return false; } - return Some(sd); + if (aResultSd) { + *aResultSd = Some(aSd); + } + return true; } static Maybe @@ -5558,9 +5571,13 @@ return Nothing(); } - const auto sd = aResult.mLayersImage->GetDesc(); - if (!sd) return Nothing(); - return ValidSurfaceDescriptorForRemoteCanvas2d(*sd); + if (const auto sd = aResult.mLayersImage->GetDesc()) { + Maybe result; + if (ValidSurfaceDescriptorForRemoteCanvas2d(*sd, &result)) { + return result; + } + } + return Nothing(); } // drawImage(in HTMLImageElement image, in float dx, in float dy); diff -Nru firefox-esr-140.3.1esr/dom/canvas/CanvasRenderingContextHelper.h firefox-esr-140.4.0esr/dom/canvas/CanvasRenderingContextHelper.h --- firefox-esr-140.3.1esr/dom/canvas/CanvasRenderingContextHelper.h 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/canvas/CanvasRenderingContextHelper.h 2025-10-09 15:35:28.000000000 +0000 @@ -89,8 +89,9 @@ nsCOMPtr mCurrentContext; }; -Maybe ValidSurfaceDescriptorForRemoteCanvas2d( - const layers::SurfaceDescriptor&); +bool ValidSurfaceDescriptorForRemoteCanvas2d( + const layers::SurfaceDescriptor& aSd, + Maybe* aResultSd = nullptr); } // namespace dom namespace CanvasUtils { diff -Nru firefox-esr-140.3.1esr/dom/canvas/DrawTargetWebgl.cpp firefox-esr-140.4.0esr/dom/canvas/DrawTargetWebgl.cpp --- firefox-esr-140.3.1esr/dom/canvas/DrawTargetWebgl.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/canvas/DrawTargetWebgl.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -413,8 +413,14 @@ // not exceed the available texture limits and that shader creation succeeded. bool DrawTargetWebgl::Init(const IntSize& size, const SurfaceFormat format, const RefPtr& aSharedContext) { - MOZ_ASSERT(format == SurfaceFormat::B8G8R8A8 || - format == SurfaceFormat::B8G8R8X8); + switch (format) { + case SurfaceFormat::B8G8R8A8: + case SurfaceFormat::B8G8R8X8: + break; + default: + MOZ_ASSERT_UNREACHABLE("Unsupported format for DrawTargetWebgl."); + return false; + } mSize = size; mFormat = format; @@ -1775,6 +1781,10 @@ } void DrawTargetWebgl::PopClip() { + if (mClipStack.empty()) { + return; + } + mClipChanged = true; mRefreshClipState = true; mSkia->PopClip(); @@ -2022,10 +2032,29 @@ const IntPoint& aDstOffset, bool aInit, bool aZero, const RefPtr& aTex) { - webgl::TexUnpackBlobDesc texDesc = { - LOCAL_GL_TEXTURE_2D, - {uint32_t(aSrcRect.width), uint32_t(aSrcRect.height), 1}}; + webgl::TexUnpackBlobDesc texDesc = {LOCAL_GL_TEXTURE_2D}; + IntRect srcRect(aSrcRect); + IntPoint dstOffset(aDstOffset); + if (srcRect.IsEmpty()) { + return true; + } if (aData) { + // If the source rect could not possibly overlap the surface, then it is + // effectively empty with nothing to upload. + srcRect = srcRect.SafeIntersect(IntRect(IntPoint(0, 0), aData->GetSize())); + if (srcRect.IsEmpty()) { + return true; + } + // If there is a non-empty rect remaining, then ensure the dest offset + // reflects the change in source rect. + dstOffset += srcRect.TopLeft() - aSrcRect.TopLeft(); + + // Ensure source data matches the expected format size. + int32_t bpp = BytesPerPixel(aFormat); + if (bpp != BytesPerPixel(aData->GetFormat())) { + return false; + } + // The surface needs to be uploaded to its backing texture either to // initialize or update the texture handle contents. Map the data // contents of the surface so it can be read. @@ -2034,13 +2063,11 @@ return false; } int32_t stride = map.GetStride(); - int32_t bpp = BytesPerPixel(aFormat); // Get the data pointer range considering the sampling rect offset and // size. Span range( - map.GetData() + aSrcRect.y * size_t(stride) + aSrcRect.x * bpp, - std::max(aSrcRect.height - 1, 0) * size_t(stride) + - aSrcRect.width * bpp); + map.GetData() + srcRect.y * size_t(stride) + srcRect.x * bpp, + std::max(srcRect.height - 1, 0) * size_t(stride) + srcRect.width * bpp); texDesc.cpuData = Some(range); // If the stride happens to be 4 byte aligned, assume that is the // desired alignment regardless of format (even A8). Otherwise, we @@ -2050,10 +2077,16 @@ } else if (aZero) { // Create a PBO filled with zero data to initialize the texture data and // avoid slow initialization inside WebGL. - MOZ_ASSERT(aSrcRect.TopLeft() == IntPoint(0, 0)); - size_t size = - size_t(GetAlignedStride<4>(aSrcRect.width, BytesPerPixel(aFormat))) * - aSrcRect.height; + if (srcRect.TopLeft() != IntPoint(0, 0)) { + MOZ_ASSERT_UNREACHABLE("Invalid origin for texture initialization."); + return false; + } + int32_t stride = GetAlignedStride<4>(srcRect.width, BytesPerPixel(aFormat)); + if (stride <= 0) { + MOZ_ASSERT_UNREACHABLE("Invalid stride for texture initialization."); + return false; + } + size_t size = size_t(stride) * srcRect.height; if (!mZeroBuffer || size > mZeroSize) { ClearZeroBuffer(); mZeroBuffer = mWebgl->CreateBuffer(); @@ -2069,6 +2102,7 @@ } texDesc.pboOffset = Some(0); } + texDesc.size = uvec3(uint32_t(srcRect.width), uint32_t(srcRect.height), 1); // Upload as RGBA8 to avoid swizzling during upload. Surfaces provide // data as BGRA, but we manually swizzle that in the shader. An A8 // surface will be stored as an R8 texture that will also be swizzled @@ -2083,7 +2117,7 @@ mWebgl->BindTexture(LOCAL_GL_TEXTURE_2D, aTex); } mWebgl->TexImage(0, aInit ? intFormat : 0, - {uint32_t(aDstOffset.x), uint32_t(aDstOffset.y), 0}, texPI, + {uint32_t(dstOffset.x), uint32_t(dstOffset.y), 0}, texPI, texDesc); if (aTex) { mWebgl->BindTexture(LOCAL_GL_TEXTURE_2D, mLastTexture); diff -Nru firefox-esr-140.3.1esr/dom/canvas/QueueParamTraits.h firefox-esr-140.4.0esr/dom/canvas/QueueParamTraits.h --- firefox-esr-140.3.1esr/dom/canvas/QueueParamTraits.h 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/canvas/QueueParamTraits.h 2025-10-09 15:35:28.000000000 +0000 @@ -438,8 +438,22 @@ !view.ReadParam(&stride)) { return false; } - const size_t dataSize = stride * surfSize.height; - const auto range = view.template ReadRange(dataSize); + if (!CheckedInt32(stride).isValid() || surfSize.IsEmpty()) { + return false; + } + int32_t bpp = BytesPerPixel(format); + CheckedInt minStride(bpp); + minStride *= surfSize.width; + if (!minStride.isValid() || minStride.value() <= 0 || + stride < minStride.value()) { + return false; + } + CheckedInt dataSize(stride); + dataSize *= surfSize.height; + if (!dataSize.isValid()) { + return false; + } + const auto range = view.template ReadRange(dataSize.value()); if (!range) return false; // DataSourceSurface demands pointer-to-mutable. diff -Nru firefox-esr-140.3.1esr/dom/canvas/TexUnpackBlob.cpp firefox-esr-140.4.0esr/dom/canvas/TexUnpackBlob.cpp --- firefox-esr-140.3.1esr/dom/canvas/TexUnpackBlob.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/canvas/TexUnpackBlob.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -406,6 +406,11 @@ if (!rowLength || !rowCount) return true; + if (srcStride <= 0 || dstStride <= 0) { + webgl->ErrorInvalidOperation("Invalid stride."); + return false; + } + const auto srcIsPremult = (mDesc.srcAlphaType == gfxAlphaType::Premult); auto dstIsPremult = unpacking.premultiplyAlpha; const auto fnHasPremultMismatch = [&]() { @@ -997,9 +1002,20 @@ const auto& data = sdb.data(); MOZ_ASSERT(data.type() == layers::MemoryOrShmem::TShmem); const auto& shmem = data.get_Shmem(); - surf = gfx::Factory::CreateWrappingDataSourceSurface( - shmem.get(), layers::ImageDataSerializer::GetRGBStride(rgb), + size_t shmemSize = shmem.Size(); + int32_t stride = layers::ImageDataSerializer::GetRGBStride(rgb); + if (stride <= 0) { + gfxCriticalError() << "TexUnpackSurface failed to get rgb stride"; + return false; + } + size_t bufSize = layers::ImageDataSerializer::ComputeRGBBufferSize( rgb.size(), rgb.format()); + if (!bufSize || bufSize > shmemSize) { + gfxCriticalError() << "TexUnpackSurface failed to get rgb buffer size"; + return false; + } + surf = gfx::Factory::CreateWrappingDataSourceSurface( + shmem.get(), stride, rgb.size(), rgb.format()); } else if (SDIsNullRemoteDecoder(sd)) { const auto& sdrd = sd.get_SurfaceDescriptorGPUVideo() .get_SurfaceDescriptorRemoteDecoder(); @@ -1106,12 +1122,10 @@ // - const auto dstFormat = FormatForPackingInfo(dstPI); - const auto dstBpp = BytesPerPixel(dstPI); + const size_t dstBpp = BytesPerPixel(dstPI); const size_t dstUsedBytesPerRow = dstBpp * surf->GetSize().width; - auto dstStride = dstUsedBytesPerRow; - if (dstFormat == srcFormat) { - dstStride = srcStride; // Try to match. - } + size_t dstStride = dstFormat == srcFormat ? srcStride // Try To match + : dstUsedBytesPerRow; // - diff -Nru firefox-esr-140.3.1esr/dom/canvas/WebGLTexelConversions.h firefox-esr-140.4.0esr/dom/canvas/WebGLTexelConversions.h --- firefox-esr-140.3.1esr/dom/canvas/WebGLTexelConversions.h 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/canvas/WebGLTexelConversions.h 2025-10-09 15:35:29.000000000 +0000 @@ -1345,6 +1345,11 @@ MOZ_ALWAYS_INLINE void convertType(const SrcType* __restrict src, DstType* __restrict dst) { MOZ_ASSERT(false, "Unimplemented texture format conversion"); + // Default construct dst values, ensuring they are *some* value. + dst[0] = DstType(); + dst[1] = DstType(); + dst[2] = DstType(); + dst[3] = DstType(); } template <> diff -Nru firefox-esr-140.3.1esr/dom/html/HTMLImageElement.cpp firefox-esr-140.4.0esr/dom/html/HTMLImageElement.cpp --- firefox-esr-140.3.1esr/dom/html/HTMLImageElement.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/html/HTMLImageElement.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -612,64 +612,6 @@ uint32_t HTMLImageElement::Width() { return GetWidthHeightForImage().width; } -CSSIntSize HTMLImageElement::NaturalSize() { - if (!mCurrentRequest) { - return {}; - } - - nsCOMPtr image; - mCurrentRequest->GetImage(getter_AddRefs(image)); - if (!image) { - return {}; - } - - mozilla::image::ImageIntrinsicSize intrinsicSize; - nsresult rv = image->GetIntrinsicSize(&intrinsicSize); - if (NS_FAILED(rv)) { - return {}; - } - - CSSIntSize size; // defaults to 0,0 - if (!StaticPrefs::image_natural_size_fallback_enabled()) { - size.width = intrinsicSize.mWidth.valueOr(0); - size.height = intrinsicSize.mHeight.valueOr(0); - } else { - // Fallback case, for web-compatibility! - // See https://github.com/whatwg/html/issues/11287 and bug 1935269. - // If we lack an intrinsic size in either axis, then use the fallback size, - // unless we can transfer the size through the aspect ratio. - // (And if we *only* have an intrinsic aspect ratio, use the fallback width - // and transfer that through the aspect ratio to produce a height.) - size.width = intrinsicSize.mWidth.valueOr(kFallbackIntrinsicWidthInPixels); - size.height = - intrinsicSize.mHeight.valueOr(kFallbackIntrinsicHeightInPixels); - AspectRatio ratio = image->GetIntrinsicRatio(); - if (ratio) { - if (!intrinsicSize.mHeight) { - // Compute the height from the width & ratio. (Note that the width we - // use here might be kFallbackIntrinsicWidthInPixels, and that's fine.) - size.height = ratio.Inverted().ApplyTo(size.width); - } else if (!intrinsicSize.mWidth) { - // Compute the width from the height & ratio. - size.width = ratio.ApplyTo(size.height); - } - } - } - - ImageResolution resolution = image->GetResolution(); - // NOTE(emilio): What we implement here matches the image-set() spec, but it's - // unclear whether this is the right thing to do, see - // https://github.com/whatwg/html/pull/5574#issuecomment-826335244. - if (mResponsiveSelector) { - float density = mResponsiveSelector->GetSelectedImageDensity(); - MOZ_ASSERT(density >= 0.0); - resolution.ScaleBy(density); - } - - resolution.ApplyTo(size.width, size.height); - return size; -} - nsresult HTMLImageElement::CopyInnerTo(HTMLImageElement* aDest) { MOZ_TRY(nsGenericHTMLElement::CopyInnerTo(aDest)); diff -Nru firefox-esr-140.3.1esr/dom/html/HTMLImageElement.h firefox-esr-140.4.0esr/dom/html/HTMLImageElement.h --- firefox-esr-140.3.1esr/dom/html/HTMLImageElement.h 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/html/HTMLImageElement.h 2025-10-09 15:35:29.000000000 +0000 @@ -94,7 +94,6 @@ SetUnsignedIntAttr(nsGkAtoms::height, aHeight, 0, aError); } - CSSIntSize NaturalSize(); uint32_t NaturalHeight() { return NaturalSize().height; } uint32_t NaturalWidth() { return NaturalSize().width; } diff -Nru firefox-esr-140.3.1esr/dom/html/nsHTMLContentSink.cpp firefox-esr-140.4.0esr/dom/html/nsHTMLContentSink.cpp --- firefox-esr-140.3.1esr/dom/html/nsHTMLContentSink.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/html/nsHTMLContentSink.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -740,27 +740,33 @@ mCurrentContext->mStack[parentIndex].mContent; int32_t numFlushed = mCurrentContext->mStack[parentIndex].mNumFlushed; int32_t childCount = parent->GetChildCount(); - NS_ASSERTION(numFlushed < childCount, "Already notified on the body?"); + if (numFlushed < childCount) { + int32_t insertionPoint = + mCurrentContext->mStack[parentIndex].mInsertionPoint; - int32_t insertionPoint = - mCurrentContext->mStack[parentIndex].mInsertionPoint; + // XXX: I have yet to see a case where numFlushed is non-zero and + // insertionPoint is not -1, but this code will try to handle + // those cases too. - // XXX: I have yet to see a case where numFlushed is non-zero and - // insertionPoint is not -1, but this code will try to handle - // those cases too. - - uint32_t oldUpdates = mUpdatesInNotification; - mUpdatesInNotification = 0; - if (insertionPoint != -1) { - NotifyInsert(parent, mBody); + uint32_t oldUpdates = mUpdatesInNotification; + mUpdatesInNotification = 0; + if (insertionPoint != -1) { + NotifyInsert(parent, mBody); + } else { + NotifyAppend(parent, numFlushed); + } + mCurrentContext->mStack[parentIndex].mNumFlushed = childCount; + if (mUpdatesInNotification > 1) { + UpdateChildCounts(); + } + mUpdatesInNotification = oldUpdates; } else { - NotifyAppend(parent, numFlushed); - } - mCurrentContext->mStack[parentIndex].mNumFlushed = childCount; - if (mUpdatesInNotification > 1) { - UpdateChildCounts(); + MOZ_ASSERT( + false, + "This isn't supposed to happen but per bug 1782501 actually does " + "with the NoScript extension. Please debug if this assertion fails."); + mCurrentContext->mStack[parentIndex].mNumFlushed = childCount; } - mUpdatesInNotification = oldUpdates; } StartLayout(false); diff -Nru firefox-esr-140.3.1esr/dom/media/MediaTrackGraph.cpp firefox-esr-140.4.0esr/dom/media/MediaTrackGraph.cpp --- firefox-esr-140.3.1esr/dom/media/MediaTrackGraph.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/media/MediaTrackGraph.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -3571,11 +3571,10 @@ MOZ_ASSERT(aGraphDriverRequested != OFFLINE_THREAD_DRIVER, "Use CreateNonRealtimeInstance() for offline graphs"); - GraphHashSet* graphs = Graphs(); - GraphHashSet::AddPtr addPtr = - graphs->lookupForAdd({aWindowID, aSampleRate, aPrimaryOutputDeviceID}); - if (addPtr) { // graph already exists - return *addPtr; + MediaTrackGraphImpl* graph = + GetInstanceIfExists(aWindowID, aSampleRate, aPrimaryOutputDeviceID); + if (graph) { // graph already exists + return graph; } GraphRunType runType = DIRECT_DRIVER; @@ -3586,10 +3585,11 @@ // In a real time graph, the number of output channels is determined by // the underlying number of channel of the default audio output device. uint32_t channelCount = CubebUtils::MaxNumberOfChannels(); - MediaTrackGraphImpl* graph = new MediaTrackGraphImpl( - aWindowID, aSampleRate, aPrimaryOutputDeviceID, aMainThread); + graph = new MediaTrackGraphImpl(aWindowID, aSampleRate, + aPrimaryOutputDeviceID, aMainThread); graph->Init(aGraphDriverRequested, runType, channelCount); - MOZ_ALWAYS_TRUE(graphs->add(addPtr, graph)); + MOZ_ALWAYS_TRUE(Graphs()->putNew( + {aWindowID, aSampleRate, aPrimaryOutputDeviceID}, graph)); LOG(LogLevel::Debug, ("Starting up MediaTrackGraph %p for window 0x%" PRIx64, graph, aWindowID)); diff -Nru firefox-esr-140.3.1esr/dom/media/platforms/agnostic/bytestreams/H265.cpp firefox-esr-140.4.0esr/dom/media/platforms/agnostic/bytestreams/H265.cpp --- firefox-esr-140.3.1esr/dom/media/platforms/agnostic/bytestreams/H265.cpp 2025-09-22 21:16:08.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/media/platforms/agnostic/bytestreams/H265.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -1245,7 +1245,7 @@ // If we encounter SPS with the same id but different content, we will stop // attempting to detect duplicates. bool checkDuplicate = true; - const H265SPS* firstSPS = nullptr; + Maybe firstSPSId; RefPtr extradata = new mozilla::MediaByteBuffer; while (reader.Remaining() > nalLenSize) { @@ -1305,8 +1305,8 @@ } else { spsRefTable[spsId] = Some(sps); nalusMap.LookupOrInsert(nalu.mNalUnitType).AppendElement(nalu); - if (!firstSPS) { - firstSPS = spsRefTable[spsId].ptr(); + if (!firstSPSId) { + firstSPSId.emplace(spsId); } } } else if (nalu.IsVPS() || nalu.IsPPS()) { @@ -1322,8 +1322,10 @@ spsEntry ? spsEntry.Data().Length() : 0, vpsEntry ? vpsEntry.Data().Length() : 0, ppsEntry ? ppsEntry.Data().Length() : 0); - if (firstSPS) { + if (firstSPSId) { BitWriter writer(extradata); + const H265SPS* firstSPS = spsRefTable[*firstSPSId].ptr(); + MOZ_ASSERT(firstSPS); // ISO/IEC 14496-15, HEVCDecoderConfigurationRecord. writer.WriteBits(1, 8); // version diff -Nru firefox-esr-140.3.1esr/dom/notification/NotificationUtils.cpp firefox-esr-140.4.0esr/dom/notification/NotificationUtils.cpp --- firefox-esr-140.3.1esr/dom/notification/NotificationUtils.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/notification/NotificationUtils.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -95,7 +95,8 @@ if (outForeignByAncestorContext) { // nested first party ReportTelemetry(GleanLabel::eNestedFirstParty, aPurpose); - return false; + return StaticPrefs:: + dom_webnotifications_forbid_nested_first_party_enabled(); } // third party diff -Nru firefox-esr-140.3.1esr/dom/webauthn/WebAuthnResult.cpp firefox-esr-140.4.0esr/dom/webauthn/WebAuthnResult.cpp --- firefox-esr-140.3.1esr/dom/webauthn/WebAuthnResult.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/WebAuthnResult.cpp 2025-10-09 15:35:29.000000000 +0000 @@ -55,6 +55,13 @@ } NS_IMETHODIMP +WebAuthnRegisterResult::GetAttestationConsentPromptShown( + bool* aAttestationConsentPromptShown) { + *aAttestationConsentPromptShown = mAttestationConsentPromptShown; + return NS_OK; +} + +NS_IMETHODIMP WebAuthnRegisterResult::GetCredentialId(nsTArray& aCredentialId) { aCredentialId.Assign(mCredentialId); return NS_OK; diff -Nru firefox-esr-140.3.1esr/dom/webauthn/WebAuthnResult.h firefox-esr-140.4.0esr/dom/webauthn/WebAuthnResult.h --- firefox-esr-140.3.1esr/dom/webauthn/WebAuthnResult.h 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/WebAuthnResult.h 2025-10-09 15:35:30.000000000 +0000 @@ -38,7 +38,8 @@ const Maybe& aPrfSupported, const Maybe>& aPrfFirst, const Maybe>& aPrfSecond) - : mClientDataJSON(aClientDataJSON), + : mAttestationConsentPromptShown(false), + mClientDataJSON(aClientDataJSON), mCredPropsRk(Nothing()), mAuthenticatorAttachment(aAuthenticatorAttachment), mLargeBlobSupported(aLargeBlobSupported), @@ -63,6 +64,7 @@ reinterpret_cast( aResponse->AttestationObject()->GetElements().Elements()), aResponse->AttestationObject()->Length()); + mAttestationConsentPromptShown = false; if (aResponse->ClientDataJson()) { mClientDataJSON = Some(nsAutoCString( reinterpret_cast( @@ -92,6 +94,7 @@ mAttestationObject.AppendElements(aResponse->pbAttestationObject, aResponse->cbAttestationObject); + mAttestationConsentPromptShown = true; nsTArray extensions; if (aResponse->dwVersion >= WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_2) { @@ -166,6 +169,7 @@ ~WebAuthnRegisterResult() = default; nsTArray mAttestationObject; + bool mAttestationConsentPromptShown; nsTArray mCredentialId; nsTArray mTransports; Maybe mClientDataJSON; diff -Nru firefox-esr-140.3.1esr/dom/webauthn/WebAuthnService.cpp firefox-esr-140.4.0esr/dom/webauthn/WebAuthnService.cpp --- firefox-esr-140.3.1esr/dom/webauthn/WebAuthnService.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/WebAuthnService.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -31,14 +31,12 @@ NS_NewRunnableFunction(__func__, [self, aTransactionId]() { self->SetHasAttestationConsent( aTransactionId, - StaticPrefs:: - security_webauth_webauthn_testing_allow_direct_attestation()); + StaticPrefs::security_webauthn_always_allow_direct_attestation()); })); #else nsCOMPtr runnable(NS_NewRunnableFunction( __func__, [self, aOrigin, aTransactionId, aBrowsingContextId]() { - if (StaticPrefs:: - security_webauth_webauthn_testing_allow_direct_attestation()) { + if (StaticPrefs::security_webauthn_always_allow_direct_attestation()) { self->SetHasAttestationConsent(aTransactionId, true); return; } @@ -115,10 +113,18 @@ } nsIWebAuthnRegisterResult* result = aValue.ResolveValue(); - // If the RP requested attestation, we need to show a consent prompt - // before returning any identifying information. The platform may - // have already done this for us, so we need to inspect the - // attestation object at this point. + // We can return whatever result we have if the authenticator + // handled attestation consent for us. + bool attestationConsentPromptShown = false; + Unused << result->GetAttestationConsentPromptShown( + &attestationConsentPromptShown); + if (attestationConsentPromptShown) { + guard->ref().parentRegisterPromise.ref()->Resolve(result); + guard->reset(); + return; + } + // If the RP requested attestation and the response contains + // identifying information, then we need to show a consent prompt. bool resultIsIdentifying = true; Unused << result->HasIdentifyingAttestation(&resultIsIdentifying); if (attestationRequested && resultIsIdentifying) { @@ -127,6 +133,7 @@ aBrowsingContextId); return; } + // In all other cases we strip out identifying information. result->Anonymize(); guard->ref().parentRegisterPromise.ref()->Resolve(result); guard->reset(); diff -Nru firefox-esr-140.3.1esr/dom/webauthn/authrs_bridge/src/lib.rs firefox-esr-140.4.0esr/dom/webauthn/authrs_bridge/src/lib.rs --- firefox-esr-140.3.1esr/dom/webauthn/authrs_bridge/src/lib.rs 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/authrs_bridge/src/lib.rs 2025-10-09 15:35:29.000000000 +0000 @@ -185,6 +185,11 @@ Ok(out) } + xpcom_method!(get_attestation_consent_prompt_shown => GetAttestationConsentPromptShown() -> bool); + fn get_attestation_consent_prompt_shown(&self) -> Result { + Ok(false) + } + xpcom_method!(get_credential_id => GetCredentialId() -> ThinVec); fn get_credential_id(&self) -> Result, nsresult> { let Some(credential_data) = &self.result.borrow().att_obj.auth_data.credential_data else { diff -Nru firefox-esr-140.3.1esr/dom/webauthn/nsIWebAuthnResult.idl firefox-esr-140.4.0esr/dom/webauthn/nsIWebAuthnResult.idl --- firefox-esr-140.3.1esr/dom/webauthn/nsIWebAuthnResult.idl 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/nsIWebAuthnResult.idl 2025-10-09 15:35:30.000000000 +0000 @@ -15,6 +15,8 @@ // the authenticator data. readonly attribute Array attestationObject; + readonly attribute boolean attestationConsentPromptShown; + // The Credential ID field of the Attestation Object's Attested // Credential Data. This is used to construct the rawID field of a // WebAuthn PublicKeyCredential without having to parse the diff -Nru firefox-esr-140.3.1esr/dom/webauthn/tests/test_webauthn_attestation_conveyance.html firefox-esr-140.4.0esr/dom/webauthn/tests/test_webauthn_attestation_conveyance.html --- firefox-esr-140.3.1esr/dom/webauthn/tests/test_webauthn_attestation_conveyance.html 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/tests/test_webauthn_attestation_conveyance.html 2025-10-09 15:35:29.000000000 +0000 @@ -22,7 +22,7 @@ add_task(async () => { await SpecialPowers.pushPrefEnv({"set": [ - ["security.webauth.webauthn_testing_allow_direct_attestation", true], + ["security.webauthn.always_allow_direct_attestation", true], ]}); await addVirtualAuthenticator(); }); diff -Nru firefox-esr-140.3.1esr/dom/webauthn/tests/test_webauthn_loopback.html firefox-esr-140.4.0esr/dom/webauthn/tests/test_webauthn_loopback.html --- firefox-esr-140.3.1esr/dom/webauthn/tests/test_webauthn_loopback.html 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/webauthn/tests/test_webauthn_loopback.html 2025-10-09 15:35:30.000000000 +0000 @@ -22,7 +22,7 @@ add_task(async function() { // This test intentionally compares items to themselves. /* eslint-disable no-self-compare */ - await SpecialPowers.pushPrefEnv({"set": [["security.webauth.webauthn_testing_allow_direct_attestation", true]]}); + await SpecialPowers.pushPrefEnv({"set": [["security.webauthn.always_allow_direct_attestation", true]]}); await addVirtualAuthenticator(); is(navigator.authentication, undefined, "navigator.authentication does not exist any longer"); isnot(navigator.credentials, undefined, "Credential Management API endpoint must exist"); diff -Nru firefox-esr-140.3.1esr/dom/workers/WorkerPrivate.cpp firefox-esr-140.4.0esr/dom/workers/WorkerPrivate.cpp --- firefox-esr-140.3.1esr/dom/workers/WorkerPrivate.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/workers/WorkerPrivate.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -5927,7 +5927,11 @@ } JS::ExceptionStack exnStack(aCx); - if (JS_IsExceptionPending(aCx)) { + // NOTE: This function is used both for errors and warnings, and warnings + // can be reported while there's a pending exception. + // Warnings are always reported with non-null JSErrorReport. + if (!aReport || !aReport->isWarning()) { + MOZ_ASSERT(JS_IsExceptionPending(aCx)); if (!JS::StealPendingExceptionStack(aCx, &exnStack)) { JS_ClearPendingException(aCx); return; @@ -5941,10 +5945,6 @@ JSAutoRealm ar(aCx, stackGlobal); report->SerializeWorkerStack(aCx, this, stack); } - } else { - // ReportError is also used for reporting warnings, - // so there won't be a pending exception. - MOZ_ASSERT(aReport && aReport->isWarning()); } if (report->mMessage.IsEmpty() && aToStringResult) { diff -Nru firefox-esr-140.3.1esr/dom/worklet/WorkletThread.cpp firefox-esr-140.4.0esr/dom/worklet/WorkletThread.cpp --- firefox-esr-140.3.1esr/dom/worklet/WorkletThread.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/dom/worklet/WorkletThread.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -199,7 +199,11 @@ RefPtr reporter = new AsyncErrorReporter(xpcReport); JSContext* cx = Context(); - if (JS_IsExceptionPending(cx)) { + // NOTE: This function is used both for errors and warnings, and warnings + // can be reported while there's a pending exception. + // Warnings are always reported with non-null JSErrorReport. + if (!aReport || !aReport->isWarning()) { + MOZ_ASSERT(JS_IsExceptionPending(cx)); JS::ExceptionStack exnStack(cx); if (JS::StealPendingExceptionStack(cx, &exnStack)) { JS::Rooted stack(cx); diff -Nru firefox-esr-140.3.1esr/extensions/auth/nsAuthSSPI.cpp firefox-esr-140.4.0esr/extensions/auth/nsAuthSSPI.cpp --- firefox-esr-140.3.1esr/extensions/auth/nsAuthSSPI.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/extensions/auth/nsAuthSSPI.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -23,9 +23,14 @@ #include "nsCOMPtr.h" #include "nsICryptoHash.h" #include "mozilla/glean/SecurityManagerSslMetrics.h" +#include "mozilla/StaticPrefs_network.h" #include +// for safer certificate parsing +#include "nss/mozpkix/pkixutil.h" +#include "nss/mozpkix/pkixder.h" + #define SEC_SUCCESS(Status) ((Status) >= 0) #ifndef KERB_WRAP_NO_ENCRYPT @@ -276,8 +281,6 @@ // String for end-point bindings. const char end_point[] = "tls-server-end-point:"; const int end_point_length = sizeof(end_point) - 1; - const int hash_size = 32; // Size of a SHA256 hash. - const int cbt_size = hash_size + end_point_length; SECURITY_STATUS rc; MS_TimeStamp ignored; @@ -332,7 +335,63 @@ // If we have stored a certificate, the Channel Binding Token // needs to be generated and sent in the first input buffer. if (mCertDERLength > 0) { - // First we create a proper Endpoint Binding structure. + // Default to SHA256 for compatibility, but detect SHA384 and SHA512 + uint32_t hashAlgorithm = nsICryptoHash::SHA256; + uint32_t hashSize = 32; // SHA256 hash size + + // Compute the hash size. + [&]() { + if (!mozilla::StaticPrefs::network_auth_sspi_detect_hash()) { + // This check only exists to make sure that the hash algorithm check + // doesn't break previous working behaviour. + return; + } + using namespace mozilla::pkix; + Input certDER; + + mozilla::pkix::Result pkixResult = certDER.Init( + static_cast(mCertDERData), mCertDERLength); + if (pkixResult != Success) { + return; + } + + BackCert cert(certDER, EndEntityOrCA::MustBeEndEntity, nullptr); + pkixResult = cert.Init(); + if (pkixResult != Success) { + return; + } + + // Parse the signature algorithm from the signed data + der::PublicKeyAlgorithm publicKeyAlg; + DigestAlgorithm digestAlg; + Reader signatureAlgorithmReader(cert.GetSignedData().algorithm); + pkixResult = der::SignatureAlgorithmIdentifierValue( + signatureAlgorithmReader, publicKeyAlg, digestAlg); + + if (pkixResult != Success) { + return; + } + // Map digest algorithms to hash algorithms for Extended Protection + switch (digestAlg) { + case DigestAlgorithm::sha384: + hashAlgorithm = nsICryptoHash::SHA384; + hashSize = 48; // SHA384 hash size + break; + case DigestAlgorithm::sha512: + hashAlgorithm = nsICryptoHash::SHA512; + hashSize = 64; // SHA512 hash size + break; + case DigestAlgorithm::sha256: + default: + // Use SHA256 as default for compatibility + hashAlgorithm = nsICryptoHash::SHA256; + hashSize = 32; + break; + } + }(); + + // Create Endpoint Binding structure with correct size + const int cbt_size = hashSize + end_point_length; pendpoint_binding.dwInitiatorAddrType = 0; pendpoint_binding.cbInitiatorLength = 0; pendpoint_binding.dwInitiatorOffset = 0; @@ -363,17 +422,19 @@ memcpy(sspi_cbt_ptr, end_point, end_point_length); sspi_cbt_ptr += end_point_length; - // Start hashing. We are always doing SHA256, but depending - // on the certificate, a different alogirthm might be needed. nsAutoCString hashString; + nsresult rv = NS_ERROR_FAILURE; - nsresult rv; nsCOMPtr crypto; crypto = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID, &rv); - if (NS_SUCCEEDED(rv)) rv = crypto->Init(nsICryptoHash::SHA256); - if (NS_SUCCEEDED(rv)) + if (NS_SUCCEEDED(rv)) { + rv = crypto->Init(hashAlgorithm); + } + if (NS_SUCCEEDED(rv)) { rv = crypto->Update((unsigned char*)mCertDERData, mCertDERLength); + } if (NS_SUCCEEDED(rv)) rv = crypto->Finish(false, hashString); + if (NS_FAILED(rv)) { free(mCertDERData); mCertDERData = nullptr; @@ -382,10 +443,9 @@ return rv; } - // Once the hash has been computed, we store it in memory right - // after the Endpoint structure and the "tls-server-end-point:" - // char array. - memcpy(sspi_cbt_ptr, hashString.get(), hash_size); + // Store the computed hash in memory right after the Endpoint + // structure and the "tls-server-end-point:" char array + memcpy(sspi_cbt_ptr, hashString.get(), hashSize); // Free memory used to store the server certificate free(mCertDERData); diff -Nru firefox-esr-140.3.1esr/gfx/2d/DrawTargetSkia.cpp firefox-esr-140.4.0esr/gfx/2d/DrawTargetSkia.cpp --- firefox-esr-140.3.1esr/gfx/2d/DrawTargetSkia.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/2d/DrawTargetSkia.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -1797,8 +1797,11 @@ // we need to have surfaces that have a stride aligned to 4 for interop with // cairo SkImageInfo info = MakeSkiaImageInfo(aSize, aFormat); + if (info.bytesPerPixel() != BytesPerPixel(aFormat)) { + return false; + } size_t stride = GetAlignedStride<4>(info.width(), info.bytesPerPixel()); - if (!stride) { + if (!stride || stride < info.minRowBytes64()) { return false; } SkSurfaceProps props(0, GetSkPixelGeometry()); @@ -1867,9 +1870,14 @@ MOZ_ASSERT((aFormat != SurfaceFormat::B8G8R8X8) || aUninitialized || VerifyRGBXFormat(aData, aSize, aStride, aFormat)); + SkImageInfo info = MakeSkiaImageInfo(aSize, aFormat); + if (info.bytesPerPixel() != BytesPerPixel(aFormat) || aStride <= 0 || + size_t(aStride) < info.minRowBytes64()) { + return false; + } + SkSurfaceProps props(0, GetSkPixelGeometry()); - mSurface = AsRefPtr(SkSurfaces::WrapPixels(MakeSkiaImageInfo(aSize, aFormat), - aData, aStride, &props)); + mSurface = AsRefPtr(SkSurfaces::WrapPixels(info, aData, aStride, &props)); if (!mSurface) { return false; } @@ -1894,6 +1902,13 @@ MOZ_ASSERT((format != SurfaceFormat::B8G8R8X8) || VerifyRGBXFormat(map->GetData(), size, map->GetStride(), format)); + SkImageInfo info = MakeSkiaImageInfo(size, format); + if (info.bytesPerPixel() != BytesPerPixel(format) || + size_t(map->GetStride()) < info.minRowBytes64()) { + delete map; + return false; + } + SkSurfaceProps props(0, GetSkPixelGeometry()); mSurface = AsRefPtr(SkSurfaces::WrapPixels( MakeSkiaImageInfo(size, format), map->GetData(), map->GetStride(), diff -Nru firefox-esr-140.3.1esr/gfx/2d/HelpersSkia.h firefox-esr-140.4.0esr/gfx/2d/HelpersSkia.h --- firefox-esr-140.3.1esr/gfx/2d/HelpersSkia.h 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/2d/HelpersSkia.h 2025-10-09 15:35:30.000000000 +0000 @@ -41,7 +41,12 @@ return kRGBA_8888_SkColorType; default: MOZ_DIAGNOSTIC_CRASH("Unknown surface format"); - return kRGBA_8888_SkColorType; + switch (BytesPerPixel(format)) { + case 4: + return kRGBA_8888_SkColorType; + default: + return kAlpha_8_SkColorType; + } } } diff -Nru firefox-esr-140.3.1esr/gfx/2d/RecordedEvent.h firefox-esr-140.4.0esr/gfx/2d/RecordedEvent.h --- firefox-esr-140.3.1esr/gfx/2d/RecordedEvent.h 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/2d/RecordedEvent.h 2025-10-09 15:35:30.000000000 +0000 @@ -471,11 +471,6 @@ template void ReadPatternData(S& aStream, PatternStorage& aPatternStorage) const; void StorePattern(PatternStorage& aDestination, const Pattern& aSource) const; - template - void RecordStrokeOptions(S& aStream, - const StrokeOptions& aStrokeOptions) const; - template - void ReadStrokeOptions(S& aStream, StrokeOptions& aStrokeOptions); virtual std::string GetName() const = 0; @@ -509,7 +504,97 @@ MOZ_IMPLICIT RecordedEvent(EventType aType) : mType(aType) {} EventType mType; - std::vector mDashPatternStorage; +}; + +class RecordedStrokeOptionsMixin { + public: + template + void RecordStrokeOptions(S& aStream, + const StrokeOptions& aStrokeOptions) const; + template + void ReadStrokeOptions(S& aStream, StrokeOptions& aStrokeOptions); + + protected: + UniquePtr mDashPatternStorage; +}; + +template +class RecordedEventArray { + public: + T* data() { return mData.get(); } + const T* data() const { return mData.get(); } + size_t size() const { return mSize; } + bool empty() const { return !mSize; } + + void Assign(const T* aData, size_t aSize) { + mSize = aSize; + mData = MakeUnique(aSize); + PodCopy(mData.get(), aData, aSize); + } + + bool TryAlloc(size_t aSize) { + if (mSize > 0) { + MOZ_ASSERT_UNREACHABLE(); + return false; + } + mData = MakeUniqueFallible(aSize); + if (!mData) { + return false; + } + mSize = aSize; + return true; + } + + template + void Write(S& aStream) const { + if (mSize) { + aStream.write(reinterpret_cast(mData.get()), + sizeof(T) * mSize); + } + } + + template + bool Read(S& aStream, size_t aSize) { + if (!aStream.good() || !TryAlloc(aSize)) { + return false; + } + aStream.read(reinterpret_cast(mData.get()), sizeof(T) * mSize); + if (!aStream.good()) { + Clear(); + return false; + } + return true; + } + + void Clear() { + mSize = 0; + mData.reset(); + } + + protected: + size_t mSize = 0; + UniquePtr mData; +}; + +class RecordedEventCString : public RecordedEventArray { + public: + explicit RecordedEventCString(const char* aStr = nullptr) { + if (aStr) { + if (size_t len = strlen(aStr)) { + Assign(aStr, len + 1); + } + } + } + + template + bool Read(S& aStream, size_t aSize) { + if (!RecordedEventArray::Read(aStream, aSize) || + (size() > 0 && !memchr(data(), '\0', size()))) { + Clear(); + return false; + } + return true; + } }; template diff -Nru firefox-esr-140.3.1esr/gfx/2d/RecordedEventImpl.h firefox-esr-140.4.0esr/gfx/2d/RecordedEventImpl.h --- firefox-esr-140.3.1esr/gfx/2d/RecordedEventImpl.h 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/2d/RecordedEventImpl.h 2025-10-09 15:35:30.000000000 +0000 @@ -247,7 +247,8 @@ DrawOptions mOptions; }; -class RecordedStrokeRect : public RecordedEventDerived { +class RecordedStrokeRect : public RecordedEventDerived, + public RecordedStrokeOptionsMixin { public: RecordedStrokeRect(const Rect& aRect, const Pattern& aPattern, const StrokeOptions& aStrokeOptions, @@ -280,7 +281,8 @@ DrawOptions mOptions; }; -class RecordedStrokeLine : public RecordedEventDerived { +class RecordedStrokeLine : public RecordedEventDerived, + public RecordedStrokeOptionsMixin { public: RecordedStrokeLine(const Point& aBegin, const Point& aEnd, const Pattern& aPattern, @@ -316,7 +318,8 @@ DrawOptions mOptions; }; -class RecordedStrokeCircle : public RecordedEventDerived { +class RecordedStrokeCircle : public RecordedEventDerived, + public RecordedStrokeOptionsMixin { public: RecordedStrokeCircle(Circle aCircle, const Pattern& aPattern, const StrokeOptions& aStrokeOptions, @@ -473,7 +476,8 @@ } }; -class RecordedStrokeGlyphs : public RecordedDrawGlyphs { +class RecordedStrokeGlyphs : public RecordedDrawGlyphs, + public RecordedStrokeOptionsMixin { public: RecordedStrokeGlyphs(ReferencePtr aScaledFont, const Pattern& aPattern, const StrokeOptions& aStrokeOptions, @@ -537,7 +541,8 @@ DrawOptions mOptions; }; -class RecordedStroke : public RecordedEventDerived { +class RecordedStroke : public RecordedEventDerived, + public RecordedStrokeOptionsMixin { public: RecordedStroke(ReferencePtr aPath, const Pattern& aPattern, const StrokeOptions& aStrokeOptions, @@ -968,7 +973,8 @@ CompositionOp mOp; }; -class RecordedDrawShadow : public RecordedEventDerived { +class RecordedDrawShadow : public RecordedEventDerived, + public RecordedStrokeOptionsMixin { public: RecordedDrawShadow(ReferencePtr aPath, const Pattern& aPattern, const ShadowOptions& aShadow, const DrawOptions& aOptions, @@ -1514,7 +1520,7 @@ bool mHasDesc; FontType mType; - std::vector mData; + RecordedEventArray mData; uint32_t mIndex; ReferencePtr mRefPtr; @@ -1557,7 +1563,7 @@ ReferencePtr mRefPtr; uint64_t mFontDataKey; uint32_t mIndex; - std::vector mInstanceData; + RecordedEventArray mInstanceData; template MOZ_IMPLICIT RecordedUnscaledFontCreation(S& aStream); @@ -1624,8 +1630,8 @@ ReferencePtr mRefPtr; ReferencePtr mUnscaledFont; Float mGlyphSize; - std::vector mInstanceData; - std::vector mVariations; + RecordedEventArray mInstanceData; + RecordedEventArray mVariations; template MOZ_IMPLICIT RecordedScaledFontCreation(S& aStream); @@ -1713,8 +1719,7 @@ mNode(aNode), mIndex(aIndex), mArgType(aArgType) { - mPayload.resize(sizeof(T)); - memcpy(&mPayload.front(), &aArgument, sizeof(T)); + mPayload.Assign(reinterpret_cast(&aArgument), sizeof(T)); } RecordedFilterNodeSetAttribute(FilterNode* aNode, uint32_t aIndex, @@ -1723,8 +1728,8 @@ mNode(aNode), mIndex(aIndex), mArgType(ARGTYPE_FLOAT_ARRAY) { - mPayload.resize(sizeof(Float) * aSize); - memcpy(&mPayload.front(), aFloat, sizeof(Float) * aSize); + mPayload.Assign(reinterpret_cast(aFloat), + sizeof(Float) * aSize); } bool PlayEvent(Translator* aTranslator) const override; @@ -1741,7 +1746,7 @@ uint32_t mIndex; ArgType mArgType; - std::vector mPayload; + RecordedEventArray mPayload; template MOZ_IMPLICIT RecordedFilterNodeSetAttribute(S& aStream); @@ -1803,8 +1808,8 @@ private: friend class RecordedEvent; - std::string mLocalDest; - std::string mURI; + RecordedEventCString mLocalDest; + RecordedEventCString mURI; Rect mRect; template @@ -1828,7 +1833,7 @@ private: friend class RecordedEvent; - std::string mDestination; + RecordedEventCString mDestination; Point mPoint; template @@ -1998,7 +2003,7 @@ } template -void RecordedEvent::RecordStrokeOptions( +void RecordedStrokeOptionsMixin::RecordStrokeOptions( S& aStream, const StrokeOptions& aStrokeOptions) const { JoinStyle joinStyle = aStrokeOptions.mLineJoin; CapStyle capStyle = aStrokeOptions.mLineCap; @@ -2019,34 +2024,42 @@ } template -void RecordedEvent::ReadStrokeOptions(S& aStream, - StrokeOptions& aStrokeOptions) { - uint64_t dashLength; +void RecordedStrokeOptionsMixin::ReadStrokeOptions( + S& aStream, StrokeOptions& aStrokeOptions) { + uint64_t dashLength64 = 0; JoinStyle joinStyle; CapStyle capStyle; - ReadElement(aStream, dashLength); + ReadElement(aStream, dashLength64); ReadElement(aStream, aStrokeOptions.mLineWidth); ReadElement(aStream, aStrokeOptions.mMiterLimit); ReadElementConstrained(aStream, joinStyle, JoinStyle::BEVEL, JoinStyle::MITER_OR_BEVEL); ReadElementConstrained(aStream, capStyle, CapStyle::BUTT, CapStyle::SQUARE); - // On 32 bit we truncate the value of dashLength. - // See also bug 811850 for history. - aStrokeOptions.mDashLength = size_t(dashLength); aStrokeOptions.mLineJoin = joinStyle; aStrokeOptions.mLineCap = capStyle; - if (!aStrokeOptions.mDashLength || !aStream.good()) { + // On 32 bit we truncate the value of dashLength. + // See also bug 811850 for history. + size_t dashLength = size_t(dashLength64); + if (!dashLength || !aStream.good()) { return; } ReadElement(aStream, aStrokeOptions.mDashOffset); - mDashPatternStorage.resize(aStrokeOptions.mDashLength); - aStrokeOptions.mDashPattern = &mDashPatternStorage.front(); - aStream.read((char*)aStrokeOptions.mDashPattern, - sizeof(Float) * aStrokeOptions.mDashLength); + mDashPatternStorage = MakeUniqueFallible(dashLength); + if (!mDashPatternStorage) { + aStream.SetIsBad(); + return; + } + aStream.read((char*)mDashPatternStorage.get(), sizeof(Float) * dashLength); + if (!aStream.good()) { + aStream.SetIsBad(); + return; + } + aStrokeOptions.mDashLength = dashLength; + aStrokeOptions.mDashPattern = mDashPatternStorage.get(); } template @@ -3255,8 +3268,10 @@ using T = layers::SurfaceDescriptor; static void Write(S& s, const T& t) { - // More rigorous version is coming soon! -Kelsey - const auto valid = dom::ValidSurfaceDescriptorForRemoteCanvas2d(t); + Maybe valid; + if (!dom::ValidSurfaceDescriptorForRemoteCanvas2d(t, &valid)) { + MOZ_CRASH("Invalid surface descriptor for write"); + } MOZ_RELEASE_ASSERT(valid && *valid == t); if (kIsDebug) { // We better be able to memcpy and destroy this if we're going to send it @@ -3272,10 +3287,15 @@ s.write(reinterpret_cast(&tValid), sizeof(T)); } static void Read(S& s, T& t) { - s.read(reinterpret_cast(&t), sizeof(T)); - const auto valid = dom::ValidSurfaceDescriptorForRemoteCanvas2d(t); - MOZ_RELEASE_ASSERT(valid && *valid == t); - t = *valid; + char buf[sizeof(T)]; + s.read(buf, sizeof(T)); + const auto& sd = *reinterpret_cast(buf); + if (dom::ValidSurfaceDescriptorForRemoteCanvas2d(sd)) { + t = sd; + MOZ_RELEASE_ASSERT(sd == t); + } else { + s.SetIsBad(); + } } }; @@ -3531,9 +3551,14 @@ return false; } - RefPtr src = Factory::CreateWrappingDataSourceSurface( - mData, mSize.width * BytesPerPixel(mFormat), mSize, mFormat, - [](void* aClosure) { delete[] static_cast(aClosure); }, mData); + CheckedInt32 stride = CheckedInt32(mSize.width) * BytesPerPixel(mFormat); + RefPtr src; + if (!mSize.IsEmpty() && stride.isValid() && stride.value() > 0) { + src = Factory::CreateWrappingDataSourceSurface( + mData, stride.value(), mSize, mFormat, + [](void* aClosure) { delete[] static_cast(aClosure); }, + mData); + } if (src) { mDataOwned = false; } @@ -3573,18 +3598,23 @@ return; } - size_t size = 0; + CheckedInt size; if (mSize.width >= 0 && mSize.height >= 0) { - size = size_t(mSize.width) * size_t(mSize.height) * BytesPerPixel(mFormat); - mData = new (fallible) uint8_t[size]; + CheckedInt32 stride = CheckedInt32(mSize.width) * BytesPerPixel(mFormat); + if (stride.isValid() && stride.value() >= 0) { + size = CheckedInt(stride.value()) * size_t(mSize.height); + if (size.isValid()) { + mData = new (fallible) uint8_t[size.value()]; + } + } } if (!mData) { gfxCriticalNote << "RecordedSourceSurfaceCreation failed to allocate data of size " - << size; + << (size.isValid() ? size.value() : 0); aStream.SetIsBad(); } else { - aStream.read((char*)mData, size); + aStream.read((char*)mData, size.value()); } } @@ -4073,10 +4103,8 @@ WriteElement(aStream, mType); WriteElement(aStream, mRefPtr); WriteElement(aStream, mIndex); - WriteElement(aStream, (size_t)mData.size()); - if (mData.size()) { - aStream.write((char*)mData.data(), mData.size()); - } + WriteElement(aStream, mData.size()); + mData.Write(aStream); } inline void RecordedFontDescriptor::OutputSimpleEventInfo( @@ -4087,7 +4115,7 @@ inline void RecordedFontDescriptor::SetFontDescriptor(const uint8_t* aData, uint32_t aSize, uint32_t aIndex) { - mData.assign(aData, aData + aSize); + mData.Assign(aData, aSize); mIndex = aIndex; } @@ -4098,14 +4126,14 @@ ReadElement(aStream, mRefPtr); ReadElement(aStream, mIndex); - size_t size; + size_t size = 0; ReadElement(aStream, size); if (!aStream.good()) { return; } - if (size) { - mData.resize(size); - aStream.read((char*)mData.data(), size); + if (size && !mData.Read(aStream, size)) { + aStream.SetIsBad(); + return; } } @@ -4131,10 +4159,8 @@ WriteElement(aStream, mRefPtr); WriteElement(aStream, mFontDataKey); WriteElement(aStream, mIndex); - WriteElement(aStream, (size_t)mInstanceData.size()); - if (mInstanceData.size()) { - aStream.write((char*)mInstanceData.data(), mInstanceData.size()); - } + WriteElement(aStream, mInstanceData.size()); + mInstanceData.Write(aStream); } inline void RecordedUnscaledFontCreation::OutputSimpleEventInfo( @@ -4145,7 +4171,7 @@ inline void RecordedUnscaledFontCreation::SetFontInstanceData( const uint8_t* aData, uint32_t aSize) { if (aSize) { - mInstanceData.assign(aData, aData + aSize); + mInstanceData.Assign(aData, aSize); } } @@ -4156,14 +4182,14 @@ ReadElement(aStream, mFontDataKey); ReadElement(aStream, mIndex); - size_t size; + size_t size = 0; ReadElement(aStream, size); if (!aStream.good()) { return; } - if (size) { - mInstanceData.resize(size); - aStream.read((char*)mInstanceData.data(), size); + if (size && !mInstanceData.Read(aStream, size)) { + aStream.SetIsBad(); + return; } } @@ -4212,15 +4238,10 @@ WriteElement(aStream, mRefPtr); WriteElement(aStream, mUnscaledFont); WriteElement(aStream, mGlyphSize); - WriteElement(aStream, (size_t)mInstanceData.size()); - if (mInstanceData.size()) { - aStream.write((char*)mInstanceData.data(), mInstanceData.size()); - } - WriteElement(aStream, (size_t)mVariations.size()); - if (mVariations.size()) { - aStream.write((char*)mVariations.data(), - sizeof(FontVariation) * mVariations.size()); - } + WriteElement(aStream, mInstanceData.size()); + mInstanceData.Write(aStream); + WriteElement(aStream, mVariations.size()); + mVariations.Write(aStream); } inline void RecordedScaledFontCreation::OutputSimpleEventInfo( @@ -4232,10 +4253,10 @@ const uint8_t* aData, uint32_t aSize, const FontVariation* aVariations, uint32_t aNumVariations) { if (aSize) { - mInstanceData.assign(aData, aData + aSize); + mInstanceData.Assign(aData, aSize); } if (aNumVariations) { - mVariations.assign(aVariations, aVariations + aNumVariations); + mVariations.Assign(aVariations, aNumVariations); } } @@ -4246,25 +4267,24 @@ ReadElement(aStream, mUnscaledFont); ReadElement(aStream, mGlyphSize); - size_t size; + size_t size = 0; ReadElement(aStream, size); if (!aStream.good()) { return; } - if (size) { - mInstanceData.resize(size); - aStream.read((char*)mInstanceData.data(), size); + if (size && !mInstanceData.Read(aStream, size)) { + aStream.SetIsBad(); + return; } - size_t numVariations; + size_t numVariations = 0; ReadElement(aStream, numVariations); if (!aStream.good()) { return; } - if (numVariations) { - mVariations.resize(numVariations); - aStream.read((char*)mVariations.data(), - sizeof(FontVariation) * numVariations); + if (numVariations && !mVariations.Read(aStream, numVariations)) { + aStream.SetIsBad(); + return; } } @@ -4342,9 +4362,12 @@ return false; } -#define REPLAY_SET_ATTRIBUTE(type, argtype) \ - case ARGTYPE_##argtype: \ - ReplaySetAttribute(node, mIndex, *(type*)&mPayload.front()); \ +#define REPLAY_SET_ATTRIBUTE(type, argtype) \ + case ARGTYPE_##argtype: \ + if (mPayload.size() < sizeof(type)) { \ + return false; \ + } \ + ReplaySetAttribute(node, mIndex, *(type*)mPayload.data()); \ break switch (mArgType) { @@ -4363,7 +4386,7 @@ REPLAY_SET_ATTRIBUTE(DeviceColor, COLOR); case ARGTYPE_FLOAT_ARRAY: node->SetAttribute(mIndex, - reinterpret_cast(&mPayload.front()), + reinterpret_cast(mPayload.data()), mPayload.size() / sizeof(Float)); break; } @@ -4376,8 +4399,8 @@ WriteElement(aStream, mNode); WriteElement(aStream, mIndex); WriteElement(aStream, mArgType); - WriteElement(aStream, uint64_t(mPayload.size())); - aStream.write((const char*)&mPayload.front(), mPayload.size()); + WriteElement(aStream, mPayload.size()); + mPayload.Write(aStream); } template @@ -4387,14 +4410,16 @@ ReadElement(aStream, mIndex); ReadElementConstrained(aStream, mArgType, ArgType::ARGTYPE_UINT32, ArgType::ARGTYPE_FLOAT_ARRAY); - uint64_t size; + size_t size = 0; ReadElement(aStream, size); if (!aStream.good()) { return; } - mPayload.resize(size_t(size)); - aStream.read((char*)&mPayload.front(), size); + if (size && !mPayload.Read(aStream, size)) { + aStream.SetIsBad(); + return; + } } inline void RecordedFilterNodeSetAttribute::OutputSimpleEventInfo( @@ -4453,48 +4478,44 @@ if (!dt) { return false; } - dt->Link(mLocalDest.c_str(), mURI.c_str(), mRect); + dt->Link(mLocalDest.data(), mURI.data(), mRect); return true; } template void RecordedLink::Record(S& aStream) const { WriteElement(aStream, mRect); - uint32_t len = mLocalDest.length(); - WriteElement(aStream, len); - if (len) { - aStream.write(mLocalDest.data(), len); - } - len = mURI.length(); - WriteElement(aStream, len); - if (len) { - aStream.write(mURI.data(), len); - } + WriteElement(aStream, mLocalDest.size()); + mLocalDest.Write(aStream); + WriteElement(aStream, mURI.size()); + mURI.Write(aStream); } template RecordedLink::RecordedLink(S& aStream) : RecordedEventDerived(LINK) { ReadElement(aStream, mRect); - uint32_t len; - ReadElement(aStream, len); - mLocalDest.resize(size_t(len)); - if (len && aStream.good()) { - aStream.read(&mLocalDest.front(), len); + size_t localDestLen = 0; + ReadElement(aStream, localDestLen); + if (!aStream.good() || + (localDestLen && !mLocalDest.Read(aStream, localDestLen))) { + aStream.SetIsBad(); + return; } - ReadElement(aStream, len); - mURI.resize(size_t(len)); - if (len && aStream.good()) { - aStream.read(&mURI.front(), len); + size_t uriLen = 0; + ReadElement(aStream, uriLen); + if (!aStream.good() || (uriLen && !mURI.Read(aStream, uriLen))) { + aStream.SetIsBad(); + return; } } inline void RecordedLink::OutputSimpleEventInfo( std::stringstream& aStringStream) const { if (mLocalDest.empty()) { - aStringStream << "Link [" << mURI << " @ " << mRect << "]"; + aStringStream << "Link [" << mURI.data() << " @ " << mRect << "]"; } else { - aStringStream << "Link [" << mLocalDest << " / " << mURI << " @ " << mRect - << "]"; + aStringStream << "Link [" << mLocalDest.data() << " / " << mURI.data() + << " @ " << mRect << "]"; } } @@ -4503,35 +4524,33 @@ if (!dt) { return false; } - dt->Destination(mDestination.c_str(), mPoint); + dt->Destination(mDestination.data(), mPoint); return true; } template void RecordedDestination::Record(S& aStream) const { WriteElement(aStream, mPoint); - uint32_t len = mDestination.length(); - WriteElement(aStream, len); - if (len) { - aStream.write(mDestination.data(), len); - } + WriteElement(aStream, mDestination.size()); + mDestination.Write(aStream); } template RecordedDestination::RecordedDestination(S& aStream) : RecordedEventDerived(DESTINATION) { ReadElement(aStream, mPoint); - uint32_t len; + size_t len = 0; ReadElement(aStream, len); - mDestination.resize(size_t(len)); - if (len && aStream.good()) { - aStream.read(&mDestination.front(), len); + if (!aStream.good() || (len && !mDestination.Read(aStream, len))) { + aStream.SetIsBad(); + return; } } inline void RecordedDestination::OutputSimpleEventInfo( std::stringstream& aStringStream) const { - aStringStream << "Destination [" << mDestination << " @ " << mPoint << "]"; + aStringStream << "Destination [" << mDestination.data() << " @ " << mPoint + << "]"; } #define FOR_EACH_EVENT(f) \ diff -Nru firefox-esr-140.3.1esr/gfx/2d/RecordingTypes.h firefox-esr-140.4.0esr/gfx/2d/RecordingTypes.h --- firefox-esr-140.3.1esr/gfx/2d/RecordingTypes.h 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/2d/RecordingTypes.h 2025-10-09 15:35:30.000000000 +0000 @@ -74,9 +74,16 @@ template void ReadElementConstrained(S& aStream, T& aElement, const T& aMinValue, const T& aMaxValue) { - ElementStreamFormat::Read(aStream, aElement); - if (aElement < aMinValue || aElement > aMaxValue) { + std::underlying_type_t value = 0; + ReadElement(aStream, value); + + auto minInt = static_cast>(aMinValue); + auto maxInt = static_cast>(aMaxValue); + + if (value < minInt || value > maxInt) { aStream.SetIsBad(); + } else { + aElement = static_cast(value); } } template diff -Nru firefox-esr-140.3.1esr/gfx/2d/SourceSurfaceSkia.cpp firefox-esr-140.4.0esr/gfx/2d/SourceSurfaceSkia.cpp --- firefox-esr-140.3.1esr/gfx/2d/SourceSurfaceSkia.cpp 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/2d/SourceSurfaceSkia.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -131,12 +131,18 @@ aFormat != SurfaceFormat::UNKNOWN ? aFormat : SkiaColorTypeToGfxFormat(pixmap.colorType(), pixmap.alphaType()); + if (pixmap.info().bytesPerPixel() != BytesPerPixel(mFormat)) { + return false; + } mStride = pixmap.rowBytes(); } else if (aFormat != SurfaceFormat::UNKNOWN) { mFormat = aFormat; - SkImageInfo info = MakeSkiaImageInfo(mSize, mFormat); + const SkImageInfo& info = aImage->imageInfo(); + if (info.bytesPerPixel() != BytesPerPixel(mFormat)) { + return false; + } mStride = GetAlignedStride<4>(info.width(), info.bytesPerPixel()); - if (!mStride) { + if (mStride <= 0 || size_t(mStride) < info.minRowBytes64()) { return false; } } else { diff -Nru firefox-esr-140.3.1esr/gfx/layers/client/TextureClient.cpp firefox-esr-140.4.0esr/gfx/layers/client/TextureClient.cpp --- firefox-esr-140.3.1esr/gfx/layers/client/TextureClient.cpp 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/layers/client/TextureClient.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -1000,6 +1000,10 @@ mData->EndDraw(); } +void TextureData::ReturnDrawTarget(already_AddRefed aDT) { + RefPtr dt(aDT); +} + already_AddRefed TextureClient::BorrowSnapshot() { MOZ_ASSERT(mIsLocked); diff -Nru firefox-esr-140.3.1esr/gfx/layers/client/TextureClient.h firefox-esr-140.4.0esr/gfx/layers/client/TextureClient.h --- firefox-esr-140.3.1esr/gfx/layers/client/TextureClient.h 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/layers/client/TextureClient.h 2025-10-09 15:35:30.000000000 +0000 @@ -253,6 +253,8 @@ return nullptr; } + virtual void ReturnDrawTarget(already_AddRefed aDT); + /** * When the TextureData is not being Unlocked, this can be used to inform a * TextureData that drawing has finished until the next BorrowDrawTarget. diff -Nru firefox-esr-140.3.1esr/gfx/layers/ipc/CanvasTranslator.cpp firefox-esr-140.4.0esr/gfx/layers/ipc/CanvasTranslator.cpp --- firefox-esr-140.3.1esr/gfx/layers/ipc/CanvasTranslator.cpp 2025-09-22 21:16:09.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/layers/ipc/CanvasTranslator.cpp 2025-10-09 15:35:30.000000000 +0000 @@ -526,11 +526,16 @@ NotifyRequiresRefresh(aTextureOwnerId); const auto& info = mTextureInfo[aTextureOwnerId]; + if (info.mTextureData) { + return true; + } if (RefPtr dt = CreateFallbackDrawTarget(info.mRefPtr, aTextureOwnerId, aWebgl->GetSize(), aWebgl->GetFormat())) { bool success = aWebgl->CopyToFallback(dt); - AddDrawTarget(info.mRefPtr, dt); + if (info.mRefPtr) { + AddDrawTarget(info.mRefPtr, dt); + } return success; } return false; @@ -926,6 +931,9 @@ bool CanvasTranslator::CreateReferenceTexture() { if (mReferenceTextureData) { + if (mBaseDT) { + mReferenceTextureData->ReturnDrawTarget(mBaseDT.forget()); + } mReferenceTextureData->Unlock(); } @@ -1078,16 +1086,18 @@ if (gfx::DrawTargetWebgl* webgl = GetDrawTargetWebgl(aTextureOwnerId)) { if (auto shmemHandle = webgl->TakeShmemHandle()) { // Lock the DT so that it doesn't get removed while shmem is in transit. - mTextureInfo[aTextureOwnerId].mLocked++; + AddTextureKeepAlive(aTextureOwnerId); nsCOMPtr thread = gfx::CanvasRenderThread::GetCanvasRenderThread(); RefPtr translator = this; SendSnapshotShmem(aTextureOwnerId, std::move(shmemHandle)) ->Then( thread, __func__, - [=](bool) { translator->RemoveTexture(aTextureOwnerId); }, + [=](bool) { + translator->RemoveTextureKeepAlive(aTextureOwnerId); + }, [=](ipc::ResponseRejectReason) { - translator->RemoveTexture(aTextureOwnerId); + translator->RemoveTextureKeepAlive(aTextureOwnerId); }); } } @@ -1097,14 +1107,12 @@ const RemoteTextureOwnerId aTextureOwnerId) { if (gfx::DrawTargetWebgl* webgl = GetDrawTargetWebgl(aTextureOwnerId, false)) { - if (const auto& fallback = mTextureInfo[aTextureOwnerId].mTextureData) { + if (RefPtr dt = + mTextureInfo[aTextureOwnerId].mFallbackDrawTarget) { // If there was a fallback, copy the fallback to the software framebuffer // shmem for reading. - if (RefPtr dt = fallback->BorrowDrawTarget()) { - if (RefPtr snapshot = dt->Snapshot()) { - webgl->CopySurface(snapshot, snapshot->GetRect(), - gfx::IntPoint(0, 0)); - } + if (RefPtr snapshot = dt->Snapshot()) { + webgl->CopySurface(snapshot, snapshot->GetRect(), gfx::IntPoint(0, 0)); } } else { // Otherwise, just ensure the software framebuffer is up to date. @@ -1207,6 +1215,7 @@ TextureInfo& info = mTextureInfo[aTextureOwnerId]; info.mRefPtr = aRefPtr; + info.mFallbackDrawTarget = dt; info.mTextureData = std::move(textureData); info.mTextureLockMode = kInitMode; } while (!dt && CheckForFreshCanvasDevice(__LINE__)); @@ -1223,6 +1232,19 @@ return nullptr; } + { + auto result = mTextureInfo.find(aTextureOwnerId); + if (result != mTextureInfo.end()) { + const TextureInfo& info = result->second; + if (info.mTextureData || info.mDrawTarget) { +#ifndef FUZZING_SNAPSHOT + MOZ_DIAGNOSTIC_CRASH("DrawTarget already exists"); +#endif + return nullptr; + } + } + } + RefPtr dt; if (gfx::gfxVars::UseAcceleratedCanvas2D()) { if (EnsureSharedContextWebgl()) { @@ -1249,7 +1271,9 @@ dt = CreateFallbackDrawTarget(aRefPtr, aTextureOwnerId, aSize, aFormat); } - AddDrawTarget(aRefPtr, dt); + if (dt && aRefPtr) { + AddDrawTarget(aRefPtr, dt); + } return dt.forget(); } @@ -1272,9 +1296,23 @@ Unused << SendNotifyTextureDestruction(aTextureOwnerId); } +void CanvasTranslator::AddTextureKeepAlive(const RemoteTextureOwnerId& aId) { + auto result = mTextureInfo.find(aId); + if (result == mTextureInfo.end()) { + return; + } + auto& info = result->second; + ++info.mKeepAlive; +} + +void CanvasTranslator::RemoveTextureKeepAlive(const RemoteTextureOwnerId& aId) { + RemoveTexture(aId, 0, 0, false); +} + void CanvasTranslator::RemoveTexture(const RemoteTextureOwnerId aTextureOwnerId, RemoteTextureTxnType aTxnType, - RemoteTextureTxnId aTxnId) { + RemoteTextureTxnId aTxnId, + bool aFinalize) { // Don't erase the texture if still in use auto result = mTextureInfo.find(aTextureOwnerId); if (result == mTextureInfo.end()) { @@ -1284,10 +1322,21 @@ if (mRemoteTextureOwner && aTxnType && aTxnId) { mRemoteTextureOwner->WaitForTxn(aTextureOwnerId, aTxnType, aTxnId); } - if (--info.mLocked > 0) { + // Remove the DrawTarget only if this is being called from a recorded event + // or if there are no remaining keepalives. If this is being called only to + // remove a keepalive without forcing removal, then the DrawTarget is still + // being used by the recording. + if ((aFinalize || info.mKeepAlive <= 1) && info.mRefPtr) { + RemoveDrawTarget(info.mRefPtr); + info.mRefPtr = ReferencePtr(); + } + if (--info.mKeepAlive > 0) { return; } if (info.mTextureData) { + if (info.mFallbackDrawTarget) { + info.mTextureData->ReturnDrawTarget(info.mFallbackDrawTarget.forget()); + } info.mTextureData->Unlock(); } if (mRemoteTextureOwner) { @@ -1455,9 +1504,13 @@ mUsedWrapperForSurfaceDescriptor = nullptr; mUsedSurfaceDescriptorForSurfaceDescriptor = Nothing(); - for (auto const& entry : mTextureInfo) { - if (entry.second.mTextureData) { - entry.second.mTextureData->Unlock(); + for (auto& entry : mTextureInfo) { + auto& info = entry.second; + if (info.mTextureData) { + if (info.mFallbackDrawTarget) { + info.mTextureData->ReturnDrawTarget(info.mFallbackDrawTarget.forget()); + } + info.mTextureData->Unlock(); } } mTextureInfo.clear(); @@ -1470,8 +1523,10 @@ if (sSharedContext && sSharedContext->hasOneRef()) { sSharedContext->ClearCaches(); } - mBaseDT = nullptr; if (mReferenceTextureData) { + if (mBaseDT) { + mReferenceTextureData->ReturnDrawTarget(mBaseDT.forget()); + } mReferenceTextureData->Unlock(); } if (mRemoteTextureOwner) { diff -Nru firefox-esr-140.3.1esr/gfx/layers/ipc/CanvasTranslator.h firefox-esr-140.4.0esr/gfx/layers/ipc/CanvasTranslator.h --- firefox-esr-140.3.1esr/gfx/layers/ipc/CanvasTranslator.h 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/layers/ipc/CanvasTranslator.h 2025-10-09 15:35:30.000000000 +0000 @@ -210,8 +210,8 @@ * @param aTextureOwnerId the texture ID to remove */ void RemoveTexture(const RemoteTextureOwnerId aTextureOwnerId, - RemoteTextureTxnType aTxnType = 0, - RemoteTextureTxnId aTxnId = 0); + RemoteTextureTxnType aTxnType, RemoteTextureTxnId aTxnId, + bool aFinalize = true); bool LockTexture(const RemoteTextureOwnerId aTextureOwnerId, OpenMode aMode, bool aInvalidContents = false); @@ -560,9 +560,10 @@ gfx::ReferencePtr mRefPtr; UniquePtr mTextureData; RefPtr mDrawTarget; + RefPtr mFallbackDrawTarget; bool mNotifiedRequiresRefresh = false; // Ref-count of how active uses of the DT. Avoids deletion when locked. - int32_t mLocked = 1; + int32_t mKeepAlive = 1; OpenMode mTextureLockMode = OpenMode::OPEN_NONE; gfx::DrawTargetWebgl* GetDrawTargetWebgl( @@ -571,6 +572,10 @@ std::unordered_map mTextureInfo; + + void AddTextureKeepAlive(const RemoteTextureOwnerId& aId); + void RemoveTextureKeepAlive(const RemoteTextureOwnerId& aId); + nsRefPtrHashtable, gfx::DataSourceSurface> mDataSurfaces; gfx::ReferencePtr mMappedSurface; UniquePtr mPreparedMap; diff -Nru firefox-esr-140.3.1esr/gfx/thebes/gfxFont.cpp firefox-esr-140.4.0esr/gfx/thebes/gfxFont.cpp --- firefox-esr-140.3.1esr/gfx/thebes/gfxFont.cpp 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/thebes/gfxFont.cpp 2025-10-09 15:35:31.000000000 +0000 @@ -1427,6 +1427,7 @@ flags = flags | gfxFontEntry::SpaceFeatures::HasFeatures; uint32_t index = static_cast(s) >> 5; uint32_t bit = static_cast(s) & 0x1f; + MutexAutoLock lock(mFontEntry->mFeatureInfoLock); if (isDefaultFeature) { mFontEntry->mDefaultSubSpaceFeatures[index] |= (1 << bit); } else { @@ -1440,8 +1441,11 @@ // spaces in default features of default script? // ==> can't use word cache, skip GPOS analysis bool canUseWordCache = true; - if (HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, Script::COMMON)) { - canUseWordCache = false; + { + MutexAutoLock lock(mFontEntry->mFeatureInfoLock); + if (HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, Script::COMMON)) { + canUseWordCache = false; + } } // GPOS lookups - distinguish kerning from non-kerning features @@ -1460,6 +1464,7 @@ } if (MOZ_UNLIKELY(log)) { + MutexAutoLock lock(mFontEntry->mFeatureInfoLock); TimeDuration elapsed = TimeStamp::Now() - start; LOG_FONTINIT(( "(fontinit-spacelookups) font: %s - " @@ -1494,6 +1499,7 @@ } // default features have space lookups ==> true + MutexAutoLock lock(mFontEntry->mFeatureInfoLock); if (HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, Script::COMMON) || HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, aRunScript)) { return true; diff -Nru firefox-esr-140.3.1esr/gfx/thebes/gfxFontEntry.h firefox-esr-140.4.0esr/gfx/thebes/gfxFontEntry.h --- firefox-esr-140.3.1esr/gfx/thebes/gfxFontEntry.h 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/thebes/gfxFontEntry.h 2025-10-09 15:35:31.000000000 +0000 @@ -606,9 +606,10 @@ // bitvector of substitution space features per script, one each // for default and non-default features - uint32_t mDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) / 32]; - uint32_t - mNonDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) / 32]; + uint32_t mDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) / + 32] MOZ_GUARDED_BY(mFeatureInfoLock); + uint32_t mNonDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) / + 32] MOZ_GUARDED_BY(mFeatureInfoLock); mozilla::Atomic mUVSOffset; diff -Nru firefox-esr-140.3.1esr/gfx/thebes/gfxPlatform.cpp firefox-esr-140.4.0esr/gfx/thebes/gfxPlatform.cpp --- firefox-esr-140.3.1esr/gfx/thebes/gfxPlatform.cpp 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/thebes/gfxPlatform.cpp 2025-10-09 15:35:31.000000000 +0000 @@ -3205,6 +3205,13 @@ feature.Disable(FeatureStatus::Blocklisted, message.get(), failureId); } + if (!gfxConfig::IsEnabled(Feature::GPU_PROCESS) && + !StaticPrefs::dom_webgpu_allow_in_parent_AtStartup()) { + feature.Disable(FeatureStatus::UnavailableNoGpuProcess, + "Disabled without GPU process", + "FEATURE_WEBGPU_NO_GPU_PROCESS"_ns); + } + // When this condition changes, be sure to update the `run-if` // conditions in `dom/webgpu/tests/mochitest/*.toml` accordingly. #if !(defined(NIGHTLY_BUILD) || \ @@ -3348,7 +3355,8 @@ feature.UserForceEnable("Force-enabled by pref"); } - if (kIsAndroid && !gfxConfig::IsEnabled(Feature::GPU_PROCESS)) { + if (!StaticPrefs::gfx_canvas_accelerated_allow_in_parent_AtStartup() && + !gfxConfig::IsEnabled(Feature::GPU_PROCESS)) { feature.Disable(FeatureStatus::Blocked, "Disabled by GPU Process disabled", "FEATURE_FAILURE_DISABLED_BY_GPU_PROCESS_DISABLED"_ns); } else if (!gfxConfig::IsEnabled(Feature::WEBRENDER)) { @@ -3940,6 +3948,10 @@ swglFallbackAllowed && !gfxVars::UseSoftwareWebRender()) { // Fallback from WebRender to Software WebRender. gfxCriticalNote << "Fallback WR to SW-WR"; + DisableAcceleratedCanvasForFallback( + FeatureStatus::UnavailableNoHwCompositing, + "Disabled by fallback to Software WebRender", + "FEATURE_FAILURE_DISABLED_BY_FALLBACK_SOFTWARE_WEBRENDER"_ns); gfxVars::SetUseSoftwareWebRender(true); return true; } @@ -3951,10 +3963,34 @@ // otherwise get stuck with WebRender. As such, force a switch to Software // WebRender in this case. gfxCriticalNoteOnce << "Fallback WR to SW-WR, forced"; + DisableAcceleratedCanvasForFallback( + FeatureStatus::UnavailableNoHwCompositing, + "Disabled by fallback to Software WebRender", + "FEATURE_FAILURE_DISABLED_BY_FALLBACK_SOFTWARE_WEBRENDER"_ns); gfxVars::SetUseSoftwareWebRender(true); return true; } + if ((gfxVars::RemoteCanvasEnabled() && + !StaticPrefs::dom_webgpu_allow_in_parent_AtStartup()) || + (gfxVars::UseAcceleratedCanvas2D() && + !StaticPrefs::gfx_canvas_accelerated_allow_in_parent_AtStartup()) || + (gfxVars::AllowWebGPU() && + !StaticPrefs::gfx_canvas_remote_allow_in_parent_AtStartup()) || + (kIsAndroid && gfxVars::AllowWebglOop())) { + // Because content has a lot of control over inputs to remote canvas, we + // try to disable it as part of our final fallback step before disabling + // the GPU process. We don't actually support remote canvas in the parent + // process anyways, so this is not meaningfully worse from just + // switching directly to the parent process. + gfxCriticalNoteOnce << "Fallback SW-WR, disable remote canvas"; + DisableAllCanvasForFallback( + FeatureStatus::UnavailableNoGpuProcess, + "Disabled by fallback to GPU Process disabled", + "FEATURE_FAILURE_DISABLED_BY_FALLBACK_GPU_PROCESS_DISABLED"_ns); + return true; + } + if (aCrashAfterFinalFallback) { MOZ_CRASH("Fallback configurations exhausted"); } @@ -3965,25 +4001,46 @@ } /* static */ -void gfxPlatform::DisableGPUProcess() { +void gfxPlatform::DisableAcceleratedCanvasForFallback( + FeatureStatus aStatus, const char* aMessage, const nsACString& aFailureId) { + if (gfxVars::UseAcceleratedCanvas2D() && + !StaticPrefs::gfx_canvas_accelerated_allow_in_parent_AtStartup()) { + gfxConfig::Disable(Feature::ACCELERATED_CANVAS2D, aStatus, aMessage, + aFailureId); + gfxVars::SetUseAcceleratedCanvas2D(false); + } +} + +/* static */ +void gfxPlatform::DisableAllCanvasForFallback(FeatureStatus aStatus, + const char* aMessage, + const nsACString& aFailureId) { + DisableAcceleratedCanvasForFallback(aStatus, aMessage, aFailureId); + + if (gfxVars::AllowWebGPU() && + !StaticPrefs::dom_webgpu_allow_in_parent_AtStartup()) { + gfxConfig::Disable(Feature::WEBGPU, aStatus, aMessage, aFailureId); + gfxVars::SetAllowWebGPU(false); + } + if (gfxVars::RemoteCanvasEnabled() && !StaticPrefs::gfx_canvas_remote_allow_in_parent_AtStartup()) { - gfxConfig::Disable( - Feature::REMOTE_CANVAS, FeatureStatus::UnavailableNoGpuProcess, - "Disabled by GPU process disabled", - "FEATURE_REMOTE_CANVAS_DISABLED_BY_GPU_PROCESS_DISABLED"_ns); + gfxConfig::Disable(Feature::REMOTE_CANVAS, aStatus, aMessage, aFailureId); gfxVars::SetRemoteCanvasEnabled(false); } if (kIsAndroid) { // On android, enable out-of-process WebGL only when GPU process exists. gfxVars::SetAllowWebglOop(false); - // On android, enable accelerated canvas only when GPU process exists. - gfxVars::SetUseAcceleratedCanvas2D(false); - gfxConfig::Disable(Feature::ACCELERATED_CANVAS2D, FeatureStatus::Blocked, - "Disabled by GPU Process disabled", - "FEATURE_FAILURE_DISABLED_BY_GPU_PROCESS_DISABLED"_ns); } +} + +/* static */ +void gfxPlatform::DisableGPUProcess() { + DisableAllCanvasForFallback( + FeatureStatus::UnavailableNoGpuProcess, + "Disabled by fallback to GPU Process disabled", + "FEATURE_FAILURE_DISABLED_BY_FALLBACK_GPU_PROCESS_DISABLED"_ns); #if defined(XP_WIN) CompositeProcessD3D11FencesHolderMap::Init(); diff -Nru firefox-esr-140.3.1esr/gfx/thebes/gfxPlatform.h firefox-esr-140.4.0esr/gfx/thebes/gfxPlatform.h --- firefox-esr-140.3.1esr/gfx/thebes/gfxPlatform.h 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/gfx/thebes/gfxPlatform.h 2025-10-09 15:35:31.000000000 +0000 @@ -730,6 +730,13 @@ */ static bool PerfWarnings(); + static void DisableAcceleratedCanvasForFallback( + mozilla::gfx::FeatureStatus aStatus, const char* aMessage, + const nsACString& aFailureId); + + static void DisableAllCanvasForFallback(mozilla::gfx::FeatureStatus aStatus, + const char* aMessage, + const nsACString& aFailureId); static void DisableGPUProcess(); void NotifyCompositorCreated(mozilla::layers::LayersBackend aBackend); diff -Nru firefox-esr-140.3.1esr/intl/locale/EncodingToLang.cpp firefox-esr-140.4.0esr/intl/locale/EncodingToLang.cpp --- firefox-esr-140.3.1esr/intl/locale/EncodingToLang.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/EncodingToLang.cpp 2025-10-09 15:35:31.000000000 +0000 @@ -0,0 +1,66 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/intl/EncodingToLang.h" +#include "nsGkAtoms.h" +#include "nsLanguageAtomService.h" + +using namespace mozilla; +using namespace mozilla::intl; + +// Parallel arrays of Encoding and corresponding Lang atoms, +// in rough order of frequency. + +// Unfortunately, the `mozilla::NotNull` hack that was used to +// declare the encoding pointers in C++ does not allow putting +// the pointers in a static array without a run-time initializer, +// so our options are: +// 1. Putting the pointers in a static array in Rust, at a distance. +// 2. Run-time initializer. +// 3. Using pointer pointers, as seen here. +const mozilla::NotNull * + EncodingToLang::kEncodingsByRoughFrequency[] = { +#define _(encoding, lang) &encoding, +#include "EncodingsByFrequency.inc" +#undef _ +}; + +// This one isn't constant, as it gets adjusted during Initialize(). +// static +nsAtom* EncodingToLang::sLangs[] = { +#define _(encoding, lang) lang, +#include "EncodingsByFrequency.inc" +#undef _ +}; + +// static +nsAtom* EncodingToLang::Lookup(NotNull aEncoding) { + // Linear search should be fine, since in the vast, vast majority of cases, + // the search stops at the first or second item. + unsigned int i = 0; + for (; i < std::size(kEncodingsByRoughFrequency); i++) { + if (*kEncodingsByRoughFrequency[i] == aEncoding) { + return sLangs[i]; + } + } + MOZ_ASSERT(false, "The encoding is always supposed to be found in the array"); + return sLangs[0]; +} + +// static +void EncodingToLang::Initialize() { + sLangs[0] = nsLanguageAtomService::GetService()->GetLocaleLanguage(); + // We logically hold a strong ref to the first occurrence + // and a non-owning pointer to the rest. + NS_ADDREF(sLangs[0]); + for (size_t i = 1; i < std::size(sLangs); ++i) { + if (!sLangs[i]) { + sLangs[i] = sLangs[0]; + } + } +} + +// static +void EncodingToLang::Shutdown() { NS_RELEASE(sLangs[0]); } diff -Nru firefox-esr-140.3.1esr/intl/locale/EncodingToLang.h firefox-esr-140.4.0esr/intl/locale/EncodingToLang.h --- firefox-esr-140.3.1esr/intl/locale/EncodingToLang.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/EncodingToLang.h 2025-10-09 15:35:31.000000000 +0000 @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_intl_EncodingToLang_h +#define mozilla_intl_EncodingToLang_h + +#include "nsAtom.h" +#include "mozilla/Encoding.h" + +namespace mozilla::intl { + +class EncodingToLang { + public: + // Call once from nsLayoutStatics::Initialize() + static void Initialize(); + // Call once from nsLayoutStatics::Shutdown() + static void Shutdown(); + + // Looks up a font matching language atom by encoding. + // The atom will be kept alive until nsLayoutStatics::Shutdown(), + // which is why it's a raw pointer. + static nsAtom* Lookup(mozilla::NotNull aEncoding); + + private: + static nsAtom* sLangs[]; + static const mozilla::NotNull * + kEncodingsByRoughFrequency[]; +}; + +}; // namespace mozilla::intl + +#endif // mozilla_intl_EncodingToLang_h diff -Nru firefox-esr-140.3.1esr/intl/locale/EncodingsByFrequency.inc firefox-esr-140.4.0esr/intl/locale/EncodingsByFrequency.inc --- firefox-esr-140.3.1esr/intl/locale/EncodingsByFrequency.inc 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/EncodingsByFrequency.inc 2025-10-09 15:35:31.000000000 +0000 @@ -0,0 +1,50 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// List of encodings and their corresponding Lang atoms for font selection. +// nullptr indicates that the browser UI locale language will be used. + +// These are in roughly-estimated frequency order sometimes by group. +// The main thing is that UTF-8 is first and windows-1252 is second, +// followed by other encodings that were a legacy default somewhere. + _(UTF_8_ENCODING, nullptr) + _(WINDOWS_1252_ENCODING, nsGkAtoms::x_western) + _(GBK_ENCODING, nsGkAtoms::zh_cn) + _(SHIFT_JIS_ENCODING, nsGkAtoms::Japanese) + _(BIG5_ENCODING, nsGkAtoms::zh_tw) + _(EUC_KR_ENCODING, nsGkAtoms::ko) + _(WINDOWS_1250_ENCODING, nsGkAtoms::x_western) + _(WINDOWS_1251_ENCODING, nsGkAtoms::x_cyrillic) + _(WINDOWS_1253_ENCODING, nsGkAtoms::el) + _(WINDOWS_1254_ENCODING, nsGkAtoms::x_western) + _(WINDOWS_1255_ENCODING, nsGkAtoms::he) + _(WINDOWS_1256_ENCODING, nsGkAtoms::ar) + _(WINDOWS_1257_ENCODING, nsGkAtoms::x_western) + _(WINDOWS_1258_ENCODING, nsGkAtoms::x_western) + _(WINDOWS_874_ENCODING, nsGkAtoms::th) + _(ISO_8859_2_ENCODING, nsGkAtoms::x_western) + _(EUC_JP_ENCODING, nsGkAtoms::Japanese) + _(GB18030_ENCODING, nsGkAtoms::zh_cn) + _(UTF_16BE_ENCODING, nullptr) + _(UTF_16LE_ENCODING, nullptr) + _(ISO_2022_JP_ENCODING, nsGkAtoms::Japanese) + _(ISO_8859_3_ENCODING, nsGkAtoms::x_western) + _(ISO_8859_4_ENCODING, nsGkAtoms::x_western) + _(ISO_8859_5_ENCODING, nsGkAtoms::x_cyrillic) + _(ISO_8859_6_ENCODING, nsGkAtoms::ar) + _(ISO_8859_7_ENCODING, nsGkAtoms::el) + _(ISO_8859_8_ENCODING, nsGkAtoms::he) + _(ISO_8859_8_I_ENCODING, nsGkAtoms::he) + _(ISO_8859_10_ENCODING, nsGkAtoms::x_western) + _(ISO_8859_13_ENCODING, nsGkAtoms::x_western) + _(ISO_8859_14_ENCODING, nsGkAtoms::x_western) + _(ISO_8859_15_ENCODING, nsGkAtoms::x_western) + _(ISO_8859_16_ENCODING, nsGkAtoms::x_western) + _(KOI8_R_ENCODING, nsGkAtoms::x_cyrillic) + _(KOI8_U_ENCODING, nsGkAtoms::x_cyrillic) + _(MACINTOSH_ENCODING, nsGkAtoms::x_western) + _(REPLACEMENT_ENCODING, nullptr) + _(IBM866_ENCODING, nsGkAtoms::x_cyrillic) + _(X_MAC_CYRILLIC_ENCODING, nsGkAtoms::x_cyrillic) + _(X_USER_DEFINED_ENCODING, nullptr) diff -Nru firefox-esr-140.3.1esr/intl/locale/encodingsgroups.properties firefox-esr-140.4.0esr/intl/locale/encodingsgroups.properties --- firefox-esr-140.3.1esr/intl/locale/encodingsgroups.properties 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/encodingsgroups.properties 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# x-unicode is assumed for encodings not listed here - -Big5=zh-TW -EUC-JP=ja -EUC-KR=ko -gb18030=zh-CN -GBK=zh-CN -IBM866=x-cyrillic -ISO-2022-JP=ja -ISO-8859-3=x-western -ISO-8859-4=x-western -ISO-8859-5=x-cyrillic -ISO-8859-6=ar -ISO-8859-7=el -ISO-8859-8=he -ISO-8859-8-I=he -ISO-8859-10=x-western -ISO-8859-13=x-western -ISO-8859-14=x-western -ISO-8859-15=x-western -ISO-8859-16=x-western -ISO-8859-2=x-western -KOI8-R=x-cyrillic -KOI8-U=x-cyrillic -Shift_JIS=ja -windows-1250=x-western -windows-1251=x-cyrillic -windows-1252=x-western -windows-1253=el -windows-1254=x-western -windows-1255=he -windows-1256=ar -windows-1257=x-western -windows-1258=x-western -windows-874=th -x-mac-cyrillic=x-cyrillic diff -Nru firefox-esr-140.3.1esr/intl/locale/moz.build firefox-esr-140.4.0esr/intl/locale/moz.build --- firefox-esr-140.3.1esr/intl/locale/moz.build 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/moz.build 2025-10-09 15:35:31.000000000 +0000 @@ -35,6 +35,7 @@ EXPORTS.mozilla.intl += [ "AppDateTimeFormat.h", + "EncodingToLang.h", "LocaleService.h", "MozLocaleBindings.h", "OSPreferences.h", @@ -43,6 +44,7 @@ UNIFIED_SOURCES += [ "AppDateTimeFormat.cpp", + "EncodingToLang.cpp", "LocaleService.cpp", "nsLanguageAtomService.cpp", "nsUConvPropertySearch.cpp", @@ -68,13 +70,6 @@ "language.properties", ] -prefixes = ("encodingsgroups",) - -for prefix in prefixes: - input_file = prefix + ".properties" - header = prefix + ".properties.h" - GeneratedFile(header, script="props2arrays.py", inputs=[input_file]) - if CONFIG["ENABLE_TESTS"]: DIRS += ["tests/gtest"] diff -Nru firefox-esr-140.3.1esr/intl/locale/nsLanguageAtomService.cpp firefox-esr-140.4.0esr/intl/locale/nsLanguageAtomService.cpp --- firefox-esr-140.3.1esr/intl/locale/nsLanguageAtomService.cpp 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/nsLanguageAtomService.cpp 2025-10-09 15:35:31.000000000 +0000 @@ -20,10 +20,6 @@ using namespace mozilla; using mozilla::intl::OSPreferences; -static constexpr nsUConvProp encodingsGroups[] = { -#include "encodingsgroups.properties.h" -}; - // List of mozilla internal x-* tags that map to themselves (see bug 256257) static constexpr nsStaticAtom* kLangGroups[] = { // This list must be sorted! @@ -110,18 +106,6 @@ return GetLanguageGroup(lang); } -already_AddRefed nsLanguageAtomService::LookupCharSet( - NotNull aEncoding) { - nsAutoCString charset; - aEncoding->Name(charset); - nsAutoCString group; - if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue( - encodingsGroups, std::size(encodingsGroups), charset, group))) { - return RefPtr(nsGkAtoms::Unicode).forget(); - } - return NS_Atomize(group); -} - nsAtom* nsLanguageAtomService::GetLocaleLanguage() { { AutoReadLock lock(mLock); diff -Nru firefox-esr-140.3.1esr/intl/locale/nsLanguageAtomService.h firefox-esr-140.4.0esr/intl/locale/nsLanguageAtomService.h --- firefox-esr-140.3.1esr/intl/locale/nsLanguageAtomService.h 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/nsLanguageAtomService.h 2025-10-09 15:35:31.000000000 +0000 @@ -33,7 +33,6 @@ static void Shutdown(); nsStaticAtom* LookupLanguage(const nsACString& aLanguage); - already_AddRefed LookupCharSet(NotNull aCharSet); nsAtom* GetLocaleLanguage(); // Returns the language group that the specified language is a part of, diff -Nru firefox-esr-140.3.1esr/intl/locale/props2arrays.py firefox-esr-140.4.0esr/intl/locale/props2arrays.py --- firefox-esr-140.3.1esr/intl/locale/props2arrays.py 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/intl/locale/props2arrays.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -def main(header, propFile): - mappings = {} - - with open(propFile) as f: - for line in f: - line = line.strip() - if not line.startswith("#"): - parts = line.split("=", 1) - if len(parts) == 2 and len(parts[0]) > 0: - mappings[parts[0].strip()] = parts[1].strip() - - keys = mappings.keys() - - header.write("// This is a generated file. Please do not edit.\n") - header.write("// Please edit the corresponding .properties file instead.\n") - - entries = [ - '{ "%s", "%s", %d }' % (key, mappings[key], len(mappings[key])) - for key in sorted(keys) - ] - header.write(",\n".join(entries) + "\n") diff -Nru firefox-esr-140.3.1esr/js/public/CallArgs.h firefox-esr-140.4.0esr/js/public/CallArgs.h --- firefox-esr-140.3.1esr/js/public/CallArgs.h 2025-09-22 21:16:11.000000000 +0000 +++ firefox-esr-140.4.0esr/js/public/CallArgs.h 2025-10-09 15:35:31.000000000 +0000 @@ -210,7 +210,7 @@ /* Returns the i-th zero-indexed argument. */ MutableHandleValue operator[](unsigned i) const { - MOZ_ASSERT(i < argc_); + MOZ_RELEASE_ASSERT(i < argc_); return MutableHandleValue::fromMarkedLocation(&this->argv_[i]); } diff -Nru firefox-esr-140.3.1esr/js/src/jit/x86-shared/BaseAssembler-x86-shared.h firefox-esr-140.4.0esr/js/src/jit/x86-shared/BaseAssembler-x86-shared.h --- firefox-esr-140.3.1esr/js/src/jit/x86-shared/BaseAssembler-x86-shared.h 2025-09-22 21:16:11.000000000 +0000 +++ firefox-esr-140.4.0esr/js/src/jit/x86-shared/BaseAssembler-x86-shared.h 2025-10-09 15:35:32.000000000 +0000 @@ -1838,24 +1838,24 @@ void cmpb_rr(RegisterID rhs, RegisterID lhs) { spew("cmpb %s, %s", GPReg8Name(rhs), GPReg8Name(lhs)); - m_formatter.oneByteOp(OP_CMP_GbEb, rhs, lhs); + m_formatter.oneByteOp8(OP_CMP_GbEb, rhs, lhs); } void cmpb_rm(RegisterID rhs, int32_t offset, RegisterID base) { spew("cmpb %s, " MEM_ob, GPReg8Name(rhs), ADDR_ob(offset, base)); - m_formatter.oneByteOp(OP_CMP_EbGb, offset, base, rhs); + m_formatter.oneByteOp8(OP_CMP_EbGb, offset, base, rhs); } void cmpb_rm(RegisterID rhs, int32_t offset, RegisterID base, RegisterID index, int scale) { spew("cmpb %s, " MEM_obs, GPReg8Name(rhs), ADDR_obs(offset, base, index, scale)); - m_formatter.oneByteOp(OP_CMP_EbGb, offset, base, index, scale, rhs); + m_formatter.oneByteOp8(OP_CMP_EbGb, offset, base, index, scale, rhs); } void cmpb_rm(RegisterID rhs, const void* addr) { spew("cmpb %s, %p", GPReg8Name(rhs), addr); - m_formatter.oneByteOp(OP_CMP_EbGb, addr, rhs); + m_formatter.oneByteOp8(OP_CMP_EbGb, addr, rhs); } void cmpb_ir(int32_t rhs, RegisterID lhs) { @@ -1866,9 +1866,9 @@ spew("cmpb $0x%x, %s", uint32_t(rhs), GPReg8Name(lhs)); if (lhs == rax) { - m_formatter.oneByteOp(OP_CMP_EAXIb); + m_formatter.oneByteOp8(OP_CMP_EAXIb); } else { - m_formatter.oneByteOp(OP_GROUP1_EbIb, lhs, GROUP1_OP_CMP); + m_formatter.oneByteOp8(OP_GROUP1_EbIb, lhs, GROUP1_OP_CMP); } m_formatter.immediate8(rhs); } @@ -2054,7 +2054,7 @@ void testb_rr(RegisterID rhs, RegisterID lhs) { spew("testb %s, %s", GPReg8Name(rhs), GPReg8Name(lhs)); - m_formatter.oneByteOp(OP_TEST_EbGb, lhs, rhs); + m_formatter.oneByteOp8(OP_TEST_EbGb, lhs, rhs); } void testl_ir(int32_t rhs, RegisterID lhs) { @@ -6095,6 +6095,13 @@ m_buffer.putByteUnchecked(opcode + (r & 7)); } + void oneByteOp8(OneByteOpcodeID opcode, RegisterID rm, RegisterID reg) { + m_buffer.ensureSpace(MaxInstructionSize); + emitRexIf(byteRegRequiresRex(reg) || byteRegRequiresRex(rm), reg, 0, rm); + m_buffer.putByteUnchecked(opcode); + registerModRM(rm, reg); + } + void oneByteOp8(OneByteOpcodeID opcode, RegisterID rm, GroupOpcodeID groupOp) { m_buffer.ensureSpace(MaxInstructionSize); diff -Nru firefox-esr-140.3.1esr/js/src/jsapi-tests/moz.build firefox-esr-140.4.0esr/js/src/jsapi-tests/moz.build --- firefox-esr-140.3.1esr/js/src/jsapi-tests/moz.build 2025-09-22 21:16:10.000000000 +0000 +++ firefox-esr-140.4.0esr/js/src/jsapi-tests/moz.build 2025-10-09 15:35:31.000000000 +0000 @@ -17,6 +17,7 @@ "testArrayBufferOrViewAPI.cpp", "testArrayBufferView.cpp", "testArrayBufferWithUserOwnedContents.cpp", + "testAssemblerCodeGen.cpp", "testAtomicOperations.cpp", "testAtomizeUtf8NonAsciiLatin1CodePoint.cpp", "testAtomizeWithoutActiveZone.cpp", diff -Nru firefox-esr-140.3.1esr/js/src/jsapi-tests/testAssemblerCodeGen.cpp firefox-esr-140.4.0esr/js/src/jsapi-tests/testAssemblerCodeGen.cpp --- firefox-esr-140.3.1esr/js/src/jsapi-tests/testAssemblerCodeGen.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/js/src/jsapi-tests/testAssemblerCodeGen.cpp 2025-10-09 15:35:32.000000000 +0000 @@ -0,0 +1,140 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "jit/Disassemble.h" +#include "jit/Linker.h" +#include "jit/MacroAssembler.h" +#include "js/GCAPI.h" + +#include "jsapi-tests/tests.h" +#include "jsapi-tests/testsJit.h" + +#include "jit/MacroAssembler-inl.h" + +using namespace js; +using namespace js::jit; + +#if defined(JS_JITSPEW) && defined(JS_CODEGEN_X64) +using DisasmCharVector = js::Vector; +static MOZ_THREAD_LOCAL(DisasmCharVector*) disasmResult; + +static void CaptureDisasmText(const char* text) { + // Skip the instruction offset (8 bytes) and two space characters, because the + // offsets make it harder to modify the test. + MOZ_RELEASE_ASSERT(strlen(text) > 10); + text = text + 10; + MOZ_RELEASE_ASSERT(disasmResult.get()->append(text, text + strlen(text))); + MOZ_RELEASE_ASSERT(disasmResult.get()->append('\n')); +} + +BEGIN_TEST(testAssemblerCodeGen_x64_cmp8) { + TempAllocator tempAlloc(&cx->tempLifoAlloc()); + JitContext jcx(cx); + StackMacroAssembler masm(cx, tempAlloc); + AutoCreatedBy acb(masm, __func__); + + masm.cmp8(Operand(rax), rbx); + masm.cmp8(Operand(rax), rdi); + masm.cmp8(Operand(rdi), rax); + masm.cmp8(Operand(rdi), rdi); + masm.cmp8(Operand(r10), r13); + + masm.cmp8(Operand(Address(rax, 0)), rbx); + masm.cmp8(Operand(Address(rax, 1)), rdi); + masm.cmp8(Operand(Address(rdi, 0x10)), rax); + masm.cmp8(Operand(Address(rdi, 0x20)), rdi); + masm.cmp8(Operand(Address(r10, 0x30)), r11); + masm.cmp8(Operand(Address(rsp, 0x40)), rdi); + + masm.cmp8(Operand(BaseIndex(rax, rbx, TimesFour, 0)), rcx); + masm.cmp8(Operand(BaseIndex(rax, rbx, TimesEight, 1)), rdi); + masm.cmp8(Operand(BaseIndex(rdi, rax, TimesOne, 2)), rdi); + masm.cmp8(Operand(BaseIndex(rax, rdi, TimesTwo, 3)), rdi); + masm.cmp8(Operand(BaseIndex(r10, r11, TimesFour, 4)), r12); + masm.cmp8(Operand(BaseIndex(rsp, rax, TimesEight, 5)), rdi); + + void* ptr = (void*)0x1234; + masm.cmp8(Operand(AbsoluteAddress(ptr)), rax); + masm.cmp8(Operand(AbsoluteAddress(ptr)), rsi); + masm.cmp8(Operand(AbsoluteAddress(ptr)), r15); + + // For Imm32(0) we emit a |test| instruction. + masm.cmp8(Operand(rax), Imm32(0)); + masm.cmp8(Operand(rbx), Imm32(0)); + masm.cmp8(Operand(rdi), Imm32(0)); + masm.cmp8(Operand(r8), Imm32(0)); + masm.cmp8(Operand(rax), Imm32(1)); + masm.cmp8(Operand(rbx), Imm32(-1)); + masm.cmp8(Operand(rdi), Imm32(2)); + masm.cmp8(Operand(r8), Imm32(-2)); + + CHECK(!masm.oom()); + + Linker linker(masm); + JitCode* code = linker.newCode(cx, CodeKind::Other); + CHECK(code); + + DisasmCharVector disassembled; + disasmResult.set(&disassembled); + auto onFinish = mozilla::MakeScopeExit([&] { disasmResult.set(nullptr); }); + + { + // jit::Disassemble can't GC. + JS::AutoSuppressGCAnalysis nogc; + jit::Disassemble(code->raw(), code->instructionsSize(), &CaptureDisasmText); + } + + static const char* expected = + "3a c3 cmp %bl, %al\n" + "40 3a c7 cmp %dil, %al\n" + "40 3a f8 cmp %al, %dil\n" + "40 3a ff cmp %dil, %dil\n" + "45 3a d5 cmp %r13b, %r10b\n" + + "38 18 cmpb %bl, (%rax)\n" + "40 38 78 01 cmpb %dil, 0x01(%rax)\n" + "38 47 10 cmpb %al, 0x10(%rdi)\n" + "40 38 7f 20 cmpb %dil, 0x20(%rdi)\n" + "45 38 5a 30 cmpb %r11b, 0x30(%r10)\n" + "40 38 7c 24 40 cmpb %dil, 0x40(%rsp)\n" + + "38 0c 98 cmpb %cl, (%rax,%rbx,4)\n" + "40 38 7c d8 01 cmpb %dil, 0x01(%rax,%rbx,8)\n" + "40 38 7c 07 02 cmpb %dil, 0x02(%rdi,%rax,1)\n" + "40 38 7c 78 03 cmpb %dil, 0x03(%rax,%rdi,2)\n" + "47 38 64 9a 04 cmpb %r12b, 0x04(%r10,%r11,4)\n" + "40 38 7c c4 05 cmpb %dil, 0x05(%rsp,%rax,8)\n" + + "38 04 25 34 12 00 00 cmpb %al, 0x0000000000001234\n" + "40 38 34 25 34 12 00 00 cmpb %sil, 0x0000000000001234\n" + "44 38 3c 25 34 12 00 00 cmpb %r15b, 0x0000000000001234\n" + + "84 c0 test %al, %al\n" + "84 db test %bl, %bl\n" + "40 84 ff test %dil, %dil\n" + "45 84 c0 test %r8b, %r8b\n" + "3c 01 cmp $0x01, %al\n" + "80 fb ff cmp $-0x01, %bl\n" + "40 80 ff 02 cmp $0x02, %dil\n" + "41 80 f8 fe cmp $-0x02, %r8b\n" + + "0f 0b ud2\n"; + + bool matched = disassembled.length() == strlen(expected) && + memcmp(expected, disassembled.begin(), strlen(expected)) == 0; + if (!matched) { + CHECK(disassembled.append('\0')); + fprintf(stderr, "Generated:\n%s\n", disassembled.begin()); + fprintf(stderr, "Expected:\n%s\n", expected); + } + CHECK(matched); + + return true; +} +END_TEST(testAssemblerCodeGen_x64_cmp8) + +#endif // defined(JS_JITSPEW) && defined(JS_CODEGEN_X64) diff -Nru firefox-esr-140.3.1esr/js/src/vm/Iteration.cpp firefox-esr-140.4.0esr/js/src/vm/Iteration.cpp --- firefox-esr-140.3.1esr/js/src/vm/Iteration.cpp 2025-09-22 21:16:14.000000000 +0000 +++ firefox-esr-140.4.0esr/js/src/vm/Iteration.cpp 2025-10-09 15:35:35.000000000 +0000 @@ -39,6 +39,7 @@ #include "vm/Shape.h" #include "vm/StringType.h" #include "vm/TypedArrayObject.h" +#include "vm/Watchtower.h" #include "vm/NativeObject-inl.h" #include "vm/PlainObject-inl.h" // js::PlainObject::createWithTemplate @@ -278,6 +279,10 @@ bool PropertyEnumerator::enumerateNativeProperties(JSContext* cx) { Handle pobj = obj_.as(); + if (Watchtower::watchesPropertyValueChange(pobj)) { + markIndicesUnsupported(); + } + // We don't need to iterate over the shape's properties if we're only // interested in enumerable properties and the object is known to have no // enumerable properties. @@ -394,7 +399,7 @@ continue; } - PropertyIndex index = iter->isDataProperty() + PropertyIndex index = iter->isDataProperty() && iter->writable() ? PropertyIndex::ForSlot(pobj, iter->slot()) : PropertyIndex::Invalid(); if (!enumerate(cx, id, iter->enumerable(), index)) { diff -Nru firefox-esr-140.3.1esr/js/src/wasm/WasmJS.cpp firefox-esr-140.4.0esr/js/src/wasm/WasmJS.cpp --- firefox-esr-140.3.1esr/js/src/wasm/WasmJS.cpp 2025-09-22 21:16:14.000000000 +0000 +++ firefox-esr-140.4.0esr/js/src/wasm/WasmJS.cpp 2025-10-09 15:35:35.000000000 +0000 @@ -1561,8 +1561,23 @@ return obj; } -static bool GetBufferSource(JSContext* cx, JSObject* obj, unsigned errorNumber, - BytecodeSource* bytecode) { +struct MOZ_STACK_CLASS AutoPinBufferSourceLength { + explicit AutoPinBufferSourceLength(JSContext* cx, JSObject* bufferSource) + : bufferSource_(cx, bufferSource), + wasPinned_(!JS::PinArrayBufferOrViewLength(bufferSource_, true)) {} + ~AutoPinBufferSourceLength() { + if (!wasPinned_) { + JS::PinArrayBufferOrViewLength(bufferSource_, false); + } + } + + private: + Rooted bufferSource_; + bool wasPinned_; +}; + +static bool GetBytecodeSource(JSContext* cx, Handle obj, + unsigned errorNumber, BytecodeSource* bytecode) { JSObject* unwrapped = CheckedUnwrapStatic(obj); SharedMem dataPointer; @@ -1578,6 +1593,20 @@ return true; } +static bool GetBytecodeBuffer(JSContext* cx, Handle obj, + unsigned errorNumber, BytecodeBuffer* bytecode) { + BytecodeSource source; + if (!GetBytecodeSource(cx, obj, errorNumber, &source)) { + return false; + } + AutoPinBufferSourceLength pin(cx, obj); + if (!BytecodeBuffer::fromSource(source, bytecode)) { + ReportOutOfMemory(cx); + return false; + } + return true; +} + static bool ReportCompileWarnings(JSContext* cx, const UniqueCharsVector& warnings) { // Avoid spamming the console. @@ -1634,12 +1663,6 @@ return false; } - BytecodeSource source; - if (!GetBufferSource(cx, &callArgs[0].toObject(), JSMSG_WASM_BAD_BUF_ARG, - &source)) { - return false; - } - FeatureOptions options; if (!options.init(cx, callArgs.get(1))) { return false; @@ -1651,10 +1674,20 @@ return false; } + BytecodeSource source; + Rooted sourceObj(cx, &callArgs[0].toObject()); + if (!GetBytecodeSource(cx, sourceObj, JSMSG_WASM_BAD_BUF_ARG, &source)) { + return false; + } + UniqueChars error; UniqueCharsVector warnings; - SharedModule module = CompileBuffer( - *compileArgs, BytecodeBufferOrSource(source), &error, &warnings, nullptr); + SharedModule module; + { + AutoPinBufferSourceLength pin(cx, sourceObj.get()); + module = CompileBuffer(*compileArgs, BytecodeBufferOrSource(source), &error, + &warnings, nullptr); + } if (!ReportCompileWarnings(cx, warnings)) { return false; @@ -4504,22 +4537,6 @@ return true; } -static bool GetBufferSource(JSContext* cx, const CallArgs& callArgs, - const char* name, BytecodeSource* bytecode) { - if (!callArgs.requireAtLeast(cx, name, 1)) { - return false; - } - - if (!callArgs[0].isObject()) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, - JSMSG_WASM_BAD_BUF_ARG); - return false; - } - - return GetBufferSource(cx, &callArgs[0].toObject(), JSMSG_WASM_BAD_BUF_ARG, - bytecode); -} - static bool WebAssembly_compile(JSContext* cx, unsigned argc, Value* vp) { if (!EnsurePromiseSupport(cx)) { return false; @@ -4554,18 +4571,25 @@ return false; } - BytecodeSource source; - if (!GetBufferSource(cx, callArgs, "WebAssembly.compile", &source)) { + if (!callArgs.requireAtLeast(cx, "WebAssembly.compile", 1)) { return RejectWithPendingException(cx, promise, callArgs); } - if (!BytecodeBuffer::fromSource(source, &task->bytecode)) { - ReportOutOfMemory(cx); - return false; - } FeatureOptions options; if (!options.init(cx, callArgs.get(1))) { - return false; + return RejectWithPendingException(cx, promise, callArgs); + } + + if (!callArgs[0].isObject()) { + JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, + JSMSG_WASM_BAD_BUF_ARG); + return RejectWithPendingException(cx, promise, callArgs); + } + + Rooted sourceObj(cx, &callArgs[0].toObject()); + if (!GetBytecodeBuffer(cx, sourceObj, JSMSG_WASM_BAD_BUF_ARG, + &task->bytecode)) { + return RejectWithPendingException(cx, promise, callArgs); } if (!task->init(cx, options, "WebAssembly.compile")) { @@ -4658,14 +4682,10 @@ return false; } - BytecodeSource source; - if (!GetBufferSource(cx, firstArg, JSMSG_WASM_BAD_BUF_MOD_ARG, &source)) { + if (!GetBytecodeBuffer(cx, firstArg, JSMSG_WASM_BAD_BUF_MOD_ARG, + &task->bytecode)) { return RejectWithPendingException(cx, promise, callArgs); } - if (!BytecodeBuffer::fromSource(source, &task->bytecode)) { - ReportOutOfMemory(cx); - return false; - } if (!StartOffThreadPromiseHelperTask(cx, std::move(task))) { return false; @@ -4679,8 +4699,7 @@ static bool WebAssembly_validate(JSContext* cx, unsigned argc, Value* vp) { CallArgs callArgs = CallArgsFromVp(argc, vp); - BytecodeSource source; - if (!GetBufferSource(cx, callArgs, "WebAssembly.validate", &source)) { + if (!callArgs.requireAtLeast(cx, "WebAssembly.validate", 1)) { return false; } @@ -4689,8 +4708,24 @@ return false; } + if (!callArgs[0].isObject()) { + JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, + JSMSG_WASM_BAD_BUF_ARG); + return false; + } + + BytecodeSource source; + Rooted sourceObj(cx, &callArgs[0].toObject()); + if (!GetBytecodeSource(cx, sourceObj, JSMSG_WASM_BAD_BUF_ARG, &source)) { + return false; + } + UniqueChars error; - bool validated = Validate(cx, source, options, &error); + bool validated; + { + AutoPinBufferSourceLength pin(cx, sourceObj.get()); + validated = Validate(cx, source, options, &error); + } // If the reason for validation failure was OOM (signalled by null error // message), report out-of-memory so that validate's return is always diff -Nru firefox-esr-140.3.1esr/layout/build/nsLayoutStatics.cpp firefox-esr-140.4.0esr/layout/build/nsLayoutStatics.cpp --- firefox-esr-140.3.1esr/layout/build/nsLayoutStatics.cpp 2025-09-22 21:16:14.000000000 +0000 +++ firefox-esr-140.4.0esr/layout/build/nsLayoutStatics.cpp 2025-10-09 15:35:35.000000000 +0000 @@ -10,6 +10,7 @@ #include "nscore.h" #include "mozilla/intl/AppDateTimeFormat.h" +#include "mozilla/intl/EncodingToLang.h" #include "mozilla/dom/ServiceWorkerRegistrar.h" #include "nsAttrValue.h" #include "nsComputedDOMStyle.h" @@ -299,6 +300,8 @@ } #endif + mozilla::intl::EncodingToLang::Initialize(); + return NS_OK; } @@ -401,4 +404,6 @@ RestoreTabContentObserver::Shutdown(); mozilla::intl::LineBreakCache::Shutdown(); + + mozilla::intl::EncodingToLang::Shutdown(); } diff -Nru firefox-esr-140.3.1esr/layout/generic/nsIFrame.cpp firefox-esr-140.4.0esr/layout/generic/nsIFrame.cpp --- firefox-esr-140.3.1esr/layout/generic/nsIFrame.cpp 2025-09-22 21:16:14.000000000 +0000 +++ firefox-esr-140.4.0esr/layout/generic/nsIFrame.cpp 2025-10-09 15:35:35.000000000 +0000 @@ -10932,7 +10932,12 @@ TransformReferenceBox refBox(this); for (const auto otype : AllOverflowTypes()) { nsRect& o = aOverflowAreas.Overflow(otype); - o = nsDisplayTransform::TransformRect(o, this, refBox); + // If the overflow is empty, it can still have a non-zero length in one axis. + // Transforming such axis-bound rect can cause the resulting rect to be non-empty, + // e.g. by rotating the rect. + if (!o.IsEmpty()) { + o = nsDisplayTransform::TransformRect(o, this, refBox); + } } /* If we're the root of the 3d context, then we want to include the diff -Nru firefox-esr-140.3.1esr/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch firefox-esr-140.4.0esr/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch --- firefox-esr-140.3.1esr/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch 2025-09-22 21:16:15.000000000 +0000 +++ firefox-esr-140.4.0esr/media/libyuv/03_add_neon64_and_sve_gyp_targets.patch 2025-10-09 15:35:36.000000000 +0000 @@ -13,7 +13,7 @@ ], 'conditions': [ # Disable LTO in libyuv_neon target due to gcc 4.9 compiler bug. -@@ -83,16 +81,6 @@ +@@ -108,16 +106,6 @@ '-ffat-lto-objects', ], }], @@ -30,7 +30,19 @@ ], }], ['build_msa != 0', { -@@ -162,12 +150,105 @@ +@@ -157,6 +145,11 @@ + }], + ], + }], ++ ['target_arch == "arm64" and moz_have_arm_sve2 != 1 and build_with_mozilla == 1', { ++ 'defines' :[ ++ 'LIBYUV_DISABLE_SVE', ++ ] ++ }], + ], #conditions + 'defines': [ + # Enable the following 3 macros to turn off assembly for specified CPU. +@@ -186,12 +179,94 @@ '-Wl,--dynamic-linker,/system/bin/linker', ], }], @@ -43,17 +55,6 @@ + 'dependencies': [ + ':libyuv_sve', + ], -+ 'defines' :[ -+ 'LIBYUV_SVE', -+ ] -+ }], -+ ['target_arch == "arm64" and moz_have_arm_sve2 == 1 and build_with_mozilla == 1', { -+ 'dependencies': [ -+ ':libyuv_sve', -+ ], -+ 'defines' :[ -+ 'LIBYUV_SVE', -+ ] + }], ], #conditions }, diff -Nru firefox-esr-140.3.1esr/media/libyuv/libyuv/libyuv.gyp firefox-esr-140.4.0esr/media/libyuv/libyuv/libyuv.gyp --- firefox-esr-140.3.1esr/media/libyuv/libyuv/libyuv.gyp 2025-09-22 21:16:14.000000000 +0000 +++ firefox-esr-140.4.0esr/media/libyuv/libyuv/libyuv.gyp 2025-10-09 15:35:35.000000000 +0000 @@ -130,6 +130,11 @@ }], ], }], + ['target_arch == "arm64" and moz_have_arm_sve2 != 1 and build_with_mozilla == 1', { + 'defines' :[ + 'LIBYUV_DISABLE_SVE', + ] + }], ], #conditions 'defines': [ 'LIBYUV_DISABLE_SME', @@ -170,17 +175,6 @@ 'dependencies': [ ':libyuv_sve', ], - 'defines' :[ - 'LIBYUV_SVE', - ] - }], - ['target_arch == "arm64" and moz_have_arm_sve2 == 1 and build_with_mozilla == 1', { - 'dependencies': [ - ':libyuv_sve', - ], - 'defines' :[ - 'LIBYUV_SVE', - ] }], ], #conditions }, diff -Nru firefox-esr-140.3.1esr/mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/crashhelper/ICrashHelper.aidl firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/crashhelper/ICrashHelper.aidl --- firefox-esr-140.3.1esr/mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/crashhelper/ICrashHelper.aidl 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/crashhelper/ICrashHelper.aidl 2025-10-09 15:35:37.000000000 +0000 @@ -5,5 +5,5 @@ package org.mozilla.gecko.crashhelper; interface ICrashHelper { - boolean start(in int mainProcessPid, in ParcelFileDescriptor breakpadFd, in String minidumpPath, in ParcelFileDescriptor listenFd, in ParcelFileDescriptor serverFd); + boolean start(in ParcelFileDescriptor breakpadFd, in String minidumpPath, in ParcelFileDescriptor serverFd); } diff -Nru firefox-esr-140.3.1esr/mobile/android/geckoview/src/main/java/org/mozilla/gecko/crashhelper/CrashHelper.java firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/java/org/mozilla/gecko/crashhelper/CrashHelper.java --- firefox-esr-140.3.1esr/mobile/android/geckoview/src/main/java/org/mozilla/gecko/crashhelper/CrashHelper.java 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/java/org/mozilla/gecko/crashhelper/CrashHelper.java 2025-10-09 15:35:37.000000000 +0000 @@ -13,7 +13,6 @@ import android.os.DeadObjectException; import android.os.IBinder; import android.os.ParcelFileDescriptor; -import android.os.Process; import android.os.RemoteException; import android.system.ErrnoException; import android.system.Os; @@ -43,10 +42,8 @@ private static class CrashHelperBinder extends ICrashHelper.Stub { @Override public boolean start( - final int clientPid, final ParcelFileDescriptor breakpadFd, final String minidumpPath, - final ParcelFileDescriptor listenFd, final ParcelFileDescriptor serverFd) { // Launch the crash helper code, this will spin out a thread which will // handle the IPC with Firefox' other processes. When running junit tests @@ -56,8 +53,7 @@ // "steal" the crash report of another main process. We should add // additional separation within the crash generation code to prevent this // from happening even though it's very unlikely. - CrashHelper.crash_generator( - clientPid, breakpadFd.detachFd(), minidumpPath, listenFd.detachFd(), serverFd.detachFd()); + CrashHelper.crash_generator(breakpadFd.detachFd(), minidumpPath, serverFd.detachFd()); return false; } @@ -71,17 +67,14 @@ public static ServiceConnection createConnection( final ParcelFileDescriptor breakpadFd, final String minidumpPath, - final ParcelFileDescriptor listenFd, final ParcelFileDescriptor serverFd) { class CrashHelperConnection implements ServiceConnection { public CrashHelperConnection( final ParcelFileDescriptor breakpadFd, final String minidumpPath, - final ParcelFileDescriptor listenFd, final ParcelFileDescriptor serverFd) { mBreakpadFd = breakpadFd; mMinidumpPath = minidumpPath; - mListenFd = listenFd; mServerFd = serverFd; } @@ -89,7 +82,7 @@ public void onServiceConnected(final ComponentName name, final IBinder service) { final ICrashHelper helper = ICrashHelper.Stub.asInterface(service); try { - helper.start(Process.myPid(), mBreakpadFd, mMinidumpPath, mListenFd, mServerFd); + helper.start(mBreakpadFd, mMinidumpPath, mServerFd); } catch (final DeadObjectException e) { // The crash helper process died before we could start it, presumably // because of an out-of-memory condition. We don't attempt to restart @@ -107,24 +100,21 @@ ParcelFileDescriptor mBreakpadFd; String mMinidumpPath; - ParcelFileDescriptor mListenFd; ParcelFileDescriptor mServerFd; } - return new CrashHelperConnection(breakpadFd, minidumpPath, listenFd, serverFd); + return new CrashHelperConnection(breakpadFd, minidumpPath, serverFd); } public static final class Pipes { public final ParcelFileDescriptor mBreakpadClient; public final ParcelFileDescriptor mBreakpadServer; - public final ParcelFileDescriptor mListener; public final ParcelFileDescriptor mClient; public final ParcelFileDescriptor mServer; public Pipes( final FileDescriptor breakpadClientFd, final FileDescriptor breakpadServerFd, - final FileDescriptor listenerFd, final FileDescriptor clientFd, final FileDescriptor serverFd) throws IOException { @@ -133,10 +123,6 @@ if (!CrashHelper.set_breakpad_opts(mBreakpadServer.getFd())) { throw new IOException("Could not set the proper options on the Breakpad socket"); } - mListener = ParcelFileDescriptor.dup(listenerFd); - if (!CrashHelper.bind_and_listen(mListener.getFd())) { - throw new IOException("Could not listen on incoming connections"); - } mClient = ParcelFileDescriptor.dup(clientFd); mServer = ParcelFileDescriptor.dup(serverFd); } @@ -151,8 +137,8 @@ public static Pipes createCrashHelperPipes(final Context context) { try { // We can't set the required socket options for the Breakpad server socket - // or our own listener from here, so we delegate those parts to native - // functions in crashhelper_android.cpp. + // so we delegate those parts to native functions in + // crashhelper_android.cpp. GeckoLoader.doLoadLibrary(null, "crashhelper"); final FileDescriptor breakpad_client_fd = new FileDescriptor(); @@ -163,14 +149,11 @@ 0, breakpad_client_fd, breakpad_server_fd); - final FileDescriptor listener_fd = - Os.socket(OsConstants.AF_UNIX, OsConstants.SOCK_SEQPACKET, 0); final FileDescriptor client_fd = new FileDescriptor(); final FileDescriptor server_fd = new FileDescriptor(); Os.socketpair(OsConstants.AF_UNIX, OsConstants.SOCK_SEQPACKET, 0, client_fd, server_fd); - final Pipes pipes = - new Pipes(breakpad_client_fd, breakpad_server_fd, listener_fd, client_fd, server_fd); + final Pipes pipes = new Pipes(breakpad_client_fd, breakpad_server_fd, client_fd, server_fd); // Manually close all the file descriptors we created. // ParcelFileDescriptor instances in the Pipes object will close their @@ -178,7 +161,6 @@ // not, leaving us the job to clean them up. Os.close(breakpad_client_fd); Os.close(breakpad_server_fd); - Os.close(listener_fd); Os.close(client_fd); Os.close(server_fd); return pipes; @@ -192,10 +174,7 @@ // `stopWithTask` flag set in the manifest, so the service manager will // tear it down for us. - protected static native void crash_generator( - int clientPid, int breakpadFd, String minidumpPath, int listenFd, int serverFd); + protected static native void crash_generator(int breakpadFd, String minidumpPath, int serverFd); protected static native boolean set_breakpad_opts(int breakpadFd); - - protected static native boolean bind_and_listen(int listenFd); } diff -Nru firefox-esr-140.3.1esr/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java --- firefox-esr-140.3.1esr/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java 2025-10-09 15:35:36.000000000 +0000 @@ -459,8 +459,7 @@ final File minidumps = new File(context.getFilesDir(), "minidumps"); context.bindService( i, - CrashHelper.createConnection( - pipes.mBreakpadServer, minidumps.getPath(), pipes.mListener, pipes.mServer), + CrashHelper.createConnection(pipes.mBreakpadServer, minidumps.getPath(), pipes.mServer), Context.BIND_AUTO_CREATE); } catch (final ClassNotFoundException e) { Log.w(LOGTAG, "Couldn't find the crash helper class"); diff -Nru firefox-esr-140.3.1esr/modules/libpref/init/StaticPrefList.yaml firefox-esr-140.4.0esr/modules/libpref/init/StaticPrefList.yaml --- firefox-esr-140.3.1esr/modules/libpref/init/StaticPrefList.yaml 2025-09-22 21:16:15.000000000 +0000 +++ firefox-esr-140.4.0esr/modules/libpref/init/StaticPrefList.yaml 2025-10-09 15:35:37.000000000 +0000 @@ -3652,6 +3652,13 @@ value: false mirror: always +# Whether the type attribute in an is used as a hint for the Content-Type +# of the loading document. +- name: dom.object_embed.type_hint.enabled + type: bool + value: false + mirror: always + # Whether origin trials are enabled. - name: dom.origin-trials.enabled type: bool @@ -5434,6 +5441,17 @@ value: @IS_EARLY_BETA_OR_EARLIER@ mirror: always +# Is WebGPU allowed to run in the parent process? This should be false if +# on a platform that supports the GPU process, else true. +- name: dom.webgpu.allow-in-parent + type: bool +#if defined(XP_WIN) || defined(ANDROID) + value: false +#else + value: true +#endif + mirror: once + # Comma-separated list of wgpu backend names to permit in WebGPU adapters. # # If non-empty, this is parsed by `wgpu_core::instance::parse_backends_from_comma_list` to @@ -5500,6 +5518,11 @@ value: false mirror: always +- name: dom.webnotifications.forbid_nested_first_party.enabled + type: RelaxedAtomicBool + value: true + mirror: always + - name: dom.webnotifications.enabled type: RelaxedAtomicBool value: true @@ -6498,6 +6521,15 @@ #endif mirror: always +- name: gfx.canvas.accelerated.allow-in-parent + type: bool +#if defined(XP_WIN) || defined(ANDROID) + value: false +#else + value: true +#endif + mirror: once + # Whether to attempt to enable Accelerated Canvas2D regardless of blocklisting. - name: gfx.canvas.accelerated.force-enabled type: bool @@ -8178,7 +8210,7 @@ # a natural width and/or height. - name: image.natural-size-fallback.enabled type: RelaxedAtomicBool - value: @IS_NIGHTLY_BUILD@ + value: true mirror: always # Whether we record SVG images as blobs or not. @@ -13017,6 +13049,13 @@ value: false mirror: always +# When true, the hashing of the certificate will be done with the hashing +# algorithm specified in the cert instead of SHA256. +- name: network.auth.sspi_detect_hash + type: RelaxedAtomicBool + value: true + mirror: always + # See the full list of values in nsICookieService.idl. - name: network.cookie.cookieBehavior type: RelaxedAtomicInt32 @@ -16702,8 +16741,8 @@ mirror: always rust: true -# Skip direct attestation consent prompts (for tests). -- name: security.webauth.webauthn_testing_allow_direct_attestation +# Skip direct attestation consent prompts +- name: security.webauthn.always_allow_direct_attestation type: RelaxedAtomicBool value: false mirror: always diff -Nru firefox-esr-140.3.1esr/netwerk/dns/effective_tld_names.dat firefox-esr-140.4.0esr/netwerk/dns/effective_tld_names.dat --- firefox-esr-140.3.1esr/netwerk/dns/effective_tld_names.dat 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/netwerk/dns/effective_tld_names.dat 2025-10-09 15:35:37.000000000 +0000 @@ -5,8 +5,8 @@ // Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat, // rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported. -// VERSION: 2025-09-04_10-39-28_UTC -// COMMIT: a818607e99f2016e857e7a9b7cd9956aff9b5305 +// VERSION: 2025-10-01_18-52-14_UTC +// COMMIT: 0673151c3d770cbe2bdd0116ca615f24e73d370e // Instructions on pulling and using this list can be found at https://publicsuffix.org/list/. @@ -6796,7 +6796,7 @@ // newGTLDs -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2025-08-27T15:19:08Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2025-10-01T15:18:26Z // This list is auto-generated, don't edit it manually. // aaa : American Automobile Association, Inc. // https://www.iana.org/domains/root/db/aaa.html @@ -10694,7 +10694,7 @@ // https://www.iana.org/domains/root/db/weather.html weather -// weatherchannel : International Business Machines Corporation +// weatherchannel : The Weather Company, LLC // https://www.iana.org/domains/root/db/weatherchannel.html weatherchannel @@ -11320,12 +11320,6 @@ // Submitted by Przemyslaw Plewa beep.pl -// Airkit : https://www.airkit.com/ -// Submitted by Grant Cooksey -airkitapps.com -airkitapps-au.com -airkitapps.eu - // Aiven : https://aiven.io/ // Submitted by Aiven Security Team aiven.app @@ -12455,6 +12449,8 @@ canva-apps.cn my.canvasite.cn canva-apps.com +rice-labs.com +canva.run my.canva.site // Carrd : https://carrd.co @@ -12537,10 +12533,12 @@ cloudns.be cloud-ip.biz cloudns.biz +cloud-ip.cc cloudns.cc cloudns.ch cloudns.cl cloudns.club +abrdns.com dnsabr.com ip-ddns.com cloudns.cx @@ -12832,10 +12830,6 @@ // Submitted by Infra Team durumis.com -// Drobo : http://www.drobo.com/ -// Submitted by Ricardo Padilha -mydrobo.com - // DuckDNS : http://www.duckdns.org/ // Submitted by Richard Harper duckdns.org @@ -14098,6 +14092,8 @@ // Submitted by Daniel Fariña jote.cloud jotelulu.cloud +jote-dr-lt1.com +jote-rd-lt1.com // JouwWeb B.V. : https://www.jouwweb.nl // Submitted by Camilo Sperberg @@ -14176,6 +14172,12 @@ lpages.co lpusercontent.com +// Leapcell : https://leapcell.io/ +// Submitted by Leapcell Team +leapcell.app +leapcell.dev +leapcell.online + // Liara : https://liara.ir // Submitted by Amirhossein Badinloo liara.run @@ -14254,10 +14256,6 @@ // Submitted by Heiki Lõhmus lohmus.me -// Lokalized : https://lokalized.nl -// Submitted by Noah Taheij -servers.run - // Lovable : https://lovable.dev // Submitted by Fabian Hedin lovable.app @@ -14856,6 +14854,10 @@ // Submitted by Kenneth Van Alstyne perspecta.cloud +// Plain : https://www.plain.com/ +// Submitted by Jesús Hernández +support.site + // Planet-Work : https://www.planet-work.com/ // Submitted by Frédéric VANNIÈRE on-web.fr @@ -14922,6 +14924,10 @@ // Submitted by Martin Meier protonet.io +// PT Ekossistim Indo Digital : https://e.id +// Submitted by Eid Team +e.id + // Publication Presse Communication SARL : https://ppcom.fr // Submitted by Yaacov Akiba Slama chirurgiens-dentistes-en-france.fr @@ -15444,10 +15450,11 @@ myspreadshop.co.uk // StackBlitz : https://stackblitz.com -// Submitted by Dominic Elm +// Submitted by Dominic Elm & Albert Pai w-corp-staticblitz.com w-credentialless-staticblitz.com w-staticblitz.com +bolt.host // Stackhero : https://www.stackhero.io // Submitted by Adrien Gillon @@ -15618,6 +15625,10 @@ telebit.io *.telebit.xyz +// Teleport : https://goteleport.com +// Submitted by Rob Picard +teleport.sh + // Thingdust AG : https://thingdust.com/ // Submitted by Adrian Imboden *.firenet.ch @@ -15914,6 +15925,7 @@ // XenonCloud GbR : https://xenoncloud.net // Submitted by Julian Uphoff +*.xenonconnect.de half.host // XnBay Technology : http://www.xnbay.com/ diff -Nru firefox-esr-140.3.1esr/netwerk/protocol/http/Http2Session.cpp firefox-esr-140.4.0esr/netwerk/protocol/http/Http2Session.cpp --- firefox-esr-140.3.1esr/netwerk/protocol/http/Http2Session.cpp 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/netwerk/protocol/http/Http2Session.cpp 2025-10-09 15:35:37.000000000 +0000 @@ -2056,7 +2056,8 @@ nsresult rv = self->SetInputFrameDataStream(self->mInputFrameID); if (NS_FAILED(rv)) return rv; - if (!self->mInputFrameDataStream) { + RefPtr stream = self->mInputFrameDataStream.get(); + if (!stream) { LOG3(("Http2Session::RecvWindowUpdate %p lookup streamID 0x%X failed.\n", self, self->mInputFrameID)); // only reset the session if the ID is one we haven't ever opened @@ -2070,24 +2071,21 @@ if (delta == 0) { LOG3(("Http2Session::RecvWindowUpdate %p received 0 stream window update", self)); - self->CleanupStream(self->mInputFrameDataStream, NS_ERROR_ILLEGAL_VALUE, - PROTOCOL_ERROR); + self->CleanupStream(stream, NS_ERROR_ILLEGAL_VALUE, PROTOCOL_ERROR); self->ResetDownstreamState(); return NS_OK; } - int64_t oldRemoteWindow = - self->mInputFrameDataStream->ServerReceiveWindow(); - self->mInputFrameDataStream->UpdateServerReceiveWindow(delta); - if (self->mInputFrameDataStream->ServerReceiveWindow() >= 0x80000000) { + int64_t oldRemoteWindow = stream->ServerReceiveWindow(); + stream->UpdateServerReceiveWindow(delta); + if (stream->ServerReceiveWindow() >= 0x80000000) { // a window cannot reach 2^31 and be in compliance. Our calculations // are 64 bit safe though. LOG3( ("Http2Session::RecvWindowUpdate %p stream window " "exceeds 2^31 - 1\n", self)); - self->CleanupStream(self->mInputFrameDataStream, NS_ERROR_ILLEGAL_VALUE, - FLOW_CONTROL_ERROR); + self->CleanupStream(stream, NS_ERROR_ILLEGAL_VALUE, FLOW_CONTROL_ERROR); self->ResetDownstreamState(); return NS_OK; } diff -Nru firefox-esr-140.3.1esr/netwerk/protocol/http/nsHttpConnectionMgr.cpp firefox-esr-140.4.0esr/netwerk/protocol/http/nsHttpConnectionMgr.cpp --- firefox-esr-140.3.1esr/netwerk/protocol/http/nsHttpConnectionMgr.cpp 2025-09-22 21:16:15.000000000 +0000 +++ firefox-esr-140.4.0esr/netwerk/protocol/http/nsHttpConnectionMgr.cpp 2025-10-09 15:35:36.000000000 +0000 @@ -3440,6 +3440,9 @@ ("GetOrCreateConnectionEntry is coalescing h2/3 an/onymous " "connections, ent=%p", invertedEnt)); + if (aAvailableForDispatchNow) { + *aAvailableForDispatchNow = true; + } return invertedEnt; } } diff -Nru firefox-esr-140.3.1esr/security/ct/CTKnownLogs.h firefox-esr-140.4.0esr/security/ct/CTKnownLogs.h --- firefox-esr-140.3.1esr/security/ct/CTKnownLogs.h 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/ct/CTKnownLogs.h 2025-10-09 15:35:37.000000000 +0000 @@ -14,7 +14,7 @@ #include -static const PRTime kCTExpirationTime = INT64_C(1763380486000000); +static const PRTime kCTExpirationTime = INT64_C(1765798436000000); namespace mozilla::ct { @@ -218,7 +218,7 @@ "\xcd", 91}, {"Sectigo 'Sabre2025h2'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1701000000000, // 2023-11-26T12:00:00Z + 1758216000000, // 2025-09-18T17:20:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x85\x13\x11\x2d\x7b\xf3\x93\x81\xe4" @@ -238,7 +238,7 @@ "\x6f", 91}, {"Sectigo 'Mammoth2026h1'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1728925200000, // 2024-10-14T17:00:00Z + 1758216000000, // 2025-09-18T17:20:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x9e\xcb\x0c\x8a\x51\xcc\x8a\xe2\x0b" @@ -248,7 +248,7 @@ "\xc4", 91}, {"Sectigo 'Mammoth2026h2'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1728925200000, // 2024-10-14T17:00:00Z + 1758216000000, // 2025-09-18T17:20:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xec\x83\x61\xf2\xd7\xb4\xbb\xe4\xe4" @@ -258,7 +258,7 @@ "\xb6", 91}, {"Sectigo 'Sabre2026h1'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1728925200000, // 2024-10-14T17:00:00Z + 1758216000000, // 2025-09-18T17:20:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x84\x26\xbc\x36\xbd\xd8\x8d\x3c\x87" @@ -268,7 +268,7 @@ "\x60", 91}, {"Sectigo 'Sabre2026h2'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1728925200000, // 2024-10-14T17:00:00Z + 1758216000000, // 2025-09-18T17:20:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xce\x35\xca\xec\x39\x07\x82\xda\x77" @@ -328,7 +328,7 @@ "\xf2", 91}, {"Sectigo 'Tiger2025h2'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1752066000000, // 2025-07-09T13:00:00Z + 1758236400000, // 2025-09-18T23:00:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x15\x49\x79\x91\xe0\x5b\x59\x57\x24" @@ -338,7 +338,7 @@ "\xc6", 91}, {"Sectigo 'Tiger2026h1'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1752066000000, // 2025-07-09T13:00:00Z + 1758236400000, // 2025-09-18T23:00:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xef\x77\x83\x27\x2b\x33\x0d\xbc\xec" @@ -348,7 +348,7 @@ "\xc6", 91}, {"Sectigo 'Tiger2026h2'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1752066000000, // 2025-07-09T13:00:00Z + 1758236400000, // 2025-09-18T23:00:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x7c\x91\x54\x0f\xf1\x51\x92\x89\xef" @@ -358,7 +358,7 @@ "\x9c", 91}, {"Sectigo 'Tiger2027h1'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1752066000000, // 2025-07-09T13:00:00Z + 1758236400000, // 2025-09-18T23:00:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x98\xc4\x28\x7e\x9b\x03\x8c\x25\x58" @@ -368,7 +368,7 @@ "\x84", 91}, {"Sectigo 'Tiger2027h2'", CTLogState::Admissible, CTLogFormat::RFC6962, - 1752066000000, // 2025-07-09T13:00:00Z + 1758236400000, // 2025-09-18T23:00:00Z 3, // operated by Sectigo "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x6f\x40\x20\x91\xe9\xa1\xb0\xf9\x98" @@ -407,6 +407,106 @@ "\xf4\xfc\x5c\xa9\x8c\x5f\xfb\x0d\x60\xe4\x2c\x0f\x16\xec\x2a\xb2\x6d\xeb" "\x15", 91}, + {"Let's Encrypt 'Sycamore2025h2d'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x44\x8f\x20\xad\xdd\xeb\xb2\xe1\x3d" + "\xe7\xfd\xd1\x93\xf2\x67\xf6\xb1\x81\xae\x97\x2f\x0e\xa0\xfa\x63\x93\xa8" + "\xcf\x51\x3e\xc4\x00\x46\x97\x7c\x3a\x24\xb7\x45\x1d\xfc\xd2\x15\x9b\xc4" + "\x15\x7f\xc6\xa1\xaa\xfa\x9d\xbc\xd0\x1e\xd5\x7b\xe6\xe7\x78\x47\x42\x1a" + "\x7e", + 91}, + {"Let's Encrypt 'Sycamore2026h1'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x7c\x41\x1e\xd0\x96\x64\x9c\x0f\x75" + "\xfd\xce\x9e\x36\x5d\x5a\x7b\x18\x1e\x2b\x3b\x86\x41\x43\x2f\x44\x25\xcf" + "\x5e\x0f\x4b\xdb\x6e\xce\xe4\x8e\x0f\x8b\xef\x80\x6d\xca\x6a\xea\xac\x65" + "\x55\x42\x8f\x61\xa7\xc0\x25\xe9\x40\x9c\xc7\xc6\xce\xfd\xe5\x1c\x27\x3c" + "\x80", + 91}, + {"Let's Encrypt 'Sycamore2026h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xc1\x1d\x45\xb6\x28\x8c\x6e\x9b\xf1" + "\x47\xeb\x08\x7a\x26\x79\x25\x20\x88\x0c\x87\x53\x00\xf8\x7b\x3a\xba\x5d" + "\x72\x17\x2b\x09\xcc\x8d\x54\x3b\xcd\x52\xad\xf9\xf2\x9a\x89\xc7\x6a\x9d" + "\xca\xb3\x88\xf8\x48\xc6\xc5\x9e\xd4\x88\xf7\x0d\xdd\xb2\xf7\x43\xdf\x45" + "\xa8", + 91}, + {"Let's Encrypt 'Sycamore2027h1'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x5a\xb1\x9d\x63\x26\x58\x07\xbb\x5e" + "\x09\x2e\x0a\xfe\x82\x88\xb1\xb5\x74\xc9\x50\x52\x82\x39\x4e\xc0\xed\xb6" + "\x38\xe0\xa8\x03\xa6\x36\xe7\x64\x21\x17\x30\xbc\x5a\x0e\xe8\x55\x75\x4a" + "\xa9\xf9\x16\x69\x26\x8c\xfe\x7f\xb7\xa5\xf0\x81\x7f\x80\x40\x92\x97\x71" + "\xf2", + 91}, + {"Let's Encrypt 'Sycamore2027h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x2b\xed\xb3\xcb\x65\x16\x44\xc2\x32" + "\x0b\x68\xd4\xe3\xaf\xab\x8f\xc5\x2c\xc8\xc8\xcb\xb1\x02\x2b\xd5\x8f\xfa" + "\x0a\x56\xdd\xa5\x61\xad\x85\x46\xfc\xcb\x73\x1a\x7f\x8c\xdf\x01\x94\xd6" + "\x5b\xe0\x07\xf7\x00\x16\x3c\xb4\x4b\xe6\xf9\xad\xcf\xb6\x64\x87\x67\xf6" + "\x9c", + 91}, + {"Let's Encrypt 'Willow2025h2d'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x95\x7e\xfc\x58\xe6\x6c\xac\x3a\x7b" + "\xfc\xb0\xc5\xbe\xc1\xb2\xb5\xc9\x5a\x9d\x68\x49\xda\x81\x30\x76\x0c\xad" + "\x2a\x8d\xb5\x66\xb0\xb3\x6c\x9e\xab\x68\x50\x26\x67\x56\xcc\x16\x1e\x01" + "\xff\x4f\x9e\xd5\xa5\xad\x7e\x11\xb6\xc2\x00\x8c\xd9\xec\x7f\x68\x38\x19" + "\xb8", + 91}, + {"Let's Encrypt 'Willow2026h1'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xb6\x91\x72\xba\x5c\x20\xcb\x5f\xae" + "\xfb\x06\x10\xdf\xb9\x5b\x57\xe1\xec\x3c\x53\x58\xa2\x2e\x2c\xcb\xa7\x59" + "\x3f\xae\xb6\x37\xf6\x7f\xba\xc7\x4d\x8b\x8f\x90\xdd\x12\xc4\x4b\x54\x58" + "\xd8\xf3\x64\xef\x32\xff\xed\x53\xd2\x9f\x72\x44\x44\xc3\xee\xfe\xce\x1e" + "\xe0", + 91}, + {"Let's Encrypt 'Willow2026h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xa7\xcc\x07\xf1\x1e\xb3\x7c\xcf\x94" + "\x86\xc4\x2a\xe6\xe9\xfe\x94\xf7\x4d\x4c\x39\x33\x72\x09\x16\x2e\x2d\x43" + "\xc3\x2a\x94\xe9\x3d\x34\x9a\xd3\xf9\xfc\x2b\x86\x8e\xfa\x70\xe2\x62\x33" + "\xf3\xd2\x3a\x29\x5e\x59\xbe\x14\x47\xb7\x96\x53\x17\xaa\x9e\xdb\x8a\x6a" + "\x88", + 91}, + {"Let's Encrypt 'Willow2027h1'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xce\xc3\x0a\xb6\x88\xce\xd0\x15\x41" + "\xe2\xde\x7d\x95\x5c\x80\x87\x1b\x6a\x39\xb5\x40\xfb\x02\x1d\xe4\x1a\x49" + "\x18\x0f\x29\x66\xbc\x39\x19\x38\xf3\xba\x1a\x6f\x2e\xef\xe1\x79\x01\xa2" + "\xd2\x11\xc2\x7a\x2b\x25\x90\x37\xb7\xe0\xdf\xf6\x0f\x44\xb0\x11\x40\x44" + "\xd3", + 91}, + {"Let's Encrypt 'Willow2027h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 4, // operated by Let's Encrypt + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x61\xb3\x03\x83\x4a\x90\x10\x46\x23" + "\xb1\x3b\x6d\x74\x39\x68\xb9\x32\xa1\x83\x77\xd1\x88\xc2\x58\x34\x4f\x84" + "\xa6\xbf\xf6\x6d\x7c\x9e\x41\xd4\x0e\x1c\xa4\x0d\x2a\xfe\x6c\x6c\x82\xb1" + "\x8e\xd1\x3f\xe5\x5a\xa8\xf5\x88\xd0\x6e\x76\x8e\x78\x7e\x16\x9b\x83\xe1" + "\x75", + 91}, {"TrustAsia Log2025a", CTLogState::Admissible, CTLogFormat::RFC6962, 1701000000000, // 2023-11-26T12:00:00Z 5, // operated by TrustAsia @@ -517,6 +617,56 @@ "\x65\x5e\x3d\xd5\x06\xeb\x35\x18\x34\xea\x63\x3a\x2b\x01\x33\x0d\x75\xed" "\xaa", 91}, + {"IPng Networks 'Gouda2025h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 7, // operated by IPng Networks + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xa4\x78\x8f\xdb\x83\x0d\xa3\xca\x60" + "\xb7\x94\x4d\xa1\xac\x2c\xbc\x62\x30\x49\xa5\x44\x28\xda\x9d\xcd\x80\x94" + "\x5e\xd3\x2e\xd0\xc3\x35\xe6\xde\xb7\x77\x6e\x9e\x0d\x40\xf3\xfa\x79\x10" + "\x8c\x00\xae\x46\x8e\x0b\x44\x97\x32\x89\xae\xc8\xd1\xa9\xc4\x74\xd1\xfd" + "\xc0", + 91}, + {"IPng Networks 'Gouda2026h1'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 7, // operated by IPng Networks + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x47\xac\x2f\xa9\x5c\x21\x7f\x98\xac" + "\xb8\x2b\x70\x49\xf3\x63\x4c\xea\xea\xc1\x98\x34\xbd\x9b\x88\x30\xfe\xf1" + "\x93\xc7\xcf\x98\x97\xda\x15\x90\xad\x7b\x5a\x6d\x42\x2a\x8d\x85\x13\x02" + "\xb6\xa2\x20\x26\xf0\xdc\x27\x28\xe4\x19\x52\x3c\x8b\x8e\x2f\xc4\xbf\x3b" + "\xec", + 91}, + {"IPng Networks 'Gouda2026h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 7, // operated by IPng Networks + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x8d\xac\x9c\xce\x68\x54\x30\xd7\xed" + "\x5b\x2e\x95\x8e\xf6\x17\x71\x35\x04\xa6\xf2\xfc\x2c\x80\x0a\x71\x87\x31" + "\xaf\x1c\x79\xc7\x14\x06\x64\x45\x6f\x86\x76\x5e\x0a\x75\xd5\x96\xc3\x16" + "\x86\xad\x61\xf4\x9e\x79\x79\x97\xd0\x58\xcf\xdd\xa8\x8a\xfa\x1a\x6a\x0d" + "\xf5", + 91}, + {"IPng Networks 'Gouda2027h1'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 7, // operated by IPng Networks + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x3a\x1d\x75\x07\x66\x91\x4f\xd0\x62" + "\x4e\xaa\x3e\xea\x4b\xd0\xed\xc4\x86\x7f\xcd\x7d\x02\x2b\x7e\x8c\x67\x3a" + "\x02\xe1\xe5\x19\x45\xf1\x58\x25\xf5\x60\x24\x3d\x38\x53\x67\xaf\xa3\x14" + "\x29\x2b\x72\xc3\x8b\x15\x8a\x7e\x45\x0a\xfb\x5b\x91\xed\x66\x72\xd9\x77" + "\x81", + 91}, + {"IPng Networks 'Gouda2027h2'", CTLogState::Admissible, CTLogFormat::Tiled, + 1758078000000, // 2025-09-17T03:00:00Z + 7, // operated by IPng Networks + "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86\x48" + "\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x3e\xec\x4f\x1f\x6d\x2c\x4a\xa5\x33" + "\x1c\x69\x65\x65\xc7\x9c\x78\x5b\xf2\xa1\x27\xdf\xc0\x15\xa0\x5f\x82\xca" + "\x77\xcc\x24\xdc\x0d\xda\xc9\x9b\xb0\xc2\x1d\xa9\x0e\xe1\x0e\xb2\x29\x8c" + "\xc4\xb5\xc5\x87\x42\x14\x63\x3e\xf7\x6b\xd2\x3b\x93\x19\x14\xa8\xcf\x8d" + "\xf3", + 91}, #ifdef DEBUG {"Mozilla Test RSA Log 1", CTLogState::Admissible, CTLogFormat::RFC6962, 1721666666000, // 2024-07-22T16:44:26Z diff -Nru firefox-esr-140.3.1esr/security/manager/ssl/StaticHPKPins.h firefox-esr-140.4.0esr/security/manager/ssl/StaticHPKPins.h --- firefox-esr-140.3.1esr/security/manager/ssl/StaticHPKPins.h 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/manager/ssl/StaticHPKPins.h 2025-10-09 15:35:37.000000000 +0000 @@ -791,4 +791,4 @@ static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1765799661678000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1768217614142000); diff -Nru firefox-esr-140.3.1esr/security/manager/ssl/nsSTSPreloadList.inc firefox-esr-140.4.0esr/security/manager/ssl/nsSTSPreloadList.inc --- firefox-esr-140.3.1esr/security/manager/ssl/nsSTSPreloadList.inc 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/manager/ssl/nsSTSPreloadList.inc 2025-10-09 15:35:38.000000000 +0000 @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1768218857613000); +const PRTime gPreloadListExpirationTime = INT64_C(1770636806178000); %% 0--1.de, 1 0-0.io, 1 @@ -68,7 +68,6 @@ 0087552.com, 1 00880088.net, 1 008yingshi.com, 1 -00971.net, 1 0097552.com, 1 009cc.com, 1 009zl.com, 1 @@ -121,7 +120,6 @@ 02smh.com, 1 03-09-2016.wedding, 1 03018.net, 1 -031120.xyz, 1 031373.com, 1 03170317.com, 1 032ks.com, 1 @@ -145,7 +143,7 @@ 049552.com, 0 04d88.com, 1 04d88.net, 1 -04pk.cn, 1 +04pk.cn, 0 04sun.com, 1 050.ca, 1 050a1.com, 1 @@ -189,8 +187,6 @@ 071552.com, 0 071615.com, 1 0737399.com, 1 -074696.com, 1 -074758.com, 1 076.ne.jp, 1 078663.com, 1 078895.com, 1 @@ -220,7 +216,6 @@ 082195.com, 1 082359.com, 1 08365t.com, 1 -083905.com, 0 083967.com, 1 084552.com, 1 085035.com, 1 @@ -239,7 +234,6 @@ 09kanagawa.jp, 1 0akarma.me, 1 0au.de, 0 -0carbon.com, 1 0cdn.ga, 1 0cdn.net, 1 0cean.tk, 1 @@ -329,7 +323,6 @@ 0xspa.de, 1 0xword.com, 1 0yen.org, 1 -1-123hp.com, 0 1-2-3bounce.co.uk, 1 1-800-mattress.com, 1 1-inv.com, 1 @@ -378,6 +371,7 @@ 100fast.com, 1 100kraz.ga, 1 100nome.com, 1 +100pay.com, 1 100plus.com.my, 1 100plus.com.sg, 1 100plus.sg, 1 @@ -400,10 +394,8 @@ 10101.io, 0 101010.hopto.org, 1 101010.pl, 1 -10161997.xyz, 1 10198.com, 1 101android.ru, 0 -101dalmatin.ua, 0 101st-airborne.tk, 1 101st.tk, 1 1020310.com, 1 @@ -433,18 +425,11 @@ 104.ua, 1 1040taxfirm.com, 1 1041263497.rsc.cdn77.org, 1 -10430.net, 1 -10435.net, 1 -10436.net, 1 10438.net, 1 10439.net, 1 -10453.net, 1 -104760.com, 1 10495.net, 1 105318.com, 1 -105861.com, 1 106.hi.cn, 1 -10628.com, 1 1068511.com, 1 106906.xyz, 1 10705.ml, 1 @@ -470,7 +455,7 @@ 10must.com, 1 10news.com, 1 10og.de, 1 -10pearls.com, 0 +10pearls.com, 1 10ppm.com, 1 10sou.eu, 1 10thmagnitude.com, 1 @@ -486,7 +471,6 @@ 110111011.xyz, 1 11018vip.com, 1 11018xpj.com, 1 -11082.com, 1 110838.com, 1 110cl.com, 1 110na.com, 1 @@ -497,7 +481,6 @@ 11168365.com, 1 11182.com, 1 11183.com, 1 -11185.com, 1 111bet86.com, 1 111novosti.tk, 1 111plus.design, 1 @@ -518,7 +501,6 @@ 1120316.com, 1 1120317.com, 1 1120320.com, 1 -1120321.com, 1 1120322.com, 1 1120323.com, 1 1120324.com, 1 @@ -576,7 +558,6 @@ 119sh.com, 1 11aaee.com, 1 11aagg.com, 1 -11aajj.com, 1 11aaqq.com, 1 11aazz.com, 1 11academianetworks.com, 1 @@ -585,10 +566,8 @@ 11bbpp.com, 1 11bbqq.com, 1 11bbss.com, 1 -11bbzz.com, 1 11ccee.com, 1 11ccgg.com, 1 -11ccjj.com, 1 11ccpp.com, 1 11ccqq.com, 1 11cctt.com, 1 @@ -598,15 +577,10 @@ 11ddcc.com, 1 11ddjj.com, 1 11ddkk.com, 1 -11ddpp.com, 1 11dzon.com, 1 -11eebb.com, 1 11eegg.com, 1 11eejj.com, 1 -11eeqq.com, 1 -11eess.com, 1 11eexx.com, 1 -11eeyy.com, 1 11eezz.com, 1 11ffcc.com, 1 11ffkk.com, 1 @@ -622,18 +596,13 @@ 11ggrr.com, 1 11ggss.com, 1 11ggyy.com, 1 -11ggzz.com, 1 11hhee.com, 1 11hhff.com, 1 11hhgg.com, 1 11hhqq.com, 1 11hhrr.com, 1 11hhzz.com, 1 -11jjaa.com, 1 11jjcc.com, 1 -11jjrr.com, 1 -11jjyy.com, 1 -11jjzz.com, 1 11kkee.com, 1 11kkff.com, 1 11men.tk, 1 @@ -644,21 +613,16 @@ 11ppqq.com, 1 11ppss.com, 1 11pptt.com, 1 -11ppyy.com, 1 11ppzz.com, 1 11qqbb.com, 1 11qqdd.com, 1 11qqgg.com, 1 -11qqhh.com, 1 11qqpp.com, 1 -11qqss.com, 1 11rrcc.com, 1 11rree.com, 1 11rrff.com, 1 -11rrhh.com, 1 11rrjj.com, 1 11rrkk.com, 1 -11rrqq.com, 1 11rrss.com, 1 11rrzz.com, 1 11square.jp, 1 @@ -679,7 +643,6 @@ 11tv.dp.ua, 1 11u15.com, 1 11urss.com, 1 -11yycc.com, 1 11yydd.com, 1 11yyee.com, 1 11yyjj.com, 1 @@ -768,10 +731,7 @@ 1244546066.rsc.cdn77.org, 1 125-rue.com, 1 12517.com, 1 -12554.com, 1 12557.com, 1 -12558.com, 1 -12559.com, 1 12588.com, 1 125c.cn, 1 125colours.tk, 1 @@ -779,8 +739,6 @@ 127011.ch, 1 1275.ru, 1 127661.com, 1 -12778.com, 1 -12877.com, 1 1288366.com, 1 129.co, 1 12fkcdtcetteefqv.myfritz.net, 1 @@ -814,7 +772,7 @@ 133769.xyz, 1 1337ersprime.com, 1 1339.co, 1 -133z6.com, 1 +133z6.com, 0 13411-111.com, 1 1359826938.rsc.cdn77.org, 1 135vv.com, 1 @@ -1036,7 +994,6 @@ 171365y.com, 1 171365z.com, 1 17187q.com, 1 -17190.com, 1 1720301.com, 1 1720303.com, 1 1720304.com, 1 @@ -1091,9 +1048,7 @@ 174343.com, 1 175dt.com, 1 177milkstreet.com, 1 -17901.com, 1 17920.com, 1 -17921.com, 1 17dbz.org, 1 17experience.com.br, 1 17hats.com, 0 @@ -1109,62 +1064,13 @@ 1800mattress.net, 1 1800petmeds.com, 1 181ks.net, 1 -1820301.com, 1 -1820302.com, 1 -1820303.com, 1 -1820304.com, 1 -1820305.com, 1 -1820306.com, 1 -1820307.com, 1 -1820308.com, 1 -1820309.com, 1 -1820310.com, 1 -1820311.com, 1 -1820313.com, 1 -1820314.com, 1 -1820315.com, 1 -1820316.com, 1 -1820317.com, 1 -1820318.com, 1 -1820319.com, 1 -1820320.com, 1 -1820321.com, 1 -1820322.com, 1 -1820323.com, 1 -1820324.com, 1 -1820325.com, 1 -1820326.com, 1 -1820327.com, 1 -1820328.com, 1 -1820329.com, 1 -1820330.com, 1 -1820331.com, 1 -1820332.com, 1 -1820333.com, 1 -1820334.com, 1 -1820335.com, 1 -1820336.com, 1 -1820337.com, 1 -1820338.com, 1 -1820340.com, 1 -1820341.com, 1 -1820342.com, 1 -1820343.com, 1 -1820344.com, 1 -1820345.com, 1 -1820346.com, 1 -1820347.com, 1 -1820348.com, 1 -1820349.com, 1 182wh.com, 1 1831365.com, 1 1832365.com, 1 1834365.com, 1 1837365.com, 1 183cm.tk, 1 -184325.com, 1 1844329061.rsc.cdn77.org, 1 -18521.com, 1 185k8.com, 0 186526.club, 1 186526.xyz, 1 @@ -1185,6 +1091,7 @@ 18teensporn.pro, 1 18upchat.com, 1 18vr.com, 1 +18webdesign.com, 1 1911-movie.jp, 1 1911trust.com, 1 1912x.com, 1 @@ -1253,7 +1160,6 @@ 19990y.com, 1 19990yy.com, 0 19990zz.com, 1 -199ks.com, 1 19area.cn, 0 19hundert84.de, 1 1a-diamantscheiben.de, 1 @@ -1278,12 +1184,12 @@ 1bha7uk0.com, 1 1blazing.cf, 1 1bps.eu.org, 1 +1bps.io, 1 1brd.com, 1 1breadcrumb.com, 1 1breadcrumb.com.au, 1 1c-power.ru, 1 1casino-online-games.com, 1 -1cbit.ru, 1 1chan.pl, 1 1chancerylane.com, 1 1choicegaragedoor.com, 1 @@ -1364,7 +1270,6 @@ 1pluss.ee, 1 1po.ru, 1 1point.kr, 1 -1project.com, 1 1q2w.nl, 1 1q365a.com, 1 1r.is, 1 @@ -1399,7 +1304,6 @@ 1tomplumber.com, 1 1tpt.com, 1 1up.it, 1 -1url.site, 1 1v-lsd.eu, 1 1v9.im, 1 1v9.io, 1 @@ -1410,7 +1314,6 @@ 1w6.net, 1 1way.faith, 1 1web.be, 1 -1whw.co.uk, 1 1whw.uk, 1 1wirelog.de, 1 1x-00.com, 1 @@ -1527,9 +1430,6 @@ 1xbet82.com, 1 1xbet84.com, 1 1xbet88.net, 1 -1xbetasia2018.com, 1 -1xbetasia2018.net, 1 -1xbetasia2018.space, 1 1xbetbk16.com, 1 1xbetbk17.com, 1 1xbetbk2.com, 1 @@ -1560,7 +1460,6 @@ 1xbkbet4.com, 1 1xcinta.com, 1 1xfast.com, 1 -1xfifa.com, 1 1xgames.online, 1 1xgokil.com, 1 1xjago.com, 1 @@ -1620,6 +1519,7 @@ 200mmx.net, 1 200pppp.com, 1 2012review.tk, 1 +2013download.com, 1 2013review.tk, 1 20140301.xyz, 1 2015review.tk, 1 @@ -1673,26 +1573,20 @@ 20sights.tk, 1 21.co.uk, 1 2113.ch, 1 +214701.xyz, 1 21566365.com, 0 216digital.com, 1 -21ce.com, 1 -21er.com, 1 -21expo.com, 1 -21football.com, 1 21gou.com, 1 -21green.com, 1 -21jobs.com, 1 21kampus.com, 1 21lab.co, 1 21nurse.com, 1 +21pet.com, 1 +21property.com, 1 21risk.com, 1 21run.com, 0 -21soccer.com, 1 21stcenturycarpentry.com.au, 1 21stcenturyoptics.com, 1 21stnc.us, 1 -21tax.com, 1 -21up.com, 1 22-bets.org, 1 22007apply.gov, 1 220220.de, 1 @@ -1705,7 +1599,6 @@ 2226321.com, 1 2227552.com, 1 222aghoststory.com, 1 -222bet86.com, 1 222tips.com, 1 223742.com, 1 225225.jp, 1 @@ -1760,6 +1653,7 @@ 22yyrr.com, 1 22yyss.com, 1 22zt.com, 1 +230100.xyz, 1 230beats.com, 1 232192.com, 1 233.be, 1 @@ -1846,17 +1740,12 @@ 2495dentalimplants.com, 1 249722.com, 1 249cq.com, 1 -24action.com, 1 24alarm.com, 1 24ball.com, 1 -24beauty.com, 1 24bel.ru, 0 24bit.dk, 1 24buffalo.com, 0 24chance.tk, 1 -24control.com, 1 -24fair.com, 1 -24fan.com, 1 24gazette.ga, 1 24go.me, 1 24hod.com, 1 @@ -1868,15 +1757,11 @@ 24hrbrandbash.com, 1 24images.com, 1 24k.co.jp, 1 -24london.com, 1 24meg.com, 1 -24monitor.com, 1 24onlain.tk, 1 -24read.com, 1 24see.com, 1 24share.com, 1 24slides.com, 1 -24slot.com, 1 24status.com, 1 24webservice.nl, 1 24x7aircargoservices.co.in, 1 @@ -1889,7 +1774,6 @@ 2531111.ru, 1 253325.com, 1 254vc.ml, 1 -2555z6.com, 1 256br.com, 1 256k.me, 1 258027.xyz, 1 @@ -1904,7 +1788,6 @@ 25lotto.co.ke, 1 25lotto.com, 1 25may.tk, 1 -25oclock.com, 1 25percent.me, 1 25refer.tk, 1 25reinyan25.net, 1 @@ -1976,15 +1859,12 @@ 2c-t-7.com, 1 2c-t-8.com, 1 2c2p.com, 1 -2cars.com, 1 2cat.cc, 1 2cb.rocks, 1 2chan.eu, 1 2chan.jp, 1 2chi1.com, 1 -2choose.com, 1 2class.eu.org, 1 -2cosmo4.me, 1 2cv-co.be, 1 2cvclubdepicardie.tk, 1 2daysmood.asia, 1 @@ -1996,14 +1876,12 @@ 2driver-ok.ml, 1 2earn-online.com, 0 2fa.directory, 1 -2fabypass.com, 1 2finish.com, 1 2fm.ie, 1 2fm.radio, 1 2fraud.pro, 1 -2free.com, 1 +2fusion.com, 1 2g1s.net, 1 -2gallery.com, 1 2gen.com, 1 2gether.fr, 1 2gisparser.tk, 1 @@ -2012,14 +1890,12 @@ 2i2.link, 1 2img.net, 1 2impact.com, 1 -2innovateit.com, 0 2insights.com, 1 2jhb.com, 1 2k7.link, 1 2kgwf.fi, 1 2kinds.tk, 1 2krueger.de, 1 -2lafel.ro, 1 2learncomputing.ga, 1 2learncomputing.ml, 1 2li.ch, 1 @@ -2074,9 +1950,7 @@ 300jjjj.com, 1 300m.com, 1 301.one, 0 -301.sh, 1 301.technology, 1 -301334.com, 1 30375500.com, 1 30375533.com, 1 3056999.com, 1 @@ -2094,7 +1968,6 @@ 3100.cf, 1 3115dh29.com, 1 313xpj.com, 0 -314122.com, 0 314553.com, 1 315422.com, 1 315xpj.com, 0 @@ -2161,6 +2034,7 @@ 33b58.com, 1 33devici.ml, 1 33knkn.com, 1 +33trentinfolk.it, 1 33zv.com, 0 33zxzx.com, 1 3400.cf, 1 @@ -2206,13 +2080,13 @@ 360365.com, 1 360alumni.com, 0 360bcty.com, 1 +360china.com, 1 360cycling.com.br, 1 360degreecloud.com, 1 360dental.com, 1 360e-commerce.net, 1 360ecogroup.com, 0 360ecommerce.net, 1 -360faces.com, 1 360fcu.org, 1 360hosting.com.au, 1 360islam.com, 1 @@ -2224,6 +2098,7 @@ 360prokuvat.fi, 1 360propguide.com, 1 360spider.com, 1 +360stone.com, 1 360system.com, 1 360techpartner.com, 1 360trust.com, 1 @@ -2293,11 +2168,9 @@ 3659869.com, 1 3659980.com, 1 365a1.com, 0 -365air.com, 1 365beautyworld.com, 1 365blog.com, 1 365canvas.com, 0 -365check.com, 1 365clo.com, 1 365cn-288.com, 1 365coupon.com, 1 @@ -2308,12 +2181,10 @@ 365eis.com, 1 365eiv.com, 1 365eiw.com, 1 -365fast.com, 1 365healthworld.com, 1 365idezet.hu, 1 365labs.cloud, 1 365nnnn.com, 0 -365pet.com, 1 365poster.de, 0 365q01.com, 1 365renovations.com, 1 @@ -2335,7 +2206,6 @@ 369rr.com, 1 36thdistrictcourtmi.gov, 1 372bbb.com, 1 -374952.xyz, 1 375337.com, 1 375575.xyz, 1 375realty.com, 1 @@ -2374,10 +2244,8 @@ 38irkutsk.tk, 1 390539.com, 1 390trains.com, 1 -391231.com, 1 392365.com, 0 393335.ml, 0 -394322.com, 0 394553.com, 1 3957b.com, 1 3957d.com, 1 @@ -2474,10 +2342,10 @@ 3dall.ro, 1 3danimation.tk, 1 3dapartment.com, 1 +3darchprevision.com, 1 3dbox.ba, 1 3dc9.jp, 1 3dcollective.es, 1 -3dcopy.com, 1 3dcreatelab.de, 1 3dd365.com, 1 3ddigital.com, 1 @@ -2495,7 +2363,6 @@ 3djapan.com, 1 3djava.ml, 1 3dlab.team, 1 -3dlan.com, 1 3dm.audio, 1 3dmedium.de, 1 3dmetalprinting.tk, 1 @@ -2509,6 +2376,7 @@ 3dprintsondemand.eu, 1 3dranger.com, 1 3dreal.tk, 1 +3dscenes.com, 1 3dsites.tk, 1 3dstandard.com, 1 3dstoragellc.com, 1 @@ -2516,7 +2384,6 @@ 3dsupplies.be, 1 3dvisual.studio, 1 3dzip.org, 1 -3ecpa.com.hk, 1 3ecpa.com.my, 1 3ecpa.com.sg, 1 3ee365.com, 1 @@ -2529,10 +2396,10 @@ 3gdev.com, 1 3gdu.tk, 1 3gg365.com, 1 +3gokushi.com, 1 3haeuserprojekt.org, 1 3hh365.com, 1 3huan.com, 1 -3i-infotech.com, 1 3ieimpact.org, 1 3ii365.com, 1 3james.com, 1 @@ -2540,7 +2407,6 @@ 3kings-3hills.com, 1 3ks.pl, 1 3ler.net, 1 -3links.com, 1 3lmnyblogger.ga, 1 3logic.ru, 1 3lot.ru, 1 @@ -2581,7 +2447,6 @@ 3queens.io, 1 3r.co.nz, 1 3r.org.uk, 1 -3r3n.xyz, 1 3rabsite.tk, 1 3rd.fi, 1 3rr0r.com, 1 @@ -2710,7 +2575,6 @@ 4345.me, 0 4351365.com, 0 436773.com, 1 -437348.com, 1 437844.com, 1 438663.com, 1 439050.com, 1 @@ -2722,7 +2586,6 @@ 443.one, 0 443.org, 1 44365t.com, 1 -443782.com, 1 4444.com.tw, 1 4447552.com, 1 444bet86.com, 1 @@ -2739,7 +2602,6 @@ 4553.com, 1 455327.com, 1 455328.com, 1 -4553s.com, 1 4553vip.com, 1 455555.xyz, 1 45636565.com, 1 @@ -2754,6 +2616,7 @@ 45shiki.net, 1 463855.com, 1 463lpallet.com, 1 +4649-24.com, 1 4661049.com, 1 467413.com, 1 476470.com, 1 @@ -2778,7 +2641,7 @@ 49889.com, 1 49948522.com, 1 499ks.net, 1 -49ko.com, 1 +49ko.com, 0 4ads.de, 1 4armed.com, 1 4baby.com.br, 1 @@ -2797,20 +2660,19 @@ 4cut.tk, 1 4daagse.nl, 0 4dbuild.net, 1 -4dclub.com, 1 4devs.com.br, 1 4digital.it, 1 4digitiq.nl, 1 4dillusion.tk, 1 4dimension.net, 1 4dplay.com, 1 +4dsoft.com, 1 4dstyle.com, 1 4e8.net, 1 4everdosti.tk, 1 4everproxy.com, 1 4exchange.ru, 1 4filtre.com, 1 -4filtre.com.tr, 1 4fit.ro, 1 4flex.com.br, 1 4flex.info, 1 @@ -2828,6 +2690,7 @@ 4investors.de, 1 4iplatform.com, 1 4iq.lt, 1 +4just.com, 1 4k3dyptt.com, 1 4kec.com, 1 4kiptvspot.com, 1 @@ -2844,9 +2707,9 @@ 4mm.org, 1 4n3.net, 1 4n6.io, 1 -4nature.com, 1 4netguides.org, 1 4nikola.de, 1 +4nk.network, 1 4o.pw, 1 4ourbest.tk, 1 4paws.co.uk, 1 @@ -2871,10 +2734,9 @@ 4th-ave-studio.com, 1 4thfebruary.tk, 1 4thjdcar.gov, 1 -4true.com, 1 4u.services, 0 4u2ore.net, 1 -4uagservices.com, 1 +4uagservices.com, 0 4uwatch.cf, 1 4vector.com, 1 4ventavis.com, 1 @@ -2920,7 +2782,6 @@ 502fss.marketing, 1 5060711.com, 1 5060715.com, 1 -506422.com, 0 508pir.com, 1 50balles.com, 1 50firstavenue.com.au, 1 @@ -3001,18 +2862,15 @@ 51aifuli.com, 1 51cls.tw, 1 51club8.com, 1 +51daxue.com, 1 +51dazhe.com, 1 51evar.com, 1 51fishing.com, 1 -51flower.com, 1 -51free.com, 1 51fss.marketing, 1 -51ku.com, 1 51lavanderiaindustrial.com.br, 1 51life.com, 1 51logo.com, 1 -51motor.com, 1 51nullacht.de, 1 -51photos.com, 1 51pic.com, 1 51pig.com, 1 51power.com, 1 @@ -3093,7 +2951,6 @@ 541651.com, 1 543yazilim.com, 1 5455bet.com, 1 -545922.com, 0 54below.com, 0 54cuatro.com, 1 550885.com, 0 @@ -3135,7 +2992,6 @@ 573sss.com, 1 5765.io, 1 5781.org, 1 -578173.com, 1 578380.com, 1 5792.org, 1 5795887.com, 1 @@ -3209,7 +3065,6 @@ 5bet86.com, 1 5c1fd0f31022cbc40af9f785847baaf9.space, 1 5ca.com, 1 -5cake.com, 1 5ccapitalinvestments.com, 1 5dm.link, 1 5dm.me, 1 @@ -3262,6 +3117,7 @@ 6-bros.com, 1 6-d.cc, 1 6.vu, 1 +603plus.com, 1 604windswell.ca, 1 6060fm.tk, 1 6080.ga, 1 @@ -3334,13 +3190,12 @@ 6396zzz.com, 0 63fg.com, 1 63gaming.com, 1 -645122.com, 0 -645722.com, 0 645ds.com, 0 64970.com, 1 64bit.me, 1 64bitgaming.de, 1 64characters.com, 1 +64media.com, 1 6502.pro, 1 65131a.com, 1 65131b.com, 1 @@ -3368,7 +3223,7 @@ 6547766.com, 1 6548855.com, 1 6548877.com, 1 -654pk.cn, 1 +654pk.cn, 0 655ks.com, 1 658565.com, 1 659265.com, 1 @@ -3421,7 +3276,6 @@ 666111bet.com, 1 666119.xyz, 1 666222bet.com, 1 -666333bet.com, 0 666365ios.com, 0 666365t.com, 1 6664553.com, 1 @@ -3442,7 +3296,6 @@ 66ccff.cc, 1 66gal.com, 1 6700.ar, 1 -670422.com, 0 6729.co, 0 6729a.co, 1 6729aa.co, 1 @@ -3513,7 +3366,6 @@ 673422.com, 0 673569.com, 1 673bbb.com, 1 -676422.com, 0 676812.com, 0 677314.com, 0 677340.com, 0 @@ -3526,7 +3378,6 @@ 67836565.com, 1 678365t.com, 1 678678365.com, 1 -679422.com, 0 682368.com, 1 68522c.com, 1 68522k.com, 1 @@ -3537,10 +3388,8 @@ 68622b.com, 1 68reg.tk, 1 68workscarbon.com, 1 -691422.com, 0 692241.com, 1 692b8c32.de, 1 -694322.com, 0 694640.com, 1 695660.com, 1 6957.co, 1 @@ -3638,7 +3487,6 @@ 704533.com, 0 705994.com, 1 708090.ru, 1 -709611.com, 1 70mpg.org, 1 7100.cf, 1 712kb.com, 1 @@ -3710,7 +3558,6 @@ 76669.com, 1 766788.xyz, 1 767333.xyz, 1 -7699.org, 1 769sc.com, 0 76networks.tk, 1 76o.cn, 1 @@ -3723,7 +3570,6 @@ 777111.xyz, 1 777365t.com, 1 7776321.com, 0 -777bet86.com, 1 777coin.com, 1 777mage.com, 1 77909a.com, 0 @@ -3753,7 +3599,6 @@ 7891553.com, 1 7891997.com, 1 789365t.com, 1 -790951.com, 1 793703.com, 1 795sss.com, 1 797715.com, 0 @@ -3795,8 +3640,10 @@ 7net.uk, 1 7nets.com, 1 7networking.com, 1 +7pixel.ro, 1 7plus.com.au, 1 7pool.com.ua, 1 +7press.com, 1 7proxies.com, 1 7qly.com, 1 7sdre.am, 1 @@ -3814,7 +3661,6 @@ 7zet.ml, 1 8000.cx, 1 8000plus.si, 1 -8001d.com, 1 8001d88.com, 0 8003pay.com, 1 800801337.xyz, 1 @@ -3840,7 +3686,6 @@ 8050d.com, 1 8059d88.com, 1 8060d88.com, 1 -80630.com, 1 8069d88.com, 1 807252.com, 1 80780780.com, 1 @@ -3848,7 +3693,6 @@ 808gutterking.com, 1 809088.cc, 1 8092d88.com, 1 -8093d.com, 1 8097d.com, 1 80993.net, 1 80bin.com, 1 @@ -3865,19 +3709,16 @@ 8121d.com, 1 8121d88.com, 1 8128d.com, 1 -8130d88.com, 1 8135d88.com, 1 8139d.com, 1 8151d.com, 1 8153d.com, 1 8159d88.com, 1 815jz.com, 1 -8160d.com, 1 8160d88.com, 1 8161d88.com, 1 8162d.com, 1 816jz.com, 1 -8171d.com, 1 817615.com, 1 8176d.com, 1 8178d.com, 1 @@ -3890,7 +3731,6 @@ 8183d88.com, 1 8186d.com, 1 818bwf.com, 1 -8190d.com, 1 8190d88.com, 1 819323.com, 1 8193d.com, 1 @@ -3960,10 +3800,10 @@ 83365365.com, 1 834365.com, 1 8349822.com, 1 -838180.com, 1 838888.net, 1 83ir2k8b.duckdns.org, 1 83kb88.com, 1 +84000.com, 1 84036.ml, 1 842844.com, 1 8444.cf, 1 @@ -4039,7 +3879,6 @@ 866308.vip, 1 86872233.net, 1 8688fc.com, 1 -869293.com, 1 8699bet.com, 1 86dd.eu, 1 86kb88.com, 1 @@ -4107,12 +3946,10 @@ 888888722.com, 1 88889822.com, 1 888900.xyz, 1 -888bet86.com, 1 888bwf.com, 1 888lots.com, 1 888starz.bet, 1 888starz22.bet, 1 -8890d.com, 1 8891d.com, 1 8891ks.com, 1 8892d.com, 1 @@ -4134,8 +3971,6 @@ 88bet86.com, 0 88bill.com, 1 88cakescorner.com, 1 -88chigua.com, 1 -88d.com, 1 88djl.cc, 1 88home9.com, 1 88laohu.cc, 1 @@ -4190,7 +4025,6 @@ 8i3m2a67.com, 1 8i8.fr, 1 8l.com.au, 1 -8link.com, 1 8maerz.at, 1 8me.nl, 1 8mpay.com, 0 @@ -4223,7 +4057,6 @@ 9013.cf, 1 9014.cf, 1 9015.cf, 1 -901543.com, 1 9016.cf, 1 9018.cf, 1 9019.cf, 1 @@ -4308,10 +4141,6 @@ 90minut.com, 1 90r.jp, 1 90splease.com, 1 -91-av.com, 1 -91-cg.com, 1 -91-short.com, 1 -91-ss.com, 1 9100.cf, 1 9100.ga, 1 9100.gq, 1 @@ -4438,7 +4267,6 @@ 9197.cf, 1 9198.cf, 1 91bbr.com, 1 -91cg.com, 1 91d52.com, 1 91d72.com, 1 91d81.com, 1 @@ -4449,8 +4277,6 @@ 91imh.com, 1 91news.tk, 1 91quanji.com, 1 -91short.com, 1 -91short.org, 1 91tianmi.com, 0 91tvg.com, 1 9200.cf, 1 @@ -4691,7 +4517,6 @@ 9444.cf, 1 9449-27a1-22a1-e0d9-4237-dd99-e75e-ac85-2f47-9d34.de, 1 947cq.com, 1 -949622.com, 0 9499565.com, 0 9499737.com, 1 9499yl.com, 1 @@ -4757,7 +4582,6 @@ 95559.com, 1 9556.cf, 1 95566.com, 1 -95568.com, 1 9557.cf, 1 95577.com, 1 9558.cf, 1 @@ -4785,7 +4609,6 @@ 95808.com, 1 9581.cf, 1 9582.cf, 1 -95828.com, 1 9584.cf, 1 9585.cf, 1 9586.cf, 1 @@ -4845,13 +4668,11 @@ 964515.com, 1 96577.com, 1 96605.com, 1 -96606.com, 1 96607.com, 1 9666ks.com, 1 96685.com, 1 966ty.com, 1 967606.com, 1 -9679693.com, 0 968860.com, 1 96896.com, 1 96961.com, 1 @@ -5096,7 +4917,6 @@ 9977432.com, 1 9978.cf, 1 9979.cf, 1 -997z6.com, 1 9980.cf, 1 9982.cf, 1 9983.cf, 1 @@ -5120,7 +4940,6 @@ 99998522.com, 1 99999822.com, 1 999998722.com, 1 -999bet86.com, 1 999btt.net, 1 999family.com, 0 999salon.co, 1 @@ -5144,6 +4963,7 @@ 9bet86.com, 1 9ccn.top, 1 9elements.com, 0 +9face.com, 1 9fruit.com, 1 9fvip.net, 1 9gag.com, 1 @@ -5227,7 +5047,6 @@ 9k897.com, 1 9k898.com, 1 9k899.com, 1 -9kb.xyz, 1 9l.com.au, 1 9lab.jp, 1 9lo9.vip, 1 @@ -5253,7 +5072,6 @@ a-bio.com, 1 a-busty.com, 1 a-care.net, 1 -a-classinflatables.co.uk, 1 a-frique.com, 1 a-gokan.com, 1 a-h-p.de, 0 @@ -5319,7 +5137,6 @@ a2m-fintech.com, 1 a2n-expertise.com, 1 a2ssrl.duckdns.org, 1 -a2zbabyname.com, 1 a2zplumbing.com.au, 1 a340.com, 1 a356.top, 1 @@ -5361,7 +5178,6 @@ aaa-racing.net, 1 aaa.ma, 1 aaa.my, 1 -aaa.ua, 1 aaaaarg.org, 1 aaablindfactory.com, 1 aaahosting70.de, 1 @@ -5384,7 +5200,6 @@ aad-gp.com, 1 aadl.ga, 1 aadskeuken.nl, 1 -aadv.com.br, 1 aaenhunze.nl, 1 aaflalo.me, 1 aagetransport.no, 1 @@ -5449,7 +5264,6 @@ aaronmaar.de, 1 aaronosmani.com, 1 aaronr.digital, 1 -aarons.law, 1 aaronsmunpra.com, 1 aaronspain.tk, 1 aarontechnology.net, 1 @@ -5460,7 +5274,6 @@ aarvinproperties.com, 1 aarwer.com, 1 aarwer.jp, 1 -aaryas-tt.com, 1 aasdepot.com, 1 aaskolnick.com, 1 aasumitro.id, 1 @@ -5488,10 +5301,12 @@ ab288.com, 1 ab2888.cn, 1 ab2web.com, 1 +ab3.army, 1 ab91corp.com, 1 abaa.org, 1 abaca.bar, 1 abaco.cr, 1 +abacoaggregate.net, 1 abaconappliancerepairs.co.za, 1 abacross.com, 1 abacus-essen.de, 1 @@ -5640,7 +5455,6 @@ abelles.tk, 1 abelsflooringandtile.com, 1 abemarx.hu, 1 -abenberg.de, 1 abenteuerschule4u.eu, 1 abenteuerteam.de, 1 abeontech.com, 1 @@ -5651,6 +5465,8 @@ aberon.pl, 1 aberrantvascular.tk, 1 abertaytraining.co.uk, 1 +aberte.com, 1 +abetrans.com, 1 abettercreditunion.com, 1 abetterdeath.com, 1 abetterwichita.org, 1 @@ -5805,6 +5621,7 @@ abouthrm.nl, 1 aboutict.nl, 1 aboutislam.tk, 1 +aboutlady.com, 1 aboutlegal.nl, 1 aboutlevi.ga, 1 aboutmarketing.ga, 1 @@ -5823,6 +5640,7 @@ abouttime.gq, 1 abouttoblow.com, 1 abouttravel.gq, 1 +aboutvpn.com, 1 aboutwealthcreation.tk, 1 aboutyou.at, 1 aboutyou.be, 1 @@ -5856,7 +5674,7 @@ abpages.com, 1 abpis.hr, 1 abplive.com, 1 -abpoolsub.com, 1 +abpoolsub.com, 0 abqbiotechincubator.com, 1 abr.ru, 1 abracadabramagicas.com.br, 1 @@ -5996,14 +5814,11 @@ academyonlinetoyou.tk, 1 acadeven.com, 1 acadiate.com, 1 -acadlly.com, 0 acadolimited.com, 1 acafcantabria.es, 1 -acafellas.com, 1 acaging.ca, 1 acalcio.ga, 1 acallawayroofing.com, 1 -acaltair.com, 1 acandroid.top, 1 acani.xyz, 1 acaoly-inofficial.com, 1 @@ -6022,11 +5837,11 @@ acaseta.com, 1 acasundayschool.org, 1 acat.io, 1 +acatepec.com, 1 acatiimi.fi, 1 acb.com.vn, 1 acbandt.com, 1 acbcoop.com, 1 -acbj.com, 1 acbrussels-used.be, 1 acbug2018.com, 1 acc.gov, 1 @@ -6162,6 +5977,7 @@ acebovirtual.tk, 1 acecardiologyclinic.com, 1 acectamentit.tk, 1 +acedstudy.com, 0 aceenergy.com.tw, 1 acefishing.tk, 1 acefront.co.uk, 1 @@ -6173,7 +5989,6 @@ aceitesencantados.com, 1 acejunkpros.com, 1 acekit-create.com, 1 -aceleracaodigital.com, 1 aceleraguria.com.br, 1 acelpb.com, 1 acely.se, 1 @@ -6256,7 +6071,6 @@ aci-asiapac.aero, 1 aciclovir.ga, 1 acidchrist.tk, 1 -acidlabs.io, 1 acidoascorbico.com, 1 acidstudios.ro, 1 acidtool.com, 1 @@ -6292,6 +6106,7 @@ acmilan.gq, 1 acmilan.ml, 1 acnenaturalhealing.com, 1 +acninternational.org, 1 acnj.gov, 1 acnjpolice.gov, 1 acnoventa.it, 1 @@ -6415,9 +6230,9 @@ action.fr, 1 action.nl, 1 action4image.com, 1 +actionagainstkillerroads.org, 1 actioncameraaccessories.ga, 1 actioncleaningnd.com, 1 -actioncovid.nl, 1 actioncutprint.com, 1 actionglasshouston.com, 1 actionlabs.net, 1 @@ -6425,8 +6240,6 @@ actionmadagascar.ch, 0 actionminecraft.tk, 1 actionphototours.com, 1 -actionraingutters.com, 1 -actions.today, 1 actionsack.com, 1 actionsandreactions.com, 1 actionsecuritycameras.com, 1 @@ -6509,13 +6322,11 @@ actuallykabouters.com, 1 actualno.com, 1 actualprogressivevotersguide.com, 1 -actualseomedia.com, 1 actualsizemusic.tk, 1 actumeridien.com, 1 acturaad.nl, 1 actus-banque.fr, 1 actuse.tk, 1 -actzero.ai, 0 acuarios.tk, 1 acuarismo-iquique.tk, 1 acuarius.tk, 1 @@ -6549,6 +6360,7 @@ acutron.net, 1 acutron.org, 1 acvan.net, 1 +acvarii.com, 1 acvilnius.tk, 1 acwcerts.co.uk, 1 acwdca.gov, 1 @@ -6610,6 +6422,7 @@ adamdorman.com, 1 adameveplus.com, 1 adamevevod.com, 1 +adamfontenot.com, 1 adamgian.com, 1 adamh.us, 1 adamj.eu, 1 @@ -6666,7 +6479,7 @@ adarshcloud.in, 1 adarsvidler.me, 1 adasbench.com, 1 -adaselin.com, 1 +adaselin.com, 0 adasiacorp.com, 1 adassist.nl, 1 adasworks.com, 1 @@ -6681,8 +6494,9 @@ adblockextreme.com, 1 adblockextreme.net, 1 adblockextreme.org, 1 -adboos.com, 0 +adboos.com, 1 adbw.xyz, 1 +adc-dentalcare.com, 0 adc64.com, 1 adceuta.tk, 1 adcoglazing.co.uk, 1 @@ -6701,7 +6515,6 @@ adderall.ml, 1 adderall.space, 1 addes-asso.fr, 1 -addexpiresheaders.com, 1 addicfashion.com, 1 addict.tk, 1 addictedtotravel.pl, 1 @@ -6747,6 +6560,7 @@ adeelshahid.tk, 1 adeex.co.uk, 1 adeex.in, 1 +adeex.us, 1 adeexaustralia.com, 1 adek.uz, 1 adek24.uz, 1 @@ -6771,7 +6585,6 @@ adenhurra.cf, 1 adenhurra.ml, 1 adenoma.tk, 1 -adenopatia.com, 1 adenos.in, 1 adeon.ml, 1 adept-elearning.com, 1 @@ -6852,7 +6665,6 @@ adjutor.xyz, 1 adk-wohnungsaufloesung.berlin, 1 adkinvest.co.il, 1 -adld.center, 1 adlerneves.com, 1 adlerneves.com.br, 1 adlerosn.com, 1 @@ -6865,6 +6677,7 @@ admanmedia.fr, 1 admantium.com, 1 admdr.com, 1 +admeco.com, 1 admeweb.com, 1 admglass.co.uk, 1 admicos.cf, 1 @@ -6902,6 +6715,7 @@ adminsbscdev.azurewebsites.net, 1 admirable.pro, 1 admiralcloud.com, 1 +admirando.com, 1 admody.com, 1 admongo.gov, 1 adms.tr, 1 @@ -6916,15 +6730,16 @@ adndigital.com.br, 1 adnexa.it, 1 adney.land, 1 -adnolesh.com, 1 adnotam.ch, 1 adnscript.tk, 1 adnseguros.es, 1 +adolesce.com, 1 adoll.ml, 1 adomani-italia.com, 1 adomicilio.gt, 1 adonairelogios.com.br, 1 adondevamosmundo.com, 1 +adonias.com, 1 adonis.hosting, 1 adonisagora.com, 1 adonisgrup.ro, 1 @@ -6959,6 +6774,7 @@ adp.fr, 1 adphotography.pl, 1 adpot.xyz, 0 +adpromotora.com.br, 1 adquest.ro, 1 adr-stock.com, 1 adr.gov, 1 @@ -6971,7 +6787,6 @@ adrenajump.com.br, 1 adrenalin.is, 1 adrenalin.od.ua, 0 -adrenalinbeach.com, 1 adrenalinhunters.tk, 1 adresilo.com, 1 adresse-ip-publique.fr, 1 @@ -7021,7 +6836,6 @@ ads-kuwait.net, 1 adsb.lol, 1 adsbouncycastles.co.uk, 1 -adscambodia.com, 1 adscss.eu, 1 adsense-arbitrage.com, 1 adseye.tk, 1 @@ -7064,12 +6878,15 @@ adtgroup.com, 1 adtv.ae, 0 aduanasgama.com, 1 +aduarte.es, 1 adubosvidere.com.br, 1 +adult-block.com, 1 adultbizz.eu, 1 adultdvdparadise.com, 1 adulteducation.org.uk, 1 adultforum.gr, 0 adultgames.pro, 1 +adultgeek.com, 1 adulttrust.com, 1 aduro.com.tr, 1 adurra.com, 1 @@ -7093,6 +6910,7 @@ advance.hr, 1 advancealabama.gov, 1 advancecessnock.com.au, 1 +advanced-ict.info, 1 advanced-online.eu, 1 advancedacupuncture.net, 1 advancedaquaticservice.com, 1 @@ -7108,13 +6926,11 @@ advancedinteg.com, 0 advancedkiosks.com, 1 advancedmanagement.net, 1 -advancedmd.com, 1 advancedmedicalcertification.com, 1 advancednetflowtraining.com, 1 advancedoneroofing.com, 1 advancedsepticandpumping.com, 0 advancedturf.tk, 1 -advancedwcanalytics.com, 1 advancedwriters.com, 1 advancemoversnc.com, 1 advanceoptical.com, 1 @@ -7134,7 +6950,6 @@ advanpathadvantage.us, 1 advanpathalliance.com, 1 advanpathalliance.net, 1 -advanpathbpo.com, 1 advanqi.se, 1 advantage.com.sa, 1 advantage.sa, 1 @@ -7256,13 +7071,11 @@ advokaty.cf, 1 advokaty.gq, 1 advosy.com, 1 -advritujeph.in, 1 advtran.com, 0 advu.no, 1 adware.pl, 0 adwokatkosterka.pl, 1 adwokatzdunek.pl, 1 -adworldglobal.com, 1 adxperience.com, 1 adygeya.cf, 1 adygheya-news.net, 1 @@ -7392,7 +7205,6 @@ aeroklub.tk, 1 aerolog.co, 0 aeromot.com, 1 -aeron.aero, 1 aeronautix.com, 1 aeronote.net, 1 aeropetz.com.br, 1 @@ -7435,6 +7247,7 @@ aesthetikpiercing.de, 0 aesthetix.icu, 1 aestore.by, 1 +aestus.agency, 1 aesvalanalys.com, 1 aeterna-ufa.ru, 1 aeterna.hr, 1 @@ -7464,12 +7277,15 @@ af.link, 1 af2c.org, 1 af5t.com, 1 +afacanpalmer.cat, 1 afadansedeparis.com, 1 afadvantage.gov, 1 +afaenxanetaviladecans.org, 1 afaf.or.jp, 1 afanasev.tk, 1 -afandou.com, 1 afanias.org, 0 +afantou.com, 1 +afapaucasals.cat, 1 afas-apps.nl, 1 afasim.tk, 1 afasstatus.nl, 1 @@ -7505,7 +7321,6 @@ aff.af, 1 aff.gov, 1 aff1xstavka.com, 1 -aff1xstavka.top, 1 affaire.com, 1 affairemateriaux.fr, 1 affairs.com, 1 @@ -7518,6 +7333,7 @@ affectnet.com, 1 affengine.com, 1 affengine.net, 1 +afffmdlportal.com, 1 affibody.se, 1 affidea.ie, 1 affilatura.it, 1 @@ -7535,7 +7351,6 @@ affinipay.com, 0 affinitihive.com, 1 affinity.co, 1 -affinity.com, 1 affinity.vc, 1 affinitycu.ca, 1 affinityinnovations.com, 1 @@ -7599,6 +7414,7 @@ afive.us, 1 afiyetolsun.jp, 1 afkmind.com, 1 +afkzone.org, 1 aflalogasperini.com.br, 1 aflam-online.tk, 1 aflasafe.com, 1 @@ -7611,7 +7427,6 @@ aforism.tk, 1 afp548.com, 1 afreelancersworld.com, 1 -afres.com, 1 afreserve.com, 1 afreshperspective.com, 1 africaclassifieds.ga, 1 @@ -7628,6 +7443,7 @@ africanhosting.ml, 1 africankingsclothing.com, 1 africanlatitude.com, 1 +africanleapsafaris.com, 1 africanmangoforum.ga, 1 africanmangoforum.gq, 1 africansafaris.co.nz, 1 @@ -7646,6 +7462,7 @@ afrodita.tk, 1 afroditafirm.tk, 1 afroditehotel.tk, 1 +afroenergy.org, 1 afrogospel.tk, 1 afroludi.tk, 1 afropages.fr, 1 @@ -7748,7 +7565,6 @@ againstgynexams.tk, 1 againsttheneighbour.tk, 1 againsttheodds.es, 1 -agalia.com, 1 agalloch.tk, 1 agambition.eu, 1 agamogcloud.com, 1 @@ -7763,7 +7579,6 @@ agartashop.com, 1 agas.com, 1 agasport.nl, 0 -agastia.com, 1 agatajanik.de, 1 agate.pw, 1 agateh.com.au, 1 @@ -7814,7 +7629,6 @@ agenciaalafia.com.br, 1 agenciacanina.tk, 1 agenciacoder.com, 1 -agenciacorujadesign.com.br, 1 agenciacrown.es, 1 agenciadeperformanceembh.com, 1 agenciahaven.com.br, 1 @@ -7881,7 +7695,6 @@ agg097.com, 1 agg88.com, 1 aggcom.org, 1 -aggcomms.com, 1 aggielandrealtors.com, 1 aggielandtutoring.com, 1 agglo-sion.ch, 1 @@ -7899,7 +7712,6 @@ agile.coach, 1 agileacademy.technology, 1 agilebase.co.uk, 1 -agilebits.com, 1 agilebits.net, 0 agilecraft.com, 1 agilee.io, 1 @@ -7924,7 +7736,7 @@ agiosthomas.tk, 1 agirc-arrco.fr, 1 agirlknows.com, 1 -agks02.com, 1 +agks02.com, 0 agks1.com, 1 agks116.com, 1 agks16.com, 1 @@ -7994,7 +7806,6 @@ agpideas.com, 1 agpsn.com, 1 agr.asia, 1 -agrabah.com, 1 agralines.tk, 1 agrarking.com, 1 agrarking.de, 1 @@ -8011,7 +7822,7 @@ agricultural-technology.tk, 1 agriculture-schools.com, 1 agriculturejournals.cz, 1 -agrifoglio.com, 1 +agrider.co, 1 agrifoodtoday.it, 1 agrifutures.com.au, 1 agrigentonotizie.it, 1 @@ -8027,6 +7838,7 @@ agriradar.news, 1 agriresearch.tk, 1 agrish.tk, 1 +agro-54.ru, 1 agro-dom.solutions, 1 agro-ferma.tk, 1 agro-forestry.net, 1 @@ -8102,6 +7914,7 @@ agvip2008.com, 1 agvip88.com, 0 agwa.name, 1 +agwholesalellc.com, 1 agwin1.com, 0 agwin9.com, 1 agworkers.com, 1 @@ -8135,7 +7948,6 @@ ahityayinlari.org, 1 ahj.no, 1 ahjindigital.com, 1 -ahjy.com, 1 ahl.gov.au, 0 ahl.im, 1 ahlac.tk, 1 @@ -8163,14 +7975,13 @@ ahmedelgamalanimations.tk, 1 ahmedszaidi.com, 1 ahmerjamilkhan.org, 1 -ahmetazgin.net, 1 ahmetcadirci.com.tr, 0 ahmetshina.tk, 1 -ahmettoraman.com.tr, 1 ahmu.com, 1 ahmud.net, 1 ahnastro.net, 1 ahoeheng.com, 1 +ahoghill.com, 1 ahoj.email, 1 ahoj.hu, 1 ahomeconcept.com, 1 @@ -8183,7 +7994,6 @@ ahqf.com, 1 ahrefs.com, 1 ahroproject.org, 1 -ahrora.com, 1 ahrq.gov, 1 ahs.com, 1 ahsboca.com, 1 @@ -8235,6 +8045,7 @@ aibolit.ml, 1 aibolitik.tk, 1 aibot.tk, 1 +aibottrafficanalyzer.com, 1 aibsoftware.mx, 1 aica.org, 1 aiccc.com.au, 1 @@ -8242,18 +8053,15 @@ aicfb.in, 1 aichat.io, 1 aichi-tokko-shien.com, 1 -aichou.com, 1 aicial.co.uk, 1 aickelin.eu, 1 aicontent.vn, 1 aicpastore.com, 1 aicredit.ro, 1 aicta.ro, 1 -aid-web.ch, 1 aida.org.au, 1 aidablanco.tk, 1 aidaccess.org, 1 -aidanamavi.com, 1 aidanmitchell.uk, 0 aidanmontare.net, 1 aidanpr.com, 1 @@ -8269,10 +8077,11 @@ aidez-moi.eu, 1 aidhan.net, 1 aidi-ahmi.com, 1 -aidiscore.com, 1 +aiding.com, 1 aidliveers.ga, 1 aido.gq, 1 aidoc.com, 1 +aidong.com, 1 aidoru.net, 1 aidoru.top, 1 aids-dissidents.tk, 1 @@ -8295,7 +8104,6 @@ aignermunich.de, 1 aigu.io, 1 aigua.it, 1 -aiguemarine-spa.fr, 1 aiguideto.com, 1 aiguilhe-querre.com, 1 aiha.com, 1 @@ -8314,8 +8122,6 @@ aiki.do, 1 aiki.tk, 0 aikido-kiel.de, 1 -aikido-linz.at, 1 -aikido-wels.at, 1 aikido.zone, 1 aikidoaalst.tk, 1 aikidoboskovice.cz, 1 @@ -8345,7 +8151,6 @@ aimlessempire.tk, 1 aimoda.bid, 1 aimoda.click, 1 -aimoda.cloud, 1 aimoda.download, 1 aimoda.email, 1 aimoda.io, 1 @@ -8358,6 +8163,7 @@ aimreply.com, 1 aimrom.org, 1 aimserv.com, 1 +aimsouq.com, 1 aimvancouver.com, 1 aimwa.com, 1 aina.moi, 1 @@ -8367,7 +8173,6 @@ ainewsto.com, 0 ainfographie.com, 1 ainkarim.co, 1 -ainong.com, 1 ainsa.tk, 1 aintfeelingit.com, 1 ainutrition.co.uk, 1 @@ -8413,7 +8218,6 @@ air-techniques.fr, 1 air-ticket.ga, 1 airacle.in, 1 -airalarm.com, 1 airaplus.ca, 1 airbender.tk, 1 airbnb.ae, 1 @@ -8540,18 +8344,17 @@ airforce-technology.com, 1 airforce.com, 1 airformosa.com, 1 +airfoto.com, 1 airfoto.tk, 1 airfox.cf, 1 airfox.gq, 1 airfryerreceitas.com.br, 1 -airgreen.com, 1 airgun.tk, 1 airgundepot.com, 1 airhelp.com, 1 airhorn.de, 1 airi.ga, 1 airicy.com, 1 -airism.com, 1 airjet.cf, 1 airjordanpascher.tk, 1 airkiss.ga, 1 @@ -8695,7 +8498,6 @@ airlinetravelinternational.com, 1 airlinevegas.com, 1 airlitegroup.com.au, 1 -airlytrip.com, 1 airm.aero, 1 airmag.tk, 1 airmail.cc, 0 @@ -8780,6 +8582,7 @@ airswap.io, 0 airtable.com, 1 airtame.cloud, 1 +airteam.com.au, 1 airtec-france.fr, 1 airterms.cf, 1 airticketstravel.com, 1 @@ -8787,7 +8590,6 @@ airtrain.gq, 1 airtrolinc.com, 1 airtron.com, 1 -airupdate.com, 1 airventuri.com, 1 airvida.sg, 1 airvpn.org, 1 @@ -8797,16 +8599,16 @@ airweb.top, 0 airwolf.tk, 1 airwolfthemes.com, 1 -airwudhu.id, 1 airzone.tk, 1 -airzox.com, 1 aisawa22.com, 1 aiscale.fr, 1 aischepervers-porn.com, 1 aisdent.com, 1 +aisdr.com, 1 aisedomains.ga, 1 aisera.com, 1 aish.ml, 1 +aishima.com, 1 aisi316l.net, 1 aisidehustler.com, 1 aising.jp, 1 @@ -8826,7 +8628,6 @@ aitindo.com, 1 aitkincountymn.gov, 1 aitnews.com, 1 -aitopics.org, 1 aitoreda.io, 1 aitosoftware.com, 1 aitsl.edu.au, 1 @@ -8847,11 +8648,11 @@ aiwosq.cn, 1 aiwoz.fr, 1 aiwriter.tools, 1 +aiwujiwu.com, 1 aixlab.de, 1 aixm.aero, 1 aixploringprovence.com, 1 aixue.net, 1 -aizhuan.com, 1 aizxxs.com, 1 aizxxs.net, 1 aj-laixada.tk, 1 @@ -8890,8 +8691,8 @@ ajito.pw, 1 ajito.rocks, 1 ajitp.com, 1 -ajka-solution.cz, 1 ajl.io, 1 +ajmadison.com, 1 ajman-realty.ga, 1 ajmanded.com, 1 ajmanepay.ae, 1 @@ -8900,7 +8701,6 @@ ajmara.pl, 1 ajnah.net, 1 ajnasz.hu, 1 -ajngserralheria.com.br, 1 ajoke.eu, 1 ajoliveira.com, 1 ajoliveira.net, 1 @@ -8910,9 +8710,9 @@ ajpappas.net, 1 ajpojournals.org, 0 ajramos.tk, 1 -ajsb85.com, 1 ajscred.online, 1 ajsih.org, 1 +ajsmm.de, 1 ajtmh.org, 1 ajto.pro, 1 ajvco.com.hk, 1 @@ -9063,7 +8863,6 @@ akplates.org, 1 akpp1.com.ua, 1 akr.io, 1 -akr.services, 1 akracing.se, 1 akramvet.tk, 1 akrasa.com.au, 1 @@ -9166,7 +8965,7 @@ alabamadepo.com, 1 alabamafurs.com, 1 alabamanet.tk, 1 -alabamaonlinedivorce.com, 0 +alabamaonlinedivorce.com, 1 alabamasheriffs.com, 1 alabamasoilandwater.gov, 1 alabamatitlesearch.com, 1 @@ -9220,9 +9019,8 @@ alandoyle.link, 1 alanhua.ng, 1 alanhuang.name, 1 -alanina.com, 1 alaninkenya.org, 1 -alaniz-law.com, 1 +alaniz-law.com, 0 alankardresswalla.tk, 1 alankatona.com, 1 alanokling.nl, 1 @@ -9276,7 +9074,6 @@ alb-flirt.de, 1 alb-media.tk, 1 alba.ovh, 1 -albaadani.com, 1 albadon.tk, 1 albaform.com, 1 albagold.tk, 1 @@ -9311,6 +9108,7 @@ albatrostercume.com, 1 albauroman.com, 1 albayan.ae, 1 +albeelaw.com, 1 albemarlehistory.org, 1 albendazole.ga, 1 albendazole.ml, 1 @@ -9319,6 +9117,7 @@ alberguecovadonga.es, 1 alberosano.it, 1 albert-yu.com, 1 +albert.lol, 1 albertapp.com, 1 albertathome.org, 1 albertcuyp-markt.amsterdam, 1 @@ -9368,6 +9167,7 @@ albuterol.ga, 1 albuterolonline.ga, 1 albuterolwithoutprescription.gq, 1 +albuthi.com, 1 albylane.com.au, 1 alc-manage-bns.azurewebsites.net, 1 alca31.com, 0 @@ -9384,6 +9184,7 @@ alcatraz-webdesign.tk, 1 alcatrazeast.com, 1 alcatraztourtickets.com, 1 +alcatrazz.com, 1 alcazaar.com, 1 alchakov.tk, 1 alchemist-heaven.tk, 1 @@ -9407,6 +9208,7 @@ alcoholismtreatment.tk, 1 alcoleadetajo.tk, 1 alcolecapital.com, 0 +alconight-phuket.com, 1 alcor.tk, 1 alcorncountyms.gov, 1 alcove.cf, 1 @@ -9424,7 +9226,6 @@ alderautomation.ca, 1 alderimages.com, 1 aldersgatemontgomery.org, 1 -aldersgateumc.org, 0 aldervets.co.uk, 1 aldevadigital.com, 1 aldien.com.br, 1 @@ -9655,6 +9456,8 @@ alexserver.cloud, 1 alexsexton.com, 0 alexshaikh.com, 1 +alexstratts.com, 1 +alexstratts.ru, 1 alexstudio.tk, 1 alextaffe.com, 1 alexthayne.co.uk, 1 @@ -9665,6 +9468,7 @@ alexvdveen.nl, 1 alexvetter.de, 0 alexweber.tk, 1 +alexy-jdv.eu, 1 alexyang.me, 1 alexzeta.tk, 1 aleymedya.ga, 1 @@ -9691,6 +9495,7 @@ alfafile.net, 1 alfagl.com, 1 alfahir.hu, 1 +alfakir.com, 1 alfalasteenyia.cf, 1 alfambra.tk, 1 alfapack-shop.com, 1 @@ -9706,7 +9511,7 @@ alfm.fr, 1 alfonso-baya.tk, 1 alfonsostriano.it, 1 -alfordbenefits.com, 1 +alfordbenefits.com, 0 alfordmedia.com, 1 alformationcouture.fr, 1 alforto.nl, 0 @@ -9765,7 +9570,6 @@ algotest.in, 1 alhamedeia.tk, 1 alhayes.com, 1 -alhidayahkg.com, 1 alhomaidani.com, 1 alhost.ml, 1 alhs-archives.com, 1 @@ -9786,11 +9590,14 @@ aliasinfoforums.tk, 1 aliaslaw.com, 1 aliaswp.com, 1 +aliauction.com, 1 alibabau.tk, 1 alibamu.com, 1 alibamu.org, 1 alibi-ua.com.ua, 1 alibip.de, 1 +alibiz.com, 1 +alicafe.com, 1 alicante-spain.tk, 1 alice-memorial.de, 1 alice.tw, 1 @@ -9804,6 +9611,7 @@ alicetone.net, 1 alicevardel.fr, 0 alicia-carvalho.com, 1 +aliciabytes.com, 1 aliciacryst.com, 1 alicialab.org, 1 alida.com, 1 @@ -9831,13 +9639,14 @@ alifeinbinary.com, 1 alight.ge, 1 alightwell.com, 1 -align-pilates.lt, 1 +aligift.com, 1 align27.com, 1 alignedchiro.org, 1 aligneddc.com, 1 alignedweb.com, 1 alignminds.com, 1 alignthoughts.com, 1 +alihard.com, 1 alihashemrasheed.com, 1 aliibrahimov.tk, 1 aliim.gdn, 1 @@ -9847,11 +9656,10 @@ alila.dog, 1 alilepro.cf, 1 alilialili.ga, 1 -alilog.com, 1 +alimade.com, 1 alimahmood.com, 1 alimanaka-rabesata.tk, 1 alimarketfoodtech.es, 1 -alimate.com, 1 aliment-covid19.com, 1 alimentosmcf.com, 1 alimentsduquebecaumenu.com, 1 @@ -9871,15 +9679,14 @@ alio.lt, 1 aliorange.com, 1 aliosmanyuksel.com.tr, 1 +alipad.com, 1 alipub.com, 1 aliqorbani.ir, 1 alireza2love.tk, 1 alirezahesari.com, 1 -alis-asso.fr, 0 +alis-asso.fr, 1 alis-test.tk, 1 alisblog.ml, 1 -alisceon.com, 1 -alisearch.com, 1 alisecure.com, 1 alishanova.tk, 1 alishapiro.com, 1 @@ -9904,10 +9711,10 @@ alisync.com, 1 alitabergert.tk, 1 alitajran.com, 1 -alitec.it, 0 +alitalk.com, 1 alitpedia.ga, 1 alittlecoldgel.com, 1 -alittledelightful.com, 1 +alitudi.com, 1 alitv.com, 1 aliud.be, 1 aliv.biz, 1 @@ -9987,7 +9794,6 @@ allaboutfunuk.com, 1 allaboutgreg.net, 1 allabouthome.ml, 1 -allabouthtml.com, 1 allaboutmadonna.tk, 1 allaboutnothing.cf, 1 allaboutnothing.ga, 1 @@ -10002,7 +9808,7 @@ allactionsecurity.com, 1 allahabadhighcourt.in, 1 allamakee.k12.ia.us, 1 -allamericangutterprotection.com, 1 +allamericangutterprotection.com, 0 allamericanprotection.net, 1 allamericatrans.com, 1 allandrich.ml, 1 @@ -10074,7 +9880,6 @@ allegra180.ga, 1 allegra180mg.ga, 1 allegrapark.ga, 1 -allegreto.com, 1 allegrettoresort.com, 1 allegrettoresortandvineyard.com, 1 allegrettoresortandvineyardbyayres.com, 1 @@ -10093,9 +9898,8 @@ allencrouch.com, 1 allencrouchcfo.com, 1 allendalecounty.gov, 1 -allenhouse.ac.in, 1 allenivory.com, 1 -allenpcservices.co.uk, 1 +allenkreger.com, 1 allensonit.com, 1 allensun.org, 1 allentertainment.de, 1 @@ -10148,15 +9952,12 @@ allgemeinarzt-wenta-bralla.de, 1 allgemeine-zeitung.de, 1 allgermanmotorworks.com, 1 -allgo-games.com, 1 allgoodkeys.com, 1 allgraduates.com.au, 1 allgrass.net, 1 allgreek.tk, 1 allhallows.tk, 1 -allhard.org, 1 allhits.ml, 1 -allhonest.com, 1 allhsa.com, 1 alli-diet-pill.cf, 1 alli-pills.cf, 1 @@ -10169,6 +9970,7 @@ allianceborderservices.com, 1 allianceforafreesociety.com, 1 allianceforafreesociety.net, 1 +allianceguide.com, 1 alliances-globalsolutions.com, 0 alliancesolutionsgrp.com, 1 allianskyrkan.se, 1 @@ -10203,6 +10005,7 @@ alljobspro.com, 1 alljobtest.com, 1 alljokesaside.tk, 1 +allkast.com, 1 allkindsofrecipes.com, 1 alllaboutchickens.tk, 1 alllatinapics.com, 1 @@ -10267,6 +10070,7 @@ allschool.com.ng, 1 allscience.tk, 1 allseasonschimney.com, 1 +allseasonsproduction.de, 1 allseasonswaterproofing.com, 1 allseniors.org, 1 allset.ml, 1 @@ -10305,7 +10109,6 @@ allthingshealthy.org, 1 allthingsroyal.nl, 1 allthingzit.com, 1 -alltimespost.com, 1 alltourism.tk, 1 alltownfresh.com, 1 alltracon.com, 1 @@ -10347,6 +10150,7 @@ almacenterwi.gov, 1 almacivica.org, 1 almadaria.com, 1 +almadenglobal.com, 1 almagalla.com, 1 almajaniyate.ga, 1 almalinux.org, 1 @@ -10441,7 +10245,6 @@ alonuocsuoi.com, 1 aloo.ga, 1 aloomic.com.au, 1 -aloop.cloud, 1 alopezlawfirm.com, 1 alorimusic.es, 1 aloris-controle.fr, 1 @@ -10449,7 +10252,6 @@ alotso.com, 1 alottajava.com, 1 alov.blog, 1 -alovesinh.com, 1 alp-eastlink-portal-model.azurewebsites.net, 1 alp-samsungca-portal-model.azurewebsites.net, 1 alp-spectrum-portal-model.azurewebsites.net, 1 @@ -10469,6 +10271,7 @@ alpencams.it, 1 alpencams.net, 1 alpencams.nl, 1 +alpendaemm.at, 1 alpenguides.de, 1 alpenhof-suedtirol.com, 1 alpenjuice.com, 1 @@ -10501,7 +10304,6 @@ alphabit.gr, 1 alphablueocean.com, 1 alphabouncycastles.co.uk, 1 -alphabrasloja.com.br, 1 alphabytes.uk, 0 alphachannel.tk, 1 alphachat.net, 1 @@ -10533,7 +10335,6 @@ alphasall.com, 1 alphasoft-i.net, 1 alphassl.de, 1 -alphastrip.com, 1 alphat.net, 1 alphatam.com, 1 alphatrading.tk, 1 @@ -10580,7 +10381,6 @@ alrioart.com, 1 alroniks.com, 0 alrowadexchange.com, 1 -alruknalswissre.com, 1 alsaagency.tk, 1 alsabil.tk, 1 alsace-informatique.shop, 1 @@ -10594,7 +10394,6 @@ alsonkaw.com, 1 alsops.cf, 1 alsteadnh.gov, 1 -alstertouch.com, 1 alstertouch.de, 1 alt-met.ru, 1 alt-pannekow.de, 1 @@ -10624,7 +10423,6 @@ altaica.ru, 1 altair.com, 0 altairfp.es, 1 -altairlyh.com, 1 altaizemlya.cf, 1 altaizemlya.ga, 1 altaizemlya.ml, 1 @@ -10634,6 +10432,7 @@ altana.com, 1 altana.de, 1 altaplana.be, 1 +altarriba.fr, 1 altasierra.co.uk, 1 altavaldinon.com, 1 altavoces.guru, 1 @@ -10658,7 +10457,6 @@ alterengine.tk, 1 altergalaxy.tk, 1 alteria.xyz, 1 -alterian.com, 1 alterlinks.com, 1 alterlinks.fr, 1 alterlinks.it, 1 @@ -10667,7 +10465,6 @@ altern-in-wuerde.com, 1 alternador.com.br, 1 alternatieva.tk, 1 -alternatifin.com, 1 alternativa-kaluga.ru, 1 alternativagospel.tk, 1 alternativaservizi.it, 1 @@ -10919,7 +10716,6 @@ amaranth-legacy.community, 1 amaranth.gq, 1 amaranth.tk, 1 -amaranthbusinesssolutions.com, 1 amaranthus.com.ph, 1 amaresq.com, 1 amarilio.com.mx, 1 @@ -10932,7 +10728,6 @@ amartours.pt, 1 amaruddinmufid.com, 1 amaruz.tk, 1 -amarylis.com, 1 amasea.yachts, 1 amasing.tk, 1 amateri.com, 1 @@ -10966,6 +10761,7 @@ amazing-cars98.tk, 1 amazing-castles.co.uk, 1 amazing-maids.com, 1 +amazingbusinessresults.com, 1 amazingraymond.com, 1 amazingraymond.com.au, 1 amazingribs.com, 1 @@ -10984,7 +10780,6 @@ amazonaws-china.com, 1 amazonbookreview.com, 1 amazoncreatica.online, 1 -amazonseoservices.com, 1 amazonteckathon.com, 1 amazstaff.com, 1 amaztravail.com, 1 @@ -11080,6 +10875,7 @@ ameego.nl, 1 ameego.org, 1 ameen.tech, 1 +ameenaccounting.co.za, 1 ameeradubai.com, 1 amees.me, 0 ameeventos.pt, 0 @@ -11140,6 +10936,7 @@ americangods.tk, 1 americanimageawards.com, 1 americaninsuranceplus.ml, 1 +americanjihad.com, 1 americankickoff.ga, 1 americanlegaltranscription.com, 1 americanmessaging.net, 1 @@ -11189,6 +10986,7 @@ amessage.eu, 1 amessage.info, 1 amesvacuumrepair.com, 1 +amethyst.com.ua, 1 amethystbodyart.co.za, 1 amethystcards.co.uk, 1 amethystdevelopment.co.uk, 1 @@ -11217,6 +11015,7 @@ amiatlanticare.com, 1 amibistro.nl, 1 amica-travel.com, 1 +amica.gov.au, 1 amicalecanyon.ch, 0 amicare-france.com, 1 amicare.fr, 1 @@ -11225,16 +11024,16 @@ amiciperlatesta.it, 1 amico.ca, 1 amico.dk, 1 -amicon.com, 1 amicosauro.tk, 1 amicus-webdesign.de, 1 amicusjunior.ro, 1 +amicusreporting.biz, 1 amicusreporting.ca, 1 amicusreporting.com, 1 amicusreporting.info, 1 +amicusreporting.net, 1 amicusrx.com, 1 amie.so, 1 -amiez.com, 1 amifoundation.net, 1 amigaremix.com, 1 amigatraktor.tk, 1 @@ -11246,7 +11045,6 @@ amigosgranada4050.tk, 1 amihousebuyers.com, 1 amikekszunkjatek.hu, 1 -amikton.ru, 1 amilaresort.com, 1 amilcalcados.com.br, 1 amilesportes.com.br, 1 @@ -11289,6 +11087,7 @@ amitriptyline25mg.cf, 1 amitriptylineonline.tk, 1 amitt.ga, 1 +amityhealthcaregroup.com, 1 amityvillepdny.gov, 1 amitywebsitedesign.com, 0 amiv.ch, 1 @@ -11324,6 +11123,7 @@ amobileway.co.uk, 1 amoc.org, 1 amodeocarlo.com, 1 +amoderm.com, 1 amoeboids.com, 1 amogus.cloud, 1 amokinio.com, 1 @@ -11379,6 +11179,8 @@ amp.chat, 1 amp.pt, 1 ampact.co, 1 +ampaiesmiramar.cat, 1 +ampamontserratina.cat, 1 ampcuscyber.com, 1 ampedairsoft.com, 1 amper.kharkov.ua, 0 @@ -11426,6 +11228,7 @@ amruta.org, 1 ams-ix.net, 1 ams.co.rs, 1 +amsaantours.com, 1 amsconnectapp.com, 1 amscrosscomp.nl, 1 amsel305nc.ddnss.de, 1 @@ -11437,7 +11240,6 @@ amsterdam.nl, 1 amsterdam4u.tk, 1 amsterdam5.nl, 1 -amsterdamfashionweek.nl, 1 amsterdamian.com, 1 amsterdamnightlifeticket.com, 1 amsterdamsebos.nl, 1 @@ -11467,7 +11269,6 @@ amur.tk, 1 amusa.cl, 1 amush.vip, 1 -amuzante.com, 1 amvip9.com, 1 amvisor.com, 1 amvisualgraphics.com, 1 @@ -11479,7 +11280,6 @@ amyfoundhermann.com, 1 amyknickerbocker.com, 1 amymabel.com, 1 -amymargolislcsw.com, 1 amymartiraphotography.com, 1 amyred.net, 1 amyria.jp, 1 @@ -11522,7 +11322,6 @@ anachronaeon.tk, 1 anachronis.gq, 1 anacom.pt, 1 -anacondasc.co.uk, 1 anacondaswimmingclub.org.uk, 1 anacron.pl, 1 anadoluefessk.org, 1 @@ -11548,7 +11347,6 @@ analfistula.com.sg, 1 analfistulatreatment.sg, 1 analgesia.ga, 1 -analiespantry.com, 1 analinsting.tk, 1 analisi-grammaticale.biz, 1 analisi-logica.it, 1 @@ -11565,7 +11363,6 @@ analogman.com, 1 analpantyhose.org, 1 analpics.com, 1 -analyser-mon-site.fr, 1 analystexamers.ga, 1 analysts.com, 1 analytics-media.com, 1 @@ -11580,7 +11377,6 @@ analytixen.com, 1 analyzemyfriends.com, 1 analyzepoker.com, 1 -analyzerhq.com, 1 anamelikian.com, 1 anamifilms.com, 1 anamterminal.tk, 1 @@ -11630,7 +11426,6 @@ anatoliarles.com, 1 anatoly.tk, 1 anatomized.tk, 1 -anatomyfilms.com, 1 anatoray.com, 1 anatorywap.gq, 1 anaxios.ga, 1 @@ -11666,7 +11461,7 @@ ancestryinstitution.com, 1 ancestryunofficial.com, 1 anchev.net, 1 -anchoragedemocrats.org, 1 +anchoragedemocrats.org, 0 anchorbvfs.com, 1 anchorit.gov, 1 anchoritsg.com, 1 @@ -11686,7 +11481,6 @@ ancuong.com, 1 and-stuff.nl, 1 and-tax.jp, 1 -andain.com, 1 andalosse.tk, 1 andalucia.com, 1 andaluciaboard.tk, 1 @@ -11718,6 +11512,7 @@ andeticaret.com, 1 andfaraway.tk, 1 andfrankly.com, 1 +andge.site, 1 andhrawishesh.com, 1 andiamoluggage.com, 1 andibo.net, 1 @@ -11776,7 +11571,7 @@ andreaskrasa.com, 1 andreaslicht.nl, 1 andreasolsson.se, 1 -andreazphotography.com, 1 +andreatedeschi.it, 1 andrecanuto.com.br, 1 andrecarvalho.net.br, 1 andredaus.com, 1 @@ -11790,7 +11585,6 @@ andreihodorog.com, 1 andreiluca.com, 1 andrejbenz.com, 1 -andrejstefanovski.com, 1 andremaciel.pt, 1 andremalraux.com, 1 andrematosband.tk, 1 @@ -11813,7 +11607,6 @@ andrew-lazarev.com, 1 andrew.eu.org, 1 andrew.fi, 1 -andrewazzopardi.org, 1 andrewbennett.ltd, 1 andrewcountymo.gov, 1 andrewdaws.co, 1 @@ -11976,7 +11769,6 @@ anexperimentedblog.tk, 1 anextraordinaryday.net, 1 anfadern.com, 1 -anfei.com, 1 anfieldbc.co.uk, 1 anfilada.info, 1 anfloors.ru, 1 @@ -11985,7 +11777,6 @@ angablade.com, 1 angarstroy.com, 1 ange-de-bonheur444.com, 1 -angeben.com, 1 angel-body.com, 1 angel-jrk.com, 1 angel-wing.jp, 1 @@ -12004,7 +11795,6 @@ angelesdelabismo.com, 1 angelesydemonios.es, 1 angelfood.org, 1 -angelhaken.com, 1 angelhammer.tk, 1 angelholmssymfoniker.se, 1 angelic47.com, 1 @@ -12022,7 +11812,6 @@ angeloangioi.tk, 1 angeloroelen.tk, 1 angelremigene.com, 0 -angelrengifo.com, 1 angelsanctum.tk, 1 angelsandairwaves.tk, 1 angelsandfriends.com, 1 @@ -12056,7 +11845,6 @@ angkapaito.net, 1 angkasa.net.id, 1 anglarsports.com, 1 -angleformation.com, 1 angleline.cn, 1 anglersconservation.net, 1 anglertanke.de, 1 @@ -12071,7 +11859,6 @@ angloeastern.com, 1 anglogoldashanti.com, 1 anglopoltransport.pl, 1 -angolo.com, 1 angolo.ga, 1 angora.id, 1 angorarabbitsaspets.com, 1 @@ -12186,6 +11973,7 @@ anime-tip.com, 1 anime-tv.tk, 1 anime-umamusume.jp, 1 +anime.com.br, 1 anime.my, 0 anime1.me, 1 anime1.moe, 1 @@ -12258,6 +12046,7 @@ anitop.tk, 1 anitube-nocookie.ch, 1 aniviasport.store, 1 +anivideo.com, 1 anivision.tk, 1 aniwatch.me, 1 aniwhen.com, 1 @@ -12269,31 +12058,20 @@ anjocerdena.com, 1 anjtransportsolutions.com.au, 1 anjunexpress.com.br, 1 -ankam.com, 1 ankane.org, 1 ankanetworks.net, 1 ankaraarabakiralama.com.tr, 1 ankaraarabakiralama.name.tr, 1 ankaraarackiralama.name.tr, 1 -ankarabolcahindi.com.tr, 1 ankaraciftkabin.com, 1 ankaracikma.com.tr, 1 -ankaracikmaparca.com.tr, 1 ankaradaozelders.tk, 1 -ankarafiziktedavimerkezi.com.tr, 1 ankaraicmimarlik.com, 1 -ankarajeneratorkiralama.com.tr, 1 ankarakurumsalwebtasarim.com, 1 ankaramotosikletyedekparca.com, 1 -ankaraotocikmaparca.com.tr, 1 -ankaraotokiralama.name.tr, 1 ankaraotokiralama.tk, 1 ankaraotomobilcikmaparca.com, 1 -ankaraotomobilcikmaparca.com.tr, 1 -ankaraotomobilyedekparca.com, 1 ankaraotomobilyedekparca.com.tr, 1 -ankaraotoparca.com.tr, 1 -ankararentacar.name.tr, 1 ankaraseo.name.tr, 1 ankarasoket.com.tr, 1 ankarasondajkuyusutemizleme.com, 1 @@ -12301,9 +12079,10 @@ ankaravinckiralama.com.tr, 1 ankarawebtasarim.name.tr, 1 ankarawebtasarim.tk, 1 -ankarayedek.com.tr, 1 +ankeney.com, 1 anker-wladyslawowo.pl, 1 anketlekazan.net, 1 +ankicozmorobot.com, 1 ankitpati.in, 1 ankitverma.me, 1 ankiuser.net, 1 @@ -12350,6 +12129,7 @@ annangela.cn, 1 annangela.moe, 0 annarokina.com, 1 +annas-herzenseulen.de, 1 annasheffield.com, 1 annat.cf, 1 annat.tk, 1 @@ -12369,7 +12149,6 @@ annekebemer.nl, 1 annekleinert.de, 1 anneli.biz, 1 -annelida.com, 1 annelies-monsere.tk, 1 anneliesvanhoof.tk, 1 annelisetouya.com, 1 @@ -12386,6 +12165,7 @@ anniangel-porn.com, 1 annicascakes.nl, 1 anniecloth.com, 1 +anniegagnonphotographie.com, 1 anniekheffache.com, 1 anniesdollhouse.com, 1 annihilation-squad.tk, 1 @@ -12418,6 +12198,7 @@ annuncisesso.tk, 1 annyaurora.net, 1 annygraces.com, 1 +annymail.com, 1 anokacountybuys.gov, 1 anokawineandspirits.gov, 1 anol.loan, 1 @@ -12547,7 +12328,6 @@ antecipa.com, 1 antek.com.vn, 1 antena.ga, 1 -antenaplay.ro, 0 antenaweb.tk, 1 antenna-lyubertsy.cf, 1 antennajunkies.com, 1 @@ -12582,7 +12362,6 @@ anthonyellis.uk, 1 anthonyfontanez.com, 1 anthonylaberge.tk, 1 -anthonyloop.com, 1 anthonymineo.com, 0 anthonymrugacz.com, 1 anthonymrugacz.net, 1 @@ -12624,7 +12403,6 @@ anticensorship-russia.tk, 1 antichat.tk, 1 antichatresources.ga, 1 -anticipari.ro, 1 anticipating.tk, 1 anticonceptieportaal.nl, 0 anticorruption.tk, 1 @@ -12648,6 +12426,7 @@ antiformiche.it, 1 antifraud.cf, 1 antifraudcentre-centreantifraude.ca, 1 +antifurt.com, 1 antifurti.roma.it, 1 antigenselftest.com.au, 1 antigravity.cf, 1 @@ -12669,6 +12448,7 @@ antikvarshop.tk, 1 antilaserpriority.com, 1 antiled.by, 1 +antilight.com, 1 antimateri.com, 1 antimaterie.tk, 1 antimilitaristasmadrid.org, 1 @@ -12761,7 +12541,6 @@ antrimcountymi.gov, 1 antrimnh.gov, 1 antrodiulisse.eu, 0 -antropico.com, 1 antroposofica.com.br, 1 ants-and-me.ml, 1 ants-carte-grise.fr, 1 @@ -12785,6 +12564,7 @@ anulowano.pl, 1 anuntulmeu.tk, 1 anunturitv.ro, 1 +anvilbyte.com, 1 anvilmetal.tk, 1 anvilo.com, 1 anvilsales.tk, 1 @@ -12811,14 +12591,11 @@ any-id.online, 1 any-id.store, 1 any-link-page.de, 1 -any6.com, 1 anya-carter.com, 1 anyad.at, 1 anyboat.com.au, 1 anybodylistening.net, 1 -anycoindirect.eu, 1 anydaytour.cf, 1 -anydownloader.com, 1 anyduchildren.tk, 1 anyebooks.cf, 1 anyebooks.ga, 1 @@ -12877,16 +12654,15 @@ aoadatacommunity.us, 1 aoaprograms.net, 1 aobogo.com, 1 -aocai.com, 1 aod-tech.com, 1 aodisco.co.uk, 1 aoe9.com, 1 aoemobilehub.com, 1 aoeuaoeu.com, 1 +aofusa.me, 1 aofusa.net, 1 aogas.co.za, 0 aogph.org, 1 -aohao.com, 1 aoicprobationil.gov, 1 aoil.gr, 1 aojf.fr, 1 @@ -12896,7 +12672,6 @@ aolcollege.com, 1 aomar-mohammedi.tk, 1 aomeikey.org, 0 -aomi.com, 1 aomz.org, 1 aonedatasolution.com, 1 aonhewitt.com.cy, 1 @@ -12911,7 +12686,6 @@ aorhan.com, 1 aori.com, 1 aoronyx.com, 1 -aorui.com, 1 aosc.kz, 1 aosclan.tk, 1 aoshiya.com, 1 @@ -12924,7 +12698,6 @@ aotearoaleaks.org, 0 aotech.tw, 1 aotopo.com, 1 -aotuo.com, 1 aova.loan, 1 aoxinstudy.com, 1 aoyadaily2024.com, 1 @@ -12995,12 +12768,10 @@ apelsin.ml, 1 apem.com, 1 aperainst.com, 1 -aperature.com, 1 apercloud.es, 1 aperioadvice.ga, 1 aperiomoney.ga, 1 aperiotaxation.ga, 1 -apert.be, 1 aperta.ro, 1 aperta.shop, 1 apertis.org, 0 @@ -13027,9 +12798,11 @@ apexinfotechindia.com, 1 apexitsolutions.ca, 1 apexkk.com, 1 +apexknjige.rs, 1 apexnc.gov, 1 apexperformancegym.com, 0 apexpreciousmetals.com, 1 +apexremovablecovers.com, 1 apextrailers.co.za, 1 apexweb.ru, 1 apfhaiti.org, 1 @@ -13038,7 +12811,6 @@ apgen.org, 1 apgw.jp, 1 aphantasiac.com, 1 -aphantasiaclub.fr, 1 aphelionband.ga, 1 aphelis.net, 1 aphorismen-archiv.de, 1 @@ -13091,6 +12863,7 @@ apirie.uk, 1 apiris.fr, 1 apis.google.com, 1 +apisamtech.com, 1 apit-kovrov.ru, 1 apitpc.com.br, 1 apiu.me, 1 @@ -13113,16 +12886,15 @@ apkpokemongo.tk, 1 apkxi.com, 1 apl-landau.de, 1 -aplaceforpops.com, 1 aplausse.tk, 1 aplazame.com, 0 aplcare.com, 1 -aplicaciones.ai, 1 aplis-online.de, 0 aplteam.tk, 1 aplu.fr, 1 aplus.mn, 1 aplusdownload.com, 1 +aplusfactoring.com, 1 aplusteachingresources.com.au, 1 aplusz.nl, 1 aply.plus, 1 @@ -13198,15 +12970,16 @@ apostascomvalor.com, 1 apostasdepescada.com, 1 apostasdesportivas.tv, 1 -apostasecasinos.pt, 1 apostasolida.com, 1 apostillelondon.com, 1 apostrophe.pl, 1 apotex.com, 1 apothecarydouglasville.com, 1 apotheek-ict.nl, 1 +apotheekvanwacht.be, 1 apothekeonline.tk, 1 apotom.tk, 1 +apoyoconsultoria.com, 1 apoyoentareas.tk, 1 apozitivenergiasport.hu, 1 app, 1 @@ -13258,7 +13031,6 @@ appelboom.com, 1 appelboomdefilm.nl, 1 appelerintrt.tk, 1 -appelhof.com, 1 appemployees.tk, 1 appen.com, 1 appen.com.cn, 1 @@ -13269,7 +13041,6 @@ appgeek.com.br, 1 appgrowing.cn, 1 appgrowing.net, 1 -appgrowth.com, 1 appgurus.com.au, 1 appian-cdn-gov.com, 1 appian-cdn.com, 1 @@ -13302,10 +13073,9 @@ applebees.com, 1 applecare.cz, 1 applecommunity.net, 1 +applecool.com, 1 appledroid.ru, 1 -appleedu.com, 1 appleexterminating.com, 1 -applefeel.com, 1 applefix.it, 1 appleglasscompany.com, 1 applegun.com, 1 @@ -13318,6 +13088,7 @@ applemon.org, 1 appleoosa.com, 1 applepiecapital.com, 1 +applerepairtoday.com, 1 appleric.tk, 1 appleroof.com, 1 applesaph.nl, 1 @@ -13327,7 +13098,6 @@ applet.cyou, 1 appletonmn.gov, 1 appletonwi.gov, 1 -appletoy.com, 1 appletree.is, 1 appletreemedicalgroup.com, 1 applevalleyca.gov, 1 @@ -13382,6 +13152,7 @@ apprenticeship.gov, 1 apprenticeships.gov, 1 apprentimillionnaire.com, 1 +apprephub.com, 1 approbo.com, 1 approve.me, 1 approvedbynemko.com, 1 @@ -13429,6 +13200,7 @@ appwardbeta.com, 1 appwhats.space, 0 appworld.ga, 1 +appwrk.com, 1 appypie.com, 1 appzoojoo.be, 1 apqafrica-odoo.com, 1 @@ -13495,6 +13267,7 @@ aptient.com, 1 aptitudetests.org, 1 aptos.com, 1 +aptsomart.com, 1 apu-board.de, 1 apuestaes.tv, 1 apuestalegal.com, 1 @@ -13516,7 +13289,6 @@ aqdun.com, 0 aqenglish.pk, 1 aqihub.info, 1 -aqlivia.com, 1 aqmetrics.com, 1 aqqrate.com, 1 aqu.com, 1 @@ -13628,7 +13400,6 @@ arabc.chat, 1 arabearthcommunity.ml, 1 arabedia.tk, 1 -arabeyes.com, 1 arabfcn.net, 1 arabi-news.ml, 1 arabi-online.net, 1 @@ -13664,7 +13435,6 @@ aradpulse.tk, 1 arafatx.com, 1 aragotownshipmn.gov, 1 -arais.com, 1 araizahoteles.com, 1 arakanis.tk, 1 arakomputer.com, 0 @@ -13673,7 +13443,6 @@ aralun.net, 1 aralys.com, 1 aramido.de, 1 -aramleisure.com, 1 aramyayinevi.com, 1 aranc.it, 1 aranchhomes.com, 1 @@ -13733,9 +13502,6 @@ arbortechtreeservice.com, 1 arborwind.com, 1 arbounie.nl, 1 -arbousier.com, 1 -arbs09.de, 1 -arbschg.com, 1 arc-relight.com, 1 arc.int, 0 arc.net, 1 @@ -13754,10 +13520,10 @@ arcana-noctis.tk, 1 arcandadults.org, 1 arcane.no, 1 +arcanecoast.ru, 1 arcanefrost.de, 1 arcanehardware.com, 1 arcanetides.com, 1 -arcanoid.com, 1 arcarwegrow.pl, 1 arcbouncycastles.co.uk, 1 arcchildren.org, 1 @@ -13767,7 +13533,6 @@ archaeoadventures.com, 1 archaeopilot.de, 1 archambault.paris, 1 -archangelmacsikaspa.com, 1 archbishop.ga, 1 archdetal.com.ua, 1 archeologiatoscana.it, 1 @@ -13805,6 +13570,7 @@ architexture.design, 1 archival-services.gov.ge, 1 archive.gov.ge, 1 +archivehost.com, 1 archives.cf, 1 archives.gov, 1 archivesdelavieordinaire.ch, 1 @@ -13821,7 +13587,6 @@ archlinuxpower.org, 1 archmacro.ga, 1 archoit.org, 0 -archphila.org, 1 archsec.info, 1 archtekton.com.ve, 1 arci-qc.ca, 1 @@ -13893,6 +13658,7 @@ area51bit.com, 1 area51bit.it, 1 areacinquentaeum.tk, 1 +areacode231.com, 1 areaf5.es, 1 areallyneatwebsite.com, 1 arealsultan.ga, 1 @@ -13903,7 +13669,6 @@ areavoipest.ga, 1 areawidepainting.com, 1 arecart.fr, 1 -areeblog.com, 1 areege.tk, 1 arefidgetspinnersgay.com, 1 arefly.com, 1 @@ -13966,7 +13731,6 @@ arge-bilisim.com, 1 argedijital.com, 1 argekultur.at, 1 -argency.com, 1 argentas.com, 1 argentinachat.tk, 1 argentinatrabaja.org, 1 @@ -13992,7 +13756,6 @@ argumentative-essay.gq, 1 argumentplus.ru, 1 argus01.bg, 1 -argxentakato.me, 1 argyrouminas.digital, 1 argyrouminas.eu, 1 arhan.sh, 1 @@ -14111,7 +13874,6 @@ arkadelphia.gov, 1 arkadiahill.tk, 1 arkadian.tk, 1 -arkadien.com, 1 arkadium.com.br, 1 arkadiyt.com, 1 arkagis.com, 1 @@ -14273,7 +14035,6 @@ arnoudraeven.nl, 1 arnove.fr, 1 arnove.net, 1 -arnoweterings.nl, 1 arnstein.it, 1 arny.ru, 1 aroablog.tk, 1 @@ -14329,7 +14090,6 @@ arpsel.de, 1 arpsel.ws, 1 arpteamdiabolo.tk, 1 -arpuff.eu, 1 arqpericial.es, 1 arqueo-ecuatoriana.ec, 1 arquipielago.tk, 1 @@ -14354,7 +14114,6 @@ arroba.digital, 1 arrotatore.roma.it, 1 arrow-api.nl, 1 -arrowad.com, 1 arrowduty.ml, 1 arrowfastener.com, 1 arrowgrove.com, 0 @@ -14442,7 +14201,6 @@ artdeco-photo.com, 0 artdecoration.tk, 1 artdigital.tk, 1 -artdigitalmedia.co.uk, 1 artdurideau.com, 1 arte-actual.tk, 1 artea.ga, 1 @@ -14471,7 +14229,6 @@ artemis-fowl.tk, 1 artemisgroup.ga, 1 artemislena.eu, 1 -artemiy-plus.com.ua, 1 artemiz.tk, 1 artemoon.ml, 1 artemweb.tk, 1 @@ -14528,7 +14285,6 @@ articlesutiles.cf, 1 articonnect.fr, 1 articool-tour.ru, 1 -articu.no, 1 artifact.center, 1 artifact.spb.ru, 1 artifact.us.kg, 1 @@ -14553,7 +14309,6 @@ artigoagency.com, 1 artikel5ev.de, 1 artikel9.com, 1 -artiltd.co.uk, 1 artinfo.tk, 1 artioml.net, 1 artionet.ch, 1 @@ -14578,7 +14333,7 @@ artistree.io, 1 artistreplugged.com, 1 artistrunwebsite.com, 1 -artivo-gallery.com, 1 +artium.agency, 1 artizlibranza.com, 1 artj.jp, 1 artk-co.ir, 1 @@ -14599,6 +14354,7 @@ artmaxi.eu, 1 artmiller.com, 1 artmo.com, 1 +artnart.com.br, 1 artnazar.org.ua, 1 arto.group, 1 artofbong.com, 1 @@ -14619,7 +14375,7 @@ artphototravel.net, 1 artplaneta-leto.by, 1 artprize.ru, 1 -artprojectsforkids.org, 1 +artprojectsforkids.org, 0 artpsd.com, 0 artransparency.gov, 1 artrapid.com, 1 @@ -14637,7 +14393,6 @@ artsinbushwick.org, 1 artslife.com, 1 artsmagazine.com, 1 -artsmeet.com, 1 artsongcolorado.org, 1 artspac.es, 0 artspark.tk, 1 @@ -14649,6 +14404,8 @@ arttill.com, 1 artucation.eu, 1 artup.company, 1 +arturana.com, 1 +arturana.es, 1 arturgaweda.de, 1 arturkraak.duckdns.org, 1 arturoemilio.tk, 1 @@ -14673,6 +14430,7 @@ artycoz.fr, 1 artyengine.com, 1 artyhouse.be, 0 +aru.fi, 1 aruanaseguradora.com.br, 1 arul.io, 1 aruna.de, 1 @@ -14686,9 +14444,7 @@ aruson.tk, 1 arvadaco.gov, 1 arvadafireco.gov, 1 -arvadatreeservicellc.com, 1 arveex.eu, 1 -arviamedspa.com, 1 arviksa.co.uk, 1 arvin.com.co, 1 arvindhariharan.me, 1 @@ -14721,6 +14477,7 @@ arzmercury.tk, 1 arztpraxis-kubalok.de, 1 arzua.gal, 1 +as-bau.be, 1 as-clima.com, 1 as-evalar.ru, 1 as-sklep.pl, 1 @@ -14735,6 +14492,7 @@ as203145.com, 1 as204982.net, 1 as205794.net, 1 +as205941.net, 1 as207618.net, 1 as207960.net, 1 as209245.net, 1 @@ -14794,7 +14552,6 @@ asbestosthedarkarts.com, 1 asbf-rambouillet.fr, 1 asbhive.edu.my, 0 -asbito.de, 1 asbrands.co.uk, 0 asburyparkreporter.com, 1 asbweb.org, 1 @@ -14918,6 +14675,7 @@ ashleythouret.com, 1 ashlingonline.com, 1 ashmore.gov, 1 +ashodhaholidays.com, 1 ashotofadrenaline.net, 1 ashraful-islam.ml, 1 ashtabulacountyprosecutoroh.gov, 1 @@ -14937,15 +14695,12 @@ asia-fuhui.com, 1 asia4five.com, 1 asiabyte.com, 1 -asiacan.com, 1 -asiaceo.com, 1 asiacommerce.id, 1 asiadirect.co.th, 1 asiafaninfo.net, 1 asiaferguson.com, 1 asiafood-curator.com, 1 asiagate.ga, 1 -asiagps.com, 1 asiahabit.com, 1 asiahilux.com, 1 asiakartu.tk, 1 @@ -14959,7 +14714,6 @@ asianbeautywholesale.com, 1 asianbusinesscards.com, 1 asiancammers.com, 1 -asiancolor.com, 1 asiandubfoundation.tk, 1 asianet.tk, 1 asianetbroadband.in, 1 @@ -14967,7 +14721,6 @@ asianlifestyledesign.com, 1 asianmain.com, 1 asianmoney.biz, 1 -asianray.com, 1 asianshop.com.pe, 1 asiansnus.com, 1 asiansongs.tk, 1 @@ -14983,9 +14736,7 @@ asiaticas.cf, 1 asiaview.ml, 1 asiaview.tk, 1 -asiaviews.com, 1 asiaville.in, 1 -asiayuan.com, 1 asiba.com.au, 1 asicodevelopments.ae, 1 asicxchange.com, 1 @@ -14997,7 +14748,6 @@ asikoo.xyz, 1 asikpasagazetesi.tk, 1 asilo.roma.it, 1 -asilomar.com, 1 asinat.by, 1 asinetasima.com, 1 asinglepebble.com, 1 @@ -15012,7 +14762,6 @@ ask1.org, 1 askapkmod.com, 1 askart.com, 1 -askartza.com, 1 askatechnicalquestion.com, 1 askatechnicalquestion.eu, 1 askatechnicalquestion.nl, 1 @@ -15030,7 +14779,6 @@ askfoto.com, 1 askfront.com, 0 askgamblers.com, 1 -askimsin.com, 1 askindia.tk, 1 askjan.org, 1 askkaren.gov, 1 @@ -15107,7 +14855,6 @@ aspen.gov, 1 aspencat.tk, 1 aspenmedical.com, 1 -aspenpsychologywy.com, 0 aspenvocational.com, 1 aspera.com, 0 asperas.com.tr, 1 @@ -15138,6 +14885,7 @@ aspontes.org, 1 asportnoy.com, 1 aspr.gov, 1 +aspr.group, 1 asprion.org, 1 asprobet.com, 1 asproni.it, 1 @@ -15166,7 +14914,6 @@ assamtodayexpress.com, 1 assanti.com, 1 assassinasian.tk, 1 -assault1892.boats, 1 assdecoeur.org, 1 assecuro.com.ua, 1 assedo.tk, 1 @@ -15177,7 +14924,6 @@ assemblyai.com, 0 assemblytoolbox.com, 1 assemblywithoutthewalls.org, 1 -assendelft.com, 1 assens.dk, 0 assentfitness.com, 1 assentis.ch, 1 @@ -15201,7 +14947,6 @@ assicurare.it, 1 assid.com, 1 assignacii.ml, 1 -assignmentcrafters.com, 1 assignmenthelper.org, 1 assignmenthelponline.co.uk, 1 assignmenthelpservices.com, 1 @@ -15243,7 +14988,6 @@ associazioneterra.it, 1 assoft.co, 1 assomydesk.fr, 1 -assoservicesweb.org, 1 asspoop.com, 1 assta.ga, 1 assumptionla.gov, 1 @@ -15287,6 +15031,7 @@ astera-led.com, 1 astera.com, 1 asterhu.com, 1 +asterinu.xyz, 1 asterisk.lol, 1 asterisle.com, 1 asterix-obelix.ga, 1 @@ -15342,7 +15087,6 @@ astrid-stolz.de, 1 astrill.com, 1 astro-com.co.uk, 1 -astro-libre.fr, 1 astro.sk, 1 astro4u.tk, 1 astroai.com, 1 @@ -15396,12 +15140,12 @@ astucedirecte.tk, 1 astucewebmaster.com, 1 astuna.de, 1 +astur.de, 1 astur.school, 1 astur.travel, 1 asturhackers.es, 1 astutetm.com, 1 astutr.co, 1 -astyork.com, 1 astypic.fr, 1 asual.com, 1 asuamaytinh.com, 1 @@ -15422,7 +15166,6 @@ asvsa.ch, 0 aswe.win, 1 asweetsmile.com, 1 -aswish.com, 1 asws.nl, 1 asyadexpress.com, 1 asyaport.com, 1 @@ -15449,6 +15192,7 @@ atabekandco.com, 1 ataber.pw, 1 atabor.tk, 1 +atacado.com.vc, 1 atacadocervejeiro.com.br, 1 atacadoclube.com.br, 1 atacadodesandalias.com.br, 1 @@ -15476,6 +15220,7 @@ atc-fr.com, 1 atc.cuneo.it, 1 atc.io, 0 +atc75.nl, 1 atccareer.com, 1 atcg.cc, 0 atchisoncountymo.gov, 1 @@ -15505,7 +15250,7 @@ atelierbeautebk.com, 1 atelierbw.com, 1 ateliercommerce.com, 1 -atelierdelachaine.fr, 1 +atelierdelachaine.fr, 0 atelierdelacreation.com, 1 atelierdeloulou.fr, 1 atelierdesflammesnoires.fr, 1 @@ -15588,11 +15333,9 @@ atimevis.com, 1 atimo.dj, 1 atinylittle.space, 1 -atiparts.com.tr, 1 atis.net, 1 atishchenko.com, 1 atisoft.biz.tr, 1 -atisoft.com.tr, 1 atisoft.name.tr, 1 atisoft.net, 1 atisoft.net.tr, 1 @@ -15617,7 +15360,6 @@ atlacademy.org, 1 atlan.digital, 1 atlan.nl, 1 -atlanta-airport-parking.com, 1 atlantacustomfab.com, 1 atlantahealthcare.tk, 1 atlantajewishlifefestival.com, 1 @@ -15662,7 +15404,6 @@ atlascloud.cn, 1 atlascoffeeclub.com, 1 atlascultural.com, 1 -atlasdestination.com, 1 atlasdev.io, 1 atlasescorts.com, 1 atlasflare.com, 1 @@ -15678,7 +15419,6 @@ atlasone.us, 1 atlasrealestates.com, 1 atlasreclame.nl, 1 -atlassen.com, 1 atlassian.net, 1 atlassignsandplaques.com, 1 atlastax.ga, 1 @@ -15692,8 +15432,6 @@ atletico-guacuano.tk, 1 atletika.hu, 1 atletismomacotera.tk, 1 -atlhypertensioninitiative.org, 0 -atlucknow.com, 1 atm-bur.ru, 1 atm-erasmus.com, 1 atm.net, 1 @@ -15753,12 +15491,14 @@ atorcidabrasileira.com.br, 1 atovelin.gq, 1 atovelin.tk, 1 +atoz-gc.com, 1 atozeventrentalsofpa.com, 1 atp-autoteile.de, 1 atplonline.co, 1 atproducts.xyz, 1 atpx.com, 1 atradius.co.uk, 1 +atragumi.hu, 1 atraining.ru, 1 atramare.com, 1 atrands.com, 1 @@ -15777,13 +15517,13 @@ atris.media, 1 atriumhotels.gr, 1 atriumschool.gr, 1 -atriumstaff.com, 1 atrkadeh.com, 1 atrogi.com, 1 atropos.co, 1 ats.net, 1 atsol.com, 1 atspeeds.com, 1 +attadigital.com, 1 attanasioluigi.tk, 1 attatroll.de, 1 attawauganfirect.gov, 1 @@ -15792,7 +15532,6 @@ attekaleva.fi, 1 attendanceondemand.com, 1 attendanceradar.com, 1 -attendantdesign.com, 1 attendhealth.com, 1 attendu.cz, 0 attengo.ga, 1 @@ -15887,7 +15626,6 @@ aucarresainteloi.com, 1 aucc.com.ly, 1 aucc.org.nz, 1 -aucem.com, 1 auchan.fr, 1 auchan.pt, 1 aucielrose.com, 1 @@ -15916,7 +15654,6 @@ audioaidynamics.com, 1 audiobit.es, 1 audioblackmagic.com, 1 -audiobone.com, 1 audiobooksnow.com, 1 audiobookstudio.com, 1 audioboom.com, 1 @@ -15937,6 +15674,7 @@ audiolegendsny.com, 1 audiologistdirectory.com, 1 audiolot.com, 1 +audioman.co.uk, 1 audiomedica.com, 1 audiomind.tk, 1 audiomir.tk, 1 @@ -15980,14 +15718,12 @@ aufiowilauf.at, 1 aufmerksamkeitsstudie.com, 1 aufprise.de, 1 -aufschieben.com, 1 aufstehen.de, 1 auftragsfertigung.at, 1 aufwachzeit.at, 1 aufwachzeit.com, 1 aufwecken.dynu.net, 1 augendre.info, 1 -augenklappe.com, 1 augenlaser-chemnitz.de, 1 augenlaser-dresden.de, 1 augenlaserzentrum-dresden.com, 1 @@ -15997,7 +15733,6 @@ augeomarketing.com, 1 augesen.tk, 1 augix.net, 1 -augmedia.com, 1 augmedix.com, 0 augmentable.de, 0 augmentin.ga, 1 @@ -16015,7 +15750,6 @@ augustian-life.cz, 1 augustiner-kantorei-erfurt.de, 1 augustiner-kantorei.de, 1 -augustus.lt, 1 auk.hopto.org, 1 aukanaw.tk, 1 aukaraoke.su, 1 @@ -16053,12 +15787,10 @@ aupapa.com, 1 aupaysdesanes.com, 1 auplidespages.fr, 1 -auqi.com, 1 aura.moe, 1 aura7chakr.com, 1 aurabasketball.com, 1 aurabasketball.fr, 1 -aurac.org.nz, 1 auraedu.me, 1 aurahiemis.tk, 1 aurainfosec.com, 0 @@ -16077,6 +15809,7 @@ aurelie-valognes.com, 1 aurelien-duchene.fr, 1 aurelienaltarriba.fr, 1 +aureliencoppee.be, 1 aurelisdigital.fr, 1 aurelvoica.ro, 1 aurenvale.com, 1 @@ -16132,7 +15865,6 @@ ausec.ch, 0 auservicedeschiens.com, 1 ausfin.com, 1 -ausgesprochen.com, 1 ausgrants.au, 1 ausgrants.com, 1 ausgrants.com.au, 1 @@ -16150,7 +15882,6 @@ ausncp.gov.au, 1 auspicacious.org, 1 auspokies.net, 1 -aussagen.com, 1 ausschreibungen-suedtirol.it, 1 ausset.me, 1 aussiebum.com, 1 @@ -16169,13 +15900,12 @@ austcm.com.au, 1 austenplumbing.com, 1 austercita.tk, 1 -austickcarremoval.com.au, 1 -austin-dumpsters.com, 0 -austin-pearce.com, 1 +austickcarremoval.com.au, 0 austin-security-cameras.com, 1 austinbestdjs.com, 1 austincardiac.com, 1 austincosmetic.com, 1 +austinextendedstayrooms.com, 1 austinface.com, 1 austinlaw.co.uk, 1 austinonline.tk, 1 @@ -16184,6 +15914,9 @@ austinrifleclub.org, 1 austinsutphin.com, 1 austinuniversityhouse.com, 1 +australia.cn, 1 +australia.com, 1 +australia.jp, 1 australiabusinessblog.com, 0 australiadaily.ga, 1 australiaday.com.au, 1 @@ -16213,7 +15946,6 @@ austrianwine.com, 1 austriatravel.tk, 1 austromorph.space, 1 -auszeit-lanzarote.com, 1 auszeit-walsrode.de, 1 auszeit.bio, 1 autantic.fr, 1 @@ -16242,7 +15974,6 @@ authinity.com, 0 authland.com, 1 author-it.com, 1 -author.cn, 1 author24.info, 1 authorbriannamacmahon.com, 1 authorise.computer, 1 @@ -16253,7 +15984,6 @@ authorizedcourttranscriptionists.ca, 1 authorizedcourttranscriptionists.com, 1 authorjjcruzbooks.com, 1 -authorwise.com, 1 authress.io, 1 authsrv.nl.eu.org, 1 autism-explained.com, 1 @@ -16269,6 +15999,7 @@ auto-delchev.com, 1 auto-ecole-du-tursan.fr, 1 auto-ecole-remparts.fr, 1 +auto-graph.eu, 1 auto-help.tk, 1 auto-i-dat.ch, 1 auto-market.tk, 1 @@ -16294,7 +16025,6 @@ autoamericas.show, 1 autoamor.com.br, 1 autoangels.ga, 1 -autoankaufen.com, 1 autoanzeige.com, 1 autoauctionsarizona.com, 1 autoauctionsohio.com, 1 @@ -16305,7 +16035,6 @@ autobazarmontekarlo.cz, 1 autobedrijfgarant.nl, 1 autobelle.it, 1 -autobelt.com, 1 autobitsmotorstore.com, 1 autobiz.tk, 1 autoblog-de.com, 1 @@ -16319,7 +16048,6 @@ autobusiness.ml, 1 autocadperfmon.azurewebsites.net, 1 autocardesign.org, 1 -autocarejersey.com, 1 autocaresdiego.com, 1 autocarrot.eu, 1 autocarrot.nl, 1 @@ -16341,10 +16069,7 @@ autocrossteam-monein.tk, 1 autocrossteam.tk, 1 autoctona.org, 1 -autodach.com, 1 -autodalas.com, 1 autodeal.com.ph, 1 -autodekor.com, 1 autodemolizioni.roma.it, 1 autodidactic.ai, 1 autodidacticstudios.com, 1 @@ -16372,7 +16097,6 @@ autogard.cz, 1 autogear.ga, 1 autogeizer.ru, 1 -autoglascenter.com, 1 autoglasskobra.bg, 1 autogorod24.ru, 1 autograph.io, 1 @@ -16387,7 +16111,6 @@ autohut.ca, 1 autohuttruckcenter.ca, 1 autoi.ch, 1 -autoidc.com, 1 autoindustriya.com, 1 autoinfa.tk, 1 autoinkoop.tk, 1 @@ -16404,14 +16127,12 @@ autolackpartner.de, 1 autolatex.cf, 1 autolawetawroclaw.pl, 1 -autoleaders.gr, 1 autoledky.sk, 1 autolet.tk, 1 autoline.link, 1 autologix.io, 1 automa.biz, 1 automaatic.com, 1 -automacro.com, 1 automagischeberegening.nl, 1 automastercastlerock.com, 1 automatecodes.com, 1 @@ -16423,7 +16144,6 @@ automaxcovington.com, 1 automecanicadosgalegos.pt, 1 automecanicagalegos.pt, 1 -automeeting.com, 1 automekano.com, 0 automekbromma.se, 1 automiata.de, 1 @@ -16436,7 +16156,6 @@ automobileescrowers.ga, 1 automobileescrowest.ga, 1 automobiles-sportives.fr, 1 -automobiliteit.nl, 1 automotiveabundant.ga, 1 automotiveadaptive.ga, 1 automotiveagenda.ga, 1 @@ -16588,7 +16307,6 @@ automotiveyankee.ga, 1 automoto-tom.net, 1 automuovifix.fi, 1 -automuse.com, 1 autonewsreview.com, 1 autonoleggio.milano.it, 1 autonome-netze.de, 1 @@ -16596,7 +16314,6 @@ autonomie-numerique.fr, 1 autonovinky.cz, 1 autoofficina.it, 1 -autopacking.com, 1 autopadconnect.com, 1 autopapo.com.br, 1 autopark-ost-fichtner.de, 1 @@ -16610,12 +16327,9 @@ autopaulito.pt, 0 autopecasjoaquinense.com.br, 1 autopilotapp.com, 1 -autopinturasonline.com, 1 autopistadelitata.cl, 1 autopneusdacovilha.pt, 1 autopocket.co, 1 -autopod.com, 1 -autoporn.com, 1 autoportal.tk, 1 autopril.com, 1 autoprogconsortium.ga, 1 @@ -16656,6 +16370,7 @@ autospadetail.sk, 1 autospecialistllc.com, 1 autosprint.tk, 1 +autospurghi.roma.it, 1 autospurgo.co, 1 autospurgo.com, 1 autospurgo.it, 1 @@ -16713,7 +16428,6 @@ autres-talents.fr, 1 auts.fi, 0 autumnhungary.tk, 1 -autumnmanor.com, 1 autya.ga, 1 auvernet.org, 1 auversum.com, 1 @@ -16730,7 +16444,6 @@ auxion.net, 1 auxmode.com, 1 av-autoparts.gr, 1 -av-bracht.de, 1 av-dnepr.com.ua, 1 av-th.net, 1 av-yummy.com, 1 @@ -16955,11 +16668,9 @@ aviv-group.at, 1 avivanuestroscorazones.com, 1 avivaplasticsurgery.com, 1 -avivglobal.com, 1 aviweisfogelinfo.org, 1 avland.me, 1 avlasov.tk, 1 -avlover.com, 1 avm-multimedia.com, 1 avm99963.com, 1 avmtn.net, 1 @@ -17013,7 +16724,6 @@ avrilshine.tk, 1 avrora-nov.ru, 1 avroramine.tk, 1 -avrrom.com, 1 avs.be, 1 avsd01.com, 1 avstack.io, 1 @@ -17026,7 +16736,6 @@ avto-signal.ga, 1 avto-signal.gq, 1 avto-signal.ml, 1 -avtobot.by, 1 avtochip.tk, 1 avtodoki.tk, 1 avtodot.tk, 1 @@ -17074,7 +16783,6 @@ awamally.com, 1 awangardaszkola.pl, 1 awanteverde.tk, 1 -awaradiaries.com, 1 award.ga, 1 awardfares.com, 1 awardsbox.com, 1 @@ -17097,7 +16805,6 @@ awaybot.com, 1 awaygroundguide.com, 1 awayword.cf, 1 -awconsulting.com.sg, 1 awebsome.fr, 1 awei.pub, 1 awena.me, 1 @@ -17105,6 +16812,7 @@ awersomecreatorfromrussia.tk, 1 awesome-coconut-software.fr, 1 awesomebible.de, 1 +awesomegaming.space, 1 awesomeindie.com, 1 awesomelifedeals.today, 1 awesomeperfumes.com, 1 @@ -17166,7 +16874,7 @@ axeligence.com, 1 axelname.ru, 1 axelr.me, 1 -axeltheune.de, 1 +axeltheune.de, 0 axelvoss.eu, 0 axendia.com, 1 axenhus.com, 1 @@ -17265,7 +16973,6 @@ aycacankurt.com, 1 aycasac.com, 1 aycomba.de, 1 -aydacosmetics.com, 1 aydinescmagazin.tk, 1 aydinhaberleri.tk, 1 aye.sh, 1 @@ -17296,7 +17003,6 @@ aymerick-dupouey.fr, 1 aymericlagier.com, 1 aymhome.top, 0 -ayomi.com, 1 ayon-games.tk, 1 ayothemes.com, 1 ayotteshackelford.com, 1 @@ -17365,7 +17071,9 @@ ayrohq.com, 1 ayrom.io, 1 ayruu.com, 1 +aysantex.com, 1 ayselonia.onl, 1 +aysgarthfallshotel.com, 1 ayshaflix.com.br, 1 aytuntegelzetbedrijf.nl, 1 ayubesportes.com.br, 1 @@ -17397,7 +17105,6 @@ az-raven.com, 1 az-servisoken.cz, 1 az-vinyl-boden.de, 1 -az-wellness.com, 1 az.net.au, 1 az.search.yahoo.com, 0 az.st, 1 @@ -17410,7 +17117,6 @@ azaleos.com, 1 azalhavayolu.com.tr, 1 azallon.com.br, 1 -azami.com, 1 azapp-vvv-program-api-dev.azurewebsites.net, 1 azaria.blog, 1 azarkepic.com, 1 @@ -17468,7 +17174,6 @@ azl.ink, 1 azlink.tk, 1 azmt.de, 1 -azmun.com, 1 aznaetelivy.ru, 1 azoft.com, 1 azon.gr, 1 @@ -17483,7 +17188,6 @@ azquality.com, 1 azrangers.gov, 1 azraxiel.de, 1 -azreal.com, 1 azredistricting.gov, 1 azrevolutionizingckd.com, 1 azrhymes.com, 1 @@ -17498,7 +17202,6 @@ azt.tec.br, 1 aztecagents.ai, 1 azteenmagazine.com, 1 -aztekium.com, 1 aztestsmartviewwebapp.azurewebsites.net, 1 azton.tk, 1 aztraslochi.it, 1 @@ -17576,6 +17279,7 @@ b1c1l1.com, 1 b1drivers.com, 1 b1ggi.ovh, 1 +b1nary0.com.ar, 1 b1nzy-pinged.me, 1 b1r0d4l0m.com, 1 b1rd.tk, 1 @@ -17596,8 +17300,6 @@ b2markt.de, 1 b2music.asia, 1 b2og.com, 1 -b3.nu, 1 -b3b4.com, 1 b3bra.win, 1 b3pacific.com, 1 b3t4.org, 1 @@ -17702,7 +17404,6 @@ b9957.com, 1 b9961.com, 1 b9962.com, 1 -b9970.com, 1 b99718.com, 1 b9973.com, 1 b9976.com, 1 @@ -17796,9 +17497,10 @@ babybed.tk, 1 babyboom.pl, 1 babyboomer.org, 1 +babyboomer.ro, 1 babybuddah.ga, 1 +babybug.ru, 1 babybunnypictures.tk, 1 -babycaring.com, 1 babycat.tk, 1 babycenter.com, 1 babycezi.ro, 1 @@ -17822,7 +17524,6 @@ babynoise.tk, 1 babynow.org, 1 babypalooza.com, 1 -babypaparadise.com, 1 babypharm.ga, 1 babypoppen.tk, 1 babyportal.net, 1 @@ -17888,7 +17589,6 @@ backd00red.org, 1 backedbycanadians.ca, 0 backenmachtgluecklich.de, 0 -backfront.com, 1 background-checks.asia, 1 background-checks.biz, 1 background-checks.mobi, 1 @@ -17955,7 +17655,6 @@ bacq.pro, 1 bacri.eu, 1 bacsmegye.hu, 1 -bacteri.com, 1 bacteriakit.com, 1 bactrim-antibiotic.gq, 1 bactrim-antibiotic.ml, 1 @@ -17976,6 +17675,7 @@ bad.spdns.de, 1 badaa.info, 1 badaniebezdechu.pl, 1 +badante.it, 1 badanteinfamiglia.it, 1 badaparda.com, 1 badass-women.club, 1 @@ -17992,7 +17692,6 @@ badcyber.com, 1 baddrones.llc, 1 badeand.net, 1 -badekappen.com, 1 baden-airpark.de, 1 badenbody.nl, 1 bader-jungk.de, 1 @@ -18000,6 +17699,7 @@ badeurlaub.tk, 1 badf00d.de, 1 badge.rs, 1 +badgerherald.com, 1 badges.fedoraproject.org, 1 badges.stg.fedoraproject.org, 1 badgetree.com, 1 @@ -18049,7 +17749,7 @@ badseacoffee.com, 1 badsl.nl, 1 badstar.tk, 1 -badtimesrecords.com, 1 +badtimesrecords.com, 0 badudeal.lk, 1 badules.tk, 1 badvista.org, 1 @@ -18069,7 +17769,6 @@ baesystems-she.com, 1 baevserver.ddns.net, 1 bafing.com, 1 -bafito.com, 1 bafoeg-rechner.de, 1 baframedya.tk, 1 bafus.ru, 1 @@ -18080,7 +17779,6 @@ baggy.me.uk, 1 bagheera.me.uk, 1 baghtelecom.net, 1 -baginfo.com, 1 bagiobella.com, 1 bagirahome.bg, 1 bagleytownshipmi.gov, 1 @@ -18098,14 +17796,13 @@ bagssale.ga, 1 bagu.biz, 1 bagu.fr, 1 -bagui.com, 1 bagumum-kotakediri.com, 1 bagusat.com, 1 bagwrap.com, 1 bahadirh.ml, 1 bahamar.com, 1 +bahamashighwaycode.org, 1 bahamaspermits.com, 1 -bahami.com, 1 baharmusic24.tk, 1 bahcehavuz.com, 1 bahena.be, 0 @@ -18121,7 +17818,6 @@ bahrep.com, 1 bahri.sa, 1 bai-bao.fr, 1 -baiask.com, 1 baic-versicherung.de, 1 baichi.cf, 1 baichi.ml, 1 @@ -18141,24 +17837,19 @@ baileyladders.com.au, 1 baileysharborwi.gov, 1 baileystrailsystem.org, 1 -bailiang.com, 1 bailleux.be, 1 bailodromo.tk, 1 bailong.kr.ua, 1 bailonga.com, 1 -baimail.com, 1 bain-savon.co.uk, 1 baindayman.com, 1 baindetoile.fr, 1 bainnordiquebois.fr, 1 -baipay.com, 1 baircentral.com, 1 bairuo.top, 0 bairwell.com, 1 baise.cf, 1 baise.ml, 1 -baise3x.com, 1 -baishitie.com, 1 bait55.ru, 0 baitable.ml, 1 baitapsgk.com, 1 @@ -18178,7 +17869,6 @@ bajalotodo.tk, 1 bajanthings.com, 1 bajaprogramas.tk, 1 -bajarjuegos.com, 1 bajic.ch, 1 bajiotec.com, 1 bajj.de, 1 @@ -18202,7 +17892,6 @@ bakeneko.academy, 1 bakenekoacademy.com, 1 baker-street.tk, 1 -bakerandfarmer.com.au, 1 bakercity.gov, 1 bakercitypd.gov, 1 bakercommunications.com, 1 @@ -18215,12 +17904,11 @@ bakersfieldhomeoffer.com, 1 bakerviewdentalcentre.com, 1 bakerymazowsze.co.uk, 1 -bakesy.shop, 1 +bakesy.shop, 0 bakeup.be, 1 bakibal.com, 1 bakingbydonna.com, 1 bakivaxti.az, 1 -bakj.com, 1 bakkerij-janschrieks.nl, 1 bakkerinjebuurt.be, 1 bakkerpanden.nl, 1 @@ -18255,7 +17943,6 @@ balagne-corsica.com, 1 balaisnomad.com, 1 balakovo-news.tk, 1 -balala.com, 1 balancascia.com.br, 1 balance.courses, 1 balance.education, 1 @@ -18318,7 +18005,6 @@ balitourdriver.site, 1 balivacationhomes.com, 0 balivakantiewoning.nl, 0 -balivillassanur.com, 0 baliwebsitedesign.info, 1 balkan-observatory.net, 1 balkannightlife.ga, 1 @@ -18357,13 +18043,11 @@ balneariodearchena.com, 1 baloch-intelligence.tk, 1 balochism.tk, 1 -balogkrisztian.hu, 1 baloncestoarqueros.tk, 1 baloncestolliria.tk, 1 balonsiparis.com, 1 balopal.tk, 1 balsamaiso.es, 1 -balsara.com, 1 balski.com, 1 balslev.io, 1 balt.net, 1 @@ -18380,7 +18064,6 @@ baltimoreroofingservices.com, 1 baltlex.de, 1 baltrag.com, 1 -balustrade-premium.ro, 1 bam.com.gt, 1 bamahi.ir, 1 bamaland.org, 1 @@ -18395,7 +18078,6 @@ bambooforest.nl, 1 bamboohr.co.uk, 1 bamboohr.com, 1 -bambooplywood.com, 1 bamboorose.com, 1 bamboostage.com, 1 bambooviews.com, 1 @@ -18460,7 +18142,6 @@ bandbattle.tk, 1 bandbelievo.tk, 1 bandbwestport.com, 1 -bandconquista.com.br, 1 bandeira1.com.br, 1 bandeiraimoveisitu.com.br, 1 bandeirasnacionais.com, 1 @@ -18497,8 +18178,8 @@ banfieldentertowin.com, 0 banfieldtravel.it, 1 banfun.org, 1 -bang.com.au, 1 bangabandhu.tk, 1 +bangandscrew.com, 1 bangbangboys.tk, 1 bangberlin.tk, 1 bangbros.com, 1 @@ -18517,6 +18198,7 @@ banglargolpo.tk, 1 banglatec.tk, 1 banglets.com, 1 +bangphai.com, 1 bangsparks.com, 1 bangujero.tk, 1 banham.co.uk, 0 @@ -18559,7 +18241,6 @@ banking-services.tk, 1 bankingheralders.ga, 1 bankinter.pt, 1 -bankiros.ru, 1 bankislami.com.pk, 1 bankitt.network, 1 bankja.net, 1 @@ -18571,16 +18252,13 @@ banknotesdelarue.com, 1 banknottakip.com, 1 bankofabbeville.com, 1 -bankofguilin.com, 1 bankofhankou.com, 1 -bankofharbin.com, 1 bankofrealty.review, 1 bankofthesierra.com, 1 bankpolicies.com, 1 bankrbk.kz, 1 bankruptcy.ky, 1 bankruptcyattorneys.org, 1 -banksampoerna.com, 1 banksite.ga, 1 banksouthern.com, 0 banksulselbar.co.id, 1 @@ -18617,7 +18295,6 @@ bantchev.net, 1 bantenmien.tk, 1 banter.city, 1 -banthias.org, 1 bantik.by, 1 bantiki.ga, 1 bantoa.com, 1 @@ -18630,7 +18307,6 @@ bao-in.net, 1 baobabgroup.com, 1 baobaoquming.net, 0 -baobiao.com, 1 baocheng.tech, 1 baofuzhuan.com, 1 baogao.store, 1 @@ -18638,9 +18314,7 @@ baogiathicongnoithat.com, 1 baokhangfood.com, 1 baokhanhhoa.vn, 1 -baoqiang.com, 1 baoquangninh.vn, 1 -baoshun.com, 1 baoxiache.com, 1 baoxue5.com, 0 bapeel.tk, 1 @@ -18668,6 +18342,7 @@ baravalle.com, 1 baraxolka.ga, 1 baraxolka.ml, 1 +barbara-bertagnolli.co.uk, 1 barbara-fuchs-gruene-fuerth.de, 1 barbarabryce.com, 1 barbaraedanielsantos.ga, 1 @@ -18701,12 +18376,12 @@ barca-movie.jp, 1 barcamp.koeln, 1 barcelonapremiummini.es, 1 -barcelonatours.net, 1 +barcelonatours.net, 0 barcelonawinewalk.com, 1 barchetta.org, 1 barcicuvele.tk, 1 barcitizen.eu, 1 -barclaybonitaranch.com, 1 +barclaybonitaranch.com, 0 barclays.net, 1 barcodelookup.com, 1 barcoder.tk, 1 @@ -18726,7 +18401,6 @@ bardoferry.com, 1 bardtech.com, 1 barduschinamusic.org, 1 -baredykk.no, 1 barefoodinrome.it, 1 barelias.tk, 1 barelydating.com, 1 @@ -18749,7 +18423,7 @@ barhan-sarykum.ru, 1 bari.fun, 1 bariatricassociates.com, 1 -barichara.com, 1 +bariatrik.ro, 1 barihandin.tk, 1 barikell.be, 1 barinasknot.tk, 1 @@ -18759,7 +18433,6 @@ bario.com.tr, 1 baripedia.org, 0 baris-sagdic.com, 1 -barisdayak.com, 1 bariseau-mottrie.be, 1 barisi.me, 1 baristador.com, 1 @@ -18826,9 +18499,8 @@ barrankest.ga, 1 barranquillero.tk, 1 barraqueirotransportes.pt, 1 -barrasaccess.com, 1 barratennis.com.br, 1 -barrebody.com.au, 1 +barrebody.com.au, 0 barreiroappraisals.com, 1 barrelfish.org, 1 barrencountyky.gov, 1 @@ -18879,6 +18551,7 @@ bartvandamme.tk, 1 baruch.me, 1 baruzdin.online, 1 +barvarsovia.es, 1 barwave.com, 1 barzallof.com, 1 barzza.tk, 1 @@ -18908,7 +18581,6 @@ baseballsavings.com, 1 basebyte.nl, 1 basecamp.cf, 1 -basecampstudios.com, 1 baseconvert.com, 1 basecore.co, 1 based.gr, 1 @@ -18942,7 +18614,6 @@ bashc.at, 1 bashhack.cf, 1 bashier.net, 1 -bashkimi.com, 1 bashkiri.cf, 1 bashkiria.cf, 1 bashkiria.ga, 1 @@ -19036,7 +18707,6 @@ bastolino.de, 1 bastotrekking.pt, 1 bastter.com, 1 -bastun.com, 1 basuramarina.com, 1 baswetter.photography, 1 basyrova.ml, 1 @@ -19144,6 +18814,7 @@ battlerite.tk, 1 battletech.tk, 1 battletrades.net, 1 +battoota.ma, 1 battreil.tk, 1 batualam88.id, 1 batualam88.online, 1 @@ -19152,8 +18823,6 @@ batukhan.tk, 1 batulicin.tk, 1 batumelebi.ge, 1 -batumivillas.com, 1 -batwatt.com, 1 bau.ua, 1 baubau.bg, 1 bauchtanz.tk, 1 @@ -19186,6 +18855,7 @@ baugeshite.de, 1 bauhaus.cz, 1 bauhaus.sk, 1 +bauhoftoo.ee, 1 baukebies.nl, 1 baukelek.tk, 1 baum-gruenpflege.de, 1 @@ -19294,6 +18964,8 @@ bazar-online.tk, 1 bazar-pc.tk, 1 bazar.bg, 0 +bazaralsham.com, 1 +bazardelregalo.es, 1 bazardunet.tk, 1 bazarfds.com.br, 1 bazarotehijos.com, 1 @@ -19363,7 +19035,6 @@ bbmak.tk, 1 bbmri.fi, 1 bbmsarauniteam.com, 1 -bbnairlines.aero, 1 bbnx.net, 1 bbox.org, 1 bbp.ng, 1 @@ -19378,7 +19049,6 @@ bbschat.tk, 1 bbsec.xyz, 1 bbsis.org, 1 -bbtk.com, 1 bbusa.tk, 1 bbw-wrestling.com, 1 bbwanalsex.com, 1 @@ -19388,7 +19058,7 @@ bbwpussytube.com, 1 bbwsexclips.com, 1 bbwteens.org, 1 -bbx.bike, 1 +bbx.bike, 0 bbxin9.net, 1 bbxy.buzz, 1 bc-bd.org, 0 @@ -19550,6 +19220,7 @@ beacongaragedoors.com, 1 beaconhealthoptions.com, 1 beaconinvesting.com, 1 +beaconinvestingetfs.com, 1 beaconny.gov, 1 beadaptive.ca, 1 beadare.com, 1 @@ -19621,6 +19292,7 @@ beastowner.li, 1 beatachoroszynska.pl, 1 beatbikers.com, 1 +beatbox.zone, 1 beatbreaker.tk, 1 beatfeld.de, 1 beatfreaks.tk, 1 @@ -19660,6 +19332,7 @@ beautiful.ai, 1 beautifulart.ml, 1 beautifulbicester.co.uk, 1 +beautifulmindhealth.com, 1 beautifulplaces.tk, 1 beautifulreflectionsmedspa.com, 1 beautifulrussianwomen.cf, 1 @@ -19766,7 +19439,6 @@ bebro.loan, 1 bebrochka.loan, 1 becallgroup.com, 1 -because.co.il, 1 becausecapitalism.org, 1 becausewematterlv.com, 1 becausewematterlv.org, 1 @@ -19780,7 +19452,8 @@ becker.wales, 1 becker8.de, 1 beckermn.gov, 1 -beckerpumps.com, 0 +beckerpumps.com, 1 +beckettcorp.com, 1 beckmancoulter.com, 1 beckmandxapps.com, 1 beckylicious.tk, 1 @@ -19794,7 +19467,6 @@ become.me, 1 becomewebdeveloper.tk, 1 beconnect.cf, 1 -beconstructive.com, 1 becquerelgroup.com, 1 becs-bloomsbury.com, 1 becs.ch, 0 @@ -19863,7 +19535,6 @@ beeebraa.download, 1 beefclan.tk, 1 beeg.hu, 1 -beegarage.com, 1 beehive.govt.nz, 1 beehive.systems, 1 beehive42.com, 1 @@ -19891,8 +19562,6 @@ beencrypted.com, 1 beenox.com, 1 beeone.nl, 1 -beepan.com, 1 -beepanwang.com, 1 beepassvpn.com, 1 beepcar.ru, 1 beeportfolio.com, 1 @@ -19912,8 +19581,6 @@ beernews.ga, 1 beerradar.no, 1 beerradar.party, 1 -beerre.com, 1 -beers.my, 1 beersandco.ch, 1 beersconf.com, 1 beersheba.co.il, 1 @@ -19985,7 +19652,6 @@ behamepresrdce.sk, 1 behamzdarma.cz, 1 behandelt.com, 1 -behangbedrijfvanklaveren.nl, 1 behappyonlinetanfolyam.hu, 1 behar-selimi.tk, 1 behatech.tk, 1 @@ -20012,13 +19678,11 @@ behoreal.cz, 1 behotelmalta.com, 1 behpooshshop.com, 1 -behrami.com, 1 behrer.se, 1 beiersdorf-svz.ch, 1 beihelsinki.de, 1 beijing.bj, 1 beijinglug.club, 1 -beijiquan.com, 1 beimchristoph.de, 1 beinad.com, 1 beinchrist.ca, 1 @@ -20121,7 +19785,6 @@ belgraver.email, 1 belgraver.eu, 1 belgraver.xyz, 1 -belic.net, 1 belichtungswert.de, 1 belics.com, 0 belidi.tk, 1 @@ -20170,7 +19833,6 @@ bellebakes.blog, 1 bellebaum.eu, 1 bellecarmen.tk, 1 -bellehorizon.co.za, 1 bellenews.com, 1 bellenundballern.de, 1 belleplaineiowa.gov, 1 @@ -20303,6 +19965,7 @@ benedictineravenstore.com, 1 benedictoaguilar.tech, 1 benedikto.tk, 1 +benedyktynki-sakramentki.org, 1 benee-awraham.nl, 1 benefactgroup.com, 1 benefeds.com, 1 @@ -20342,7 +20005,6 @@ bengaltourism.ml, 1 bengalurugifts.com, 1 bengaratei.com, 1 -bengcao.com, 1 bengisureklam.com, 1 bengkelkeramik.tk, 1 bengou.tk, 1 @@ -20389,7 +20051,6 @@ benleemd.com, 1 benmack.net, 1 benmarron.co.uk, 1 -benmatthews.com.au, 1 benmedia.nl, 1 bennet.org, 0 bennettrainey.com, 1 @@ -20434,7 +20095,6 @@ bentermail.de, 1 bentertain.de, 0 benthanhtourist.com, 1 -bentina.com, 1 bentley.blog, 1 bentley.link, 1 bentleyks.gov, 1 @@ -20546,7 +20206,6 @@ berkeleyca.gov, 1 berkeleypolitical.review, 1 berkhills.com, 1 -berksabstract.com, 1 berksbulls.com, 1 berksenergyhvac.com, 1 berkshire.com, 1 @@ -20622,6 +20281,7 @@ bernhard-resch.com, 1 bernhard-resch.me, 1 bernhard-seidenspinner.de, 1 +bernhardblix.de, 1 bernhardluginbuehl.ch, 1 bernhardluginbuehl.com, 1 bernhardresch.eu, 1 @@ -20683,7 +20343,6 @@ bertuah.com, 1 bertusengelbrecht.com, 1 berufenavi.de, 1 -berufszertifikate-und-diplome.net, 1 berwickpa.gov, 1 berz.one, 1 berzkalne.co.uk, 1 @@ -20705,17 +20364,13 @@ besikta.se, 1 besiktasmtsk.com, 1 besinspain.es, 1 -besir.com, 1 beskar.pro, 1 -beskiden.com, 1 besnard.me, 1 besnik.de, 0 besnik.tk, 1 besola.de, 1 besole.ch, 1 besolov.tk, 1 -besonderheit.com, 1 -besonline.es, 1 besox.be, 1 bespaarbazaar.nl, 1 bespaarenergie.click, 1 @@ -20770,7 +20425,6 @@ bestafricaradio.tk, 1 bestarts.tk, 1 bestasquadradas.org, 1 -bestastrologermohali.in, 1 bestatos.com, 1 bestatter.de, 1 bestattung-ebenbichler.at, 1 @@ -20822,14 +20476,12 @@ besteckliste.com, 1 bestedeal.nl, 1 besteenergieleverancier.com, 1 -bestehen.com, 1 bestehostingproviders.nl, 1 bestelectricrazors.com, 1 bestelhetmaar.nl, 1 bestellipticalmachinereview.info, 1 bestelsportprijzen.nl, 1 bestertagderwelt.de, 1 -bestescortmallorca.com, 1 bestessayhelp.com, 1 bestethereumcasinos.io, 1 besteuitvaartverzekering.com, 1 @@ -20838,7 +20490,6 @@ bestfidgettoysforadhd.com, 1 bestfinancialcu.org, 1 bestfitnesswatchreview.info, 1 -bestfoodplan.com, 1 bestfornutrition.com, 1 bestfriend.ga, 1 bestfriendsequality.org, 1 @@ -20855,8 +20506,6 @@ besties.house, 1 besties4life.ml, 1 bestill.foundation, 1 -bestin.ph, 1 -bestincservices.com, 1 bestinductioncooktop.us, 1 bestinsider.net, 0 bestinsulatedwaterbottle.tk, 1 @@ -21048,12 +20697,9 @@ bestpornclip.com, 1 bestporngirls.com, 1 bestpornpictures.com, 1 -bestportablegeneratorratings.com, 1 bestpracticesleidraad.nl, 1 bestpressurewashingchicago.com, 1 bestpricelovers.com, 1 -bestprofessionalchainsaw.com, 1 -bestpromoving.com, 1 bestratedremovals.co.uk, 1 bestratedtransport.com.au, 1 bestreleases.tk, 1 @@ -21065,7 +20711,6 @@ bestsatoshifaucet.ga, 1 bestsextoys.com, 1 bestsheepadoodles.com, 1 -bestsheepdog.ru, 1 bestshopping.ga, 1 bestshops.ga, 1 bestsingaporelawyer.com, 1 @@ -21256,14 +20901,12 @@ beteroud.nl, 1 betexperts.tk, 1 betfair.com.co, 1 -betfjord.se, 1 betformular.com, 1 bethanymo.com, 1 bethanytownshipmi.gov, 1 bethatkinson.tk, 1 bethechangebaf.com, 1 bethefuture.nl, 1 -bethelcustombrick.com, 1 bethelparkpa.gov, 1 bethelparkpapolice.gov, 1 betheltwplebanon.gov, 1 @@ -21286,7 +20929,6 @@ beton.ie, 1 betonbewerkingsmachines.be, 1 betongereedschap.be, 1 -betoniera.org, 1 betonline.bz, 1 betonmachines.be, 1 betonmarkets.info, 1 @@ -21322,7 +20964,7 @@ bettashoerepairs.com.au, 1 bettendorf.gov, 1 better.ad, 1 -better.com, 0 +better.com, 1 better.fyi, 1 betterbaseball.com, 1 betterbedding.com, 1 @@ -21356,6 +20998,7 @@ betterscore.net, 1 bettersecurity.co, 1 bettersocialmedia.co.uk, 1 +betterstack.com, 1 bettertax.gov.au, 1 betterteam.com, 1 bettertech.pt, 1 @@ -21405,6 +21048,7 @@ betwinnerportugal.com, 1 betwinnerpromocode.net, 1 betwinneruganda.com, 1 +betz-family.de, 1 betza.online, 1 betzgmbh.de, 1 betzwhite.com, 1 @@ -21417,7 +21061,6 @@ beurettes-en-chaleur.tk, 1 beursbever.be, 1 beurswandwereld.nl, 1 -beurteilt.com, 1 beus.ink, 1 beusefulbook.ru, 1 beuteugeu.com, 1 @@ -21426,6 +21069,7 @@ beuty-flowers.tk, 1 bevallarta.com, 1 bevcrushesit.ca, 1 +bevedo.com, 1 bevedo.cz, 1 bevedo.sk, 1 beveiligingscamerawestland.nl, 1 @@ -21563,6 +21207,7 @@ bfrailwayclub.cf, 1 bfsasia.com, 1 bft-media.com, 0 +bftls.com, 1 bfw-online.de, 1 bg-1xbet.com, 1 bg-sexologia.com, 1 @@ -21592,6 +21237,7 @@ bglsingles.de, 1 bgm.bg, 1 bgmall.tk, 1 +bgmarket.cl, 1 bgmedia.tk, 1 bgmn.me, 1 bgmontaggi.com, 1 @@ -21623,7 +21269,6 @@ bhi.consulting, 1 bhiglu.com, 1 bhitnews.tk, 1 -bhnnews.com, 1 bhodisoft.com, 1 bhogavati.tk, 1 bhpropco.com, 1 @@ -21675,7 +21320,6 @@ biasmath.es, 1 biaxin.cf, 1 biaxin.ml, 1 -bibanks.com, 1 bibb.de, 1 bibbvoice.com, 1 biber-bike.de, 1 @@ -21728,7 +21372,6 @@ bibliotecaguate.ml, 1 bibliotecasantaoliva.tk, 1 bibliotecaumana.it, 1 -bibliotech.com.ar, 1 biblioteka-online.tk, 1 biblioteka17.tk, 1 bibliotekarien.se, 1 @@ -21742,7 +21385,6 @@ bibox.schule, 1 bibra.bid, 1 bibun.gq, 1 -bicaraviral.com, 1 bicestore.cl, 1 bicha.net, 1 bichl.de, 1 @@ -21768,7 +21410,6 @@ bidenwhitehouse.gov, 1 bidindustry.com, 1 bidlab.org, 1 -bidmachine.io, 1 bidman.cz, 1 bidoluindirim.com, 1 bidonline.tk, 1 @@ -21827,9 +21468,7 @@ bieville-beuville.fr, 0 biewen.me, 0 bifatura.com.tr, 1 -biffo.com, 1 biflosgknm.tk, 1 -biforthepeople.de, 1 bifrostwallet.com, 1 biftin.net, 1 big-black.de, 1 @@ -21917,7 +21556,6 @@ biggles.io, 1 biggreeneggeindhoven.nl, 1 biggsconstruction.com, 1 -biggy.kiev.ua, 1 bighams.co.uk, 0 bighams.com, 0 bighome.ml, 1 @@ -21925,8 +21563,6 @@ bighugbotanicals.com, 1 bigid.com, 1 bigio.com.br, 1 -bigland.com, 1 -biglapa.ru, 0 bigleads.com, 1 biglistofporn.com, 1 biglive.fun, 1 @@ -21940,7 +21576,6 @@ bignaturals.com, 1 bigone.com, 1 bigopr.com, 1 -bigorangeheart.org, 1 bigorangelab.com, 1 bigpage.tk, 1 bigpanparties.co.uk, 1 @@ -21985,7 +21620,6 @@ bigskyhomebuyers.com, 1 bigskylifestylerealestate.com, 0 bigskymontanalandforsale.com, 1 -bigsolar.com, 1 bigspark.it, 1 bigstonecounty.gov, 1 bigstr.com, 1 @@ -22005,6 +21639,7 @@ bigzoo.com.br, 1 biharhelp.in, 0 biharujala.com, 1 +bihr.org, 1 bijlesbart.nl, 1 bijlesportal.nl, 1 bijou.be, 1 @@ -22087,7 +21722,6 @@ bilimal.kz, 1 bilimdonlar.com, 1 bilingualunit.tk, 1 -bilirrubina.com, 1 biliti.pl, 1 bility.fr, 1 biljettmonster.se, 1 @@ -22150,6 +21784,7 @@ billmyersrealtor.com, 1 billo.life, 1 billoberst.com, 1 +billogram.com, 0 billpro.com.au, 1 billslantz.com, 1 billsteinberg.ca, 1 @@ -22160,26 +21795,13 @@ billybluerecords.com, 1 billybob.tk, 1 billycroan.com, 1 -billyimmo.ma, 1 billyjamrecords.com, 1 billykwok.me, 1 billywig.stream, 1 billywr.com, 1 biltullen.com, 1 -bim.finance, 1 bim.physio, 1 bimacitizen.com, 1 -bimago.art, 1 -bimago.at, 1 -bimago.co.uk, 1 -bimago.com, 1 -bimago.cz, 1 -bimago.de, 1 -bimago.es, 1 -bimago.nl, 1 -bimago.pl, 1 -bimago.pt, 1 -bimago.se, 1 bimbingan.tk, 1 bimedis.com, 1 bimmerguide.de, 1 @@ -22233,10 +21855,8 @@ bingcheung.com, 1 bingchunmoli.com, 1 bingebooks.com, 1 -binggun.com, 1 binghamcountyid.gov, 1 binghamid.gov, 1 -bingning.com, 1 bingo-wear.com, 1 bingo9.net, 1 bingoblue.com, 1 @@ -22251,7 +21871,6 @@ bingothemesers.ga, 1 bingothemesest.ga, 1 bingx.pro, 1 -bingyou.com, 1 binhdang.me, 0 binhex.net, 1 binhminhpc.com, 1 @@ -22311,7 +21930,6 @@ bioclaudia.it, 1 biocomputingunit.es, 1 bioconnect.com, 0 -biocorpsys.com, 1 biocrafting.net, 0 biodaan.com, 1 biodieselbr.com, 1 @@ -22388,7 +22006,6 @@ biologiaygeologia.tk, 1 biologie-seite.de, 1 biologis.ch, 1 -biologo.club, 1 biology-colleges.com, 1 biologymusicvideos.com, 1 biomasscore.com, 1 @@ -22419,7 +22036,6 @@ bioplaces.es, 1 bioplaces.eu, 1 bioplaces.fr, 1 -bioplaces.it, 1 biopreferred.gov, 1 biopro-st.com, 1 biopsychiatry.com, 1 @@ -22474,7 +22090,6 @@ bipolargeek.com, 1 bipolargeek.net, 1 bipolargeek.org, 1 -bippassistant.com, 1 bir3yk.net, 1 birahugo.tk, 1 birchbarkfurniture.ch, 1 @@ -22482,7 +22097,6 @@ birco.de, 1 bird.engineer, 1 birdbox.party, 1 -birdbrowser.com, 1 birdbutt.com, 1 birdgifs.nz, 1 birdiehosting.nl, 1 @@ -22491,7 +22105,6 @@ birdsite.ga, 1 birdslabel.com, 1 birdsnow.com, 1 -birdwatchireland.ie, 1 birebirvilla.com, 1 birenbaum.se, 1 birgitandmerlin.com, 1 @@ -22526,7 +22139,6 @@ birthdayapp.today, 1 birthdaybuzz.org, 1 birthdayinsiderest.ga, 1 -birthdaypartyideas.net, 1 birthinjuryattorneyinfo.com, 1 birthinjurylawyer.com, 1 birthlight-austria.com, 1 @@ -22600,7 +22212,6 @@ bitbonus.cf, 1 bitbonusss.tk, 1 bitbotster.com, 1 -bitbox.me, 1 bitbox.swiss, 1 bitbroker.exchange, 1 bitbucket.com, 1 @@ -22659,16 +22270,12 @@ bitcoinindy.com, 1 bitcoinissafe.com, 1 bitcoinkaufen.news, 1 -bitcoinkurs.news, 1 bitcoinkurs.world, 1 bitcoinmotionpro.com, 1 bitcoinnews.guru, 1 bitcoinnews.world, 1 bitcoinnotbombs.com, 1 -bitcoinprice.buzz, 1 -bitcoinprice.international, 1 bitcoinprice.news, 1 -bitcoinprice.world, 1 bitcoinseed.net, 1 bitcoinsinireland.com, 1 bitcoinskoers.nl, 1 @@ -22682,7 +22289,6 @@ bitcoinwarszawa.pl, 1 bitcoinwiki.org, 1 bitcoinx.ro, 1 -bitcork.io, 1 bitcorp.com.br, 0 bitcrazy.org, 1 bitcurrents.net, 1 @@ -22720,7 +22326,6 @@ bitking-signals.com, 1 bitkiselreyonum.com, 1 bitkom-mitgliederportal.de, 1 -bitkub-app.com, 1 bitkub-int.com, 1 bitlair.nl, 1 bitlaunch.io, 1 @@ -22779,7 +22384,6 @@ bitstorm.org, 1 bitsync.nl, 1 bitten.pw, 1 -bittentechsolutions.in, 1 bittersweetcandybowl.com, 1 bittervault.xyz, 1 bitti.africa, 1 @@ -22788,7 +22392,6 @@ bitton.com.au, 1 bittounsi.com, 1 bittrend.ga, 1 -bittrust.com, 1 bittylicious.com, 1 bitumenburundi.com, 1 bitumendrc.com, 1 @@ -22815,6 +22418,7 @@ biurosuszec.pl, 1 bivg.ru, 0 bixbydevelopers.com, 1 +bixilon.de, 1 biysk.ml, 1 biz-pak.ml, 1 biz-secrety.cf, 1 @@ -22822,7 +22426,6 @@ biz-secrety.gq, 1 biz-secrety.ml, 1 biz-seecrets.gq, 1 -biz2x.com, 1 biz4solutions.com, 1 biz4x.com, 0 bizapps.lv, 1 @@ -22861,6 +22464,7 @@ bizor.tk, 1 bizpay.su, 1 bizprom.ga, 1 +bizsafer.com, 1 bizstack.tech, 1 bizstart.ga, 1 bizstarter.cz, 1 @@ -22868,16 +22472,13 @@ bizteam.ga, 1 biztera.com, 1 biztok.eu, 1 -biztositok.com, 1 biztouch.work, 1 biztrend.ru, 1 bizuteria-laoni.tk, 1 bizuteria-naprezent-szczecin.ml, 1 bizval.co, 1 bizvibe.com, 1 -bizvocate.com, 1 bizword.ru, 1 -bizzdesign.com, 1 bizzexpress.com, 1 bizzix.tk, 1 bizzseo.tk, 1 @@ -22905,7 +22506,6 @@ bjolanta.pl, 1 bjordanov.com, 1 bjorknet.com, 1 -bjornerastrefelling.no, 1 bjornhelmersson.se, 1 bjornjohansen.no, 1 bjornmail.com, 1 @@ -23103,6 +22703,7 @@ black.com, 1 blackagendareport.org, 1 blackandblond.tk, 1 +blackanddecker.com, 1 blackanddecker100years.com, 1 blackandwhite.tk, 1 blackapron.com.br, 1 @@ -23209,6 +22810,12 @@ blackrosefinancial.ca, 1 blackroses.tk, 1 blacksamantha.tk, 1 +blacksandforensic.ca, 1 +blacksandforensic.com, 1 +blacksandforensic.net, 1 +blacksandforensics.ca, 1 +blacksandforensics.com, 1 +blacksandforensics.net, 1 blackscytheconsulting.com, 1 blackseals.net, 1 blacksega.ga, 1 @@ -23303,7 +22910,6 @@ blanket.technology, 1 blanketandpillow.ca, 1 blanketsofhopepa.org, 1 -blankhang.com, 1 blanklabel.com, 1 blankpage.link, 1 blantik.net, 1 @@ -23324,7 +22930,6 @@ blastoise186.co.uk, 1 blasunafotocadadia.com, 1 blathinwheatens.tk, 1 -blatino.com, 1 blatnic.eu, 1 blatnice.cf, 1 blatnice.fun, 1 @@ -23350,9 +22955,8 @@ blavandbike.dk, 1 blavaty.tk, 1 blayne.me, 0 -blayneallan.com, 0 +blayneallan.com, 1 blazebit.com, 1 -blazebytesolutions.com, 1 blazefire.tk, 1 blazelock.com, 1 blazeweb.ml, 1 @@ -23424,6 +23028,7 @@ blind-iq.pl, 0 blind-iq.se, 0 blind-iq.sk, 0 +blindambition.biz, 1 blindaryproduction.tk, 1 blindenfreizeiten.de, 1 blindfold.cf, 1 @@ -23489,7 +23094,6 @@ blnc.gov, 1 blo-melchiorshausen.de, 1 bloat.cat, 1 -blobby.com, 1 blobemoji.com, 1 blobfish.club, 1 blobfolio.com, 1 @@ -23522,7 +23126,6 @@ blockstudio.it, 1 blocktab.io, 1 blockthis.xyz, 1 -blocktimus.com, 1 blockvideo.live, 1 blockwatch.cc, 0 blockxit.de, 1 @@ -23530,6 +23133,7 @@ blocxx.org, 1 blodeuyn.com, 1 bloeij.nl, 1 +bloemendaalsamen.nl, 0 bloemendal.me, 1 blog-club.org, 1 blog-investimenti.it, 1 @@ -23596,6 +23200,7 @@ blognews.cf, 1 blognik.pl, 1 blognone.com, 1 +blogofapps.com, 1 blogom.at, 1 blogotomia.tk, 1 blogpark.tk, 1 @@ -23623,7 +23228,6 @@ blonde-hexe.net, 1 blondeangels.com, 1 blondish.net, 0 -bloo.pw, 1 bloob.io, 1 bloobasket.com, 1 blood-kirsche.tk, 1 @@ -23634,7 +23238,6 @@ bloodandhonourcentral.tk, 1 bloodhaven.tk, 1 bloodhunt.eu, 1 -bloodmeter.com, 1 bloodmine.ga, 1 bloodmissionsest.ga, 1 bloodpop.tk, 1 @@ -23669,7 +23272,6 @@ bloscheck.eu, 1 bloscheck.net, 1 bloscheck.org, 1 -blossomhouston.com, 1 blossomtexas.gov, 1 blountsherifftn.gov, 1 blounttn.gov, 1 @@ -23677,14 +23279,12 @@ blpress.org, 1 blrjmt.com, 1 blsattestation.com, 1 -blsgermanyvisa.com, 1 blt-avocat-nantes.fr, 0 bltc.co.uk, 1 bltc.com, 1 bltc.net, 1 bltc.org, 1 bltc.org.uk, 1 -bltdirect.com, 1 blu.ee, 1 bluavido.ml, 1 blubop.fr, 1 @@ -23705,7 +23305,6 @@ blueangel.org.tw, 1 bluearrowrecords.com, 1 bluebahari.gq, 1 -bluebellaba.com, 1 bluebird.com, 1 bluebit.sytes.net, 1 bluebnc.com, 1 @@ -23724,6 +23323,7 @@ bluediamondresorts.com, 1 bluedivision.tk, 1 blueenergy.tk, 1 +blueescapespools.com, 1 blueeyesworld.tk, 1 bluefieldwv.gov, 1 bluefieldwvpd.gov, 1 @@ -23745,6 +23345,7 @@ blueheronbio.com, 1 bluehillme.gov, 1 bluehr.ph, 1 +blueice.xin, 1 blueimp.net, 1 blueinc.com.au, 1 blueisafety.com, 1 @@ -23776,6 +23377,7 @@ blueport.com, 0 bluepostbox.de, 1 blueprintrealtytn.com, 1 +blueprints.com, 1 blueprintsdogstudio.com, 1 blueprintue.com, 1 blueprogarage.com, 1 @@ -23820,7 +23422,6 @@ bluetape.tk, 1 bluetenfraeulein.de, 1 bluetexservice.com, 1 -bluetime.com, 1 bluetoothlasersers.ga, 1 bluetoothspecialist.ga, 1 bluetrout.nl, 0 @@ -23861,6 +23462,7 @@ blur.io, 1 bluraynebridal.com, 1 blurbhack.com, 1 +blurfuse.com, 1 blurringexistence.net, 1 blurt.cf, 1 blushbymounika.com, 1 @@ -23874,10 +23476,10 @@ bluware.com, 1 bluxus.com, 1 bluzone.io, 1 -blv38.fr, 1 blw-eschwege.de, 1 blw.moe, 0 blyat.science, 1 +blyskotka.com, 1 blyth.me.uk, 1 blythwood.com, 1 bm-academy.fr, 1 @@ -23886,7 +23488,6 @@ bm-pc.ddns.net, 1 bm-trading.nl, 1 bm1.nl, 1 -bm21.com, 1 bm21.net, 1 bm6.cn, 1 bmac.cloud, 1 @@ -23995,7 +23596,6 @@ boardusersers.ga, 1 boat-engines.eu, 1 boat-systems.pl, 0 -boatandsailboat.com, 1 boathut.com.au, 1 boats.com, 0 boatsandoats.com, 1 @@ -24043,7 +23643,6 @@ bobruysk.tk, 1 bobsfhairstyles.ga, 1 bobsroofingco.com, 1 -bobstenancycleaning.co.uk, 1 bobstikkers.be, 1 bobstronomie.fr, 1 bobvincent.com, 1 @@ -24083,7 +23682,6 @@ bodenusa.com, 1 bodesi.com, 1 bodhi.fedoraproject.org, 1 -bodhionline.com, 1 bodies.es, 1 bodil.bg, 1 bodin.cz, 1 @@ -24105,15 +23703,12 @@ bodybuildingsupplementsexplained.com, 1 bodybuildingworld.com, 1 bodyconcept-kfz.de, 1 -bodyfuelup.com, 1 -bodygearguide.com, 1 bodyhealthcare.tk, 1 bodymassage.cf, 1 bodymfr.com, 1 bodymod.tk, 1 bodymusclejournal.com, 1 bodyofevidence.ca, 1 -bodypad.com, 1 bodypainting.waw.pl, 1 bodyshaping.ml, 1 bodyshopnews.net, 1 @@ -24219,7 +23814,7 @@ boleleboyz.org, 1 boleros.tk, 1 boletosdeavionbaratos.tk, 1 -boletus.me, 0 +boletus.icu, 1 boleyn.su, 1 bolgarnyelv.hu, 1 bolgarus.ru, 0 @@ -24238,6 +23833,7 @@ bollardstreet.com, 1 bollervilla.de, 1 bolli.tech, 1 +bollywolly.be, 1 bollywoodacapellas4djs.tk, 1 bollywoodfans.tk, 1 bollywoodgk.tk, 1 @@ -24255,7 +23851,6 @@ bolshevik.tk, 1 bolshoi.tk, 1 bolshoy.tk, 1 -bolt-onpersonnel.com, 1 bolt.com, 1 bolte.org, 1 boltingmaster.com, 1 @@ -24298,7 +23893,7 @@ bompus.com, 1 bon-appetit-wesel.de, 1 bonaccordpestcontrol.co.uk, 1 -bonaccorso.eu, 0 +bonaccorso.eu, 1 bonaemi.ga, 1 bonami.cz, 1 bonami.ee, 1 @@ -24332,6 +23927,7 @@ bondcountysa.gov, 1 bondcouponers.ga, 1 bondhudigital.com, 1 +bonding-zebow.pl, 1 bondingwithbaby.ca, 1 bondlayer.com, 1 bondmaster.tk, 1 @@ -24356,7 +23952,6 @@ bongbongirl.com, 1 bongbongmarcos.com, 1 bonghuyn.com, 1 -bongit.de, 1 bongjukim.com, 1 bongloy.com, 1 bongo.cat, 1 @@ -24401,6 +23996,7 @@ bonnydevil.com, 1 bono3.ir, 1 bonobo.cz, 1 +bonoculturajoven.gob.es, 1 bononiaestate.com, 1 bonprix.co.uk, 1 bonsai-uk.cf, 1 @@ -24438,7 +24034,6 @@ book-online.tk, 1 book-sites.cf, 1 bookameeting.se, 1 -bookb.com, 1 bookbazar.co.in, 1 bookcheapairline.com, 1 bookcreator.com, 1 @@ -24446,7 +24041,6 @@ bookergroupjobs.co.uk, 1 bookerrecycling.co.uk, 1 bookeventz.com, 1 -bookfirm.com, 1 bookgeek.ga, 1 bookimed.com, 1 booking.com, 1 @@ -24455,13 +24049,11 @@ bookingkoala.com, 1 bookinglane.com, 1 bookingready.com, 1 -bookingslog.com, 1 bookingsrit.tk, 1 bookingtool.com, 1 bookingtool.net, 1 bookingworldspeakers.com, 1 bookitlive.net, 1 -bookjunglejamaica.com, 1 bookmark.gq, 1 bookmarkblog.tk, 1 bookmarkclub.ga, 1 @@ -24480,6 +24072,7 @@ bookmeee.eu, 1 booknooktutor.com, 1 bookourdjs.com, 1 +bookovnica.com, 1 bookposh.com, 1 bookreport.ga, 1 books-dowload.tk, 1 @@ -24490,7 +24083,6 @@ booksandcoffee.ml, 1 bookshopofindia.com, 1 booksinthefridge.at, 1 -booksky.com, 1 bookslibrarybooks.gq, 1 booksoncamping.com, 1 bookstores.gq, 1 @@ -24519,11 +24111,9 @@ boomsocial.com, 1 boomsoftware.nl, 1 boomsourcing.com, 1 -boomstyle.com, 1 boomtownevents.com, 1 boomtowntrail.com, 1 boomvm.pw, 1 -boon-beauty.com, 1 boonecountyar.com, 1 boonecountyfpdmo.gov, 1 boonecountyil.gov, 1 @@ -24532,6 +24122,7 @@ boonecsdia.gov, 1 booneiowa.gov, 1 boonemo.gov, 1 +boonstrafruit.nl, 1 booox.biz, 1 booox.cc, 1 booox.net, 1 @@ -24548,6 +24139,7 @@ boost-it-solutions.nl, 1 boost.ink, 1 boostdesign.tk, 1 +boostenergy.com, 1 boostermachine.com, 1 boostertonbusiness.com, 1 boostgame.win, 1 @@ -24555,10 +24147,10 @@ boostport.com.au, 1 boostsafety.com, 1 boostup.com.tr, 1 +boostylabs.com, 1 boot-berlin.de, 1 bootcampkatwijk.nl, 1 boothillcasino.com, 1 -booths.cyou, 1 boots-shop.tk, 1 bootsa.ga, 1 bootsa.tk, 1 @@ -24572,7 +24164,6 @@ boraarat.com, 1 boraboraphotos.com, 1 boracay.tk, 1 -boraclub.com, 1 borafalardeguito.com, 1 borahan.net, 1 boranco.tk, 1 @@ -24590,7 +24181,6 @@ borderfever.cf, 1 borderfever.ga, 1 borderfever.ml, 1 -borderlens.com, 1 borderless360.com, 0 bordersbuses.co.uk, 1 borderzine.com, 1 @@ -24602,7 +24192,6 @@ borduurcadeau.tk, 1 borduurpatronen.tk, 1 bore.lt, 1 -borealcapital.com.br, 1 borealis.gg, 1 borealis.su, 1 boreally.org, 1 @@ -24643,6 +24232,7 @@ born2flygirl.com, 1 bornandgrazed.com, 0 bornbinder.com, 1 +borneoarabic.com, 1 borneodictionary.com, 1 borneosprings.com.my, 1 bornfiber.dk, 1 @@ -24658,6 +24248,7 @@ borraxeiros.tk, 1 borriquillacuenca.tk, 1 borsa2k.com.tr, 1 +borsaistanbul.com, 1 borsfa.hu, 1 borsse.bg, 1 bortebest.no, 1 @@ -24682,6 +24273,7 @@ boschhirtshals.dk, 1 boschveldtuin.nl, 1 boscobelwi.gov, 1 +boscobygotycka.com, 1 bosconation.tk, 1 boscosmarket.com, 1 boscq.fr, 1 @@ -24693,7 +24285,6 @@ boskant.tk, 1 bosmanka.com, 1 bosnia-online.tk, 1 -bosniaks.com, 1 bosonogka.tk, 1 bospiraat.tk, 1 bospor.tk, 1 @@ -24706,12 +24297,10 @@ boss.az, 1 bossefors.tk, 1 bosseo.id, 1 -bossin-stuttgart.de, 1 bosslady.one, 1 bossmarketing.ca, 1 bossmoncton.com, 1 bossurl.tk, 1 -bostan.com, 1 boston-medical-supply.com, 1 boston-molly.tk, 1 bostonadvisors.com, 0 @@ -24754,19 +24343,17 @@ botnam.com, 1 botoes-primor.pt, 1 botoks.tk, 1 -botox.bg, 1 botox.bz, 1 botpago.cl, 1 -botsa.com, 1 botschaft.digital, 1 botschaften-an-das-volk-gottes.de, 0 +botsfed.com, 1 botsindiscord.me, 1 botstack.host, 1 botticelli.tk, 1 bottinquebec.com, 1 bottke.berlin, 1 bottlerockshuttles.com, 1 -bottly.in, 0 bottom9clothing.com, 1 bottomfeedings.tk, 1 bou.cloud, 1 @@ -24805,7 +24392,6 @@ boulderswap.com, 1 boulderwagonroad.org, 1 boulebar.duckdns.org, 1 -bouletcorp.com, 1 boulevard-ruijschenbergh.nl, 1 boulstory.ru, 1 boulzicourt.fr, 1 @@ -24933,7 +24519,6 @@ bouwklikweb.nl, 1 bouwma.nl, 1 bouwplaatscheckin.nl, 1 -bouwstenen.com, 1 bouzalegal.com, 1 bouzouada.com, 1 bouzouks.net, 1 @@ -24972,7 +24557,6 @@ boxeldercountyut.gov, 1 boxeomexicano.tk, 1 boxerdogsaspets.com, 1 -boxexpresslogistic.com, 1 boxhostserver.com, 1 boxing-kangaroo.ga, 1 boxing-videos.com, 1 @@ -25009,6 +24593,8 @@ boyinglanguage.com, 1 boykovo.tk, 1 boylecountyky.gov, 1 +boynehighlandslistings.com, 1 +boynelistings.com, 1 boyo.cloud, 1 boyscoutcampcars.cf, 1 boyscouts.tk, 1 @@ -25042,6 +24628,7 @@ bplm.science, 1 bpm.com, 1 bpm.de, 1 +bpnet.work, 1 bpo.ovh, 1 bpointsaas.it, 1 bpol-forum.de, 1 @@ -25127,14 +24714,12 @@ brainboard.de, 1 brainboxai.com, 1 brainburger101.tk, 1 -brainbus.com, 1 brainchasm.com, 1 braincorebismarck.com, 1 braincorp.com, 1 braineet.com, 0 brainefive.com, 1 brainfeed.nl, 1 -brainfirm.com, 1 brainguru.co.in, 1 brainguru.in, 1 brainhealth.gov, 1 @@ -25211,14 +24796,12 @@ brandeps.com, 1 brandfactory.ml, 1 brandfolder.com, 1 -brandfoto.com, 1 brandhost.tk, 1 brandhout-b-tree.be, 1 brandingclick.com, 1 brandingcoapps.com, 1 brandinspiration.fr, 1 brandinstitute.com, 1 -brandjapan.com, 1 brandketers.com, 1 brandmovers.co, 1 brandnous.ca, 1 @@ -25277,7 +24860,6 @@ brantleycounty-ga.gov, 1 branw.xyz, 0 brard.it, 1 -brasas.ec, 1 brascast.com, 1 brasco.tk, 1 brasdir.com, 1 @@ -25359,7 +24941,7 @@ braxtoncountywv.gov, 1 braxtonehle.com, 1 braxtonfair.com, 1 -braychappell.com, 1 +braychappell.com, 0 brayden.gq, 1 braynblog.ml, 1 brayva.com, 1 @@ -25383,7 +24965,6 @@ brc.fj.cn, 1 brck.nl, 1 brcshipsupply.com, 1 -brcz.tech, 1 breachlock.com, 1 breachmedia.ca, 0 bread.fish, 1 @@ -25461,7 +25042,6 @@ brekstore.biz.id, 1 brelin.tk, 1 brellich.eu, 1 -breloque.com, 1 bremen-restaurants.de, 1 bremerfriedensforum.de, 1 breml.com, 1 @@ -25472,15 +25052,11 @@ brendanscherer.com, 1 brendasartstudio.com, 1 brennancorp.com, 1 -brennemanroofing.com, 1 brennerbasisdemokratie.eu, 1 brentalbright.tk, 1 brentasresort.com, 1 brentfieldschools.cf, 1 brentnewbury.com, 1 -brenton.uk, 1 -brentonico.com, 1 -brentsoslibraries.org.uk, 1 brentsvillehall.com, 1 brentwoodpa.gov, 1 bresciatoday.it, 1 @@ -25534,7 +25110,6 @@ brggroup.vn, 1 brghospitality.vn, 1 brgins.com, 1 -brgsmartcity.com, 1 brhanhaki.org, 1 bri.fyi, 1 bri.net.br, 0 @@ -25556,7 +25131,6 @@ brianlachapelle.tk, 1 brianlanders.us, 1 brianleejackson.com, 1 -brianm.com, 1 brianmoorefoto.com, 1 brianmwaters.net, 1 brianna.tk, 1 @@ -25690,7 +25264,7 @@ brigittaspromise.org, 1 brigittebutt.tk, 1 brigittefontaine.tk, 1 -brignier.com, 1 +brijesh.fyi, 1 brilalux.pe, 1 brileytownshipmi.gov, 1 brili.com, 1 @@ -25698,6 +25272,7 @@ brilliancesecuritymagazine.com, 1 brilliant-minds.tk, 1 brilliantbouncyfun.co.uk, 1 +brilliantmed.cn, 1 brillie.tk, 1 brillio.com, 1 brillionwi.gov, 1 @@ -25718,7 +25293,7 @@ bringonbusiness.com, 1 brinker.com, 1 brinkhaven.gov, 1 -brinkhu.is, 0 +brinkhu.is, 1 brinksurl.com, 1 brinksurls.com, 1 brinokidzonline.tk, 1 @@ -25737,7 +25312,6 @@ brisignshop.com.au, 1 briskteaching.com, 1 brisp.nl, 0 -brisq.design, 1 bristebein.com, 1 bristlecone.com, 1 bristol-taxi.com, 1 @@ -25753,7 +25327,6 @@ britannia.no, 1 britanniapandi.com, 1 british-assessment.co.uk, 1 -britishacademyglobal.com, 0 britishairlinesflights.com, 1 britishantiquefurniture.co.uk, 1 britishbee.org.uk, 1 @@ -25833,7 +25406,6 @@ broadjournalest.ga, 1 broadleft.org, 1 broadlytour.com, 1 -broadsheet.com.au, 1 broadwayfamilydentalpc.com, 1 broadwaytravel.com, 1 broadwayva.gov, 1 @@ -25849,7 +25421,6 @@ brocos.io, 1 brodahose.com.au, 1 broder.fun, 1 -broder.top, 1 broderieml.ca, 1 broderieml.com, 1 brodiegraphics.com, 1 @@ -25858,6 +25429,7 @@ brody.digital, 1 brody.ninja, 1 broe.ie, 1 +broederlynt.nl, 1 broedersvanliefde.be, 1 broerbv.nl, 0 broerendasbouwbedrijf.nl, 1 @@ -25885,7 +25457,6 @@ brokentoaster.tk, 1 broker-forex.it, 1 broker.id, 1 -broker4u.com, 1 brokerdecredite.ro, 1 brokeria.sk, 1 brokerlink.ca, 1 @@ -25899,7 +25470,6 @@ brol.eu, 1 brollopsfotografkalmar.com, 1 bromcomvle.com, 1 -bromen.id, 1 bromfietsman.tk, 1 bromideas.ga, 1 bromo.com, 1 @@ -25945,7 +25515,6 @@ broomorchard.com, 1 brosay-legko.ml, 1 brossmanit.com, 1 -brotaufstriche.com, 1 brother.com.hk, 1 brothers.tw, 1 brothersinbeetles.tk, 1 @@ -25956,7 +25525,6 @@ brouskat.be, 1 brouwer-greonterp.nl, 1 brouwerijdeblauweijsbeer.nl, 0 -brouwerijdehemel.nl, 1 brovelton.com, 0 browardvotes.gov, 1 browfai.casa, 1 @@ -26026,7 +25594,6 @@ brueggers.com, 1 brueggi.tk, 1 brueser-gmbh.de, 1 -brugia.com, 1 brugpensioen.tk, 1 bruh.ltd, 1 bruidstaarten.tk, 1 @@ -26044,12 +25611,12 @@ brunchandmatch.be, 1 brunella.tk, 1 brunetderochebrune.com, 0 -brunhild.com, 1 brunhilde.ml, 1 brunnerworks.com, 0 bruno-pelletier.tk, 1 brunoamaral.eu, 0 brunoamezcua.com, 0 +brunob.org, 1 brunobattaglia.tk, 1 brunobeauvoir.com, 1 brunocesarlima.com.br, 1 @@ -26071,7 +25638,6 @@ brunswickohio.gov, 1 brush.ninja, 1 brushcreekyachts.com, 1 -brushscene.de, 1 brushyourideas.com, 1 brusselsairlines.com, 1 brusselsbe.tk, 1 @@ -26124,7 +25690,7 @@ bryte-rp.tk, 1 brzc.st, 1 brztec.com, 1 -bs-akses.com, 1 +bs-akses.com, 0 bs-facilityservice.ch, 0 bs-paderborn-senne.de, 1 bs.sb, 1 @@ -26147,6 +25713,7 @@ bsc-rietz.at, 1 bsc01.dyndns.org, 1 bscc.support, 1 +bsconnect.nl, 1 bscyb.ch, 1 bsd-box.net, 1 bsd-sec.com, 1 @@ -26174,6 +25741,7 @@ bsgcredit.ro, 1 bsgexchange.ro, 1 bsgmag.ro, 1 +bsid-clan.com, 1 bsidesf.com, 1 bsidessf.com, 1 bskhq.tk, 1 @@ -26286,11 +25854,9 @@ btth.pl, 1 bttorj45.com, 1 bttr-software.de, 1 -bttrade.com, 1 bturboo.com, 1 btwexperience.it, 1 btwgiftcard.it, 1 -btwj.com, 1 btwnmgmt.com, 1 btwsa.tk, 1 btwschool.it, 1 @@ -26313,7 +25879,6 @@ bubbleclipsnetwork.com, 1 bubblegumblog.com, 1 bubblelist.tk, 1 -bubblemedia.com, 1 bubblesco.tk, 1 bubblespetspa.com, 0 bubblin.io, 1 @@ -26339,7 +25904,6 @@ buchananga.gov, 1 buchanantwpmi.gov, 1 buchangroupinc.com, 1 -bucharestbachelorparty.com, 1 buchdata.it, 0 buchenheinrich.de, 1 buchhaltung-muehelos.de, 1 @@ -26365,6 +25929,7 @@ bucksfund.com, 1 buckthorn.ml, 1 buda.com, 1 +budagard.se, 1 budapestairport.tk, 1 budapestairporttaxi.net, 1 budapestairporttocity.com, 1 @@ -26432,7 +25997,6 @@ budpolimer.com, 0 budra.date, 1 budronconstruction.com, 1 -budscope.com, 1 budsforbuddies.com, 1 budsmelim.ee, 1 budtraffic.net, 1 @@ -26445,8 +26009,6 @@ buenavistava.org, 1 buendnis-deutschland.de, 1 buenosairesconnect.com, 1 -buenosairesrunway.com, 1 -buentaller.com, 1 bueny.com, 1 bueny.net, 1 buergerinitiative-pronatur.de, 1 @@ -26530,6 +26092,7 @@ building-cost-estimators.com, 1 building-materials.tk, 1 building.lv, 1 +buildingautomation.show, 1 buildingbitcoin.org, 1 buildingbox.com.br, 1 buildingchemistry.tk, 1 @@ -26590,6 +26153,7 @@ bukularis.ga, 1 bul3seas.eu, 1 bulabanews.com.ng, 1 +bulabil.tr, 1 bulagro.bg, 1 bulario.com, 1 bularmas.com, 1 @@ -26600,7 +26164,6 @@ bulbagram.ml, 1 bulbcompare.com, 1 bulbeenergia.com.br, 1 -bulbidea.com, 1 bulbonidos.tk, 1 bulbuly.tk, 1 buldogueingles.com.br, 1 @@ -26704,10 +26267,8 @@ bundlejs.com, 1 bundoora.com.au, 1 bune.city, 1 -bungalowseljardin.com, 1 bungeeireland.tk, 1 bungotai.ga, 1 -buniq.com.br, 1 bunix.de, 0 bunker307.tk, 1 bunkerhilltx.gov, 1 @@ -26762,14 +26323,12 @@ bureauzelfstandigenfryslan.nl, 1 burenservice.nl, 1 burevestnik.tk, 1 -burewala.com, 1 burewala.tk, 1 burewalanews.tk, 1 burg-burghausen.de, 1 burg-cadolzburg.de, 1 burg-falkenstein.de, 1 burg-trausnitz.de, 1 -burgas.bg, 1 burgawnc.gov, 1 burger.eu.org, 1 burger.fitness, 1 @@ -26785,7 +26344,6 @@ burgoslacrosse.tk, 1 burgstetten.de, 1 burhan-autosattlerei.de, 1 -burhanionlinestore.com, 1 buricloud.fr, 1 burina.net, 1 burishops.com, 1 @@ -26856,6 +26414,7 @@ burtai.com, 1 burtcheboyganmi.gov, 1 burtcountyne.gov, 1 +burtlakelistings.com, 1 burtrum.family, 1 burtrum.me, 1 burtrum.name, 1 @@ -26881,7 +26440,6 @@ buscacpf.se, 1 buscaebooks.tk, 1 buscagenealogia.tk, 1 -buscalotodo.com, 1 buscandolosmejores.com, 1 buscatea.com, 1 buscatodo.tk, 1 @@ -26918,7 +26476,6 @@ business.medbank.com.mt, 1 business4all.gr, 1 business4beginners.co.uk, 1 -business808.com, 1 businessactivities.tk, 1 businessadaptive.ga, 1 businessadvance.tk, 1 @@ -26940,6 +26497,7 @@ businesscellar.ga, 1 businesscharm.ga, 1 businesscharts.ga, 1 +businesscheckin.sg, 1 businesscircus.ga, 1 businesscisco.tk, 1 businesscloud.co.uk, 1 @@ -27063,7 +26621,6 @@ businessknight.ga, 1 businesslead.tk, 1 businessleader.asia, 1 -businessleadsworld.com, 1 businesslegacy.ga, 1 businessless.ga, 1 businesslion.ga, 1 @@ -27194,7 +26751,6 @@ bustypassion.com, 1 bustypics.com, 1 bustyrack.com, 1 -busuan.com, 1 busuttil.org.uk, 1 buswell-familie.de, 1 buswell.ai, 1 @@ -27211,6 +26767,7 @@ busylamp.com, 1 busyon.cloud, 1 busyr.com, 1 +busystudyhubs.com.au, 1 but-it-actually.work, 1 but-its-not-your.business, 1 butanding.org, 1 @@ -27237,7 +26794,6 @@ butserdocumentary.tk, 1 buttedesmortssd1wi.gov, 1 butter.horse, 1 -butter.ml, 1 butterflytigress.com, 1 butterhost.ga, 1 buttermilk.cf, 1 @@ -27247,11 +26803,9 @@ buttertrick.com, 1 buttimer.tech, 1 buttonline.ch, 1 -buttonshelf.com, 1 buttonsmashers.tk, 1 butts-are.cool, 1 butttexters.ga, 1 -butyric.com, 1 butz.cloud, 1 butzies.ddnss.org, 1 buuba.bid, 1 @@ -27351,7 +26905,6 @@ buyjewel.shop, 1 buyland.com.ua, 1 buylasix.ml, 1 -buyletlive.com, 1 buylevaquin.tk, 1 buymetforminonline.tk, 1 buymobic.ml, 1 @@ -27516,8 +27069,6 @@ bybrutus.com, 1 bybym.ml, 1 bycafeonline.com, 1 -bycatch.com, 1 -bycialis.com, 1 bycorefi.com, 1 bydik.com, 1 bydisk.com, 0 @@ -27580,7 +27131,9 @@ bytebolt.at, 1 bytebucket.org, 1 bytebytego.com, 1 +bytedance.com, 1 byteflies.com, 0 +bytegrowth.com, 1 byteguardian.nl, 1 bytehaven.stream, 1 bytelight.com, 1 @@ -27589,7 +27142,6 @@ bytema.re, 1 bytema.sk, 1 bytemethod.ca, 1 -bytemix.cloud, 1 bytenest.ca, 1 byteofdev.com, 1 bytepen.com, 1 @@ -27688,7 +27240,6 @@ c19ns.com, 1 c19probiotics.com, 1 c19proxalutamide.com, 1 -c19quercetin.com, 1 c19study.com, 1 c19sv.com, 1 c19vitamind.com, 1 @@ -27701,6 +27252,7 @@ c2lab.net, 1 c2o2.xyz, 1 c2ogroup.com, 0 +c3.ai, 1 c3.io, 1 c3.pm, 1 c35.design, 1 @@ -27757,7 +27309,6 @@ cabaladada.org, 0 cabale.fr, 1 cabalistic.tk, 1 -caball.com, 1 caballeroalba.cf, 1 caballerosdeltablero.tk, 1 cabanactf.com, 1 @@ -27786,27 +27337,23 @@ cable-bg.com, 1 cable360.de, 1 cableatierra.tk, 1 -cablebustersllc.com, 1 +cablebustersllc.com, 0 cablehighspeed.net, 1 cableiran.com, 1 cablemadrid.tk, 1 cablemod.com, 1 cablesandkits.com, 1 -cabletiesunlimited.com, 1 cablogrammes.fr, 1 cabodream.ml, 1 -caboleisurerealestate.com, 1 cabooneconstruction.com, 1 caboose.app, 1 cabosaferide.com, 1 cabosilleiro.com, 1 -cabotagem.com, 1 cabotshores.com, 1 caboverde.tk, 1 cabphysio.ch, 0 cabr.al, 1 cabrachicagritona.tk, 1 -cabrils.com, 1 cabuilderservices.com, 1 cabvertising.it, 1 cac-hc.org, 1 @@ -27819,7 +27366,6 @@ cacaolalina.com, 1 cacareerzone.org, 1 cacaumidade.com.br, 1 -caccc.com, 1 cachacasantaterezinha.com.br, 1 cachaceros.tk, 1 cache-checker.com, 1 @@ -27835,6 +27381,7 @@ cackette.com, 0 cackl.io, 1 cacko.tk, 1 +cacmid.ca, 1 cacnews.org, 1 cacnverslavingszorg.nl, 1 cacombos.com, 1 @@ -27889,7 +27436,6 @@ cadmechanic.com, 1 cadoganhall.com, 1 cadonau.net, 1 -cadoneghe.com, 1 cadonet.tk, 1 cadovod.tk, 1 cadre.com, 1 @@ -27925,10 +27471,8 @@ cafeah.com, 1 cafeamazon.tk, 1 cafeamore.com.br, 1 -cafeapple.com, 1 cafebab.com, 1 cafebalkanaz.com, 1 -cafebeauty.com, 1 cafebeirut.tk, 1 cafecentraal.tk, 1 cafecentral.tk, 1 @@ -27954,13 +27498,11 @@ cafenoorderzon.tk, 1 cafeobscura.nl, 1 cafesangtao.com, 1 -cafetaste.com, 1 cafeterya.tk, 1 cafethevibes.com, 1 cafethrive.co.uk, 1 cafevelo.org, 1 cafevs.com, 0 -cafexpro.com, 1 caffe.ga, 1 caffein.cf, 1 caffeinate.co.uk, 1 @@ -27977,7 +27519,6 @@ cag.legal, 1 cag.sh, 1 cagalogluhamami.com.tr, 1 -cagao.com, 1 cagbuzau.ro, 1 cageworld.tk, 1 cagi.org, 1 @@ -27993,28 +27534,20 @@ cai-ti.com.tw, 1 cai.im, 1 cai.sg, 1 -caian.com, 1 caiben.org, 1 caibi.io, 1 -caidao.com, 1 -caifan.com, 1 -caihuan.com, 1 -caikuai.com, 1 caileb.com, 1 cailoli.com, 1 -caimin.com, 1 cainesjannif.com, 1 cainhoyathletic.com, 1 cainiao.moe, 1 caio.moe, 1 caipai.fm, 1 -caiqu.com, 1 caiqueparrot.com, 1 cairnterrier.com.br, 1 cairohost.ml, 1 cairokebab.com, 1 cairoshell.com, 1 -cairui.com, 1 cais.de, 1 caise.tk, 1 caissefrancaisedefinancementlocal.fr, 0 @@ -28022,7 +27555,6 @@ caivps.com, 1 caiwenjian.xyz, 1 caixideal-serralharia.pt, 1 -caiyi.com, 1 caiyou.com, 1 caizx.com, 0 caj-eichstaett.de, 1 @@ -28047,11 +27579,11 @@ cakedeveloperest.ga, 1 cakejournal.com, 1 cakelaces.com, 1 +cakenetwork.com, 1 cakeoffencesact.uk, 1 cakes.ga, 1 cakes.tk, 1 cakesbyzoey.com, 1 -cakeshop.xyz, 1 cakesoverseas.com, 1 cakessl.com, 1 cakestandscarriers.tk, 1 @@ -28091,7 +27623,6 @@ calcionews24.com, 1 calcioragusa.tk, 1 calcioweb.eu, 1 -calcnow.co, 1 calcoolator.pl, 1 calcsoft.tk, 1 calcsub.net, 1 @@ -28146,7 +27677,7 @@ calendriergratuit.fr, 1 calendriers10.com, 1 caletka.cz, 1 -calgaryconstructionjobs.com, 1 +calgaryconstructionjobs.com, 0 calgarydermatologisters.ga, 1 calgraf.com, 0 calhaserufosembh.com, 1 @@ -28161,7 +27692,6 @@ caliber.to, 1 calibermind.com, 1 calibrationrecall.com, 1 -calibreapp.com, 1 calibresys.com, 1 calibso.net, 1 calicojudge.com, 1 @@ -28195,8 +27725,7 @@ calisteniaperu.ga, 1 calistogaca.gov, 1 calitateavietii-ardeal.ro, 1 -calivillalonga.com.ar, 1 -call-plumbers.com, 1 +call-plumbers.com, 0 call2counter.com, 0 calla.pl, 1 callabs.net, 1 @@ -28278,7 +27807,6 @@ calverttx.gov, 1 calvin.my, 1 calvinchimes.org, 1 -calvisisistemi.it, 1 calvusconsultancy.nl, 1 calystral.com, 1 calyxinstitute.org, 1 @@ -28327,6 +27855,7 @@ camelion.tk, 1 camella.com.ph, 0 camelliacourtmotel.kiwi.nz, 1 +camelpark.hu, 1 camelservers.com, 1 camenisch.ws, 1 cameo-membership.uk, 1 @@ -28389,7 +27918,7 @@ camouflaged.tk, 1 camp-corvatsch.com, 1 camp-pleinsoleil.ch, 0 -camp.zone, 1 +camp.zone, 0 campaign-ad.com, 1 campaign-center.net, 1 campaign.gov.scot, 1 @@ -28444,6 +27973,7 @@ campograndenews.com.br, 1 campolivillagebakery.com, 1 campona.hu, 1 +camposantocampofe.com.pe, 1 camposolillo.tk, 1 camppisos.com.br, 1 campsoulfestival.com, 1 @@ -28474,11 +28004,9 @@ camsupplier.ml, 1 camsupplierers.ga, 1 camtor.ml, 1 -camtu.com, 1 camunaslab.org, 1 camunda.com, 0 camunda.org, 1 -camuri.com, 1 camview.nz, 1 camworld.com, 1 camzroofing.ca, 0 @@ -28562,16 +28090,15 @@ canavillagepuntacana.com, 1 canavillageresidences.com, 1 canberraoutletcentre.com.au, 1 -canberrarunners.org.au, 1 cancan.ml, 1 cancelli.roma.it, 1 cancer-info.org, 1 cancer.gov, 1 cancerdata.nhs.uk, 1 cancerrxgene.org, 1 -cancersintomas.com, 1 cancertherapy.tk, 1 cancomputers.hn, 1 +cancomputers.shop, 1 cancunhealthers.ga, 1 candacemckay.com, 1 candaceplayforth.com, 1 @@ -28596,8 +28123,6 @@ candlevn.com, 1 cando.eu, 1 candogiveguide.org, 1 -candohamrah.com, 1 -candorhealthed.org, 1 candt.gr, 1 candy-pop.tk, 1 candyalexa.net, 1 @@ -28634,7 +28159,6 @@ canfleet.ca, 1 canfleet.com, 1 canfleet.info, 1 -canfleetglobal.com, 1 cangurin.com, 1 canhas.report, 1 canhazip.com, 1 @@ -28742,7 +28266,6 @@ canv4s.com, 1 canva-dev.com, 1 canva-staging.com, 1 -canva.cn, 1 canva.com, 1 canvas-art.tk, 1 canvaspersonalized.com, 1 @@ -28759,16 +28282,11 @@ canyoupwn.me, 1 cao.bi, 1 cao.gov, 1 -cao.la, 1 caocao.cf, 1 caodecristachines.com.br, 0 caodesantohumberto.com.br, 1 caos.ch, 0 -caoshanhu.com, 1 -caoshe.com, 1 caostura.com, 1 -caoyao.com, 1 -caozuo.com, 1 cap-study.com, 1 cap.gov, 1 cap21-lrc.fr, 1 @@ -28779,6 +28297,7 @@ caparicasurflessons.com, 1 caparua.com, 1 capathsuccess.com, 1 +capcut.cn, 1 cape.blue, 1 capeannvacations.com, 1 capebretonpiper.com, 1 @@ -28826,7 +28345,6 @@ capitalism.com, 1 capitalism.party, 1 capitalist.cf, 1 -capitalmarkets.online, 1 capitalmatters.cf, 1 capitalmatters.ga, 1 capitalmatters.gq, 1 @@ -28849,7 +28367,6 @@ capitaltg.com, 0 capitaltruepartner.hk, 1 capitaltruepartnertechnology.cn, 1 -capitalwin.com, 1 capitan.ml, 1 capitanbeilinson.tk, 1 capitanlorenzana.com, 1 @@ -28892,7 +28409,6 @@ capslock.ch, 1 capsogusto.com, 1 capssouthafrica.co.za, 1 -capstan.fr, 1 capstonehcm.com, 1 capsugel.com, 1 capsuladigital.tk, 1 @@ -28957,8 +28473,6 @@ caralarm.tk, 1 caralegal.de, 1 caraliadeluxe.net, 1 -caralina.com, 1 -caramelldansen.com, 1 caramellespinell.tk, 1 caratennison.net, 1 carauctionnetwork.com, 1 @@ -28971,7 +28485,6 @@ caravaca.tk, 1 caravane.store, 1 caravansciences.tk, 1 -caravanvlogger.co.uk, 1 caravanwise.co.uk, 1 caravelairclub.tk, 1 caraz.tk, 1 @@ -28988,14 +28501,12 @@ carbon.coop, 1 carbon12.org, 1 carbon12.software, 1 -carbon6plus.es, 1 carbonadvantage.tk, 1 carbonaphta.com, 1 carbonateds.com, 1 carboncountypa.gov, 1 carboncountywy.gov, 1 carbondaleil.gov, 1 -carbondix.com, 1 carboneventsupport.lu, 1 carbonkiller.org, 1 carbonlib.com, 0 @@ -29127,6 +28638,7 @@ caregility.com, 1 caregoportal.com, 1 carehomejob.co.uk, 1 +carehospitals.com, 1 careium.co.uk, 1 carelancerportfolio.ga, 1 carelinx.com, 1 @@ -29146,14 +28658,12 @@ caret.be, 1 caretaker.com, 1 caretogether.coop, 1 -caretoyou.com, 1 carevic.eu, 1 carey.cl, 1 careyohio.gov, 1 careyolsen.com, 1 carezza.net, 1 carfaircomposites.com, 1 -carfamily.com, 1 carfax.ca, 1 carfaxcanadaappgateway.azurewebsites.net, 1 carfinancehelp.com, 1 @@ -29330,6 +28840,7 @@ carolicious.tk, 1 carolina.cz, 1 carolinacourtreporter.com, 1 +carolinaforestvacuum.com, 1 carolinaharboe.baby, 1 carolinaharboe.com, 1 carolinaoliveira.tk, 1 @@ -29361,6 +28872,7 @@ carpenters.org, 1 carpentersvilleil.gov, 1 carpentry-shop.pl, 1 +carpetaciudadana.gob.es, 1 carpetandhardwoodflooringpros.com, 1 carpetcleanerswilmington.com, 1 carpetcleaning-cypress.com, 1 @@ -29370,7 +28882,6 @@ carplus.net, 1 carportscanberra.com, 1 carportus.com, 1 -carpostal.com, 1 carprice.auction, 1 carprice.ru, 1 carproof.com, 1 @@ -29408,6 +28919,7 @@ carropro.fr, 1 carroseletricosbh.com.br, 1 carrosserie-delaval.be, 1 +carrousel-ommen.nl, 1 carrouselcompany.fr, 1 carrozzeria.roma.it, 1 carrozziere.roma.it, 1 @@ -29423,7 +28935,6 @@ carshippingcarriers.com, 1 carshop.bg, 1 carsiceland.com, 1 -carsmate.com, 1 carsoft.tk, 1 carson-matthews.co.uk, 1 carsonca.gov, 1 @@ -29449,6 +28960,7 @@ cartadeviajes.pe, 1 cartadeviajes.uk, 1 cartago.co.cr, 1 +cartaovem.com.br, 1 cartazodiacal.com, 1 cartcardoso.pt, 1 cartegrise.com, 1 @@ -29461,7 +28973,6 @@ carterdan.net, 1 carterjonas.co.uk, 1 carterkosturos.com, 1 -cartero.ai, 1 carterphotography.ca, 1 carterstad.se, 1 cartertonscouts.org.nz, 1 @@ -29562,7 +29073,6 @@ casafina.tk, 1 casagami.ga, 1 casajeannine.tk, 1 -casalacabra.com, 1 casalborgo.it, 1 casalcrevillent.tk, 1 casaleadersinc.com, 1 @@ -29612,6 +29122,7 @@ cascavelle.fr, 1 cascavelle.nl, 1 casden.fr, 1 +case-la-rosu.ro, 1 case-vacanza-salento.com, 1 case-ware.info, 1 case4you.bg, 1 @@ -29714,7 +29225,6 @@ casino-z-top.ru, 1 casino.guide, 1 casino.org, 1 -casinobonus360.de, 1 casinobonusca.com, 1 casinobonuscodes365.com, 1 casinobuyersguide.com, 1 @@ -29834,7 +29344,6 @@ casinocrit.com, 1 casinodebeaulieu.com, 1 casinodecavalaire.com, 1 -casinofinder.ca, 1 casinofollower.com, 1 casinoleader.com, 1 casinolistings.com, 1 @@ -29861,7 +29370,6 @@ casinotop1.com, 1 casinotop10.net, 1 casinotopplistan.com, 1 -casinotopplisten.com, 1 casinotopsonline.com, 1 casinovendors.com, 1 casinozondercruks.nl, 1 @@ -30004,7 +29512,6 @@ catarrhalfuns.tk, 1 catastrofy.tk, 1 catastrophe.fail, 1 -catatanviral.com, 1 catatau.tk, 1 catawiki.com, 1 catawiki.de, 1 @@ -30077,6 +29584,7 @@ catholicteuchtar.ga, 1 catholicteuchtar.ml, 1 catholictt.org, 1 +catholicyouth.ie, 1 cathosa.nl, 1 cathosting.org, 1 cathouse.me, 1 @@ -30087,6 +29595,7 @@ cathy.lgbt, 1 cathy.link, 1 cathy.website, 1 +cathyandreu.com, 1 cathyfitzpatrick.com, 1 cathyjf.ca, 1 cathyjf.com, 1 @@ -30102,7 +29611,6 @@ catl.st, 1 catland.club, 1 catlettsburgky.gov, 1 -catlive.com, 1 catlowe.com, 1 catmash.tk, 0 catmatchers.org, 1 @@ -30210,7 +29718,6 @@ cbdbflo.com, 1 cbdcontact.eu, 1 cbdcontact.pl, 1 -cbdd.eu.org, 1 cbddo.gov.tr, 1 cbdev.de, 1 cbdication.com, 1 @@ -30222,6 +29729,7 @@ cbeal-fumeirodetrancoso.pt, 1 cbecrft.net, 1 cbet.lt, 1 +cbfairbairnrealty.com, 1 cbflleida.cat, 1 cbg-engadin.com, 1 cbg-it.de, 1 @@ -30241,7 +29749,6 @@ cbmindia.org, 1 cbmusa.com, 1 cbmvn.com, 1 -cbnegocial.com.br, 1 cboard.ml, 1 cboard.net, 1 cboost.nl, 1 @@ -30257,6 +29764,7 @@ cbs-engineering.com, 1 cbs.nl, 1 cbs3design.it, 1 +cbsr.ru, 1 cbt.quest, 1 cbt.tj, 1 cbw.sh, 1 @@ -30294,6 +29802,7 @@ ccattestprep.com, 1 ccautomobil.de, 1 ccb.gov, 1 +ccbaltics.com, 1 ccbank.bg, 1 ccbin.tk, 1 ccc-ch.ch, 1 @@ -30329,8 +29838,8 @@ cchat.de, 1 cchp.com.au, 1 cchsthevoice.org, 1 +cci.org.co, 1 cciiblog.tk, 1 -cciofficial.com, 1 ccis.rs, 1 cck-law.com, 1 cckguava.com, 1 @@ -30349,7 +29858,6 @@ ccoo.cat, 1 ccorca.org, 1 ccpaas.net, 1 -ccparishwilmington.org, 1 ccpe.net, 1 ccpgmpo.gov, 1 ccpinturas.com, 1 @@ -30460,9 +29968,12 @@ cdpn.io, 1 cdrom.ch, 1 cdrp09.com, 1 +cds-certified.com, 1 +cds-certified.org, 1 cds-infra.de, 1 cds-inquirer.tk, 1 cdsc.one, 1 +cdscertified.org, 1 cdscsuc.gq, 1 cdseditora.com.br, 1 cdsf.tk, 1 @@ -30470,6 +29981,7 @@ cdt.cz, 1 cdt.org, 0 cdto.work, 0 +cdu.de, 1 cdusapps.eu.org, 1 cduspages.eu.org, 1 cdvl.org, 1 @@ -30490,6 +30002,8 @@ cebek.co.uk, 1 cebolinha-imaginaria.com, 1 cebrita.tk, 1 +cec.com.es, 1 +cec.nom.es, 1 cec.org.es, 1 cec.org.pt, 1 cecalivo.tk, 1 @@ -30540,7 +30054,6 @@ ceiba.com.co, 1 ceicer.eu, 1 ceidf-vie-cooperative.fr, 1 -ceiexam.sg, 1 ceifx.com, 1 ceilidhstockholm.se, 1 ceilimoss.tk, 1 @@ -30556,7 +30069,6 @@ celarsports.fr, 1 celayix.com, 1 celcomhomefibre.com.my, 1 -cele.bi, 1 celebavirus.com, 1 celebdaily.ga, 1 celebi-forest.tk, 1 @@ -30578,13 +30090,11 @@ celebrityscope.net, 1 celebritysrit.tk, 1 celebritytopnews.tk, 1 -celebrityviralbug.com, 1 celectricos.com, 1 celectro-pro.com, 1 celendo.ga, 1 celenephotography.com, 1 celeraindustries.tk, 1 -celero.ca, 1 celesco.eu, 1 celeste-energie.fr, 1 celestia.tk, 1 @@ -30809,7 +30319,6 @@ centuryreporters.com, 1 centurystudios.com, 1 centurytiling.com.au, 1 -ceo-consulting.eu, 1 ceomanipur.nic.in, 1 ceomonthlyest.ga, 1 ceopedia.org, 1 @@ -30921,7 +30430,7 @@ certspotter.com, 1 certspotter.org, 1 certum.cn, 1 -certum.shop, 1 +certum.shop, 0 certusquartz.com, 1 certyhukil.ga, 1 cervejista.com, 1 @@ -30955,6 +30464,7 @@ ceskasit.cz, 1 ceskydj.cz, 1 ceslasvegasnews.com, 1 +cesltd.com, 1 cesmet.mil.do, 1 cesobaly.cz, 1 cesonia.io, 0 @@ -31010,7 +30520,6 @@ cfc-stmoritz.com, 1 cfc-swc.gc.ca, 1 cfcpestcontrol.com, 1 -cfcproperties.com, 1 cfda.gov, 1 cfdata.lol, 1 cfdcre5.org, 0 @@ -31060,6 +30569,7 @@ cg.search.yahoo.com, 0 cgal.org, 1 cgan.pw, 1 +cgarchives.com, 1 cgbassurances.ch, 0 cgbf.org, 1 cgbh3.gq, 1 @@ -31109,7 +30619,6 @@ ch-stjunien.fr, 1 ch.search.yahoo.com, 0 ch225.com, 1 -ch341.com, 1 ch47f.com, 1 ch4boldfc.com, 1 cha-ta.com, 1 @@ -31187,6 +30696,7 @@ chamath.uk, 1 chamathinfotech.com, 1 chamathj.com, 1 +chambas.com.mx, 1 chamber.sa, 1 chambercertify.com, 1 chamberlinfamilyphilanthropy.org, 1 @@ -31206,7 +30716,6 @@ champion-yandare.ru, 1 championcastles.ie, 1 championnat-romand-cuisiniers-amateurs.ch, 1 -champions.co, 1 championsofpowerfulliving.com, 0 championsofregnum.com, 1 championweb.co.nz, 0 @@ -31229,12 +30738,11 @@ chandracenter.com, 1 chandradeepdey.com, 1 chandramani.tk, 1 -change-coaching-gmbh.ch, 1 +changdunovel.com, 1 change10000lives.com.ph, 1 changeactivation.com, 1 changeanalytics.us, 1 changechecker.org, 1 -changecopyright.ru, 1 changeforfuture.cf, 1 changemywifipassword.com, 1 changenow.io, 1 @@ -31390,7 +30898,6 @@ charlottecountyva.gov, 1 charlottedaviesphotography.co.uk, 1 charlottemi.gov, 1 -charlottesvillegolfcommunities.com, 1 charlotteswimmingpoolbuilder.com, 1 charlubermensch.com, 1 charlws.com, 1 @@ -31436,7 +30943,6 @@ chasse-au-tresor.eu, 1 chasse-maree.com, 1 chasseurdetruites.com, 1 -chasti.com, 1 chastitybelts.tk, 1 chat-buddy.com, 1 chat-cam.tk, 1 @@ -31493,7 +30999,7 @@ chathund.de, 1 chatify.com, 1 chatkisskiss.tk, 1 -chatkitty.com, 1 +chatkitty.com, 0 chatline.cf, 1 chatline.ga, 1 chatline.ml, 1 @@ -31512,7 +31018,6 @@ chatpoint.tk, 1 chatreplay.stream, 1 chatroomfans.tk, 1 -chatsell.shop, 1 chatshort.com, 1 chatsupport.co, 1 chatsworthfoursquarechurch.org, 1 @@ -31531,7 +31036,6 @@ chaturbate.com, 1 chaturbate.eu, 1 chaturbate.global, 1 -chaturfier.com, 1 chatvizor.tk, 1 chatweb.online, 1 chatzimanolis.com, 0 @@ -31692,7 +31196,6 @@ checkyourlink.com, 1 checkyourmath.com, 1 checkyourprivilege.org, 1 -checkyourreps.org, 1 checookies.com, 1 checos.co.uk, 1 cheddarpayments.com, 1 @@ -31731,6 +31234,7 @@ chekaonline.com, 1 chekhov.gq, 1 chel.ga, 1 +chelabotanica.com, 1 cheladmin.ru, 1 chelema.xyz, 1 chellame.fr, 1 @@ -31750,7 +31254,6 @@ chema.ga, 1 chemapool.bg, 1 chemaxon.com, 1 -chemengzone.com, 1 chemgenes.com, 1 chemica-us.com, 1 chemical-shark.de, 1 @@ -31758,7 +31261,6 @@ chemicalpharm.com, 1 chemicalromance.tk, 1 cheminsderando.fr, 0 -cheminsetconscience.com, 1 chemiphys.com, 0 chemistry-schools.com, 1 chemlite.com.my, 1 @@ -31792,7 +31294,6 @@ chennien.com, 1 chennuo.xyz, 1 chenpei.org, 1 -chenqiang.com, 1 chentianyi.cn, 1 chenui.design, 1 chenx221.ml, 1 @@ -31923,7 +31424,6 @@ chicas.tk, 1 chicasgo.ga, 1 chicasloca.com, 1 -chicback.com, 0 chichi-cats.com, 1 chichijane.com, 1 chichoverboard.online, 1 @@ -31952,7 +31452,6 @@ chiemseeballooning.de, 1 chienluoc.tk, 1 chiesanuova.nl, 1 -chietech.com.br, 1 chietitoday.it, 1 chifeng.com.tw, 1 chiffer.nu, 1 @@ -32034,7 +31533,6 @@ chimesmusic.com, 1 chimesnewspaper.com, 1 chimm.cc, 1 -chimneytec.se, 1 chimpanzee.cf, 1 chimpanzee.net, 1 chimpmatic.com, 1 @@ -32044,55 +31542,38 @@ china.gs, 1 chinabank.ph, 1 chinacake.com, 1 -chinacbd.com, 1 chinacdn.org, 1 chinacheers.com, 1 chinacolour.com, 1 -chinadiy.com, 1 chinadream404.com, 1 -chinadrilling.com, 1 chinafree.online, 1 chinafree.site, 1 chinaglobalsecurities.cn, 1 -chinahd.com, 1 chinahealthcareblog.cf, 1 -chinahitech.com, 1 chinaicpower.org, 0 chinaindexfund.cn, 1 chinainluxury.com, 1 chinajingkun.com, 1 -chinalike.com, 1 chinalosers.com, 1 chinamemo.com, 1 -chinaneed.com, 1 -chinanurse.com, 1 chinaoptionsfund.cn, 1 chinaoptionsfund.com, 1 -chinaprices.com, 1 -chinaprofit.com, 1 chinaql.com, 1 -chinasay.com, 1 chinasearch.tk, 1 chinaseminar.com, 1 -chinaspa.com, 1 chinastory.tk, 1 chinasucksass.com, 1 chinati.org, 1 -chinava.com, 1 -chinavegan.com, 1 chinavicharana-mole.uk, 0 chinawhale.com, 1 chinchillas.tk, 1 -chindy.com, 1 chinees.restaurant, 1 chinefrancophonie.fr, 1 chinen-hs41.com, 1 chinese-fuhui.com, 1 -chinese-fxcm.com, 1 chinese.sc, 1 chinesebrides.ml, 1 chinesedishes.tk, 1 -chinesefu.com, 1 chinesepen.org, 1 chinesephones.tk, 1 chineseplease.moe, 1 @@ -32117,6 +31598,7 @@ chip.icu, 1 chipdesign-germany.de, 1 chipdig.com, 1 +chipiechouetteloulou.fr, 1 chipindy.org, 1 chipollinko.com.ua, 1 chippewa.com, 1 @@ -32152,6 +31634,7 @@ chisagocountymn.gov, 1 chispita.tk, 1 chistesdesebas.tk, 1 +chistomaniapro.ru, 1 chit.search.yahoo.com, 0 chita-news.net, 1 chita.cf, 1 @@ -32160,7 +31643,6 @@ chitashop.ml, 1 chitinfo.tk, 1 chitlar.ml, 1 -chitownblackcars.com, 1 chitraltune.tk, 1 chitrankan.art, 1 chittagongtextile.tk, 1 @@ -32192,6 +31674,7 @@ chnbilling.com, 1 chngold.com, 1 chnj.gov, 1 +chobd.ck.ua, 1 chobitool.com, 1 choccychox.com, 1 chochol.io, 1 @@ -32218,13 +31701,12 @@ chocudan.tk, 1 choda.vn, 1 chodaczek.pl, 1 -chodichvu.vn, 1 choe.fi, 1 choesfirm.tk, 1 chofan.tk, 1 choice-design.com.tw, 1 choiceautoloan.com, 1 -choiceroofingsolutions.com, 1 +choicemutual.com, 1 choiceuniontown.org, 1 choirofbeirut.cf, 1 choisirmoneau.blog, 1 @@ -32309,6 +31791,7 @@ chriscutts.uk, 1 chrisdasie.com, 1 chrisdavidphoto.com, 0 +chriseldon.com, 1 chrisfinazzo.com, 0 chrisgieger.com, 1 chrisirwin.ca, 1 @@ -32325,7 +31808,6 @@ chrismorgan.info, 1 chrismorgancreative.com, 1 chrismurray.co.uk, 1 -chrisnov.com, 1 chrispaul.ml, 1 chrispontius.tk, 1 chrisrude.com, 1 @@ -32388,8 +31870,8 @@ christianlis.uk, 1 christianmoore.me, 1 christianmorales.tk, 1 +christianmuseumtours.com, 1 christianoliff.com, 1 -christianotero.co, 1 christianplumbingservices.com, 1 christianr.me, 1 christianrasch.de, 1 @@ -32413,6 +31895,7 @@ christineglaeser.de, 1 christinenieva.com, 1 christineprayon.de, 1 +christmasdesigners.com, 1 christmasinelmhurst.org, 1 christmaspages.tk, 1 christmaspartyhire.co.uk, 1 @@ -32476,7 +31959,6 @@ chriswiggin.gq, 1 chriswiggin.ml, 1 chriswilding.co.uk, 1 -chriswservers.com, 1 chrisx.xyz, 1 chriszarb.tk, 1 chriszoukis.com, 1 @@ -32496,7 +31978,7 @@ chrome-devtools-frontend.appspot.com, 1 chrome.com, 1 chrome.google.com, 1 -chrome.pt, 1 +chrome.pt, 0 chromebookchart.com, 1 chromebookcompare.com, 1 chromebooksforwork.com, 1 @@ -32522,6 +32004,7 @@ chronotech.fr, 1 chronus.com, 1 chronusgov.com, 1 +chronworx.com, 1 chrony.tk, 1 chroot.co.uk, 1 chrpaul.de, 0 @@ -32545,10 +32028,8 @@ chtj.uk, 1 chtodelat.ga, 1 chtyvo.tk, 1 -chuan.cc, 0 chuan.top, 1 chuanggu.com, 1 -chuangyi.com, 1 chubbygirlpics.com, 1 chubr.cf, 1 chubuhokenservice.com, 1 @@ -32616,7 +32097,6 @@ churnfree.com, 1 churrascariacampogrande.com.br, 1 chuskocity.tk, 1 -chuspace.com, 1 chutingstar.com, 1 chutisant.tk, 1 chutoriaru.com, 1 @@ -32650,6 +32130,7 @@ cialismarketim.net, 1 cialismarketing.net, 1 cialisonlinee.com, 0 +cialisprice.net, 1 cialisshop.net, 1 cialisvtr.com, 1 cialisworld.net, 1 @@ -32691,9 +32172,6 @@ ciclimattio.com, 1 ciclismoyrendimiento.com, 0 ciclista.roma.it, 1 -ciclodekrebs.com, 1 -ciclodelcarbono.com, 1 -ciclohidrologico.com, 1 ciclosis.com, 1 cidaut.es, 1 cidcca.com, 1 @@ -32704,7 +32182,6 @@ cidones.tk, 1 cie-theatre-montfaucon.ch, 0 cie.nl, 1 -ciekawi.com, 1 ciekwestronki.cf, 1 ciekwestronki.ga, 1 ciekwestronki.gq, 1 @@ -32784,6 +32261,7 @@ cinemaclub.co, 1 cinemadoma.tk, 1 cinemafrix.cf, 1 +cinemaindo.icu, 1 cinemaperto.tk, 1 cinemaschool.by, 1 cinemasetfree.com, 1 @@ -32808,7 +32286,7 @@ ciniticket.com, 1 ciniticket.in, 1 cink.hu, 1 -cinkciarz.pl, 1 +cinkciarz.pl, 0 cinn.ml, 1 cinnagar.tk, 1 cinnamon.bot, 1 @@ -32828,10 +32306,10 @@ cio-spirit.de, 1 cio.gov, 1 ciobusinessworld.com, 1 -ciochina.com, 1 cionir.fr, 1 cioscloud.com, 1 cioudways.pro, 1 +cioxhealth.com, 1 cip.md, 0 cipartyhire.co.uk, 1 cipcda.org, 1 @@ -32884,8 +32362,9 @@ circuitclerkmarioncountyms.gov, 1 circular-economy.earth, 1 circularcityfundingguide.eu, 0 +circulardesignstandard.com, 1 +circulardesignstandard.org, 1 circulosocial77.com, 1 -circumcision.org, 1 circumcisionfaq.com, 1 circumstances.ir, 1 circus-maximus.de, 1 @@ -32964,7 +32443,6 @@ citharas.org, 1 cities.cl, 1 citiledger.ga, 1 -citimarinestore.com, 0 citiswich.com.au, 1 citius.gal, 1 citizen428.net, 1 @@ -33217,6 +32695,7 @@ civicdigest.com.au, 1 civicforum.pl, 1 civicnation.org, 1 +civicpulseai.ro, 1 civics.us, 1 civics.world, 1 civicscontent.us, 1 @@ -33234,6 +32713,7 @@ civiltoday.com, 1 civilvirus.tk, 1 civmob.com, 1 +cixbrasil.com, 1 cixon.com.br, 1 cixon.us, 1 cizgikod.ga, 1 @@ -33256,6 +32736,8 @@ cjdby.net, 1 cjdpenterprises.com, 1 cjdpenterprises.com.au, 1 +cje.com.es, 1 +cje.org.es, 1 cjean.fr, 0 cjenni.ch, 1 cjey.me, 1 @@ -33398,7 +32880,6 @@ claritician.com, 1 claritin.gq, 1 claritin.ml, 1 -clarityforspas.com, 1 clarkassociatesinc.biz, 1 clarkbuildersllc.com, 1 clarkchronicle.com, 1 @@ -33424,6 +32905,7 @@ clarkturnkey.com, 1 clarktwpmi.gov, 1 clarkwinkelmann.com, 1 +clarosports.com, 1 clarotvpromocao.com.br, 1 clarr.tk, 1 claryssabarbosa.com.br, 1 @@ -33476,12 +32958,12 @@ classicprague.sk, 1 classicpraha.com, 1 classicstories.tk, 1 +classificacaogeral.com.br, 1 classificadostodaoferta.tk, 1 classificazionerifiuti.it, 1 classifieds.ae, 1 classifiedsgulf.com, 1 classifiedspoint.tk, 1 -classifylanka.com, 0 classiques-garnier.com, 1 classisniagara.ca, 1 classlastsforever.co.nz, 1 @@ -33511,9 +32993,7 @@ claudiamartins.eu, 1 claudiamatiello.com.br, 0 claudiasnederlandsehangoordwergjes.tk, 1 -claudiney.eti.br, 1 claudiney.info, 1 -claudios-pizzaservice.de, 1 claumarservice.com, 1 claunchdesign.com, 1 claus-bahr.de, 1 @@ -33545,7 +33025,6 @@ clcakes.com.au, 1 clclawncare.com, 1 clco.fr, 1 -clcv-brest.fr, 1 cldejessey.com, 1 cldfile.com, 1 cldinc.com, 1 @@ -33562,7 +33041,6 @@ cleanenergywire.org, 1 cleaner-en.com, 1 cleaner.tk, 1 -cleanerstool.com, 1 cleanertool.co.uk, 1 cleanfacesest.ga, 1 cleanhortihigienizados.com.br, 1 @@ -33615,6 +33093,7 @@ clearlake.com, 1 clearlinux.org, 1 clearmatics.com, 1 +clearpathtechnology.co.uk, 1 clearpay.co.uk, 1 clearpicturelegalvideo.com, 1 clearpoint.org, 1 @@ -33685,8 +33164,6 @@ cleverdarts.com, 1 cleverdeal.tk, 1 cleverdialer.de, 1 -cleverlance.es, 1 -cleverlance.sk, 1 clevermemo.com, 1 clevermo.gov, 1 cleveroad.com, 1 @@ -33702,7 +33179,6 @@ clevyr.biz, 1 clevyr.careers, 1 clevyr.co, 1 -clevyr.com, 0 clevyr.email, 1 clevyr.expert, 1 clevyr.info, 1 @@ -33743,6 +33219,7 @@ clickatell.com, 1 clickcell.tk, 1 clickclickmedia.com.au, 0 +clickclinicals.com, 1 clickcollect.boutique, 1 clickdebateest.ga, 1 clickdefense.io, 0 @@ -33777,10 +33254,10 @@ clicktenisdemesa.com.br, 0 clicktest.cf, 1 clicktheright.top, 0 -clicktoclaim.com, 1 clicktolinkb.gq, 1 clickypaga.com, 1 clickzone.ga, 1 +clien.net, 1 client-catalyst.com, 1 client.coach, 0 client.photos, 1 @@ -33790,10 +33267,8 @@ clientelink.com.br, 1 clientpay.com, 0 clientportal.photo, 1 -clients-speed.com, 1 cliff-rilly-website.tk, 1 cliffburton.tk, 1 -clifflu.net, 1 clifford-hospital.cn, 1 clifford-hospital.org, 1 clifford-hospital.org.cn, 1 @@ -33834,7 +33309,6 @@ climbinghouse.com, 1 climbingmounttoubkal.com, 1 climeradar.com, 1 -clinakos.com, 1 clinchcountyga.gov, 1 clindamycin-150mg.ga, 1 clindamycin-phosphate.ga, 1 @@ -33955,7 +33429,6 @@ cloneprint.com, 1 cloneuniverse.com, 1 cloneuniverse.de, 1 -clonex.wtf, 1 clonidine-hydrochloride.ga, 1 clonix.tk, 1 clonoe.tk, 1 @@ -34015,6 +33488,7 @@ cloudav.pt, 1 cloudavy.com, 1 cloudaware.eu, 1 +cloudbattle.net, 1 cloudbees.ai, 1 cloudbees.com, 1 cloudbees.io, 1 @@ -34058,7 +33532,6 @@ cloudfree.top, 1 cloudfronts.com, 1 cloudfudge.com, 1 -cloudgate.lk, 1 cloudgray.com.au, 1 cloudhero.ai, 1 cloudia.org, 1 @@ -34070,6 +33543,7 @@ cloudlandmark.com, 1 cloudlessdreams.com, 0 cloudlight.biz, 1 +cloudlucida.com, 1 cloudmachine.fr, 1 cloudmanagedalarms.com, 1 cloudmanagedalarms.net, 1 @@ -34081,6 +33555,7 @@ cloudmoney.tk, 1 cloudmyhome.site, 1 cloudmyhome.top, 1 +cloudnas.ru, 1 cloudnetuy.com, 1 cloudnexusit.com, 1 cloudnote.cc, 1 @@ -34090,11 +33565,9 @@ cloudofgoods.com, 1 cloudoptimizedsmb.com, 1 cloudpagesforwork.com, 1 -cloudparts.com.tr, 1 cloudpengu.in, 1 cloudpingtest.com, 1 cloudplan.nl, 1 -cloudplayy.com, 1 cloudpole.de, 1 cloudpractitionerhelp.com, 1 cloudpublic.pro, 1 @@ -34112,7 +33585,6 @@ cloudsecurityalliance.org, 1 cloudsecurityalliance.training, 1 cloudsecurityalliancelabs.com, 1 -cloudsecuritycommunity.org, 1 cloudsecuritycongress.org, 1 cloudseptam.fr, 1 cloudsharp.io, 1 @@ -34169,7 +33641,6 @@ clowd.haus, 1 clowd.ovh, 1 clown-clan.tk, 1 -clown-workshop.de, 1 clownish.co.il, 1 cloxy.com, 1 cloydnco.com.jm, 1 @@ -34279,13 +33750,11 @@ clubondersteunersplatform.nl, 1 clubpes.tk, 1 clubpeugeot405.tk, 1 -clubpilates.sa, 1 clubpublic.cl, 1 clubserveers.ga, 1 clubsuccessjapan.com, 1 clubtamarugal.tk, 1 clubtecknocore.tk, 1 -clubtravalet.com, 1 clubtravel.com.pt, 1 clubtur.dk, 1 clubv1.com, 1 @@ -34327,7 +33796,6 @@ cm-loures.pt, 1 cm-montemorvelho.pt, 1 cm-penalvadocastelo.pt, 1 -cm-portimao.pt, 1 cm-ribeiragrande.pt, 1 cm-viladobispo.pt, 1 cm-vizela.pt, 1 @@ -34427,7 +33895,6 @@ cnetion.com, 1 cnetw.xyz, 1 cnews.ru, 1 -cnexchange.com, 1 cnfree.xyz, 0 cngf.com, 1 cngvp.org, 1 @@ -34435,7 +33902,6 @@ cni.net.id, 1 cnil.fr, 1 cnitdog.com, 1 -cnki.com, 1 cnlongtex.com, 1 cnmi.gov, 1 cnmilaw.gov, 1 @@ -34482,7 +33948,6 @@ coaching-in-veenendaal.nl, 1 coaching-oberhavel.de, 1 coachingforleaders.com, 1 -coachingsantcugat.cat, 1 coachment.dk, 1 coachnow.io, 1 coachspiritual.ro, 1 @@ -34523,7 +33988,7 @@ cobaka.tk, 1 cobalt.tools, 1 cobaltia.org, 1 -cobb-ranch.com, 1 +cobb-ranch.com, 0 cobbcountygeorgia.ml, 1 coberturaplus.com, 1 cobiz.nl, 1 @@ -34579,7 +34044,6 @@ cocobrother.ddnss.de, 1 cocodroid.com, 1 cocogoat.work, 1 -cocogolfcarts.com, 1 cocokmobi.ga, 1 cocolink.jp, 1 cocomore.com, 1 @@ -34677,13 +34141,11 @@ codelinchpin.com, 1 codeloop.pw, 1 codemahrt.com, 1 -codemanbd.com, 1 codemperium.com, 1 codename-infinity.de, 1 codename-infinity.org, 1 codename24.tk, 1 codenamelungo.tk, 1 -codenetwork.com, 1 codeninja.me, 1 codenlife.kr, 1 codenlife.xyz, 1 @@ -34752,6 +34214,7 @@ codewitchbella.com, 0 codewithalisha.ga, 1 codewithin.com, 1 +codewizard.training, 1 codewizards.co.za, 1 codewrecks.com, 1 codex.online, 1 @@ -34814,7 +34277,6 @@ coenjutte.tk, 1 coens.me.uk, 1 coentropic.com, 1 -coenzima.com, 1 coequals.tk, 1 cofense.at, 1 cofetaria-narcisa.ro, 1 @@ -34840,13 +34302,11 @@ coffeestain.ltd, 1 coffeestory.in.ua, 1 coffeetom.de, 1 -coffeetori.com, 1 coffeewithsvein.com, 1 coffeist.com, 1 coffer.fi, 1 coffstotalroofing.com.au, 1 cofidisperte.it, 1 -cofidur.com, 1 cofigs.com, 1 cofinco.nl, 1 coforge.com, 1 @@ -34884,7 +34344,6 @@ cohere.io, 1 cohob.de, 1 coiffbot.fr, 1 -coiffeurschnittstelle.ch, 1 coiffure-website.de, 1 coiga.org, 1 coignard.org, 1 @@ -34897,7 +34356,6 @@ coin.space, 1 coin4hub.com, 1 coinamount.com, 0 -coinauctionshelp.com, 1 coinbase.com, 1 coinbit.trade, 0 coincabin.io, 1 @@ -34946,7 +34404,6 @@ colaborame.tk, 1 colaborativa.tv, 1 colaboratorija.lt, 1 -colabore.com, 1 colabug.com, 1 colafoodcritic.com, 1 colah.com.au, 1 @@ -35016,7 +34473,6 @@ colinespinas.com, 0 colinhowells.com, 1 colink.fi, 1 -colinobrien.online, 1 colinqi.com, 1 colinsnaith.co.uk, 1 colis-collecte.re, 1 @@ -35065,7 +34521,6 @@ collectif-laicite-yallah.be, 1 collectif85.com, 1 collectifpinceoreilles.com, 1 -collectionru.com, 1 collectiontardivel.com, 1 collective-conciousness.monster, 1 collective-incubator.de, 1 @@ -35089,8 +34544,9 @@ collegepaperworld.com, 1 collegephysicsanswers.com, 1 collegeprospectsofcentralindiana.com, 1 -collegereligionandphilosophy.com, 1 +collegereligionandphilosophy.com, 0 collegerover.com, 1 +colleges.chat, 1 collegesecretary.cn, 1 collegesecretary.com, 1 collegesidekick.com, 1 @@ -35147,7 +34603,6 @@ colo-tech.com, 1 colo.io, 1 colocolochile.tk, 1 -coloffmedia.com, 1 cologix.com, 1 cololi.moe, 1 colombia.co, 1 @@ -35279,7 +34734,6 @@ comanchenationpolice.gov, 1 comanchetexas.gov, 1 comanis.fr, 1 -comaporter.com, 1 comarcadelaranda.tk, 1 comarch.com, 1 comarch.es, 1 @@ -35350,7 +34804,6 @@ comff.net, 1 comfinagro.com.co, 1 comfintouch.com, 0 -comfipark.com, 1 comfis.nl, 1 comfitsweets.co.uk, 1 comfortablelife.tk, 1 @@ -35363,7 +34816,6 @@ comfy.gay, 1 comhack.com, 1 comi-gmbh.de, 1 -comiagro.com, 1 comical.ml, 1 comicborgs.com, 1 comiccrusaders.com, 1 @@ -35374,11 +34826,8 @@ comicspornos.com, 1 comicspornoxxx.com, 1 comicwiki.dk, 1 -comidasaludablehoy.com, 1 comidasperuanas.net, 0 comidina.com, 1 -comillas.es, 1 -cominavi.net, 1 comingto.icu, 1 comiq.io, 1 comistar.ee, 1 @@ -35475,7 +34924,6 @@ communitycreditunion.com, 1 communitydirectory.tk, 1 communityeducators.net, 1 -communityflow.info, 1 communitylivingalgoma.org, 1 communitymalls.com.ph, 1 communitymalls.ph, 1 @@ -35502,7 +34950,6 @@ comodo.nl, 1 comodosslstore.com, 1 comoentrenarperros.tk, 1 -comofidelizarclientes.com.br, 1 comohacerblog.net, 1 comohacerpara.com, 1 comologia.com, 1 @@ -35552,7 +34999,6 @@ comparetheproject.com, 1 comparewatch.com, 1 compareweddinginsurance.org.uk, 1 -comparexcloudcenter.com, 1 compartirtrenmesaave.com, 1 compass-dwh.dk, 1 compass-security.com, 1 @@ -35585,13 +35031,13 @@ completeanon.tk, 1 completecareair.com, 1 completecarloans.com, 1 +completecase.com, 1 completecomps.au, 1 completecontrol.tk, 1 completeonlinepharmacy.com, 1 completepayrollsolutions.com, 1 completeprivacy.tk, 1 completewordsest.ga, 1 -complex-it.de, 1 complex-kaspiy.tk, 1 complex-news.com, 1 complex-organization.com, 1 @@ -35604,6 +35050,7 @@ compliancebox.co, 1 compliancehome.com, 1 complianceinsight.ca, 1 +compliancequest.com, 1 compliancerisksoftware.co.uk, 0 compliancessentials.com, 1 complianz.io, 1 @@ -35691,6 +35138,7 @@ computerpoint.net, 0 computerscience.guide, 1 computersforlearning.gov, 1 +computersharecas.co.uk, 1 computersharecas.com, 1 computersharecas.com.au, 1 computersneversleep.art, 1 @@ -35731,7 +35179,6 @@ comuniondelucia.com, 1 comunismo.tk, 1 comunistas.tk, 1 -comunitas.com, 1 comunitateonline.tk, 1 comunityflashgame.cf, 1 comw.cc, 1 @@ -35769,6 +35216,7 @@ concertsenboite.fr, 1 concertsponent.tk, 1 concertsto.com, 1 +conci.com.ar, 1 concienciaconciencia.es, 1 conciencianimal.tk, 1 concierge.diet, 1 @@ -35805,7 +35253,6 @@ concursurionline.ro, 1 condemnity.net, 1 condenast.co.uk, 1 -condensacion.com, 1 condictor.pl, 1 condignum.com, 1 condit.cf, 1 @@ -35879,7 +35326,6 @@ configurat.cf, 1 configurat.tk, 1 configwizard.xyz, 1 -confio.gmbh, 0 confio.pt, 1 confirmit.ca, 1 confirmit.com.au, 1 @@ -35887,10 +35333,9 @@ confiscate.ga, 1 confiscation.tk, 1 confiwall.de, 1 -conflictcontrol.fi, 1 -conflictspecialist.com, 1 conflidentliving.cf, 1 confluent.cloud, 1 +confluents.fr, 1 conformat.com, 1 conformax.com.br, 1 conformist.jp, 1 @@ -35918,7 +35363,6 @@ congresodelospueblos.org, 1 congressmankirk.com, 1 congresso.tk, 1 -congye.com, 1 conicyt.cl, 1 coniectoinvestments.com, 1 coniglione.tk, 1 @@ -35952,18 +35396,17 @@ connecticuttitlesearch.com, 1 connectika.io, 1 connecting-software.com, 1 +connectingmillions.com, 1 connectingrentals.com, 1 connectingup.org, 1 connection-sggz.nl, 1 connectionplanet.nl, 1 -connections.je, 1 connectionstrings.com, 1 connective.com.au, 0 connectivityparty.tk, 1 connectmath.com, 1 connectme.com.mx, 1 connectmy.car, 1 -connectnow.nl, 1 connecto.group, 1 connectpay.com, 1 connectthedoc.com, 0 @@ -35999,7 +35442,6 @@ conorbyrd.com, 1 conorjwryan.com, 1 conory.com, 1 -conotoxia.com, 1 conova.com, 1 conpins.nl, 1 conplant.com.au, 1 @@ -36041,6 +35483,7 @@ consertodeeletrodomesticosembh.com, 1 consertodegeladeiraembh.com, 1 conservadoraembh.com.br, 1 +conservaschato.com, 1 conservation-careers.com, 1 conservationfreedivers.com, 1 conservationgeography.com, 1 @@ -36048,7 +35491,6 @@ consiglidisalute.com, 1 consiliarioltd.com, 1 consilio.com, 1 -consilium-ifa.co.uk, 1 consilium-vitae.ch, 1 consiliumvitae.ch, 1 consoe.com, 1 @@ -36075,6 +35517,7 @@ constant-rough.de, 1 constant.ga, 1 constanta2035.ro, 1 +constantinocontabilidade.com, 1 constantinschreiber.me, 1 constcorrect.com, 1 constellatio.com, 1 @@ -36121,21 +35564,17 @@ consultaveiculopelaplaca.com.br, 1 consultg.ltd, 1 consultimator.com, 1 -consultimedia.de, 1 consulting-brokerage.tk, 1 consultinghero.es, 1 consultinghouse.tk, 1 consultinghousenet.tk, 1 consultingnurseest.ga, 1 -consultoriaandrade.com.br, 1 consultoriadelactancia.com, 1 consultoriadeseguranca.com.br, 1 consultoriosodontologicos.com.br, 1 -consultorseo.pt, 1 consultorseolocal.eu, 1 consultpetkov.com, 1 consultregen.com, 1 -consultum.com, 1 consumatore.it, 1 consumer.ee, 0 consumer.gov, 1 @@ -36156,7 +35595,6 @@ consumerprotection.gov, 1 consumerprotectionbureau.gov, 1 consumerrescue.org, 1 -consumerrights.wiki, 1 consumersentinel.gov, 1 consumershempmd.com, 1 consumertesting.com, 1 @@ -36166,13 +35604,11 @@ consyltec.de, 1 contabilidadebhpampulha.com.br, 1 contabilidadebrooklin.com.br, 1 -contabilidademassarelli.com.br, 1 contact-checker.tk, 1 contact.inc, 1 contact.xyz, 1 -contactangle.com, 1 contactbadger.com, 1 -contacted.io, 1 +contacted.io, 0 contactelus88.fr, 1 contactlimo.com, 1 contactsrl.it, 1 @@ -36283,7 +35719,6 @@ conversatis.cf, 1 converser.tk, 1 conversive.nl, 1 -convert-fast.photos, 1 convert.im, 1 convert.io, 1 convert2sql.com, 1 @@ -36308,7 +35743,6 @@ conwx.com, 1 conxcon.de, 1 coo.ooo, 1 -cooalliance.com, 1 coobis.com, 1 coochiehacks.io, 1 coocook.org, 1 @@ -36327,13 +35761,14 @@ cookieandkate.com, 1 cookiecrook.com, 1 cookiedatabase.org, 1 +cookiefamily.org, 1 cookielaw.org, 1 cookiepedia.co.uk, 1 cookiepro.com, 1 +cookiesmoquirida.com.br, 1 cookiesoft.de, 1 cookiestudies.cf, 1 cooking-food.cf, 1 -cookingandme.com, 1 cookingbooks.es, 1 cookingiseasy.tk, 1 cookingperfected.com, 1 @@ -36363,7 +35798,6 @@ cooldomains.tk, 1 coole-fete.de, 1 coolerssr.space, 1 -coolexpo.com, 1 coolfilm.cf, 1 coolgeography.co.uk, 1 coolgifs.de, 1 @@ -36374,7 +35808,6 @@ coolleader.com, 1 coolmath.cf, 1 coolpi.nl, 1 -coolplus.com, 1 coolprylar.se, 1 coolsculptingmanhattanbeach.com, 1 coolshirt.tk, 1 @@ -36388,6 +35821,7 @@ coolvox.com, 1 coolweirdfacts.ga, 1 coolwinefix.com, 1 +coombsinc.com, 1 coomer.st, 1 coomonte.tk, 1 coonelnel.net, 1 @@ -36406,7 +35840,6 @@ cooperstuffpodcast.com, 1 coopetarrazu.com, 1 coops4dev.coop, 1 -coopsana.com.co, 1 coopseurope.coop, 1 coor.info, 1 coordinafit.com, 1 @@ -36422,7 +35855,6 @@ copacabanafc.tk, 1 copadata.be, 1 copain.com.mx, 1 -copasulassessoria.com.br, 1 copd.net, 1 copdfoundation.org, 1 copdrop.ga, 1 @@ -36430,11 +35862,12 @@ copedeportes.tk, 1 copewithschoolnyc.com, 1 cophumouraustralia.com, 1 -copiermarket.com, 1 +copie-sjop.nl, 1 copiisiparinti.ro, 1 copilotgps.com, 1 copilotlive.com, 1 copilotpro.com, 1 +coppeline.be, 1 coppelmansmakelaardij.nl, 1 copper.co, 1 copperart.ca, 1 @@ -36460,7 +35893,6 @@ copyfast.cf, 1 copyhandler.com, 1 copypoison.com, 1 -copyright-watch.org, 1 copyright.gov, 1 copyrightclaimsboard.gov, 1 copyrightcoins.help, 1 @@ -36534,12 +35966,10 @@ corecdn.org, 1 corecolor.co.jp, 1 coreconcepts.com.sg, 1 -corecore.com, 1 cored.al, 1 coredna.com, 1 coredns.rocks, 1 coredrive.com, 1 -coredroid.com, 1 coreflowbased.eu, 1 corefy.com, 1 coreg.tk, 1 @@ -36571,7 +36001,6 @@ corfman.com, 1 corfound.org, 1 corfuny.gov, 1 -corgal.com, 1 corgiaspets.com, 1 corgiclub.art, 1 corgspace.com, 1 @@ -36590,14 +36019,12 @@ cork.tech, 1 cork.technology, 1 corkcityfc.tk, 1 -corker.biz, 1 corky.tk, 1 corleoncatering.com, 1 corlija.com, 1 corlinde.nl, 1 cormac-corp.com, 1 cormed-heverlee.tk, 1 -corn.az, 1 corn.ninja, 1 cornday.org, 1 cornel1801.com, 1 @@ -36647,6 +36074,7 @@ cororocierodebelen.tk, 1 corp.goog, 1 corpconsulting.com, 1 +corpdocs.com.au, 1 corpfin.net, 1 corpheuss.ga, 1 corpio.nl, 1 @@ -36654,7 +36082,6 @@ corpomotriztokio.com, 1 corpora.ga, 1 corpora.tk, 1 -corporacionamerica.com, 1 corporacionbi.com, 1 corporate-advisory.com, 1 corporate-electric.ky, 1 @@ -36700,16 +36127,16 @@ correotemporal.org, 1 correspond.gq, 1 correspondent.ga, 1 +corretoramichelesalvino.com.br, 1 corride.at, 1 corridorsands.com.au, 1 corriere.roma.it, 1 corrierenazionale.it, 1 -corriestmedicalclinic.com.au, 1 corrigan.xyz, 1 -corruptcatz.com, 1 corruptos.tk, 1 corsa-b.uk, 1 corsac.nl, 1 +corsaleonline.it, 1 corsectra.com, 1 corsepro.com, 1 corservsolutions.com, 1 @@ -36752,6 +36179,7 @@ corus.lt, 1 corvaglia.com, 1 corvax.kiev.ua, 1 +corvettesalvage.com, 1 corvetto.tk, 1 corvus.eu.org, 1 corvuscorax.info, 1 @@ -36816,7 +36244,6 @@ cosmosfala.com.br, 1 cosmosmkt.com.mx, 1 cosmoz.ga, 1 -cosms.com, 1 cosmundi.de, 1 cosmv.org, 1 cosni.co, 1 @@ -36917,7 +36344,6 @@ count-iq.sk, 1 count.town, 1 countdowntomagic.com, 1 -countercloud.com, 1 counterenlol.com, 1 counterespionage.com, 1 countermats.net, 1 @@ -36940,7 +36366,6 @@ countryfunders.com, 1 countrygrid.com, 1 countryhearthbedandbreakfast.com, 1 -countrylife.cz, 1 countrymountaininn.com, 1 countrymusicchart.net, 1 countryoutlaws.ca, 1 @@ -36963,10 +36388,12 @@ coupestanley.com, 1 couplay.org, 1 couplesapp.co, 1 -coupon5sm.com, 1 +coupona.co.il, 1 couponava.com, 1 couponchief.com, 0 +couponcode.co.il, 1 couponcodesme.com, 1 +couponim.co.il, 1 couponsale.tk, 1 couponzil.com, 0 courage-sachsen.org, 1 @@ -36976,7 +36403,6 @@ couriergrey.com, 1 couriersrs.com, 1 coursables.com, 1 -coursave.com, 1 coursdejaponais.com, 0 courseconfidence.com, 1 coursehero.com, 1 @@ -37030,9 +36456,7 @@ coutelleriederibbes.fr, 1 coutts.com, 1 couverture-barre.fr, 1 -couverture-saint-nazaire.fr, 1 couvreur-hinault.fr, 1 -covar.com.co, 1 cove.chat, 1 covenantbattle.net, 1 covenco.com, 1 @@ -37058,8 +36482,7 @@ covert.sh, 1 covery.ai, 1 coveteur.com, 1 -covettrading.com, 1 -coviacorp.com, 1 +covettrading.com, 0 covid-19.nhs.uk, 1 covid-19advice.com, 1 covid.gov, 1 @@ -37098,7 +36521,6 @@ cowetaga.gov, 1 cowlculator.com, 1 cowleycountyks.gov, 1 -cowleysexeter.co.uk, 1 cowlitzwa.gov, 1 coworkanywhere.ch, 1 coworking-luzern.ch, 1 @@ -37117,6 +36539,7 @@ cozanne.fr, 1 coze.zone, 1 cozinharaz.com, 1 +cozma.fr, 1 cozmoapp.com, 1 cozmoyachts.com, 1 cozo.me, 1 @@ -37147,14 +36570,12 @@ cpcclarkesville.org, 1 cpchur.ch, 0 cpclayton.com, 1 -cpd-education.co.uk, 1 cpd.org.au, 1 cpe-colleg.de, 1 cpe-registry.com, 1 cpe-registry.org, 1 cpe.is, 1 cpegypt.tk, 1 -cpeip.cl, 1 cpelighting.tk, 1 cpennink.nl, 1 cperegistry.com, 1 @@ -37170,7 +36591,7 @@ cpgiiaragon.es, 1 cphollywoodproduct.ml, 1 cphpvb.net, 1 -cpifilters.com, 1 +cpifilters.com, 0 cpish.id.au, 0 cplconsult.com, 1 cpls.me, 1 @@ -37208,7 +36629,6 @@ cpxz.nl, 1 cpy.pt, 1 cqchome.com, 0 -cqep.com, 1 cqfuchen.com, 1 cqoicebordel.tk, 1 cqqinhangtech.cn, 1 @@ -37340,7 +36760,6 @@ crapmail.tk, 1 crapouill.es, 1 crash-de-1929-et-grande-depression.tk, 1 -crashbolsa.com, 1 crashcomputer.tk, 1 crashcoursecenter.com, 1 crashcrafter.de, 1 @@ -37417,13 +36836,11 @@ crc-online.nl, 1 crc-search.com, 1 crc.bg, 1 -crc.net.br, 1 crc32.online, 1 crca911co.gov, 1 crcc-center.com, 1 crcmc.com.tw, 1 crcncc.org, 1 -crcprojects.in, 1 crcr.pw, 1 cre-pf.org.au, 1 cre8ivedeals.com, 1 @@ -37439,13 +36856,11 @@ creafitchile.cl, 1 creagay.fr, 1 creaintel.net, 1 -creaketing.com, 1 crealabs.it, 1 crealogix-online.com, 1 cream-dream.com.ua, 0 creamcastles.co.uk, 1 creamfields.com, 1 -creamless.com, 1 creamosweb.co, 1 creampiepussytube.com, 1 creamsoft.com, 1 @@ -37462,7 +36877,6 @@ crearpc.com, 1 creartcol.tk, 1 creasetheband.tk, 1 -create-it.cz, 1 create-ls.jp, 1 create-website.ga, 1 create2.be, 1 @@ -37498,12 +36912,10 @@ creativecommons.gr, 1 creativecommonscatpictures.com, 1 creativecommunityforpeace.com, 1 -creativeconsult.com, 1 creativedijital.com.tr, 1 creativeedge.ch, 1 creativeeducation.tk, 1 creativeexpertdesigner.com, 1 -creativefocus.com, 1 creativegraphix.com, 1 creativeground.com, 1 creativeground.com.au, 1 @@ -37542,7 +36954,6 @@ creatixcode.nl, 1 creatomatic.co.uk, 1 creatormetrics.io, 1 -creators-design.com, 1 creators.direct, 1 creatorsgarten.org, 1 creatorswave.com, 1 @@ -37589,7 +37000,6 @@ creditor.tk, 1 creditorapido.pt, 1 creditorwatch.com.au, 1 -creditosonline.pt, 1 creditozen.es, 0 creditozen.mx, 0 creditreport.tk, 1 @@ -37603,7 +37013,6 @@ creekcountyonline.com, 1 creekie.me, 1 creeks-coworking.com, 1 -creekside.edu.in, 1 creeksidebiblechurch.org, 1 creeksidecentre.org.uk, 1 creeksideduluth.com, 1 @@ -37621,7 +37030,6 @@ creerunblog.net, 1 crei.cat, 1 crej.com, 1 -crellai.com, 1 cremalleradenuria.tk, 1 crematory.tk, 1 cremedigital.com, 1 @@ -37647,7 +37055,6 @@ crestoncottage.com, 0 crestor20mg.ml, 1 crestorgeneric.ml, 1 -crestpractice.com, 1 crestresearch.ac.uk, 1 crestron.com, 1 crestviewky.gov, 1 @@ -37689,6 +37096,7 @@ cricketnmore.com, 1 cricketwatch.org, 1 crickey.eu, 1 +crickhunt.com, 1 crickits.co.uk, 1 cricpa.com, 1 cricrocket.com, 1 @@ -37725,7 +37133,6 @@ criminallawyerjobdescription.ga, 1 criminallawyerjobdescription.gq, 1 criminallawyerjobdescription.ml, 1 -criminallawyersingapore.com, 1 criminalminds.tk, 1 criminalnote.tk, 1 criminalskin.tk, 1 @@ -37823,7 +37230,6 @@ criu.org, 1 crivitz.gov, 1 crix.ro, 1 -crixto.io, 1 crj.ovh, 1 crl-aus.com, 1 crl-autos.com, 1 @@ -37833,6 +37239,7 @@ crm-gestion-relation-client.com, 1 crm.onlime.ch, 0 crm114d.com, 1 +crm4eshop.com, 1 crm911.com, 0 crmdumariage.com, 1 crmforce.mil, 1 @@ -37866,6 +37273,7 @@ crohns-disease.org.uk, 0 croissancelocal.fr, 1 croissant.casa, 1 +cromartycamping.com, 1 cromavista.tk, 1 cromefire.myds.me, 1 cromosceltavigo.tk, 1 @@ -37881,7 +37289,6 @@ cronicademuro.tk, 1 cronicanet.com.br, 1 cronicasjaponicas.com, 1 -cronistadooculto.com.br, 1 cronix.cc, 1 cronjob.de, 1 cronobox.one, 1 @@ -37890,6 +37297,8 @@ cronoscentral.be, 1 crookcountyor.gov, 1 crookedcru.tk, 1 +crookedlakelistings.com, 1 +crookedriverlistings.com, 1 crookedtower.com, 1 crooklibraryor.gov, 1 crookpublichealthor.gov, 1 @@ -37914,7 +37323,6 @@ crossclassify.com, 1 crosscom.ch, 1 crossconnected.co.uk, 1 -crosscutgames.com, 1 crossdesign.com.au, 1 crossdresscontest.com, 1 crossedwires.net, 0 @@ -37956,7 +37364,7 @@ crowdsupply.com, 1 crowefitlab.com, 1 croweleaseaccountingexpress.com, 1 -crowleybrynn.com, 1 +croweserver.com, 1 crowleytxlicensedelectrician.com, 1 crown-beverage.com, 1 crown-building.com, 1 @@ -37967,9 +37375,9 @@ crownedhijab.com, 1 crownednetwork.com, 1 crownhotelharrogate.com, 1 -crownmarqueehire.co.uk, 1 crownmazda.ca, 1 crownmutual.com, 1 +crownmutualgroup.com, 1 crownpeak.com, 1 crownpoint.com, 0 crownsterling.io, 1 @@ -37997,6 +37405,7 @@ crt.cloud, 1 crt.sh, 1 crt2014-2024review.gov, 1 +crtclaims.com, 1 crtevents.co.uk, 1 crti.dz, 1 crti.tech, 1 @@ -38016,6 +37425,7 @@ crufad.org, 0 cruicky.co.uk, 1 cruicky.uk, 1 +cruise4news.at, 1 cruisecheap.com, 1 cruisecontrolnovels.com, 1 cruisefashion.tk, 1 @@ -38035,7 +37445,6 @@ crunchrapps.com, 1 crunchreviews.com, 1 crunchy.rocks, 1 -crunchybetty.com, 1 crunchybridge.com, 1 crusadernews.com, 1 cruscotto-legno.it, 1 @@ -38044,7 +37453,6 @@ crushingcaspars.de, 1 crushthefinancialanalystexam.com, 1 crushthelsatexam.com, 1 -crushthepmexam.com, 1 crushxp.tk, 1 crustytoothpaste.net, 1 crute.me, 1 @@ -38052,7 +37460,6 @@ cruzadamorada.tk, 1 crvenikrst.tk, 1 cry-sys.de, 0 -cryers.com, 1 cryocairns.com.au, 1 cryoflesh.com, 1 cryogeni.fr, 1 @@ -38078,6 +37485,7 @@ cryptifo.com, 1 cryptii.com, 0 cryptin-it.com, 1 +cryptitan.live, 1 cryptme.in, 1 crypto-ads.ga, 1 crypto-clix.xyz, 1 @@ -38101,7 +37509,6 @@ cryptobonus.tk, 1 cryptobot.dk, 1 cryptobox.sk, 1 -cryptocardz.com, 1 cryptoclix.website, 1 cryptocon.org, 1 cryptocurrencynews.today, 1 @@ -38143,7 +37550,6 @@ cryptomkt.com, 1 cryptomonnaies.io, 1 crypton.vercel.app, 1 -crypton.wiki, 1 crypton.xyz, 1 cryptonaire.ga, 1 cryptonewsz.com, 1 @@ -38176,6 +37582,7 @@ cryptowat.ch, 1 cryptox-trading.com, 1 cryptoya.io, 1 +cryptoz.zone, 1 cryptozoologyguide.com, 1 cryptpad.cz, 1 cryptsetup.com, 1 @@ -38204,7 +37611,6 @@ crystalkilpatrick.com, 1 crystallake.tk, 1 crystalprinting.com.au, 1 -crystalpw.com, 1 crystalsdollz.tk, 1 crystalsky.tk, 1 crystalspringsms.gov, 1 @@ -38249,7 +37655,6 @@ csaerotherm.com, 1 csafederalsummit.com, 1 csale.co.il, 1 -csapa.com, 1 csaposs.com, 1 csasummit.org, 1 csaurl.org, 1 @@ -38275,7 +37680,6 @@ cse-avantages.com, 1 cse-sna78.fr, 1 csedsp.fr, 1 -csedu.com, 1 csehnyelv.hu, 1 csekkold.hu, 1 cselzer.com, 1 @@ -38289,6 +37693,7 @@ csffa.ca, 1 csfm.com, 1 csgbusiness.co.uk, 1 +csgclash.com, 1 csghomedesignbuild.com, 1 csgo-roulette.ru, 1 csgo.ac.cn, 1 @@ -38326,13 +37731,11 @@ csneaits.cl, 1 csnet.live, 1 csokolozos-jatekok.tk, 1 -csolar.com, 1 csorncss.ca, 1 csosa.gov, 1 csosew.org, 1 csowt.gq, 1 csp-tohoku.co.jp, 1 -csp-tool.com, 1 csp.wa.edu.au, 1 cspasp.com, 1 csper.io, 1 @@ -38368,7 +37771,6 @@ csty.ltd, 1 csu.st, 1 csub.edu, 1 -csuchen.com, 1 csulauniversitytimes.com, 1 csulb-cmp-eir.com, 1 csumathtutor.com, 1 @@ -38393,7 +37795,6 @@ ctc-g.com.sg, 1 ctcedu-vghtc.tw, 1 ctcloud.ml, 1 -ctcom-peru.com, 1 ctconp.org, 1 ctcp.pt, 1 ctdesigner.ca, 1 @@ -38410,7 +37811,6 @@ cthulhuden.com, 1 ctir.gov.br, 1 ctj.im, 1 -ctjk.com, 1 ctknight.me, 1 ctkwwri.org, 1 ctl.fi, 1 @@ -38432,12 +37832,12 @@ ctpe.net, 1 ctpro.net, 1 ctr-sante.eu, 1 +ctrl-click.fr, 1 ctrl.blog, 1 ctrl.gr, 0 ctrlalto.com, 1 ctrlaltstream.com, 1 ctrlcvz.tk, 1 -cts-companies.com, 1 ctspcallao.org.pe, 1 ctsu.org, 1 cttso.gov, 1 @@ -38502,11 +37902,11 @@ cubitt.cz, 1 cubocell.com, 1 cubotabacaria.com.br, 1 -cubotic.cl, 1 cuboxmovies.ga, 1 cubrebocas.tk, 1 cubsbestteaminbaseball.com, 1 cubsradio.tk, 1 +cubunscop.com, 1 cubyhome.com, 1 cucabot.tk, 1 cucaracha.tk, 1 @@ -38522,7 +37922,6 @@ cudoo.de, 1 cueca.com.br, 1 cuecasonline.com.br, 1 -cuegee.com, 1 cuentadias.cl, 1 cuentamecomopaso.es, 1 cuentas-gratis.ga, 1 @@ -38711,7 +38110,6 @@ currenteurope.eu, 1 currenthaus.com, 1 currentlystreaming.com, 1 -curriculumciudadano.mx, 1 currycountynm.gov, 1 currycountyor.gov, 1 currynissanmaparts.com, 1 @@ -38777,7 +38175,6 @@ custombrandhub.co.uk, 1 custombrokers.com.au, 0 custombuttonco.com, 1 -customcircuitsltd.co.uk, 1 customcraft.tk, 1 customdissertation.com, 1 customer2you.com, 1 @@ -38785,6 +38182,7 @@ customerinfra.com, 1 customerinfra.net, 1 customerinfra.org, 1 +customerservicemanager.com, 1 customerservicepal.com, 1 customerware.com.au, 0 customessaystation.gq, 1 @@ -38860,7 +38258,6 @@ cuxpool.net, 1 cuyahogacommunitycollege.tk, 1 cuyahogacountyvotesoh.gov, 1 -cv-generator-fe-eu.herokuapp.com, 1 cv.fr, 1 cv.se, 1 cvalda.tk, 1 @@ -38957,7 +38354,6 @@ cwtsamplecenter.com, 1 cwtv.cc, 1 cwtv.in, 1 -cwulf.com, 1 cwwise.com, 1 cx100.io, 1 cx330.top, 1 @@ -39006,13 +38402,13 @@ cyber4z.com, 1 cyber72.com, 1 cyberab.org, 1 +cyberagentur.de, 1 cyberalternance.com, 1 cyberark.com, 1 cyberarmy.cc, 1 cyberattackincidentresponse.com, 1 cyberaudit.fi, 1 cyberautomobile.tk, 1 -cyberbliss.in, 1 cyberblog.cn, 1 cyberbook.ml, 1 cyberbotx.com, 1 @@ -39035,7 +38431,6 @@ cyberdean.fr, 1 cyberdevelopment.es, 1 cyberdiscoverycommunity.uk, 1 -cyberdns.com, 1 cyberdog.ch, 1 cyberdragon.tk, 1 cyberduck.io, 1 @@ -39127,6 +38522,7 @@ cyberschmiede.at, 1 cyberschmiede.com, 1 cyberschmiede.de, 1 +cyberscroll.com, 1 cybersecur.co.ao, 1 cybersecurite-info.fr, 1 cybersecurity.gov, 1 @@ -39172,8 +38568,7 @@ cybertronics.tk, 1 cybertu.be, 1 cyberuni.ir, 1 -cyberupgrade.net, 1 -cyberwahid.my.id, 1 +cyberupgrade.net, 0 cyberwandelendetakjes.tk, 1 cyberwebeyeos.com, 0 cyberweightloss.com, 1 @@ -39183,6 +38578,7 @@ cyberzone.ml, 1 cyberzones.gq, 1 cybiko123.com, 1 +cybilportal.org, 1 cyborgtheory.tk, 1 cybozu.cn, 1 cybozu.com, 1 @@ -39192,7 +38588,6 @@ cycc.cloud, 1 cyclamen.tk, 1 cycleboss45.fr, 1 -cycledownunder.com, 1 cycledynamics.physio, 1 cyclehackluxembourgcity.lu, 1 cyclemasters.com, 1 @@ -39223,7 +38618,6 @@ cygenx.com, 1 cygnatus.com, 1 cygnius.net, 1 -cyjm.com, 1 cykelbanor.se, 1 cykeldirekt.eu, 1 cyklistika24.cz, 1 @@ -39238,6 +38632,7 @@ cynqx.com, 1 cynrgie.fr, 1 cynthiacherry.com, 1 +cyon.ch, 1 cyp.io, 1 cype.dedyn.io, 1 cyph.com, 1 @@ -39283,6 +38678,8 @@ cz.nl, 1 czakey.net, 1 czarni-czarne.tk, 1 +czarniecki-eco-build.com, 1 +czarniecki-eco-design.com, 1 czaw.org, 1 czbix.com, 1 czc.cz, 0 @@ -39380,7 +38777,6 @@ d3xt3r01.tk, 1 d42.no, 1 d4fx.de, 1 -d4infonet.com, 1 d4insight.com, 1 d4wson.com, 1 d4x.de, 1 @@ -39398,7 +38794,6 @@ d8.io, 1 d8181.com, 1 d82365.com, 1 -d88.ag, 1 d8814.com, 1 d883vip.com, 1 d884vip.com, 1 @@ -39409,7 +38804,7 @@ d887vip.com, 1 d88818.com, 1 d8886.net, 1 -d8891.net, 1 +d8891.net, 0 d88agent.com, 1 d898.app, 1 d899365.com, 0 @@ -39433,7 +38828,6 @@ dabai.ga, 1 dabai.ml, 1 dabai.photo, 1 -dabaixiong.com, 1 dabasstacija.lv, 1 dabbagam.tk, 1 dabhand.studio, 1 @@ -39446,7 +38840,6 @@ dabuzz.tk, 1 dacada-porn.com, 1 dacadoo.com, 1 -dacangku.com, 1 dacautocentres.com, 1 daceurope.co.uk, 1 dacgroup.com, 1 @@ -39457,7 +38850,6 @@ dachdeckerei-hagen.de, 0 dachdeckermeister-egon-weiss.de, 1 dachdeckermeister-moeller.de, 1 -dachet.com, 1 dachlaeufer.com, 1 dachnie-reshenia.ru, 0 dachshundsaspets.com, 1 @@ -39491,6 +38883,7 @@ dadosch.de, 0 dadrian.io, 1 dadsarmy.tk, 1 +dadshoes.net, 1 daduke.org, 1 dadwhatcooks.com, 1 daedalusdesigns.co, 1 @@ -39510,12 +38903,10 @@ dafassl.com, 1 dafdto.com, 1 dafe2021.ee, 1 -dafengche.com, 1 dafengding.com, 1 daffodilcentre.org, 1 daffodilusa.org, 1 dafmeyda.com, 1 -dafong.com, 1 dafont.com, 1 daft.ie, 1 dafunda.com, 1 @@ -39558,7 +38949,6 @@ daidothi.vn, 1 daidr.me, 1 daie-inc.com, 1 -daijin.com, 1 daikonsystems.com, 1 daikoz.com, 1 daikoz.fr, 1 @@ -39582,16 +38972,13 @@ dailyeasternnews.com, 1 dailyegyptian.com, 1 dailyfictive.com, 1 -dailyfish.ru, 1 dailyforex.com, 1 dailyfx.com, 1 -dailygamemoments.com, 1 dailyhealthylife.ml, 1 dailyhealthylife.tk, 1 dailyhomestore.cl, 1 dailyillini.com, 1 dailyjigsawpuzzles.net, 1 -dailyjoy.com, 1 dailykos.com, 1 dailykosbeta.com, 1 dailylime.kr, 1 @@ -39644,7 +39031,6 @@ dajaskincare.nl, 1 dajiale.org, 1 dajjal.org, 1 -dak.org, 1 dakcess.net, 1 daken.hu, 1 daki-host.tk, 1 @@ -39656,14 +39042,13 @@ dakota911mn.gov, 1 dakotacil.org, 1 dakotaplainscreditunion.com, 1 -dakotas.com, 1 dakotavalleyrecyclingmn.gov, 1 dal-loop.xyz, 1 dal.net.sa, 1 dalagore.com, 1 dalailamafoundation.org, 1 dalb.in, 1 -dalbar.com, 1 +dalbar.com, 0 dalbarsqm.com, 1 dalbitresb.com, 1 daldropsbb.com, 1 @@ -39705,7 +39090,6 @@ dallmeier.net, 0 dallydushigrill.com, 0 dalmatians.tk, 1 -dalnicni-znamky.com, 1 dalsin.ir, 1 daltoncraven.com, 0 daltonmi.gov, 1 @@ -39717,8 +39101,8 @@ damades.com, 1 damag.net, 1 damaged.org, 1 +damak.cz, 1 damanlu.com, 1 -damanlv.com, 1 damarsarkilar.tk, 1 damassimo.bg, 1 dambachpeacebuilderfellowships.org, 1 @@ -39781,7 +39165,6 @@ danashamsters.tk, 1 danbailey.com, 1 danbaldwinart.com, 1 -danbao.com, 1 danbarrett.com.au, 0 danbergen.com, 1 danbolig.dk, 1 @@ -39793,7 +39176,6 @@ dance.nyc, 1 dancechart.tk, 1 dancefm.tk, 1 -dancehome.com, 1 dancenowportal.com, 1 danceonline.fi, 1 danceordienet.tk, 1 @@ -39827,6 +39209,7 @@ dangeredwolf.com, 1 dangeredwolf.net, 1 dangerscience.com, 1 +dangersolutions.com.au, 1 dangmai.tk, 1 dangr.zone, 0 danhalliday.com, 1 @@ -39876,7 +39259,6 @@ danielderidderfansite.tk, 1 danieldevine.tk, 1 danielduran.tk, 1 -daniele.tech, 1 danielebarbieri.com, 1 danielehniss.de, 0 danieleluttazzi.tk, 1 @@ -39900,6 +39282,7 @@ danielhurley.info, 1 danielhurley.org, 1 danielittlewood.xyz, 1 +danielives.co.uk, 1 danielj.tk, 1 danieljamesscott.org, 1 danielkanchev.com, 1 @@ -39923,7 +39306,6 @@ danielnaaman.com, 1 danielnaaman.org, 1 danielnet.co, 1 -danielparker.com.au, 1 danielpeukert.cz, 1 danielportfolio.es, 1 danielran.com, 1 @@ -40052,9 +39434,6 @@ danzka.tk, 1 dao.spb.su, 1 daofficers.com, 1 -daojian.com, 1 -daole.com, 1 -daomo.com, 1 daoplattunhien.com.vn, 1 daoro.net, 0 daotaoantoan.org, 1 @@ -40070,7 +39449,6 @@ daprint.tk, 1 dapss-ut.gov, 1 dapursolo.tk, 1 -daqq.com, 1 daracokorilo.com, 1 daralfajr.site, 1 daramad-telegram.ga, 1 @@ -40080,6 +39458,7 @@ darc-mak.de, 1 darc.pro, 1 darci.tech, 1 +darckfast.com, 1 darcybergen.co, 0 darcyinspired.com, 1 darcymarshall.com, 1 @@ -40160,7 +39539,7 @@ darklaunch.com, 1 darkleia.com, 1 darklite.ml, 1 -darklybasic.com, 1 +darklybasic.com, 0 darkmail.cf, 1 darkmanthra.tk, 1 darkmattertechnology.com, 1 @@ -40191,7 +39570,6 @@ darksideprod.tk, 1 darksignsgame.tk, 1 darksilver.nl, 1 -darksin.com, 1 darkskymap.com, 1 darkskymd.org, 1 darksoilcbd.com, 1 @@ -40210,7 +39588,6 @@ darkwoods.tk, 1 darkx.me, 1 darkxxxtube.com, 1 -darlen.com, 1 darlene.hu, 1 darlenenbocek.com, 1 darlington.tk, 1 @@ -40276,7 +39653,6 @@ daservajesus.net, 1 daservajesus247.com, 1 daservajesus247.net, 1 -dasfest.com, 1 dasgeestig.nl, 1 dash.com.co, 1 dashboard.gov.ph, 1 @@ -40375,10 +39751,11 @@ datadoghq.com, 1 datadorf.de, 1 datadriven101.tech, 1 -datadus.at, 1 +datadus.at, 0 datadyne.technology, 1 dataentry.top, 1 datafactory.co.za, 1 +datafinland.com, 1 datafloq.com, 1 dataformers.at, 1 datagir.ir, 0 @@ -40389,7 +39766,6 @@ dataharvest.at, 1 datahaus.construction, 1 datahove.no, 1 -datainvest.ai, 1 datainvest.pl, 1 datajournalism.com, 1 datakick.org, 1 @@ -40431,7 +39807,6 @@ datasciencedojo.com, 1 datascope.io, 1 datasharpacademy.com, 1 -datashock.com, 1 datasite.com, 1 dataskydd.net, 1 datasmart.ca, 1 @@ -40462,12 +39837,9 @@ datatruckers.org, 1 datatruckers.social, 1 datatube.tk, 1 -datatypes.net, 1 -datavaultalliance.com, 0 datavitec.com, 1 datavizable.org, 1 datawar.tk, 1 -datawarehouseinfo.com, 1 datax-cloud.de, 1 dataxl.net, 1 datazoo.asia, 1 @@ -40476,7 +39848,6 @@ dateable.co, 1 dated.fun, 1 dateien.at, 1 -dateierweiterung.com, 1 datekompas.be, 1 datekompas.com, 1 datema.no, 0 @@ -40566,14 +39937,12 @@ daunatotala.ro, 1 daunendecke.at, 1 daunendecke.de, 1 -daunt.link, 0 dauphincounty.gov, 1 dausendschoen.de, 1 dav-tech.work, 1 dav.com.au, 1 davalochki.tk, 1 davar1.co.il, 1 -davaro.ro, 1 davd.cf, 1 dave-pearce.com, 1 daveaglick.com, 0 @@ -40641,11 +40010,11 @@ davidebaraglia.it, 1 davidebasile.tk, 1 davidelstob.com, 1 -davidemasoni.com, 0 davideonlain.tk, 1 davidepalma.it, 1 davidereinato.tk, 1 davidetmagali.fr, 1 +davidevansforsenate.com, 1 davidfarland.com, 1 davidforward.net, 1 davidg.cc, 1 @@ -40659,8 +40028,6 @@ davidgrudl.com, 1 davidhastingseckerd.com, 0 davidheineman.net, 1 -davidho.org, 1 -davidhodali.com, 0 davidhurl.net, 1 davidinteriors.tk, 1 davidje13.com, 1 @@ -40668,7 +40035,7 @@ davidjohnstoncfo.com, 0 davidjusto.com, 1 davidkatz.tk, 1 -davidkeane.com, 1 +davidkeane.com, 0 davidkennardphotography.com, 1 davidknoll.me.uk, 1 davidkoonarwindsor.com, 0 @@ -40714,7 +40081,7 @@ davidskinnerantiques.com, 1 davidson-berquist.com, 1 davidsonberquist.com, 1 -davidsopas.com, 0 +davidsopas.com, 1 davidstark.name, 1 davidstein-heilpraktiker.de, 1 davidstrickler.net, 1 @@ -40763,7 +40130,6 @@ dawdle.space, 1 dawg.eu, 1 dawgs.ga, 1 -dawi.sa, 1 dawidpotocki.com, 1 dawidwrobel.com, 1 dawnbringer.eu, 1 @@ -40961,7 +40327,6 @@ dcomedieta.it, 1 dcparts.com.br, 1 dcpf.online, 1 -dcpl.bt, 1 dcpower.eu, 1 dcpro.pt, 1 dcpudwa.gov, 1 @@ -40970,8 +40335,8 @@ dcseu.com, 1 dcso.de, 0 dcsoky.gov, 1 +dcswiss.com, 1 dct-cloud.com, 1 -dctransparency.com, 1 dctrl.ch, 1 dcustody.xyz, 1 dcvc.com, 1 @@ -40981,7 +40346,6 @@ dd.art.pl, 1 dd.center, 1 dd.team, 1 -dd11d.net, 0 dd202d.com, 1 dd207d.com, 1 dd214.gov, 1 @@ -41114,7 +40478,6 @@ dealsinaz.com, 1 dealsmagnet.com, 1 dealsomart.com, 1 -dealsoncart.com, 1 dealspotr.com, 1 dealstreet.fr, 1 dealzme.com, 1 @@ -41138,6 +40501,7 @@ death-notices.co.uk, 1 death.social, 1 deathberry.ddns.net, 1 +deathbits.com, 1 deathbychilisauce.com, 1 deathclub.eu, 1 deathcult.fun, 1 @@ -41192,7 +40556,6 @@ debigare.com, 1 debita.fi, 1 debita.org, 1 -debitcloud.com, 1 debitterballetjes.tk, 1 deblender.shop, 1 deblier.dynv6.net, 1 @@ -41206,7 +40569,6 @@ debouge.co.uk, 1 deboutpourlemali.ml, 1 debra-cz.org, 1 -debra-sa.com, 1 debraj.in, 1 debraschilling.de, 1 debrasclassiccleaning.com, 1 @@ -41214,7 +40576,6 @@ debricked.com, 1 debridleech.com, 1 debrunet.nl, 1 -debruns.ie, 1 debt-consolidation-reviews.org, 1 debtdandy.com, 1 debtmatters.ca, 1 @@ -41230,9 +40591,7 @@ debut-mebel.ru, 1 debutaredead.tk, 1 debuyer.com, 1 -debyte.com, 1 debzsh.tk, 1 -dec-ced.gc.ca, 1 dec6.gc.ca, 1 decadentdvices.com, 1 decagames.com, 1 @@ -41256,16 +40615,13 @@ deccanvalue.com, 1 deceasedonline.com, 1 decentrala.org, 1 -dechan.com, 1 dechat.nl, 1 decherdtn.gov, 1 dechetor.fr, 1 dechow.ddns.net, 1 -decibelnewmusic.com, 1 decide.hopto.org, 1 decidetreatment.org, 1 decima.bg, 1 -decimalpointanalytics.ai, 1 decimalpointanalytics.com, 1 decimatechnologies.eu, 1 decimation.tk, 1 @@ -41300,7 +40656,6 @@ deconstructind.ro, 1 decopros.fr, 1 decor-anna.com, 1 -decor-essentials.com, 1 decor-live.ru, 1 decora.pl, 0 decorahia.gov, 1 @@ -41337,7 +40692,6 @@ decstasy.de, 1 decsys.work, 1 dedanskevasaloebere.dk, 1 -deddie.gr, 1 dedede.ro, 1 dedektor.com, 1 dedelta.net, 1 @@ -41349,11 +40703,9 @@ dedmoroz.ga, 1 dedmoroz.gq, 1 dedmorozrzn.ru, 0 -dedns.com, 1 dedoho.pw, 1 dedoles.at, 1 dedoles.cz, 1 -dedoles.de, 1 dedoles.hu, 1 dedoles.pl, 1 dedoles.sk, 1 @@ -41361,7 +40713,6 @@ dedyk.gq, 1 dee.pe, 1 deechtebakkers.nl, 1 -deedoo.com, 1 deedyinc.com, 1 deeezy.com, 1 deefuse.de, 1 @@ -41389,11 +40740,9 @@ deepgrade.in, 1 deephill.com, 1 deephue.studio, 1 -deephustlellc.com, 1 deepid.com, 1 deepinsight.io, 0 deepl.com, 1 -deeplink-medical.com, 1 deepmountains.tk, 1 deepnote.com, 1 deeps.cat, 1 @@ -41435,7 +40784,6 @@ defend2.org, 1 defendanimals.com, 1 defender-pro.com, 1 -defendinnovation.org, 1 defenestrazionedipra.ga, 1 defenseorchestrator.com, 1 defenseweapon.tk, 1 @@ -41464,7 +40812,6 @@ defiscan.live, 0 defisolutions.ch, 0 defispot.com, 1 -defistablecoin.ai, 1 defkey.com, 1 deflumeriker.com, 1 defme.eu, 1 @@ -41555,7 +40902,6 @@ dejavu.ml, 1 dejected.ga, 1 dejfcold.cz, 1 -dejie.com, 1 dejiren.com, 1 dejmidarek.cz, 1 dejongeakademie.nl, 1 @@ -41590,6 +40936,7 @@ dekunstvananders.nl, 1 del-ex.de, 1 delagen.pro, 1 +delahaye-group.fr, 1 delahrzolder.nl, 1 delamoreretirement.com.au, 1 delamourencocotte.com, 1 @@ -41599,6 +40946,7 @@ delartouducocon.com, 1 delasamericas.tk, 1 delaunay.org, 1 +delavan.com, 1 delavega.ua, 1 delavska-hranilnica.si, 1 delavska.si, 1 @@ -41617,6 +40965,7 @@ delcopalandbank.gov, 1 deldadegan.tk, 1 deldel.fr, 1 +deldiary.com, 1 delduca.casa, 1 deleesanghers.tk, 1 delegao.moe, 1 @@ -41672,7 +41021,6 @@ dellamorte.tk, 1 dellasano.com, 1 dellasantina.com.ar, 1 -dellie.com, 1 dellipaoli.com, 1 dellirium.tk, 1 delmanofood.com, 1 @@ -41694,6 +41042,7 @@ delphinewong.com, 1 delpick.com, 1 delpilarrungue.cl, 1 +delplanque.xyz, 1 delprete.me, 1 delpuertohealth.gov, 1 delrayengineering.ca, 1 @@ -41721,7 +41070,6 @@ deltadentalmo.com, 1 deltadentalsc.com, 1 deltadigital.gr, 1 -deltaevus.com.br, 1 deltafm.tk, 1 deltalight.com, 1 deltaloja.com.br, 1 @@ -41732,6 +41080,7 @@ deltaphiepsilon.tk, 1 deltaprise-events.de, 1 deltarisk.com, 0 +deltasec.nl, 1 deltaserat.tk, 1 deltaservers.com.br, 1 deltasigmachi.org, 1 @@ -41754,7 +41103,6 @@ deluxeside.com, 1 deluxetransfers.co.uk, 1 delv.ac, 1 -delvinoadegas.com.br, 1 delycate.com, 1 delycate.fr, 1 delzottolink.com, 1 @@ -41769,11 +41117,11 @@ demcon-bunova.nl, 1 demcon-industrial.com, 1 demcon-industrial.nl, 1 -demcra.com, 1 +demcra.com, 0 demedx.at, 1 demenagement-chalon.fr, 1 demenagement-sfd.fr, 1 -demenagementagb.com, 1 +demenagementagb.com, 0 demenagements-la-cigogne.com, 1 dementiacaring.com.au, 1 dementiafactsexplained.com, 1 @@ -41809,6 +41157,7 @@ democracyfund.org, 1 democracyineurope.eu, 1 democracylive.com, 1 +democrata.es, 1 democratherald.com, 1 democratie.tk, 1 democraziaineuropa.eu, 1 @@ -41841,7 +41190,6 @@ demotivatorbi.ru, 1 demotour.cz, 1 demotrjct.online, 1 -demoussage-drone.fr, 1 dempe.tk, 1 dempseyenergy.com, 1 demsh.org, 1 @@ -41892,6 +41240,7 @@ denimtoday.com, 1 denis-pommier.com, 1 denisaadolfova.com, 1 +denisadinu.com, 1 denisdimoski.tk, 1 deniseeisenhauer.de, 1 denisesdanceacademy.com, 1 @@ -41905,6 +41254,7 @@ denisyakovlev.ml, 1 denisyan.ml, 1 deniszczuk.pl, 0 +denito.bg, 1 deniz.uk, 1 denizdesign.co.uk, 1 denizgulerguitar.com, 1 @@ -41948,7 +41298,6 @@ dennysdionigi.com, 1 deno.net, 1 denous.nl, 1 -denovo.energy, 1 denovocorp.com, 1 denshub.com, 1 densocean.net, 1 @@ -41962,7 +41311,6 @@ dental.gq, 1 dentalcolleges.tk, 1 dentalhealth.jp, 1 -dentalib.mx, 1 dentalimplantscost.com.au, 1 dentalimplantsolutions.net, 1 dentalmonitoring.com, 1 @@ -41973,7 +41321,7 @@ dentalqoretemp.com, 1 dentalreklamlari.tk, 1 dentals.cf, 1 -dentalsupportuk.com, 1 +dentalsupportuk.com, 0 dentaltalent.nl, 1 dentaltransitions.com, 1 dentcountyhealth.gov, 1 @@ -42078,13 +41426,13 @@ depoalabama.com, 1 depokcity.tk, 1 depolab.com, 1 +depolauncher.cf, 1 depone.net, 0 depoondemand.com, 1 depoone.com, 1 deporeporters.com, 1 deporeporters.info, 1 deported.ml, 1 -deportes.in, 1 deportescr.net, 1 deportestalcahuano.tk, 1 deportivo-pasto.tk, 1 @@ -42144,7 +41492,6 @@ derbylegalassistance.com, 1 derbymoneyman.com, 1 derbyshire-language-scheme.co.uk, 1 -derbyware.com, 1 derchris.me, 1 derdevel.de, 1 derdewereldrommelmarkt.nl, 1 @@ -42154,7 +41501,6 @@ derejilla.online, 1 derekandnikka.com, 1 derekgendron.com, 1 -derekkent.com, 1 dereklow.co, 1 derekseaman.com, 1 derekseaman.studio, 1 @@ -42165,6 +41511,7 @@ derguns.town, 1 derhaeuptling.de, 0 derhil.de, 1 +deriheruhotel.com, 1 derinforge.com, 1 derinforge.com.au, 1 derinsular.tk, 1 @@ -42200,7 +41547,6 @@ dermu.ai, 1 deroo.org, 1 deroo.tk, 1 -derou.com, 1 derp.army, 1 derp.chat, 1 derpibooru.org, 1 @@ -42208,7 +41554,7 @@ derpy.pp.ua, 1 derre.fr, 1 derreichesack.com, 1 -derricofinancialservices.com, 1 +derricofinancialservices.com, 0 derrigimlaghtokylemoregreenway.ie, 1 derriteice.com, 1 derrybasketball.tk, 1 @@ -42231,7 +41577,6 @@ desagaz.com, 1 desakatorock.tk, 1 desalas.org, 1 -desant.com, 1 desapego.com.br, 1 desarrollamosweb.com, 1 desarrollosintecsa.com, 1 @@ -42282,7 +41627,6 @@ design-production.jp, 1 design-tooning.de, 1 design-tricks.gq, 1 -design-verre-tasse-cafe.com, 1 design-your-life.info, 1 design2u.eu, 1 designacademy.nl, 1 @@ -42291,7 +41635,6 @@ designarea.tk, 1 designartepublicidad.com, 1 designbro.com, 1 -designburners.com, 1 designbymaja.no, 1 designbymargot.com, 1 designbymargot.fr, 1 @@ -42331,18 +41674,15 @@ designnprint.nl, 1 designpro.tk, 1 designsbyjanith.com, 1 -designscapessa.com, 1 designsingapore.org, 1 designsite.tk, 1 designsociety.tk, 1 designstripe.com, 0 designsystem.gov.scot, 1 -designtagebuch.com, 1 designtrc.com, 1 designville.cz, 1 designville.eu, 1 designville.sk, 1 -desimachines.com, 1 desimpelaere.eu, 1 desinfectantemanos.org, 1 desinfection-gale.fr, 1 @@ -42358,7 +41698,6 @@ desish.cf, 1 desitorrents.tv, 1 desivideos.tk, 1 -desize.com, 1 desk-mode.com, 1 deskaservices.com, 1 deskdesign.nl, 1 @@ -42398,7 +41737,6 @@ desteconsilium.be, 1 desteniiprocess.com, 1 destentor.nl, 1 -desteptarea.com, 1 desterman.ru, 1 desterrada.tk, 1 destguides.com, 1 @@ -42409,7 +41747,6 @@ destinopiriapolis.com, 0 destinotecnologico.ml, 1 destinovandelvira.es, 1 -destiny-homebuilders.com, 0 destiny.ws, 0 destinyofthephoenix.me, 0 destinypedia.com, 1 @@ -42470,7 +41807,6 @@ detki24.ru, 0 detodo24.com, 1 detoekomstvanorganisaties.nl, 1 -detoxic.vn, 1 detoxtorehab.com, 1 detrapdoor.com, 1 detrazioni.it, 1 @@ -42502,6 +41838,7 @@ deunopostenacional.com.br, 1 deurenfabriek.nl, 1 deuro.net, 1 +deurwaardersveilingen.nl, 1 deusarodrigues.com.br, 1 deustech-media.tk, 1 deustech.tk, 1 @@ -42511,7 +41848,6 @@ deutscheibank.com, 1 deutscher-bericht.de, 1 deutscherquidditchbund.de, 1 -deutsches-edelsteinhaus.com, 1 deutsches-schutzportal.de, 1 deutschland-dsl.de, 1 deutschlandreport.com, 1 @@ -42614,7 +41950,6 @@ devignstudios.co.uk, 1 devil-may-cry.tk, 1 devil-radio.tk, 1 -devil.wtf, 1 devilbyte.tk, 1 devildog.tk, 1 devillers-occasions.be, 0 @@ -42635,7 +41970,6 @@ devkid.net, 1 devksingh.com, 1 devlabroid.com, 1 -devletkarsiliyormu.com, 1 devlist.tk, 1 devlo.ai, 1 devloerkledenstudio.nl, 1 @@ -42800,6 +42134,7 @@ dg1298.com, 0 dg1jp-test.com, 1 dgaccess.com, 1 +dgahealth.com, 1 dgangsta.net, 1 dgap.org, 0 dgcoks.gov, 1 @@ -42837,7 +42172,6 @@ dgportals.co.uk, 1 dgpot.com, 1 dgpro.click, 1 -dgr-wpg.de, 1 dgries.de, 1 dgrj.com.br, 1 dgroups.org, 1 @@ -42891,7 +42225,6 @@ dhuy.net, 1 dhwx.de, 1 dhxxls.com, 1 -di-clinic.kz, 1 di2pra.com, 0 di2pra.fr, 0 dia-de.com, 1 @@ -42907,6 +42240,7 @@ diablos-obon.tk, 1 diabolic.chat, 1 diabos.biz, 1 +diabrowser.com, 1 diacritical.net, 1 diadiemdangsong.com, 1 diadorafitness.es, 1 @@ -42918,7 +42252,6 @@ diagnocentro.cl, 1 diagnoseo.com, 1 diagnoseo.se, 1 -diagnosingfiction.com, 1 diagnost-auto.com, 1 diagnostics.stream, 1 diagnostix.org, 1 @@ -42949,7 +42282,6 @@ diamantiques.com, 1 diamantovaburza.cz, 1 diameb.ua, 1 -diamgroup.pl, 1 diamond-hairstyle.dk, 1 diamond-reporting.com, 1 diamondblueair.com, 1 @@ -43015,7 +42347,6 @@ diasporan.ga, 1 diasporan.gq, 1 diasporan.ml, 1 -diaspordc.com, 1 diaszporaprojekt.org, 1 diatomenterprises.com, 1 diatr.us, 1 @@ -43042,10 +42373,8 @@ dicesites.com, 1 dicgaming.net, 1 dichanho.com, 1 -dichvuchuyentien247.com, 1 dichvudangkygiayphep.com, 1 dicio.com.br, 1 -dicionario.org, 1 dicionariodegirias.com.br, 1 dicionariodenomesproprios.com.br, 1 dicionariodesimbolos.com.br, 1 @@ -43086,7 +42415,6 @@ dictionarybook.org, 1 dictionaryofsydney.org, 1 dictionarypro.net, 1 -dictum-gardentools.com, 1 dictzone.com, 1 dida.xin, 1 didactic.ml, 1 @@ -43138,7 +42466,6 @@ dieecpd.org, 1 dieetfabels.tk, 1 diefan.com, 1 -dieffe.tech, 1 diefotogruppe.de, 1 diefreitagsfotografen.de, 1 diefreitagsphotografen.de, 1 @@ -43173,8 +42500,6 @@ dienmattroichonthanh.com, 1 dienna.nl, 1 diennhienshop.com, 1 -diennobi.com, 1 -dienstlister.de, 1 dienstplan.cc, 1 dierabenmutti.de, 1 dieradvies.nl, 1 @@ -43247,6 +42572,7 @@ digchip.org, 1 digchips.com, 1 digdata.de, 1 +digentra.com, 1 diggerlandusa.com, 1 digginsmo.gov, 1 dighans.com, 1 @@ -43262,7 +42588,6 @@ digibull.email, 1 digibull.gmbh, 1 digibull.link, 1 -digicamchart.com, 1 digicelidgy.com, 1 digicert-support.com, 1 digicert.com.ru, 1 @@ -43271,19 +42596,16 @@ digicomtel.com.br, 1 digicrew.com, 1 digidaigaku.com, 1 -digiec.in, 1 digifloat.io, 1 -digifood.com, 1 digifood.fr, 1 digifood.pro, 1 -digifun.store, 1 digig.es, 1 digigami.au, 1 digiischolarships.com, 1 digilabs.fr, 1 digiland.tk, 1 digilicious.com, 1 -digilock.com, 1 +digilock.com, 0 digimaat.agency, 1 digimagical.com, 1 digimen.cn, 1 @@ -43341,7 +42663,6 @@ digital-sculpture.org, 1 digital-vorwaerts.de, 1 digital-watchdog.com, 1 -digital.democrat, 1 digital.gov, 1 digital.govt.nz, 1 digital1st.co.uk, 1 @@ -43363,6 +42684,7 @@ digitalblood.eu, 1 digitalbox.jp, 0 digitalbridge.com, 1 +digitalbridge.com.au, 1 digitalbuero.eu, 1 digitalbuyer.com, 1 digitalcanvas.com.br, 1 @@ -43374,14 +42696,12 @@ digitalchefs.nl, 1 digitalchurch.ng, 1 digitalcircusmerch.com, 0 -digitalcitizen.life, 1 digitalcitizens.uk, 1 digitalcoffeepodcast.com, 1 digitalcolony.com, 1 digitalcomponents.de, 1 digitalconcrete.co.uk, 1 digitalcourage.de, 1 -digitalcrafter.eu, 1 digitalcraftmarketing.co.uk, 1 digitalcrisis.com, 1 digitalcrisis.us, 1 @@ -43418,6 +42738,7 @@ digitalfortress.tech, 1 digitalfoster.org, 0 digitalfury.co.uk, 1 +digitalgate.dk, 1 digitalgeek.social, 1 digitalgenius.com, 0 digitalgov.gov, 1 @@ -43481,7 +42802,7 @@ digitalredshirts.com, 0 digitalrights.center, 1 digitalroma.tk, 1 -digitalsafezm.com, 1 +digitalsafezm.com, 0 digitalscrapbookingstudio.com, 1 digitalsearchgroup.co.uk, 1 digitalsearchlab.com, 1 @@ -43507,6 +42828,7 @@ digitalvalue.es, 1 digitalwasteland.net, 0 digitalworkplaceforum.com.br, 1 +digitalzenworks.com, 1 digitalzylinder-shop.com, 1 digite.com, 1 digitec.ch, 1 @@ -43579,6 +42901,7 @@ diligence.cloud, 1 diligo.ch, 0 dilili.net, 1 +dilim.co.il, 1 dillewijnzwapak.nl, 1 dillonco.gov, 1 dillonm.io, 1 @@ -43591,7 +42914,6 @@ dimaweb.tk, 1 dimdata.com, 1 dime-staging.com, 1 -dimension-foot.com, 1 dimension-pc.com, 1 dimensionjapon.tk, 1 dimensions-ohs.com, 1 @@ -43640,7 +42962,6 @@ dind.one, 0 dinda.tk, 1 dindarkocer.tk, 1 -dindinet.de, 1 dindludovic.design, 0 dineatbuca.com, 1 dinebrands.com, 1 @@ -43672,7 +42993,6 @@ dinmtb.dk, 1 dinnerandmurder.com, 1 dinnerclub.tk, 1 -dinnerideashub.com, 1 dinocarrozzeria.com, 1 dinodata.de, 1 dinoplanners.com, 1 @@ -43700,6 +43020,7 @@ dioxido.com.ar, 1 dioxilife.com, 1 diozoid.com, 1 +dip.digital, 1 dipakgajjar.com, 1 dipalma.me, 1 dipanopaulista.com.br, 1 @@ -43792,7 +43113,6 @@ dirki.tk, 1 dirkjonker.nl, 1 dirkkok.nl, 1 -dirkmurschall.de, 1 dirko.net, 0 dirksencenter.org, 1 dirkwolf.de, 0 @@ -43855,7 +43175,6 @@ discdash.tk, 1 discgolf.com, 1 disciples.io, 1 -disciplescloud.com, 1 disciplesmakingdisciples.ca, 1 disco-crazy-world.de, 1 discodoener.de, 1 @@ -43869,7 +43188,7 @@ discord.do, 1 discord.gg, 1 discord.gift, 1 -discord.me, 1 +discord.me, 0 discord4j.com, 1 discordapp.gay, 1 discordbee.com, 1 @@ -43899,6 +43218,7 @@ discoverchinanow.ml, 1 discoverdanville.com, 1 discoverfloridasprings.com, 1 +discovergeorgesriver.com.au, 1 discoverglo.com, 1 discoverhealthage.com, 0 discoveringdocker.com, 1 @@ -43908,7 +43228,6 @@ discoverlutruwita.com, 1 discoverradiance.com, 1 discoverthehawkesbury.com.au, 1 -discoverthetech.com, 1 discoverthreejs.com, 1 discoverucg.co.uk, 1 discoverx.com, 1 @@ -44005,6 +43324,7 @@ disinfestazionivespe.milano.it, 1 disinfestazionizanzare.milano.it, 1 disinfestazionizanzare.roma.it, 1 +disinfo.eu, 1 disinisharing.com, 1 disisto-schiesser.com, 1 disisto.de, 1 @@ -44029,7 +43349,6 @@ diskuzeseznam.cz, 1 dislepsia.tk, 1 dismail.de, 1 -dismar.mx, 1 dismed.fr, 1 disneywallpapers.tk, 1 disobey.net, 1 @@ -44068,7 +43387,7 @@ distelbentelo.nl, 1 distelsdetails.com, 1 distempered.tk, 1 -disti.com, 0 +disti.com, 1 distilleren.tk, 1 distinctdesign2009.com, 1 distinguishedlegal.com, 1 @@ -44148,13 +43467,11 @@ divernonil.gov, 1 diversant.bg, 1 diverscott.com, 1 -diverse-cuts.com, 1 -diverse.systems, 1 +diverse-cuts.com, 0 diversificarte.com, 1 diversify.cf, 1 diversify.com, 1 diversify.ga, 1 -diversiteitsweek.nl, 1 diversity-otherwise.tk, 1 diversityflags.com.au, 1 diversityflags.nz, 1 @@ -44201,13 +43518,16 @@ divizja.tk, 1 divjak.at, 1 divo-remont.tk, 1 +divorce.com, 1 divorceattorneyshouston.com, 1 +divorcefiller.com, 1 divorceformsfiller.com, 1 divorcelawyer365.com, 1 divorceonline.com, 1 divorcewriter.com, 1 divort.org, 1 divstack.io, 1 +divulguemartin.shop, 1 divviup.org, 1 divvy.tk, 1 divyahindi.com, 1 @@ -44216,7 +43536,7 @@ dixeo.fr, 1 dixibox.com, 1 dixiepest.com, 1 -dixieweld.com, 1 +dixieweld.com, 0 dixoncountyne.gov, 1 dixonfireca.gov, 1 dixonmo.gov, 1 @@ -44232,10 +43552,10 @@ diyeat.com, 1 diyeta.cf, 1 diyeventhire.co.nz, 1 +diyform.me, 1 diymediahome.org, 1 diysec.tk, 1 diyzealot.com, 1 -diyzone.info, 0 dizainkyhni.ml, 1 dizalty-cloud.com, 1 dizayner.tk, 1 @@ -44257,10 +43577,11 @@ dj-leszwolle.nl, 1 dj-morfu.tk, 1 dj-ocean.tk, 1 +dj-oxyd.com, 1 dj-phil.fr, 1 dj-schoolzwolle.nl, 1 dj-wout.tk, 1 -dj-x.info, 0 +dj-x.info, 1 dj16888a.com, 1 dj16888b.com, 1 dj16888c.com, 1 @@ -44390,6 +43711,7 @@ djpromo.tk, 1 djpump-diaphragmpump.com, 1 djpyerr.tk, 1 +djquartz.ca, 1 djramage.tk, 1 djrider.tk, 1 djrizwan.tk, 1 @@ -44420,6 +43742,7 @@ djsp.uk, 1 djsp.work, 1 djspacies.com, 1 +djswebserver.com, 1 djt-vom-chausseehaus.de, 1 djtavo.tk, 1 djthibodeau.com, 1 @@ -44444,7 +43767,6 @@ dk1818.cc, 1 dk7.com, 1 dk7.vip, 1 -dkay.me, 1 dkbilliards.com, 1 dkcoks.gov, 1 dkcomputers.com.au, 1 @@ -44482,14 +43804,15 @@ dl-protect.tk, 1 dl.google.com, 1 dl444.net, 1 +dlabs.codes, 1 dlaces.it, 1 dlagos.com, 1 dlandroid24.com, 1 dlangbajn.com, 1 dlangbajn.com.br, 1 -dlatego.com, 1 dlazmyslow.pl, 1 dlbouncers.co.uk, 1 +dlclientportal.com, 1 dlcompare.co.uk, 1 dlcompare.com, 1 dlcompare.de, 1 @@ -44506,7 +43829,6 @@ dlf.exchange, 1 dlford.io, 1 dlfsymposium.nl, 1 -dlgf.com, 1 dline.co.in, 1 dlitz.net, 1 dll4free.com, 1 @@ -44514,7 +43836,6 @@ dlld.com, 1 dlld.org, 1 dlld.us, 1 -dllsearch.net, 1 dlmarket.jp, 1 dlmeto.com, 1 dlouwrink.nl, 0 @@ -44576,7 +43897,6 @@ dmarcsentry.com, 1 dmarctester.com, 1 dmarcvendors.com, 1 -dmarkmobile.com, 1 dmautomek.no, 1 dmbins.com, 1 dmbvideo.com, 1 @@ -44603,7 +43923,6 @@ dmg.st, 1 dmhomedesign.pl, 1 dmhoteles.pe, 1 -dmhy.com, 1 dmi.es, 1 dmi.gov.lb, 1 dmiapis.id, 1 @@ -44616,7 +43935,6 @@ dmitrysnotes.ru, 1 dmitrysyrov.com, 1 dmix.ca, 1 -dmkuchnie.pl, 1 dmlaser.nl, 1 dmlive.wiki, 1 dmma.be, 1 @@ -44638,6 +43956,7 @@ dmshynk.com, 1 dmslog.com, 1 dmslog.com.br, 1 +dmsolutions.pt, 1 dmstechnology.com, 1 dmtcustoms.co.za, 1 dmtn1.com, 1 @@ -44664,7 +43983,6 @@ dnash.tk, 1 dnatechnology.io, 1 dnb.co.in, 1 -dnb.dk, 1 dnb.no, 1 dnb.se, 1 dnbalpha.com, 1 @@ -44754,13 +44072,11 @@ dnspod.ml, 1 dnspropagation.net, 1 dnsrate.com, 1 -dnsrevolve.com, 1 dnsscience.org, 1 dnssec.au, 1 dnssecandipv6.se, 1 dnssecunsigned.com, 1 dnssex.com, 1 -dnsspeed.com, 1 dnstwister.report, 1 dnsvrfy.com, 1 dnsvrfy.eu, 1 @@ -44775,6 +44091,7 @@ do.ne, 1 do.search.yahoo.com, 0 do13.net, 1 +do1e.cn, 1 do67.de, 1 do67.net, 1 doalo.fr, 1 @@ -44787,9 +44104,9 @@ dobledemichaeljackson.tk, 1 doblejewel.shop, 1 dobleseo.pro, 1 +doblot.com, 1 dobookmark.ml, 1 doboszynski.com, 1 -dobraklinika.com, 1 dobraprace.cz, 0 dobrekupony.cz, 1 dobrekupony.pl, 1 @@ -44829,7 +44146,6 @@ docendo.es, 1 docesmartini.com.br, 1 docfliq.com, 1 -docfusioncloud.com, 1 docguide.com, 1 docha.tk, 1 dochescu.com, 1 @@ -44856,7 +44172,6 @@ docquity.com, 1 docs-kelis.fr, 1 docs.google.com, 1 -docs.moe, 1 docs.python.org, 1 docs.tw, 1 docsend.com, 1 @@ -44865,6 +44180,7 @@ docsunited.net, 1 docswallet.com, 1 doctabaila.com, 1 +doctacomunicazione.it, 1 doctaforum-diferidos.com, 1 doctaforum-events.org, 1 docte.ch, 1 @@ -44912,7 +44228,6 @@ docugate.cloud, 1 docugatetest.cloud, 1 documaniatv.com, 1 -document-translation-nationwide.com, 1 documentat.ga, 1 documentations-sociales.com, 1 documentationsite.net, 1 @@ -44961,7 +44276,6 @@ dodolle.co.uk, 1 dodotool.com, 1 dodotool.ru, 1 -doeasy.com, 1 doedelzakken-jsh.tk, 1 doegirls.com, 1 doehle-group.com, 1 @@ -44975,17 +44289,14 @@ doelhypotheek.nl, 1 doelhypotheken.nl, 1 doemeemetparta.nl, 1 -doencadobeijo.com, 1 doener-curator.com, 1 doenets.lk, 1 doenjoylife.com, 1 doeprojects.com, 1 doernergoldberg.com, 1 -doesinfotech.com, 1 doesmycodehavebugs.today, 1 doetwat.nl, 1 dofashion.tk, 1 -dofedex.com, 1 dofrancais.com, 1 dofus-aide.tk, 1 dofus.market, 1 @@ -45013,7 +44324,6 @@ dogfriendly.co.uk, 1 doggingclub.tk, 1 doggo-staging.herokuapp.com, 1 -doggyzine.com, 1 doghandling.tk, 1 doghome.com, 1 doghousedigital.com, 1 @@ -45022,7 +44332,6 @@ dogite.org, 1 doglifejacket.tk, 1 doglist.ga, 1 -doglog.com, 1 dogma.it, 1 dogma2000.tk, 1 dogmagic.tk, 1 @@ -45056,7 +44365,6 @@ doihavetoputonpants.com, 1 doineedanmdm.com, 1 doinwp.com, 1 -doioig.gov, 0 doist.com, 1 doit-intl.com, 1 doit.com, 1 @@ -45227,7 +44535,6 @@ domeindns.nl, 1 domeinhub.nl, 1 domeinquarantaine.nl, 1 -domekklimkowka.com, 1 domen-reg.ru, 1 domenaru.ga, 1 domenesikkerhet.no, 1 @@ -45316,7 +44623,6 @@ domremy.catholic.edu.au, 1 domsamogona.ru, 1 domscripting.com, 1 -domt.com, 1 domu.ro, 1 domus-global.com, 1 domus-global.cz, 1 @@ -45361,7 +44667,6 @@ donate.lol, 1 donateabox.org, 1 donateaday.net, 1 -donateers.org, 1 donateforcharity.com, 1 donatellapratas.com.br, 1 donateway.com, 1 @@ -45391,12 +44696,12 @@ dongcdn.com, 1 dongdaeyecenter.com.tw, 1 donge.fr, 1 +dongen.me, 1 donggala.go.id, 1 dongha.org, 1 donghochinhhang.store, 1 donghua-europe.com, 1 donghuapiandaquan.com, 1 -dongjian.com, 1 dongjing.re, 1 dongor.tk, 1 donhoward.org, 0 @@ -45407,10 +44712,8 @@ donkerslootjes.nl, 1 donkeytrekkingkefalonia.com, 1 donnaandscottmcelweerealestate.com, 1 -donnabotanica.com.br, 1 donnabrothers.com, 1 donnabuswell.com, 1 -donnacha.blog, 1 donnachie.net, 1 donnahay.com.au, 1 donnanovak.com, 1 @@ -45505,10 +44808,12 @@ doop.im, 1 doorchaser.tk, 1 doorcountycoffee.com, 1 +doordash.blue, 1 doordash.com, 1 doordash.news, 1 doordash.red, 1 doordash.team, 1 +doordrishti.biz, 1 doorframe.com, 1 doorgeefcadeau.nl, 1 doorin.tk, 1 @@ -45547,7 +44852,6 @@ doradoscampeon.tk, 1 doraemonchile.tk, 1 dorama.gq, 1 -doramaflix.site, 1 doramamusic.gq, 1 doramiru.com, 1 dorams.one, 1 @@ -45560,7 +44864,7 @@ dorfkultur.net, 1 dorfzittig.de, 1 dorganico.cl, 1 -dorhandverkeren.no, 1 +dorhandverkeren.no, 0 doriangardes.fr, 1 dorianharmans.nl, 1 dorianmuthig.com, 1 @@ -45579,6 +44883,7 @@ dormiu.com, 1 dormiu.com.br, 1 dormkitty.com, 1 +dornesolutions.co.za, 1 dorogaminina.tk, 1 dorotaorlowska.pl, 1 dorotheahilti.com, 0 @@ -45639,7 +44944,6 @@ dotadotaman.tk, 1 dotatic.com, 1 dotbox.org, 1 -dotbuzzinfo.com, 1 dotcash.jp, 1 dotcircle.co, 0 dotcomdesigns.biz, 1 @@ -45666,7 +44970,6 @@ dotlimino.tk, 1 dotnetfoundation.org, 0 dotnetsandbox.ca, 1 -dotnext-europe.com, 1 dotovh.ovh, 1 dotphoto.com, 1 dotplex.com, 1 @@ -45757,6 +45060,9 @@ doutorapostas.com, 1 doutorapostas.pt, 1 douyin.com, 1 +douyinec.com, 1 +douyinmusicpromotion.com, 1 +douyinpay.com, 1 douzer.de, 1 douzer.earth, 1 douzer.industries, 1 @@ -45770,7 +45076,6 @@ dovecraft.com.ua, 1 dovemoe.com, 1 dovenzorgmalawi.nl, 1 -doverfcu.com, 1 doverma.gov, 1 dovermotion.com, 1 doverye.tk, 1 @@ -45861,13 +45166,13 @@ doyoulyft.com, 1 doypacky.cz, 1 doze-cloud.tech, 1 +dozecloud.com, 1 dozen-donuts.com, 1 dozor.ga, 1 dozor.gq, 1 dozor.tk, 1 dozorro.org, 1 dp-clan.tk, 1 -dp-films.de, 1 dp.cx, 1 dp7.ro, 1 dpantry.com, 1 @@ -45889,7 +45194,6 @@ dperkins.org, 1 dperson.net, 1 dpeter.me, 1 -dpfsolutionsfl.com, 1 dpg.no, 1 dphipartner.com, 1 dpid.org, 1 @@ -45922,7 +45226,6 @@ dpucarriersma.gov, 1 dr-amar.tk, 1 dr-beyer.de, 1 -dr-dedet.com, 1 dr-detailing.com, 1 dr-ermilov.com, 1 dr-feldman.com, 1 @@ -45949,11 +45252,9 @@ draagmerriecentrale.nl, 1 drabbin.com, 1 drabim.org, 1 -drace.biz, 1 dracheisolation.tk, 1 drachenleder.de, 1 dracisvet.cz, 1 -dracollectors.com, 1 draconiusgo.com, 1 dracoon.team, 1 dracula.city, 1 @@ -45983,7 +45284,6 @@ dragonbike.by, 1 dragonboatfestival.tk, 1 dragonbox.de, 1 -dragoncave.me, 1 dragoncityhack.tips, 1 dragonclicker.ml, 1 dragonesymazmorras.tk, 1 @@ -45999,7 +45299,6 @@ dragonqueen.fi, 1 dragonradar.tk, 1 dragonraja.tk, 1 -dragonreal.estate, 1 dragonroost.tk, 1 dragonscale.tk, 1 dragonsgate.ml, 1 @@ -46042,6 +45341,7 @@ dramaqueer.ch, 1 dramaslayer.ga, 1 dramatherapie.tk, 1 +dramaticaudio.com, 1 dramaticpeople.com, 1 drambikarathi.com, 1 dramyalderman.com, 1 @@ -46064,7 +45364,6 @@ drasoclothes.com, 1 drastic-ds.com, 1 drastik.cz, 1 -drasyl.org, 0 drata.com, 1 drathaisdentista.com.br, 1 dratini0.hu, 1 @@ -46073,6 +45372,8 @@ draup.com, 0 draussen.tk, 1 dravalance.com, 1 +dravengard.com, 1 +dravengard.de, 1 draw-bonus.ml, 1 draw.uy, 1 drawbridgeconnect.com, 1 @@ -46154,11 +45455,8 @@ dreaminformatique.tk, 1 dreaming.solutions, 1 dreaminjewelz.tk, 1 -dreamj.com, 1 dreamland.sh, 1 -dreamlanddrifters.com, 1 dreamlandmagic.com, 1 -dreamlandsdesign.com, 1 dreamlifeproperty.cf, 1 dreamlight.cloud, 1 dreamlinks.tk, 1 @@ -46257,18 +45555,18 @@ drfrey.ch, 0 drfuhrman.com, 1 drgabrielschmitt.com, 1 +drgcomunicazione.it, 1 drglennlyle.com, 1 drgn.li, 1 drgn.no, 1 -drgns.space, 1 drgolshani.com, 1 drguyfacialplastics.com, 1 drhathazi.hu, 1 drheibel.com, 1 drhildebrand.net, 1 +drhiteshpatel.in, 1 drhogarth.co.uk, 1 drhopeson.com, 1 -drhosting.com, 1 drhouserepairs.com, 1 drianpublishing.tk, 1 drica.tk, 1 @@ -46332,7 +45630,6 @@ drinkplanet.eu, 1 drinks.my, 1 drinksontap.co.uk, 1 -dripship.club, 1 dripshop.live, 1 drison.com, 1 drissner.me, 1 @@ -46342,7 +45639,6 @@ driveandpark.it, 1 driveandpark.nl, 1 drivebespokelab.media, 1 -driveblog.com, 1 drivebolt.co.uk, 1 drivechat.com.au, 1 drivecrestwood.com, 1 @@ -46368,7 +45664,6 @@ driver.ru, 1 driveral.com, 1 driveral.hu, 1 -driverhome.com, 1 drivermerkezi.tk, 1 driverscollection.com, 1 drivestarfreight.com, 1 @@ -46378,7 +45673,6 @@ drivingacademy.tk, 1 drivingcalculator.ga, 1 drivinginstruction.tk, 1 -drivingschoolnearmelbourne.com.au, 1 drivio.co.uk, 1 drivio.uk, 1 drivya.be, 1 @@ -46442,7 +45736,6 @@ droidwiki.de, 1 droit-collaboratif.org, 1 droitalecole.org, 1 -droitdunet.fr, 1 dromax.hu, 1 dromotique.com, 1 dronalti.fr, 1 @@ -46467,10 +45760,8 @@ dronesquadcoptersales.ga, 1 droneup.pl, 1 droneways.tech, 1 -drongea.com, 1 dronix.tk, 1 dronografia.es, 0 -droom.in, 1 droomhuis-in-zuid-holland-kopen.nl, 1 drop-zone.tk, 1 drop.com, 1 @@ -46507,6 +45798,7 @@ drpetervoigt.ddns.net, 1 drpetervoigt.de, 1 drpure.top, 1 +drpvtipc.net, 1 drradin.com, 1 drricardofretes.com, 1 drros.ru, 1 @@ -46544,7 +45836,6 @@ drtimothysteelvideos.com, 1 drtomson.ee, 1 drtragency.com, 1 -drtrupiano.com, 1 drtsaiclinic.com, 1 drtti.io, 1 drturner.com.au, 1 @@ -46581,7 +45872,6 @@ drunkendropkes.tk, 1 drupal.org, 1 drupalfr.be, 1 -drupi.com, 1 drusantia.net, 1 drusillas.co.uk, 1 druwe.net, 0 @@ -46602,6 +45892,7 @@ dry-cleaning.tk, 1 dryashplasticsurgery.com, 1 dryasinakgul.com, 1 +dryasserbadran.com, 1 drybjed.net, 1 drycreekphoto.com, 1 dryerrepairaustin.com, 1 @@ -46613,7 +45904,7 @@ dryskin.gq, 1 dryskin.ml, 1 dryskin.tk, 1 -drywall.com.co, 1 +dryusdan.space, 1 drywallresponse.gov, 1 dryzgov.tk, 1 drzhnn.com, 1 @@ -46709,6 +46000,7 @@ dsyunmall.com, 1 dt-privacyportal-ui.azurewebsites.net, 1 dt2rmc.pt, 1 +dtacogo.eu, 1 dtail-platform.com, 1 dtbafrica.com, 1 dtbckp.com, 1 @@ -46767,13 +46059,10 @@ dualexistence.xyz, 1 dualias.xyz, 0 dualize.io, 1 -dualpad.com, 1 dualuniverse.game, 1 duama.top, 1 duanemorrisinstitute.com, 1 duanre.tk, 1 -duanyong.com, 1 -duaputra.my.id, 1 duarteeleiteconsultoria.com.br, 1 dubachinn.com, 1 dubai-realestate.space, 1 @@ -46892,7 +46181,7 @@ dugnet.tech, 0 dugongconservation.org, 1 dugongo.tk, 1 -dugoutsports.com, 1 +dugoutsports.com, 0 duh.se, 1 duhanic.com, 1 duhanic.de, 1 @@ -46942,7 +46231,6 @@ dumbcryptopunks.com, 1 dumbdrinker.com, 1 dumbeartech.com, 1 -dumberger-bau.de, 1 dumbfunded.co.uk, 1 dumek.com, 1 dumek.it, 1 @@ -47006,7 +46294,6 @@ duoqichina.cn, 1 duoqichina.com, 1 duoquadragintien.fr, 1 -duoyin.com, 1 dup15q.org, 1 dupagecounty.gov, 1 dupagecourts.gov, 1 @@ -47017,14 +46304,11 @@ duplika.com, 1 dupree.pe, 1 dupuis.xyz, 1 -duqu.com, 1 duquess.com.br, 1 duquoinil.gov, 1 dura.si, 1 durabletravailler.tk, 1 duracell.com, 1 -durad.in.rs, 1 -durad.xyz, 1 duraes.pt, 0 durakinesis.tk, 1 duraklari.net, 1 @@ -47039,7 +46323,6 @@ durangonorthstar.com, 1 durantok.gov, 1 durastudio.com, 1 -durbeen.pk, 1 durcal.tk, 1 durchblick-shop.de, 1 durcoin.org, 1 @@ -47049,7 +46332,6 @@ durhammoneyman.com, 1 durhamnh.gov, 1 duria.de, 1 -duriandelivery.net, 1 durianexpressdelivery.com.sg, 1 duriantech.net, 1 duriemas.com, 1 @@ -47067,6 +46349,7 @@ duskraven.tk, 1 dusmomente.com, 1 dusnan.com, 1 +dusonchet-construction.ch, 1 dust.bio, 1 dust.tk, 1 dust4you.tk, 1 @@ -47099,7 +46382,6 @@ dutchcichlidplanet.tk, 1 dutchcloudcommunity.nl, 1 dutchconcreations.com, 1 -dutchdesignoffice.nl, 1 dutchdevelapp.nl, 1 dutchdungeon.tk, 1 dutchessuganda.com, 1 @@ -47146,13 +46428,11 @@ duxbury-ma.gov, 1 duxi-s-feromonami.ga, 1 duysondang.name.vn, 1 -duyue.com, 1 duzavo.cz, 1 duzcehaberleri.tk, 1 duzcesondakika.tk, 1 dv-project.ru, 1 dvb-fachverband.de, 1 -dvbag.com, 1 dvbris.co.uk, 1 dvbris.com, 1 dvbtmap.eu, 1 @@ -47166,7 +46446,6 @@ dvdland.com.au, 1 dvdmania.ga, 1 dvdmusic.ga, 1 -dvdo.biz, 1 dvdrein.net, 1 dvds.casa, 1 dveretti.com, 0 @@ -47195,7 +46474,6 @@ dwarkin.com, 1 dwavgs888.store, 1 dweilorkest-frederikshaven.tk, 1 -dwgconverter.com, 1 dwgeneralcontractors.com, 1 dwgf.xyz, 1 dwienzek.de, 1 @@ -47300,8 +46578,8 @@ dynamicdiesupply.com, 1 dynamicenergy.co, 1 dynamicengine.com, 1 +dynamicfireworks.co.uk, 1 dynamicini.org, 1 -dynamiclogodesigns.com, 1 dynamicnet.net, 1 dynamicpl.us, 1 dynamicplus.it, 1 @@ -47325,6 +46603,7 @@ dynasty-warriors.net, 1 dynastyredzone.com, 1 dynatos-cloud.com, 1 +dyndns.au, 1 dyneco.io, 1 dynet.ru, 1 dynn.be, 0 @@ -47350,7 +46629,6 @@ dysthymia.com, 1 dyuimovochka.tk, 1 dyve.me, 1 -dywt.com, 1 dyykkarit.tk, 1 dyyn.de, 1 dz-hip.ag, 1 @@ -47429,11 +46707,12 @@ dziurdzia.pl, 1 dziv.net, 1 dzivniekubriviba.lv, 0 +dzlie.com, 1 dzmonarchie.tk, 1 +dzna.org, 1 dzndk.com, 1 dzndk.net, 1 dzndk.org, 1 -dzogchentoday.org, 1 dzomo.org, 0 dzpc3.site, 1 dzsi.bi, 1 @@ -47456,7 +46735,6 @@ e-beyanname.com.tr, 1 e-beyanname.net.tr, 1 e-bill.ovh, 1 -e-biofire.gr, 1 e-blueprint.co.uk, 1 e-bodybuilding.tk, 1 e-boekhouden.nl, 1 @@ -47523,6 +46801,7 @@ e-jasiecki.pl, 1 e-jewelrys.tk, 1 e-kartinki.tk, 1 +e-keks.de, 1 e-klempir.cz, 1 e-knitting.tk, 1 e-knitwear.tk, 1 @@ -47587,7 +46866,6 @@ e-shobai.com, 1 e-shonai.com, 1 e-sisyu.com, 0 -e-sklep.biz, 1 e-slots.tk, 1 e-smile.tk, 1 e-sneakers.tk, 1 @@ -47671,6 +46949,7 @@ e9297.co, 1 e9582.com, 1 e9728.co, 1 +ea-mtp.com, 1 ea-ru.org, 1 ea2drocks.com, 1 eaa-online.org, 1 @@ -47693,7 +46972,7 @@ eaglecounty.gov, 1 eaglecountyco.gov, 1 eaglecrest.us, 1 -eaglecustomapparel.com, 1 +eaglecustomapparel.com, 0 eagleeye.news, 1 eagleeyetrip.ru, 1 eaglefireid.gov, 1 @@ -47716,6 +46995,7 @@ eaglevilletn.gov, 1 eaglewreck.info, 1 eagleyecs.com, 1 +eagrants.com, 1 eahea.org, 1 eaimty.com, 1 eaip.aero, 1 @@ -47731,6 +47011,7 @@ eaktarim.com, 1 ealadel.com, 0 ealarm-safemode.ch, 1 +ealawfirmportal.com, 1 ealc.aero, 1 ealc.lu, 1 ealekseyev.ml, 1 @@ -47796,6 +47077,7 @@ earthpixz.com, 1 earthpoints.org, 1 earthquake.gov, 1 +earthsalala.com, 1 earthshotprize.org, 1 earthsocialism.org, 1 earthsolidarity.org, 1 @@ -47806,11 +47088,13 @@ earthytales.in, 1 eas.ee, 0 ease.io, 0 +easel.engineering, 1 easew.com, 1 eashwar.com, 1 easiest-way.de, 1 easlerlaw.com, 1 easol.com, 1 +east-front-miniatures.com, 1 east-line.su, 1 east-westlogistics.com, 1 eastafricafeed.ga, 1 @@ -47849,7 +47133,6 @@ eastmaintech.com, 1 eastman.com, 1 eastmedo.pl, 1 -eastnorschool.co.uk, 1 easton.fun, 1 easton.ga, 1 eastonpaxtongolf.com, 0 @@ -47868,7 +47151,6 @@ eastspencer.gov, 1 eaststudios.net, 1 easttamakiauto.co.nz, 1 -easttea.com, 1 easttowereg.com, 1 eastvalleyendo.com, 1 eastvalleywater.gov, 1 @@ -47897,6 +47179,7 @@ easy2bathe.co.uk, 1 easyaccounting.asia, 1 easyadsnbanners.tk, 0 +easyauth.ch, 1 easybank.at, 1 easybaufi.com, 1 easybill.de, 1 @@ -47940,7 +47223,6 @@ easyit.ga, 1 easyit.tk, 1 easyjumping.tk, 1 -easykarao.pk, 1 easykash.net, 1 easykonto.de, 0 easylife365.cloud, 1 @@ -47963,7 +47245,6 @@ easypets.fr, 0 easypost.com, 1 easypractice.net, 1 -easyps.com, 1 easypv.ch, 1 easyqr.codes, 0 easyradio.gq, 1 @@ -48110,6 +47391,7 @@ eblesoft.org, 1 eblog.cf, 1 eblog.ink, 0 +ebmeester.nl, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebolavirus.tk, 1 @@ -48186,11 +47468,9 @@ eccoholiday.com, 1 eccoilmenu.it, 1 eccologic.net, 1 -eccoplastic.com, 1 eccouncil.org, 1 eccu.edu, 1 ecdn.cz, 1 -ecdonline.co.za, 1 ecdpm.org, 1 ece-inc.net, 1 ecelembrou.ovh, 1 @@ -48315,7 +47595,6 @@ ecodesign-labo.jp, 1 ecodesigns.nl, 1 ecodrive.in.ua, 1 -ecoefficience.com, 1 ecoelectricsandiego.com, 1 ecoeuropa.cf, 1 ecofinancing.com, 1 @@ -48381,7 +47660,6 @@ ecompen.co.za, 1 ecomsight.com, 0 ecomuuu.com, 1 -ecomvivid.com, 1 ecomweb.ro, 0 econativa.pt, 1 econcept.li, 1 @@ -48403,6 +47681,8 @@ economizaplay.com.br, 1 economycarrentalscyprus.com, 1 economydiva.com, 1 +economyinnfortsmith.com, 1 +economyinnindianapolis.com, 1 econsorzio.com, 1 econstitution.bg, 1 econsumer.gov, 1 @@ -48412,7 +47692,7 @@ ecopath.org, 1 ecopiscines.fr, 1 ecopond.co.nz, 1 -ecopowerenginewash.com, 1 +ecopowerenginewash.com, 0 ecopoweroil.com, 1 ecopy.ir, 1 ecorak.de, 1 @@ -48511,7 +47791,6 @@ edapt.org.uk, 1 edarabia.com, 1 edas.info, 0 -edatech.com, 1 edb.gov.sg, 1 edboothandassociates.com, 1 edc-msp.com, 1 @@ -48535,6 +47814,7 @@ edeals.com.co, 1 edeca.net, 1 ededdeddy.tk, 1 +ededoc.fr, 1 edegembicycleclub.tk, 1 edegulkoyu.tk, 1 edeka-peper.de, 1 @@ -48581,7 +47861,7 @@ edgeconnectnj.net, 1 edgecustomersportal.com, 1 edgeimpulse.com, 1 -edgeinteriors.nz, 1 +edgeinvestments.estate, 1 edgeless.pp.ua, 0 edgelogs.com, 1 edgemagazine.net, 1 @@ -48648,7 +47928,6 @@ editspace.tk, 1 editus.it, 1 edityeet.com, 1 -edje.com, 0 edjo.us, 1 edl.com.ph, 1 edlinger.at, 1 @@ -48717,7 +47996,6 @@ edublognews.tk, 1 edubox.pt, 1 educabis.tk, 1 -educacionit.com, 1 educacionnm.ml, 1 educacionvirtual.com.ar, 1 educaenvivo.com, 1 @@ -48733,7 +48011,6 @@ educationboard.ml, 1 educationcluster.net, 1 educationconnect.tk, 1 -educationcounsel.com, 1 educationdepartment.ml, 1 educationet.tk, 1 educationfinancenetwork.org, 1 @@ -48748,7 +48025,6 @@ educationstatistic.tk, 1 educationstudent.tk, 1 educationsupport.org.uk, 0 -educationtechblog.com, 1 educationtopics.tk, 1 educationtree.tk, 1 educationtrust.tk, 1 @@ -48769,6 +48045,7 @@ edugain.org, 1 edugeton.com, 1 edugram.com, 1 +eduhk.hk, 1 eduhub.ml, 1 eduhublisbon.com, 1 eduid.se, 1 @@ -48783,7 +48060,6 @@ edumanage.tk, 1 edumaritime.net, 1 edumerson.com, 1 -edumint.lt, 1 edunaut.com.au, 1 edunet.gq, 1 edunian.com, 1 @@ -48816,7 +48092,6 @@ edv-biela.de, 1 edv-datenservice.at, 1 edv-lehrgang.de, 1 -edv-ringhofer.de, 1 edvan.com.br, 1 edvberger.com, 1 edvestinu.com, 1 @@ -48847,6 +48122,7 @@ edytabania.com, 1 edzo.dk, 1 ee-terminals.com, 1 +ee4j.org, 1 ee5197.co, 1 ee6729.co, 1 ee6957.co, 1 @@ -48905,6 +48181,7 @@ eezoublog.com, 1 ef.gy, 1 efaas.nl, 1 +efactuurdirect.nl, 1 efag.com, 1 efapodcast.com, 1 efcross.com, 1 @@ -48990,6 +48267,7 @@ efp.nl, 1 efran-eliyev.gq, 1 efre-bw.de, 1 +efsalon.net.pe, 1 efsanesi.tk, 1 eft.boutique, 1 eftcorp.biz, 1 @@ -49114,7 +48392,6 @@ egytimes.tk, 1 egzekucija.tk, 1 egzotikusfuszerek.hu, 1 -egzotique.com, 1 eh-huebner-stiftung.de, 1 ehaccp.it, 1 ehachettefle.com, 1 @@ -49191,6 +48468,7 @@ eigentech.com, 1 eigenvector.systems, 1 eightballde.luxe, 1 +eightshades.com, 1 eightvirtues.tk, 1 eighty-aid.com, 1 eightysoft.de, 1 @@ -49244,7 +48522,6 @@ einvestment.com, 1 einwie.com, 1 eipp99.com, 1 -eirastudios.co.uk, 1 eirb.fr, 1 eirgroup.com.au, 1 eirik.eu, 1 @@ -49338,6 +48615,7 @@ ekmanager.tk, 1 ekmo.cz, 1 eko69.pl, 1 +ekoazyl.pl, 1 ekobudisantoso.net, 1 ekocleaningllc.com, 1 ekoclin.com, 1 @@ -49436,6 +48714,7 @@ elbiaadmin.sk, 1 elbiahosting.sk, 1 elbir.tk, 1 +elblogdeldev.es, 1 elblogdeldinero.com, 1 elblogdezoe.es, 1 elblok.com, 1 @@ -49512,6 +48791,7 @@ eldoradotechnical.com, 1 eldrid.ge, 1 ele-sm.com, 1 +eleanor-cms.com, 1 eleanorleightrio.com, 1 elearning.taipei, 1 elearningi.pl, 1 @@ -49519,6 +48799,7 @@ eleather.it, 1 elecbuz.com, 0 eleconomista.com.ar, 1 +electa-sourcing.com, 1 electerious.com, 1 electicofficial.com, 0 electionpresidentiellegabon2009.ga, 1 @@ -49531,7 +48812,6 @@ electionsshelbytn.gov, 1 electmikewaters.com, 1 electr0sheep.com, 1 -electra.co.nz, 1 electrabmc.com, 1 electragirl.com, 1 electrans.es, 1 @@ -49564,7 +48844,6 @@ electricgypsies.nl, 1 electrichome.fr, 0 electriciancenturion24hours.co.za, 1 -electricianforum.co.uk, 1 electriciannewburypark.com, 1 electricianpacificpalisades.com, 1 electricianpretoria24-7.co.za, 1 @@ -49656,7 +48935,6 @@ elektiriklidireksiyontamiri.com, 1 elektiriktasarruf.tk, 1 elektrac.cz, 1 -elektriker-frankfurt.eu, 1 elektriker-notdienst-zentrale.de, 1 elektrilevi.ee, 1 elektrilevi.eu, 1 @@ -49710,6 +48988,7 @@ elektrotechnik-kaetzel.de, 1 elektrotechnik-schreck.de, 1 elektrotechnik-schwab.de, 1 +elektrotechniker-beck.de, 1 elektrownie-tanio.net, 1 elektryczka.pl, 1 elelenin.cf, 1 @@ -49814,10 +49093,8 @@ elev8fashion.ca, 1 elevacionesrama.com, 1 elevanhairdressing.co.uk, 1 -elevatedinteriors.org, 1 elevateservices.com, 1 elevatewebdesigns.com, 1 -elevationcreative.net, 1 elevationplumbingandheating.com, 1 elevator.ee, 1 elevatoraptitudetest.com, 1 @@ -49827,6 +49104,7 @@ elevenensemble.tk, 1 eleventhhouraltar.com, 1 eleventhhourwatch.com, 1 +elever-events.com, 1 elexel.ru, 1 elexon.co.uk, 1 elexprimidor.com, 1 @@ -50094,6 +49372,7 @@ elmo.ee, 1 elmolar.tk, 1 elmolist.tk, 1 +elmostashar.site, 1 elmresan.ir, 1 elmundodeloso.tk, 1 elmwoodmi.gov, 1 @@ -50109,7 +49388,6 @@ elodieclerc.ch, 1 elodrias.de, 1 elog.tokyo, 1 -eloiseponnau.com, 1 elok.eu.org, 1 elon.gov, 1 elona-wvw.de, 1 @@ -50120,7 +49398,6 @@ elorrieta.eus, 1 elosoavila.tk, 1 elovip.com.br, 1 -eloxt.com, 1 elpac.info, 1 elpactest.com, 1 elpactest.eu, 1 @@ -50168,7 +49445,6 @@ elsg.co.uk, 1 elshop1eu.com, 1 elshou.com, 1 -elsoundspeakers.com, 1 elstravato.com, 1 elsuccionador.com, 1 elsvanderlugt.nl, 1 @@ -50177,7 +49453,6 @@ elsword.moe, 0 elsylist.com, 1 eltair.com, 1 -eltar.pl, 1 eltconsultants.com.mx, 1 eltec.es, 1 eltern-verein.ch, 1 @@ -50189,7 +49464,7 @@ eltjon.duckdns.org, 1 eltlaw.com, 1 elto.ch, 0 -eltohsurgery.com.sg, 1 +eltohsurgery.com.sg, 0 eltonpastilha.me, 1 eltormo.tk, 1 eltoroweakly.com, 1 @@ -50235,6 +49510,8 @@ elysium.coop, 1 elysiumware.com, 1 elyx70days.org, 1 +elz-ergotherapie.de, 1 +elzoo.shop, 1 em-biotek.cz, 0 em-racing.com, 1 em-racing.de, 1 @@ -50256,7 +49533,6 @@ emailable.com, 1 emailablev.com, 1 emailalaperformance.fr, 1 -emailassist.ai, 1 emailbildirim.com, 1 emailbusters.tk, 1 emailer.party, 1 @@ -50274,14 +49550,13 @@ emailprivacytester.com, 1 emailprocessorpro.gq, 1 emailpursuits.com, 1 +emailreminder.me, 1 emailservers.tk, 1 -emailspedia.com, 1 emailthing.xyz, 1 emakicms.com, 1 emaks.tk, 1 emalm.com, 1 emanaclinic.com, 1 -emancipator.com, 1 emancipet.org, 1 emanol.co.uk, 1 emanuel-loos.eu, 1 @@ -50297,7 +49572,6 @@ emarhotel.bg, 1 emarketingmatters.com, 1 emas-beja.pt, 1 -emater.com, 1 emavending.club, 1 emavok.eu, 1 emazrin.tk, 1 @@ -50322,7 +49596,6 @@ emberit.com, 1 emberlife.com, 1 embibe.com, 1 -embien.co, 1 emblemhealth.com, 1 embodiaacademy.com, 1 embodiaapp.com, 1 @@ -50343,7 +49616,6 @@ emccr-ehtp.com, 1 emceemanic.tk, 1 emcentrix-com-site-mvc.azurewebsites.net, 1 -emcremodel.com, 1 emcspotlight.com, 1 emdad-persian.ir, 1 emdadkhodrokaraj.ir, 1 @@ -50365,7 +49637,6 @@ emelies-inspiration.tk, 1 emem.no, 1 ememsei.com, 1 -emenaspa.com, 1 emenshop.cf, 1 emenshop.ga, 1 emenshop.ml, 1 @@ -50490,10 +49761,8 @@ emo.care, 1 emo.ie, 1 emoc.com, 1 -emocionado.com, 1 emocionestlp.com, 1 emocionypensamiento.com, 1 -emocje.com, 1 emoforum.tk, 1 emoji-meaning.org, 1 emoji-symbols.org, 1 @@ -50506,7 +49775,6 @@ emojiteka.pl, 1 emojiterra.com, 1 emolafarm.com, 1 -emolar.com, 1 emolecules.com, 1 emond-usedcars.net, 0 emoney.eu.org, 1 @@ -50548,7 +49816,6 @@ empirehotelnyc.com, 1 empirelevel.eu, 1 empireliverfoundation.org, 1 -empirical.net, 1 empiricinfotech.com, 1 emplifi.io, 1 emploi-international.net, 1 @@ -50576,7 +49843,6 @@ emporioarchitect.com, 1 emporiodosperfumes.com.br, 1 emporioguarani.com.br, 1 -emporiohortinatura.com.br, 1 emporioonline.com.br, 1 emporiopurochile.com.br, 1 emporiorochaeamorim.com.br, 1 @@ -50602,8 +49868,6 @@ emprendimientoweb.co, 1 emprendimientoyformacion.com, 1 empresa365.com, 1 -empresaerp.com, 1 -empresasavenda.pt, 1 empresautil.tk, 1 emprestimodedinheiro.com.br, 1 emprisebank.com, 1 @@ -50693,7 +49957,6 @@ encanroy.ca, 1 encanroy.com, 1 encanstanne.ca, 1 -encausate.com, 0 encd.life, 1 ence.es, 1 encenna.com.br, 0 @@ -50701,8 +49964,6 @@ encfs.win, 1 enchantedcode.co.uk, 1 enchantedcottage.tk, 1 -encherosolhos.com.br, 1 -enchong.com, 1 encinitastrainer.com, 1 encipher.me, 1 encirca.com, 0 @@ -50712,11 +49973,9 @@ encontracarros.pt, 1 encontreumagp.com, 1 encontro.online, 1 -encontroespiritadeinverno.com.br, 1 encore.tech, 1 encoro.org, 1 encotentin.fr, 1 -encountercss.com, 1 encouragemarketing.com, 1 encredible.de, 0 encredible.org, 0 @@ -50795,7 +50054,6 @@ endspamwith.us, 1 endstation-chaos.de, 1 enduranceseries.ca, 1 -enduro-center.pt, 1 enduroxtrem.tk, 1 endurtech.com, 1 endustriyelfirinlar.com, 1 @@ -50843,6 +50101,7 @@ energetikasmantojums.lv, 1 energetikasmuzejs.lv, 1 energia.ee, 1 +energiaborze.hu, 1 energiaelcorteingles.es, 1 energialibre.tk, 1 energianuclear.tk, 1 @@ -50869,10 +50128,7 @@ energyalliance.org, 1 energyandincomeadvisor.com, 1 energyatlas.com, 1 -energyaupair.dk, 1 -energyaupair.nl, 1 energyaupair.no, 1 -energyaupair.se, 1 energybooster.ml, 1 energybooster.tk, 1 energycasino.com, 1 @@ -50919,12 +50175,12 @@ enet-navigator.de, 1 enett.team, 1 enewspapers.tk, 1 +enf-cmnf.cc, 1 enfant.tk, 1 enfants-terribles.tk, 1 enfantsdelarue.ch, 1 enfantsoleil.ca, 1 enfasyperfumarias.com, 1 -enfermedaddelbeso.com, 1 enfermeira.pt, 1 enfieldheightsacademy.org.uk, 1 enfinnit.com, 1 @@ -51029,6 +50285,7 @@ engrama.tk, 1 engrepair.com, 1 engrish.ml, 1 +engrteam.com, 1 engso-education.eu, 1 engso.com, 1 engso.eu, 1 @@ -51087,7 +50344,6 @@ enmedia.eu, 1 enmowe.co.ke, 1 enmowe.tech, 1 -ennd.com, 1 ennekoops.nl, 1 enno.mom, 0 ennori.jp, 1 @@ -51095,7 +50351,6 @@ ennovationtech.eu, 1 enoahinc.com, 1 enodais.gr, 1 -enoenergy.com, 1 enofmusic.com, 1 enoisdaturma.tk, 1 enolalingerie.com, 1 @@ -51117,7 +50372,6 @@ enotrosmundos.tk, 1 enovetic.ch, 1 enpalmademallorca.info, 1 -enpasenerji.com.tr, 1 enphase.com, 1 enphaseenergy.com, 1 enprobe.io, 1 @@ -51238,7 +50492,6 @@ entreterse.com.br, 1 entretien-roche.fr, 1 entretien-vmc-professionnel.com, 1 -entretien-vmc.fr, 1 entretiencta.fr, 1 entretiendevmc.net, 1 entretienvmc.com, 1 @@ -51374,13 +50627,13 @@ eofster.com, 1 eogresources.com, 1 eohima.org, 0 -eohu.ca, 1 eol-team.tk, 1 eola.co, 1 eolasinnovation.com, 1 eoliennedetoit.com, 1 eomnneo.cz, 1 eon.com.my, 1 +eon.io, 1 eon.tech, 1 eonclub.tk, 1 eongame.tk, 1 @@ -51394,9 +50647,7 @@ eos-utvalget.no, 0 eosagonline.ru, 1 eosguru.ru, 1 -eosinofilos.com, 1 eosol.services, 1 -eov2.com, 1 ep-cortex.com, 1 ep-plus.jp, 1 epagos.com.ar, 1 @@ -51412,7 +50663,6 @@ epawnatl.com, 1 epay.bg, 1 epaygateway.net, 1 -epcomputacion.com.ar, 1 epcos.com, 1 epcos.de, 1 epcwd-ca.gov, 1 @@ -51422,6 +50672,7 @@ epdigital.biz, 1 epharma.kz, 1 ephemia.com, 1 +ephesiansshoppingarena.com, 1 ephesusbreeze.com, 1 ephong.net, 1 epic-vistas.com, 1 @@ -51479,15 +50730,12 @@ epistas.com, 1 epistas.de, 1 epistemes.org, 1 -epistula.com, 1 -epitelial.com, 1 epitesti.ro, 1 epitesztervezes.hu, 1 epiteugma.com, 1 epizentrum.work, 1 epizentrum.works, 1 eplayer.cz, 1 -eplayer.sk, 1 eplenet.tk, 1 epliar.com, 1 eplus.group, 1 @@ -51637,7 +50885,6 @@ erbt.tk, 1 erc721c.com, 1 ercasdieagentur.de, 1 -ercio.com, 1 erciyesspor.tk, 1 erclab.kr, 1 erclaim.com, 1 @@ -51650,6 +50897,7 @@ erectiepillenwinkel.nl, 1 erector.cf, 1 erector.tk, 1 +eredeti-kamagra.com, 1 eredmenye.xyz, 1 erefredag.se, 1 eregma.tk, 1 @@ -51841,7 +51089,6 @@ error418.nl, 1 errror.org, 1 errsal.com, 1 -ersalgar.com, 1 ersankaucuk.com, 1 ersdfaredsaeem.tk, 1 ersei.net, 1 @@ -51906,7 +51153,6 @@ es.ax, 1 es.search.yahoo.com, 0 es888999.com, 1 -esa.org, 1 esaborit.ddns.net, 0 esadnext.cloud, 1 esafetyfirst.com, 1 @@ -51957,11 +51203,9 @@ escaperoomla.com, 1 escapio.com, 1 escarabajal.net, 1 -escarpe.com, 1 escavador.com, 1 escg.digital, 1 eschool.am, 1 -escif.com, 1 esclinux.tk, 1 escmatrix.com, 1 escobarservice7000.com, 1 @@ -51983,7 +51227,6 @@ escort-fashion.com, 1 escort.it, 1 escortbee.com, 1 -escortdelhi.net, 1 escortdisplay.com, 1 escortify.co.nz, 1 escortjessy.tk, 1 @@ -52024,7 +51267,6 @@ eseances.ch, 1 esecuredata.com, 1 esemtia.com, 1 -esenaskincare.com, 1 eservices-greece.com, 1 eservices-mccat.gov.bf, 1 eset.ml, 1 @@ -52053,6 +51295,7 @@ eshotsaatleri.com, 1 esiac.net, 1 esideshop.com, 1 +esiedu.com, 1 esiga.mx, 1 esignandpay.net, 1 esignering.se, 1 @@ -52077,6 +51320,7 @@ eskritt.ca, 1 eskurye.com, 1 eskuvoivideohd.hu, 1 +eskypartners.com, 1 esl.org, 1 eslamahmed.tk, 1 esleme.com, 1 @@ -52092,6 +51336,7 @@ esmejor.tk, 1 esmincg2t1.com, 1 esmoker.bg, 1 +esmtestserver.com, 1 esmuefektivs.lv, 1 esnekkaucuk.com, 1 esnlpr.fi, 1 @@ -52100,6 +51345,7 @@ eso3.eu.org, 1 esocite.la, 1 esoko.eu, 1 +esolbooks.com, 1 esolcourses.com, 1 esolitos.com, 1 esomeprazole1.gq, 1 @@ -52108,7 +51354,6 @@ esopticallabs.com, 1 esormestt.fr, 1 esote.net, 1 -esoteriaweb.com, 1 esoteric.website, 1 esoterik.link, 1 esoterikerforum.de, 1 @@ -52138,7 +51383,6 @@ espairecer.pt, 1 espanol.search.yahoo.com, 0 espanyoldebarna.tk, 1 -esparreguera.com, 1 espass.gq, 1 espbimbel.com, 1 espci.fr, 1 @@ -52146,7 +51390,6 @@ especializasaudecursos.com.br, 1 especificosba.com.ar, 1 espectro.tk, 1 -espectrometria.com, 1 espejo.tk, 1 espejocofrade.tk, 1 espeleogel.tk, 1 @@ -52177,7 +51420,6 @@ espresine.lt, 1 espressoapp.com.br, 1 espressonews.gr, 1 -espressotranslations.com, 1 espricrea.com, 1 esprihealth.com, 1 espritguitare.com, 1 @@ -52232,7 +51474,6 @@ essentialsource.net, 1 essentialsspa.ca, 1 essentiapura.com, 1 -essentiate.com, 1 essentiel-du-mariage.com, 1 essentiel-physique.com, 1 essentry.com, 0 @@ -52246,7 +51487,7 @@ essexhighways.org, 1 essexmoneyman.com, 1 essexregionalnj.gov, 1 -essextech.org, 1 +essextech.org, 0 essextimbercraft.co.uk, 1 essif-lab.eu, 1 essilorpse.com, 1 @@ -52289,7 +51530,6 @@ esteriliza-me.org, 1 esterilizacion-perros.es, 1 esterior.net, 1 -estespr.com, 0 estet.tk, 1 estetica-bilbao.com, 1 estetica.host, 1 @@ -52306,7 +51546,6 @@ estherstas.com, 1 estherstasiniewicz.com, 1 esthesoleil.jp, 1 -esthetiqueboissiere.fr, 1 estila.co, 1 estilopack-loja.com.br, 1 estintori.roma.it, 1 @@ -52338,6 +51577,8 @@ estruendo.tk, 1 estuarystudent.tv, 1 estudantetorcedor.com.br, 1 +estudiantes.xyz, 1 +estudiantesdecanarias.org, 1 estudiarparaser.com, 1 estudiaryaprenderingles.com, 1 estudiemosvirtualmente.com, 1 @@ -52372,7 +51613,6 @@ et-xprojects.co.za, 1 et.al, 1 et420nrw.tk, 1 -etablissement.com, 1 etaconic.com, 1 etaes.eu, 1 etajerka-spb.ru, 1 @@ -52420,7 +51660,7 @@ eternalpeaceseaburials.com, 1 eternalsymbols.com, 1 eternalwine.com, 1 -eternegy.co, 1 +eternegy.co, 0 eternit.roma.it, 1 eternitdesio.it, 1 eternitypodcast.com, 1 @@ -52433,7 +51673,6 @@ etflife.com, 1 eth-services.de, 1 eth0.nl, 0 -etha.nz, 1 ethaligan.fr, 1 ethan-hanlon.xyz, 1 ethan.pm, 1 @@ -52453,6 +51692,10 @@ ethereal-skies.tk, 1 etherealcollapse.tk, 1 ethereum-news.info, 1 +ethereumnews.best, 1 +ethereumnews.digital, 1 +ethereumnews.live, 1 +ethereumnews.site, 1 ethergeist.de, 1 etheria-software.tk, 1 etherium.design, 1 @@ -52476,7 +51719,6 @@ ethika.com, 1 ethil-faer.fr, 1 ethio-jobs.net.et, 1 -ethiqueadvisory.com, 1 ethitter.com, 1 ethnews.today, 1 ethniki-antistasi-dse.gr, 1 @@ -52505,7 +51747,6 @@ etnoria.com, 1 etoile-usedcars.com, 0 etok-co.com, 1 -etoolshub.com, 1 etopa.de, 1 etoro-openbook.tk, 1 etororeviews.com, 1 @@ -52529,6 +51770,9 @@ ettagroup.ru, 1 ettbattreinternet.se, 1 etterforsker1.no, 1 +ettin-router.com, 1 +ettin-router.cz, 1 +ettin-router.de, 1 ettlinger-tor.de, 1 ettoday.org, 1 ettoremirarchifilms.it, 1 @@ -52563,7 +51807,6 @@ eucybernet.eu, 0 eudiakok.hu, 1 eudore.org, 1 -eufair.com, 1 euflight.info, 1 eufraimidis.com, 1 eugenefilmfest.org, 1 @@ -52571,7 +51814,7 @@ eugenekay.com, 0 eugeneorourke.com, 1 eugenesia.org, 1 -eugeneyeosurgery.sg, 1 +eugeneyeosurgery.sg, 0 eugenics.org, 1 eugenioperez.tk, 1 eugostodefilmesbrasileiros.tk, 1 @@ -52604,7 +51847,6 @@ eulederminerva.de, 1 eulekarstva.uz, 1 eulen.com, 1 -eulenberg.com, 1 eulenschmiede.de, 1 euler.finance, 1 euleres.tk, 1 @@ -52617,7 +51859,6 @@ eung.ga, 1 eunicetan.com, 1 eunomy.io, 1 -eunow.com, 1 eupay.de, 1 euphoriaonline.tk, 1 euphoriareign.com, 1 @@ -52634,7 +51875,6 @@ eurekaca.gov, 1 eurekagames.tk, 1 eurekahomeappliances.com, 1 -eurekanetwork.org, 1 eurekatech.eti.br, 1 eurekatownshipmi.gov, 1 eurekka.me, 0 @@ -52646,7 +51886,6 @@ euro-issues.tk, 1 euro-servers.de, 1 euro.ro, 1 -euroairport.com, 1 euroasia-tm.com, 1 eurobahn.de, 1 eurobattle.tk, 1 @@ -52666,12 +51905,10 @@ eurocontrol.lu, 1 eurocontrol.me, 1 eurocontrol.xxx, 1 -eurocure.com, 1 eurodanceperu.tk, 1 eurodentaire.com, 1 eurodesk.eu, 1 eurodontic.co.uk, 0 -euroecho.com, 1 euroenergy.tk, 1 euroestetica.ec, 1 euroevent.nl, 1 @@ -52694,8 +51931,6 @@ euroherp.com, 1 eurohouse.tk, 1 euroindia.net, 1 -eurokid.com, 1 -eurokiss.com, 1 eurolink.tk, 1 eurolocarno.es, 1 eurologix.com, 1 @@ -52703,7 +51938,6 @@ euroluxgradnja.rs, 1 euromalha.com.br, 1 euroman.ga, 1 -euromas.com, 1 euromat.org, 1 eurometal.net, 1 euromexde.com, 1 @@ -52721,7 +51955,6 @@ europastudien-chemnitz.de, 1 europastudien.de, 1 europatour2005.tk, 1 -europavilion.com, 1 european-accreditation.org, 1 european-agency.org, 1 european-alternatives.eu, 1 @@ -52745,7 +51978,6 @@ europeanstudies-chemnitz.de, 1 europeantransmissions.com, 1 europeantransportmanagement.com, 1 -europejob.info, 0 europeluxuryweddings.com, 1 europeonline.tk, 1 europeontrack.org, 1 @@ -52757,12 +51989,10 @@ europoint.uk, 1 europop.com, 1 euroquis.nl, 1 -euroregister.com, 1 euroroad17.dk, 1 euroscot.de, 1 euroshop.or.at, 1 euroshop.tk, 1 -eurosight.com, 1 euroskano.nl, 1 eurospecautowerks.com, 1 eurosquad.tk, 1 @@ -52780,8 +52010,6 @@ eurousa.us, 1 eurovision-romania.tk, 1 eurovision.ie, 1 -eurowave.com, 1 -eurowish.com, 1 eurseo.com, 1 euruni.edu, 1 eusalesman.hu, 1 @@ -52835,7 +52063,6 @@ evalesc.com, 1 evalinux.com, 1 evalopezzz.org, 1 -evaluasi.com, 1 evaluation.gov, 1 evalueit.eu, 1 evaluer2.pl, 1 @@ -52855,7 +52082,6 @@ evanlee.my, 1 evanreev.es, 1 evanscourtreporters.com, 1 -evanserver.org, 1 evansfox.com, 1 evanspoliceny.gov, 1 evanstonnow.com, 0 @@ -52894,7 +52120,6 @@ evelin.tk, 1 even44.no, 1 evenbijproaten.online, 1 -evendesign.com, 1 evendesign.gq, 1 evenflowph.ca, 1 evenimenteromania.tk, 1 @@ -52938,7 +52163,6 @@ eventdata.uk, 1 eventdays.tk, 1 eventex-rentals.com, 1 -eventfoto.com, 1 eventfun.tk, 1 eventide.space, 1 eventinsurancesettlementqc.com, 1 @@ -53006,7 +52230,6 @@ evergreenpeo.com, 1 evergreenproclean.com, 1 evergreenservice.net, 1 -evergrowthdc.com, 1 everhome.cloud, 1 everichspice.com, 1 everifile.com, 1 @@ -53029,6 +52252,7 @@ evertonarentwe.com, 1 evertradeelectronics.com, 1 evertrust.fr, 1 +evertry.co, 1 evertz.com, 1 evertz.io, 1 everwaking.com, 0 @@ -53077,6 +52301,7 @@ everythinginoneblog.gq, 1 everythinglidia.com, 1 everythingusb.com, 1 +everythingweb.site, 1 everytrycounts.gov, 1 everyveterancountsohio.gov, 1 eveshaiwu.com, 1 @@ -53085,7 +52310,6 @@ evetdermisin.com, 1 evetech.net, 1 evezqurbanli.tk, 1 -evgo.com, 1 evhoeft.com, 1 eviction.cf, 1 evidencebased.net, 1 @@ -53147,7 +52371,6 @@ evolution-host.ga, 1 evolution-x.org, 0 evolution.codes, 1 -evolutionbp.es, 1 evolutioninflatables.co.uk, 1 evolutionlife.za.com, 1 evolutionmuaythai.com, 1 @@ -53161,6 +52384,7 @@ evolvedevlabs.de, 1 evolvemodular.ca, 1 evolvetechnologies.co.uk, 1 +evolvewithquantum.com, 1 evolvicity.org, 1 evolvingseo.com, 1 evolvingthoughts.net, 1 @@ -53249,7 +52473,6 @@ exact-online-apps-by-invantive.com, 1 exact.realty, 1 exactgold.com, 1 -exactlibris.com, 0 exactlyinfinite.com, 1 exactphilosophy.net, 1 exactrealty.no, 1 @@ -53320,7 +52543,6 @@ excellentrencontrer.tk, 1 excellentsurferers.ga, 1 excellentsurferest.ga, 1 -excellershop.com, 1 excellingleaders.nl, 1 excelnutritional.com.br, 1 excelpedia.net, 1 @@ -53331,6 +52553,7 @@ exceptionalfirm.com, 1 exceptionalservers.com, 1 exceptionalservices.us, 1 +exceptionalstack.com, 1 exceptionnotfound.net, 1 excess-baggage.com, 1 excessive-software.tk, 1 @@ -53346,7 +52569,6 @@ exchangeview.ga, 1 exchangevisits.tk, 1 exchaser.com, 1 -excimerlaser.com, 1 exciters.tk, 1 excitoninteractive.com, 1 exclaimer.com, 1 @@ -53366,6 +52588,7 @@ execom68.tk, 1 execupharm.jp, 1 execution.biz.tr, 1 +executivecoachgroup.com, 1 executivemarketing.co.za, 1 executiveprodry.com, 1 executiveseatsers.ga, 1 @@ -53379,7 +52602,6 @@ exem.cc, 1 exemplarypainting.com, 0 exemples-de-stands.com, 1 -exentrify.com, 1 exer.fr, 1 exercise.com, 1 exercisekingers.ga, 1 @@ -53387,7 +52609,6 @@ exerforge.net, 1 exerph.com, 1 exerpm.tk, 1 -exescan.net, 1 exesoft.ml, 1 exeterfit.com, 1 exeunt.tk, 1 @@ -53407,14 +52628,13 @@ exiahost.com, 1 exiled.land, 1 exiled.world, 1 -exiletattoo.net, 1 exiletower.tk, 1 exip.ga, 1 exira.com, 1 exist.ru, 1 +exitbydeath.com, 1 exitoseguro.tk, 1 exitreality.tk, 1 -exitrooms.co.uk, 1 exits.partners, 1 exizent.com, 1 exizent.tk, 1 @@ -53499,7 +52719,9 @@ experimentrak.com, 1 experiments.lv, 1 experimetrix.com, 1 +experiorfinancial.com, 1 experise.fr, 1 +experiumorocco.com, 1 experpento.tk, 1 expert-batiment-rouen.fr, 1 expert-comptable-vichy-moulins-allier.fr, 1 @@ -53514,13 +52736,13 @@ expertembeleza.com, 1 expertembeleza.com.br, 1 expertestate.org, 1 +experthiring.net, 1 experthive.co.za, 1 expertisevision.fr, 1 expertittelco.com.au, 1 expertmarketer.ro, 1 expertmarktrg.com, 1 expertofficefitouts.com.au, 1 -expertowears.com, 1 expertpaintersvt.com, 1 expertpanel.gc.ca, 1 expertplumbingandsolarservicesbathurst.com.au, 1 @@ -53529,7 +52751,7 @@ experts.com, 1 expertvagabond.com, 0 expertviolinteacher.com, 1 -expertyusa.com, 1 +expertyusa.com, 0 expicare.com, 1 expii.com, 1 expireddomains.net, 1 @@ -53546,8 +52768,8 @@ exploit.party, 1 exploited.cz, 1 exploithe.net, 1 +explora.studio, 1 explorance.com, 1 -exploraturuta.com, 1 exploravacations.in, 1 explore-being-human.org, 1 explore-hiroshima-tour.com, 1 @@ -53555,7 +52777,7 @@ explore-visions.com, 1 explore.beer, 1 explorea1a.com, 1 -explorebigideas.com, 1 +explorebigideas.com, 0 exploreeverydays.com, 1 exploregulf.ga, 1 exploreintel.com, 1 @@ -53727,7 +52949,6 @@ extraspaces.co.uk, 1 extratext.at, 1 extratv.com, 1 -extraupdate.com, 1 extreme-addicts.tk, 1 extreme.co.th, 1 extremebaking.com, 1 @@ -53756,7 +52977,6 @@ exvega.com, 1 exvisits.tk, 1 exwaiti.com, 1 -exway.com, 1 exxoncannabis.com, 1 exxpozed-image.de, 1 exxpozed.ch, 1 @@ -53791,7 +53011,6 @@ eyesee.fr, 1 eyesfans.com, 1 eyeshield-informatique.tech, 1 -eyesome.com, 1 eyespecialistsofla.com, 1 eyestrainexplained.com, 1 eyesurgery.tk, 1 @@ -53802,7 +53021,6 @@ eylog.co.uk, 1 eymon.llc, 1 eynio.com, 1 -eyodin.com, 1 eyoo.link, 1 eyps.net, 1 eytosh.net, 1 @@ -53831,6 +53049,7 @@ ezinternet.com.au, 1 ezitech.com, 1 ezkrt.com, 1 +ezlogi.jp, 1 ezmedix.ua, 1 ezmob.com, 1 ezmoddingz.tk, 1 @@ -53849,19 +53068,18 @@ ezsun.co, 1 eztempmail.com, 1 ezuz-fe.com, 1 -ezvolt.com.br, 1 ezwebsearch.com, 1 ezyentry.com.au, 1 ezygentechnology.com, 1 ezygrowth.world, 1 ezz-drops.tk, 1 +ezzaddindev.ir, 1 ezzarware.nl, 1 ezzhole.net, 1 f-401.com, 1 f-centre.ru, 1 f-droid.org, 0 f-mall.jp, 1 -f-mebel-na-zakaz.ru, 1 f-sato-jcp.jp, 1 f-sulzmann.de, 1 f-thie.de, 1 @@ -53895,7 +53113,6 @@ f2vc.com, 1 f36533.com, 1 f3franklin.com, 1 -f3m.pt, 1 f3r.xyz, 1 f42.net, 1 f45challenge.com, 1 @@ -53978,7 +53195,6 @@ fabianfranke.de, 1 fabianni.tk, 1 fabickcat.com, 1 -fabien-eigenmann.ch, 0 fabien-hebuterne.fr, 0 fabienbaker.com, 1 fabienne-roux.org, 1 @@ -53986,7 +53202,6 @@ fabilnatural.co.id, 1 fabilpages.com, 1 fabim.de, 0 -fabinhoreis.com, 1 fabio-lanzieri.com, 1 fabio.gg, 1 fabiobier.com, 1 @@ -54085,13 +53300,11 @@ faces4watch.com, 1 facescertification.com, 1 facesdr.com, 1 -faceside.com, 1 facevietpro.tk, 1 facevitalityers.ga, 1 fachcar.ma, 1 fachfusspflege-exner.de, 1 fachim.tk, 1 -fachinformatiker.com, 1 fachiri.tk, 1 fachschaften.org, 0 fachschaftslisten.at, 1 @@ -54106,7 +53319,7 @@ facilecommebonjour.com, 1 facilit-info.fr, 1 facilitate.tech, 1 -facilities.fr, 1 +facilities.fr, 0 facilities.gd, 1 facilitiessurvey.org, 1 facilitrak.com, 1 @@ -54128,6 +53341,7 @@ factbytefactbox.com, 1 factcheck.ge, 1 factcheck.org.nz, 1 +factdrop.party, 1 facteurcheval.com, 1 factfocus.com, 1 factis.com, 1 @@ -54144,7 +53358,6 @@ factory-fan.com, 1 factory01.it, 1 factoryalimentos.com.br, 1 -factorypark.com, 1 factorypartsdirect.com, 1 factozia.tk, 1 facts-about-bees.ml, 1 @@ -54165,7 +53378,6 @@ facucosta.com.ar, 1 facuint.org, 1 facultyforthefuture.net, 1 -facvest.com, 1 fadaebalears.org, 1 fadaex.org, 1 fadaru.ml, 1 @@ -54234,13 +53446,11 @@ fair-fish-database.net, 1 fair-fish.net, 1 fairan.ir, 1 -fairbairnrealty.com, 1 fairbill.com, 1 fairbot.cf, 1 fairbot.gq, 1 fairbot.ml, 1 fairbot.tk, 1 -fairbroker.com, 1 fairchildband.tk, 1 fairchildfun.marketing, 1 fairchildportraits.com, 1 @@ -54320,7 +53530,6 @@ fakeapple.nl, 1 fakeballon.shop, 1 fakebusters.club, 1 -fakecheck.com, 1 faked.org, 1 fakeemergency.com, 1 fakeframes.ga, 1 @@ -54372,7 +53581,6 @@ falcony.io, 1 falcoz.net, 1 faldoria.de, 1 -fale.io, 1 falegname-roma.it, 1 falegname.roma.it, 1 falegnameria.milano.it, 1 @@ -54428,7 +53636,6 @@ famila-nordost.de, 1 familialchercher.tk, 1 familiaperez.net, 0 -familiaplus.de, 1 familie-fieber.de, 1 familie-keil.de, 1 familie-kruithof.nl, 1 @@ -54452,7 +53659,6 @@ familiekusch.de, 1 familienforschung-krauss.de, 1 familienportal.de, 1 -familienrat.com, 1 familienzone.at, 1 familiereimann.com, 0 familieretshuset.dk, 1 @@ -54476,6 +53682,7 @@ familyd-c.com, 1 familydoctor.ru, 1 familyhookups.com, 1 +familyjpierre.com, 1 familylab.de, 1 familyparties.co.uk, 1 familyrecipe.co.uk, 1 @@ -54532,14 +53739,10 @@ fanfiction.tk, 1 fanflix.co, 1 fang-den-sommer.de, 1 -fangan.com, 1 fangban.net, 1 fangbing.me, 1 -fangjingdian.com, 1 fangkehou.tk, 1 -fangqun.com, 1 fangs.ink, 1 -fangshu.com, 1 fanidrakopoulou.tk, 1 fanitest.ir, 1 fanjingbo.com, 1 @@ -54552,6 +53755,7 @@ fanorama.tk, 1 fanosak.tk, 1 fanqia.ng, 1 +fanqienovel.com, 1 fans-darkangel.tk, 1 fans-lily-allen.tk, 1 fansale.de, 1 @@ -54592,7 +53796,7 @@ fantasyfoot.gq, 1 fantasyfoot.tk, 1 fantasyforever.tk, 1 -fantasypartyrental.com, 1 +fantasypartyrental.com, 0 fantasyprojections.com, 1 fantasysports.tk, 1 fantasysportsnews.org, 1 @@ -54606,7 +53810,6 @@ fanyue123.tk, 1 fanzapers.ga, 1 fanzhe.com, 1 -fanzhuang.com, 1 fanzine-nimbus.tk, 1 fanzlive.com, 1 faortega.org, 1 @@ -54621,6 +53824,7 @@ faq.ie, 1 faqbite.com, 1 faqexchangeest.ga, 1 +faqin-hr.info, 1 faqiteam.tk, 1 far-east.tk, 1 far3link.tk, 1 @@ -54671,7 +53875,6 @@ farm-catalog.ga, 1 farm-dogecoin.tk, 1 farm-vacations.com, 1 -farmaceuticainternazionale.it, 1 farmacia.pt, 1 farmaciabarcelona.com, 1 farmaciaclinica.it, 1 @@ -54704,6 +53907,7 @@ farming.co.uk, 1 farmingtonlaxwi.gov, 1 farmmaximizer.com, 1 +farmmonitor.africa, 1 farmocracy.in, 1 farmqa.com, 1 farmtogether.com, 1 @@ -54723,7 +53927,6 @@ farolshop.co.uk, 1 faroopen.ddns.net, 1 faros-studio.gr, 1 -faroutsolutions.com, 0 farrel-f.cf, 1 farrel-f.id, 1 farrel-f.tk, 1 @@ -54900,7 +54103,6 @@ fastforwardthemes.com, 1 fastfox.tk, 1 fastfrom.net, 1 -fastfwd.co.za, 1 fastgamingro.tk, 1 fastgit.cc, 1 fastighetsekonomi.com, 0 @@ -54926,12 +54128,12 @@ fastserv.pl, 1 fastshop.com.pl, 0 faststage.ch, 1 -fasttracconsulting.com, 1 fasturl.ml, 1 fastvanya.com, 1 fastvelocityers.ga, 1 fastvelocityest.ga, 1 fastvisit.tk, 1 +fastweb.io, 1 fastworx.com, 1 faszination-fankurve.de, 1 fatal-beauty.tk, 1 @@ -54954,6 +54156,7 @@ fatidique.com, 1 fatig.com, 1 fatiguesyndrome.com, 1 +fatih-catering.com, 1 fatihingemisi.com, 1 fatimamoldes.com.br, 1 fatimaonlinepharmacy.com, 1 @@ -54968,7 +54171,6 @@ fattorino.it, 1 fatturegeko.eu, 1 fatty.io, 1 -fattyburgers.com, 1 fattyink.com, 1 fatumagro.bg, 1 faturan.com.tr, 1 @@ -54995,9 +54197,7 @@ fauwater.com, 1 fauxcams.com, 1 fauxil.shop, 1 -fauxreal.com, 1 fav-hosting.online, 1 -favarica.com, 1 faveaesthetik.de, 1 favicone.com, 1 favier.io, 1 @@ -55119,7 +54319,7 @@ fcr.pp.ua, 1 fcrmedia.be, 1 fcrrijswijk.nl, 1 -fcs-embedded.com, 1 +fcs-embedded.com, 0 fcsarajevo.tk, 1 fcsic.gov, 1 fcsm.gov, 1 @@ -55289,7 +54489,6 @@ feedus.io, 1 feeg-wage.gc.ca, 1 feegg.com.br, 1 -feehla.com, 1 feek.org, 1 feel-events.com, 1 feel-it.nl, 1 @@ -55346,9 +54545,7 @@ feilestrokestown.com, 1 feirlane.org, 0 feiromo.com, 1 -feisheng.com, 1 feistore.com.tw, 1 -feistyfoxsecurity.com, 1 feisworld.com, 0 feitam.es, 1 feittinf.org.br, 0 @@ -55395,7 +54592,6 @@ felixcrux.com, 1 felixgerschau.com, 1 felixgundacker.at, 1 -felixharo.es, 0 felixhollitzer.de, 1 felixkauer.de, 1 felixklenner.de, 1 @@ -55419,6 +54615,7 @@ felsenheimer.tk, 1 feltencie.com, 1 feltons.me, 0 +feltresca.it, 1 feluck.de, 1 female-costumes.tk, 1 femalebeauty.my.id, 1 @@ -55452,6 +54649,7 @@ femundo.de, 1 fena.jp, 1 fenagav.ga, 1 +fenalia.shop, 1 fenatrigo.com.br, 1 fenc.it, 1 fence-stlouis.com, 1 @@ -55481,11 +54679,11 @@ fenixonlinevirtual.com.br, 1 fenn.moe, 1 fennec.wtf, 1 +fennie.onthewifi.com, 1 fenns.co.za, 1 fennville.gov, 1 fennydewit.nl, 1 fenom.ga, 1 -fenotipo.com, 1 fenris.ovh, 1 fenritec.eu, 1 fenritec.fr, 1 @@ -55527,6 +54725,7 @@ ferienhausprovence.ch, 1 ferienwohnung-hafeninsel-stralsund.de, 1 ferienwohnung-ruegen.tk, 1 +ferienwohnung-sabine.de, 1 ferienwohnung-schmitt.eu, 1 ferienwohnung-wiesengrund.eu, 1 ferienwohnung-wilmersdorf.de, 1 @@ -55608,7 +54807,6 @@ fertilityquick.ga, 1 fertilityquickers.ga, 1 fertilityquickest.ga, 1 -fertilityspace.io, 1 fertilitytreatmentcenter.com, 1 fertilizers.tk, 1 ferwor.studio, 1 @@ -55628,7 +54826,6 @@ festivaldimouamaroussiou.gr, 1 festivalfumo.tk, 1 festivaljapon.com, 1 -festivallusitanodocirco.pt, 1 festivalofthefleeces.au, 1 festivalofthefleeces.com.au, 0 festivalplaza.com.au, 1 @@ -55670,6 +54867,7 @@ feudias.com, 1 feuer-u-stein.de, 1 feuerhuhn.de, 1 +feuerkids.de, 1 feuerloescher-test.de, 1 feuernatter.de, 1 feuerwehr-bubikon.ch, 1 @@ -55812,7 +55010,6 @@ fhjtcn.com, 1 fhjtglobal.com, 1 fhjtzh.com, 1 -fhjtzhs.com, 1 fhkheating.com.au, 1 fhm.duckdns.org, 1 fhmarkets.com, 1 @@ -55824,7 +55021,6 @@ fhsseniormens.club, 1 fhstation.com, 1 fhstatus-chinese.com, 1 -fhtrader.com, 1 fhv-waldhausen.de, 1 fhwechat.com, 1 fhzhs.com, 1 @@ -55894,7 +55090,9 @@ fieldeffect.com, 1 fieldgroupny.com, 1 fieldsgynroboticsurgery.com, 1 +fieldsusa.com, 1 fieldworkbrewing.com, 1 +fieldworks.ne.jp, 1 fiemmeimpianti.it, 1 fienaliri.tk, 1 fierman.eu, 0 @@ -56046,7 +55244,6 @@ film-tutorial.com, 1 film.cz, 1 film.ru, 1 -filmatiporno.xxx, 1 filmbabasi.net, 1 filmbasar.com, 1 filmbest.tk, 1 @@ -56054,7 +55251,6 @@ filmbrain.com, 1 filmcorner.tk, 1 filmdates.co.uk, 1 -filme-onlines.com, 1 filmedonstage.com, 1 filmezzunk.hu, 1 filmfestivalflix.com, 1 @@ -56084,14 +55280,12 @@ filmsearch.tk, 1 filmserver.de, 1 filmsidan.tk, 1 -filmsleague.com, 1 filmtheaternieuwegein.tk, 1 filmwallpapers.ml, 1 filmweltverleih.de, 1 filmyfocus.com, 1 filmzwesela.online, 1 filobot.xyz, 1 -filokiralama.name.tr, 1 filoo.de, 0 filosofare.tk, 1 filosofia.tk, 1 @@ -56137,7 +55331,6 @@ finalweapon.net, 1 finalworkdriesstef.tk, 1 finalx.nl, 1 -finanalysis.com, 1 finance-colleges.com, 1 finance-consulting.ga, 1 finance-news.ga, 1 @@ -56146,10 +55339,8 @@ financedraft.com, 1 financeforafrica.com, 1 financeguest.com, 1 -financehindi.com, 1 financeinterface.tk, 1 financejobs.ch, 1 -financemagnates.com, 1 financemain.com, 1 financenews.tk, 1 financepre.com, 1 @@ -56176,6 +55367,7 @@ finanzasydinero.com, 1 finanzen-az.com, 1 finanzen-weblog.de, 1 +finanzfluss.de, 1 finanzierung-sofortzusage.de, 1 finanztime.com, 1 finanzwende-recherche.de, 1 @@ -56192,7 +55384,6 @@ finch.ga, 1 finchnest.co.uk, 1 fincities.tk, 1 -fincore.com, 1 fincura.com, 1 find2career.com, 1 findahero.com.au, 1 @@ -56273,6 +55464,7 @@ finehealth.ru, 0 finehomesource.com, 1 finenet.com.tw, 1 +fineopay.com, 1 fines.vic.gov.au, 1 fineshare.tk, 1 finesio.sk, 1 @@ -56330,6 +55522,7 @@ finnkupongkoder.no, 1 finnwea.com, 0 finom.co, 1 +finotor.com, 1 finovate.com, 1 finplatforms.ru, 1 finpomosh.gq, 1 @@ -56388,7 +55581,6 @@ firebounty.com, 1 fireboxfood.com, 1 firebrandchurch.com, 1 -firebugmusic.com, 1 fireburn.ru, 1 firecask.com, 1 firechip.cc, 1 @@ -56418,7 +55610,6 @@ fireplex.co.uk, 1 fireportal.cz, 1 fireportal.sk, 1 -fireprint.com, 1 firerabbit.com, 1 fireradio.tk, 1 firerain.me, 1 @@ -56433,7 +55624,6 @@ firetotheprisons.org, 1 fireurboss.tk, 1 firevap.org, 1 -firewall.net.za, 1 firewallremoval.cf, 1 firewallremovalers.ga, 1 fireware.tk, 1 @@ -56447,7 +55637,6 @@ firmaautografa.com, 1 firmador.cloud, 1 firmador.online, 1 -firmaet.com, 1 firmale.com, 1 firmamaja.com, 1 firmament.space, 1 @@ -56466,7 +55655,6 @@ firobe.fr, 1 firouz.tk, 1 firoza.finance, 1 -firozechijewelry.com, 1 firsattilkisi.com, 1 firsov.gq, 1 first-aid-kit.net, 1 @@ -56502,7 +55690,6 @@ firstchoiceliquor.com.au, 1 firstchurchmn.org, 1 firstcitizensbank.com, 1 -firstclass.com.kh, 1 firstclasscastles.com, 1 firstclassleisure.co.uk, 1 firstclassnuisance.tk, 1 @@ -56513,6 +55700,7 @@ firstcontact.cf, 1 firstdry.com.br, 1 firstechpayments.com, 0 +firstenergyservice.com, 1 firstever.eu, 1 firstfederalbath.com, 1 firstfinanceit.com, 1 @@ -56539,7 +55727,6 @@ firstphilec.com, 1 firstplace.ga, 1 firstqa.com, 0 -firstquarterfinance.com, 1 firstresponder.gov, 1 firstshowing.net, 1 firstsiteguide.tk, 1 @@ -56554,6 +55741,7 @@ firthidaho.gov, 1 fis.io, 1 fisa.net.za, 1 +fiscalbot.es, 1 fiscalidadresiduos.org, 1 fiscalitatresidus.org, 1 fischer-group.com, 1 @@ -56632,13 +55820,11 @@ fitanu.com, 1 fitasdobonfim.com, 1 fitbase.cf, 1 -fitbeautyjet.com, 1 fitbizcpa.org, 1 fitc.jp, 1 fitcamp.fitness, 1 fitch.group, 1 fitchannel.com, 1 -fitchconnect.com, 1 fitchdesigncompany.com, 0 fitchpeople.nl, 1 fitcrewhn.com, 1 @@ -56663,7 +55849,6 @@ fitness.gov, 1 fitnessbenefit.com, 1 fitnessbest.com, 1 -fitnessfoodguide.com, 1 fitnessfreedomathletes.com, 1 fitnesshaber.com, 1 fitnessimage.com.au, 0 @@ -56676,7 +55861,6 @@ fitnessup.fr, 1 fitnessvolt.com, 1 fitnetion.com, 1 -fitnhot.com, 1 fitnur.com, 0 fitnutkatie.com, 1 fito.tk, 1 @@ -56686,8 +55870,8 @@ fitrecepty.info, 1 fitspring.com, 1 fitssey.com, 1 +fitt-together.co.uk, 1 fittar.eu, 1 -fittelo.cz, 1 fittherapy.biz, 0 fittydent.bg, 1 fitup.health, 1 @@ -56711,7 +55895,6 @@ fiveslice.pizza, 1 fivestar.et, 1 fivestaraussie.com, 1 -fivestarstv1.com, 1 fivestartrader.com, 1 fivethirtyeight.com, 1 fiveyearsahead.com, 1 @@ -56729,7 +55912,6 @@ fixcyprus.cy, 1 fixedfeeplacements.co.uk, 1 fixedgear.tk, 1 -fixedmatch.bet, 1 fixedpricemovers.com, 0 fixedtoday.com.au, 1 fixerbee.us, 1 @@ -56762,7 +55944,6 @@ fiyatagel.com, 1 fiyatinedir.net, 1 fizadvocaten.nl, 1 -fizeau.com, 1 fiziktedavi.name.tr, 1 fizjo-strefa.com, 1 fizjonell.pl, 1 @@ -56856,8 +56037,7 @@ flagstri.com, 1 flagyl-500-mg.ga, 1 flair.nl, 1 -flaite.com, 1 -flakytest.com, 1 +flaironline.nl, 1 flam.lu, 1 flam.studio, 1 flaman-h7a.fr, 1 @@ -56910,7 +56090,6 @@ flashbackband.tk, 1 flashbeat.tk, 1 flashcardsmobile.com, 1 -flashcover.com.br, 1 flasheschile.tk, 1 flashgamedev.tk, 1 flashgamesplayer.com, 1 @@ -56920,13 +56099,11 @@ flashissue.com, 1 flashkeysers.ga, 1 flashlearners.com, 1 -flashlightchart.com, 1 flashpegasus.com.br, 1 flashscores.tk, 1 flashset.tk, 1 flashuk.com, 1 flassetlocators.com, 1 -flaszka.com, 1 flat-cdn.com, 1 flat-embed.com, 1 flat.io, 1 @@ -56939,7 +56116,6 @@ flatheadelectric.com, 1 flathome.co.jp, 1 flaticons.net, 1 -flatisler.com, 1 flatlandchurch.com, 0 flatmail.net, 1 flatmail.pl, 1 @@ -56947,7 +56123,6 @@ flatpackmates.co.uk, 1 flatplanet.tk, 1 flatrate.com, 0 -flatreviews.co.nz, 1 flatrooms-chiemgau.de, 1 flatsomestudio.ir, 1 flatsurfers.eu, 1 @@ -56959,7 +56134,6 @@ flaviao.com, 1 flavienbonvin.com, 1 flavinha.tk, 1 -flaviohipnoseclinica.com.br, 1 flaviu.co.uk, 1 flavorblogers.ga, 1 flavorblogest.ga, 1 @@ -57072,6 +56246,7 @@ flextrade.com, 1 flextrades.com, 1 flextribly.xyz, 1 +flextudo.com, 1 flexundfix.de, 1 flexve.com, 1 flexworkhero.de, 1 @@ -57163,6 +56338,7 @@ flmedicaidmanagedcare.com, 1 floart.tk, 1 floatapp.com, 0 +floatationlocations.com, 1 floaternet.com, 1 floatifnghotel.cf, 1 floatifnghotel.ga, 1 @@ -57180,7 +56356,6 @@ flokinet.social, 1 flokinet.to, 1 flokkr.com, 0 -flokylab.com, 1 floline.fr, 1 flom.fi, 1 flomax385.tk, 1 @@ -57199,7 +56374,6 @@ floorhoursest.ga, 1 flooring-long-island.com, 1 flooringbidest.ga, 1 -flooringnightmares.com, 1 flooringsourcetx.com, 1 floors4lessbay.com, 1 floosak.co, 1 @@ -57218,11 +56392,9 @@ floragarden.tk, 1 floralin.se, 1 floralworkshopsers.ga, 1 -florante.com, 1 florasite.tk, 1 floravan.com, 1 floravino.de, 1 -florebrasil.com.br, 1 floreg.com, 1 florence.com.tr, 1 florencecountysc.gov, 1 @@ -57247,7 +56419,6 @@ florhamparknj.gov, 1 floria.online, 1 florian-bachelet.fr, 1 -florian-knorn.com, 1 florian-puschmann.de, 1 florian-thie.de, 1 florian2833z.de, 1 @@ -57262,7 +56433,6 @@ floriantanner.ch, 1 florianysantiago.com, 1 floriculturaflamboyant.com.br, 1 -florida-estetica.com, 1 florida-online.tk, 1 florida-prep.org, 1 floridaagriculture.gov, 1 @@ -57273,7 +56443,6 @@ floridafabrication.net, 1 floridafieros.org, 0 floridafx.gov, 1 -floridagulfyacht.com, 1 floridahealthcareconnections.gov, 1 floridaimigracao.com, 1 floridaindependent.com, 1 @@ -57328,6 +56497,7 @@ flowercare.tk, 1 flowerdelivery.tk, 1 flowerdesign.tk, 1 +flowergurlcrafts.com, 1 flowergypsies.com, 1 flowerinsnow.cn, 1 flowerinsnow.online, 1 @@ -57367,7 +56537,6 @@ flowstars.tk, 1 flowstateyoga.com.au, 1 flowtex.tk, 1 -flowtoys.com, 1 flowzone.eu, 1 floya.brussels, 1 floydcountyga.gov, 1 @@ -57430,11 +56599,13 @@ flutterappdev.com, 1 flutterfactory.io, 1 flutterwave.com, 1 +fluui.com.br, 1 flux.today, 0 flux360.net, 1 fluxforge.com, 1 fluxnet.tk, 1 fluxoid.com, 1 +flv.co.nz, 1 flvs.life, 1 flvyingeagle.ga, 1 flws.cl, 1 @@ -57473,10 +56644,10 @@ flyingcdn.com, 1 flyingcolours.tk, 1 flyingdiscmuseum.com, 1 +flyingdoctor.net, 1 flyingdogis.land, 1 flyingdreamers.com, 1 flyingdutchman.tk, 1 -flyinghelpline.com, 1 flyinghigh.tk, 1 flyinglions.tk, 1 flyingmonkeys.tk, 1 @@ -57565,6 +56736,7 @@ fnbodirect.com, 1 fnbot.shop, 1 fncreameries.com, 1 +fnct.tn, 1 fndairies.com, 1 fndairies.com.my, 1 fndout.com, 1 @@ -57619,7 +56791,6 @@ focusreferrals.co.uk, 1 focusrtech.com, 1 focustec.tk, 1 -focusti.com.br, 1 focustuningclub.tk, 1 fodder.ga, 1 foehl.de, 1 @@ -57632,13 +56803,11 @@ foggiatoday.it, 1 fognini-depablo.eu, 1 fogu.com, 1 -foguest.com.br, 1 fogway.net, 1 foi.se, 1 foia.gov, 1 foiaonline.gov, 1 foiz.gov.ae, 1 -fojing.com, 1 fojt.cz, 1 fojtova.cz, 1 fojtovi.cz, 1 @@ -57664,6 +56833,7 @@ folkdance.tk, 1 folkfests.org, 1 folkfiesta.net, 1 +folklore-society.com, 1 folkmusicworld.com, 1 folkofolk.se, 1 folkperu.tk, 1 @@ -57707,6 +56877,7 @@ fonduri-structurale.ro, 1 fondy.ua, 1 fondzee.cz, 1 +foneria.com.tr, 1 fonga.ch, 1 fongus.ca, 1 fongus.info, 1 @@ -57795,7 +56966,6 @@ foodfeature.ga, 1 foodflower.ga, 1 foodgecko.ga, 1 -foodgenieai.com, 1 foodglamour.ga, 1 foodglory.ga, 1 foodgoddess.ga, 1 @@ -57860,7 +57030,6 @@ foodrhino.ga, 1 foodrings.ga, 1 foodrips.com, 1 -foods.pe, 1 foodsafety.gov, 1 foodsafetyjobs.gov, 1 foodsafetyworkinggroup.gov, 1 @@ -57911,7 +57080,6 @@ foot-direct.com, 1 foot.fr, 1 foot2rue.tk, 1 -footanglais.com, 1 football-news.gq, 1 football-world.tk, 1 footballcelebrationsers.ga, 1 @@ -57996,7 +57164,6 @@ foredata.fi, 1 forefront.dental, 1 forefrontcloud.com, 1 -foregrid.com, 1 foreign-language-colleges.com, 1 foreignaffairsmotorsports.com, 1 foreignassistance.gov, 1 @@ -58056,7 +57223,6 @@ forexfactbook.com, 1 forexhistorydata.com, 1 forexinthai.com, 0 -forexlive.com, 1 forexmarketsm.tk, 1 forexnese.com, 1 forexnew.org, 1 @@ -58107,6 +57273,7 @@ formalgrammar.tk, 1 formalistgallery.com, 1 formalize.com, 1 +formalux.com.au, 1 formand.ru, 1 formanov.com, 1 formap.co, 1 @@ -58131,7 +57298,8 @@ formazione.roma.it, 1 formbio.com, 1 forme.nl, 1 -formforger.com, 1 +formeras.com, 1 +formeras.tr, 1 formidium.com, 1 formingequipment.tk, 1 formini.dz, 1 @@ -58158,6 +57326,7 @@ formweb.de, 1 fornarisandres.com, 1 fornata.it, 1 +forneyplus.com, 1 fornonardona.com, 1 fornoreason.net.au, 1 foro-coopfuture.tk, 1 @@ -58174,7 +57343,6 @@ forojovensanfernando.tk, 1 forologikidilosi.com.gr, 1 foromasters.tk, 1 -forooshgah.online, 1 forosdelmisterio.tk, 1 forourselves.com, 1 forowarhammer.tk, 1 @@ -58233,6 +57401,7 @@ fortis174.ru, 1 fortisadhesives.com.au, 1 fortisinc.com, 1 +fortissimusbellator.pt, 1 fortknoxster.com, 1 fortmatic.com, 1 fortnet.online, 1 @@ -58245,7 +57414,6 @@ fortress.no, 0 fortress.sk, 1 fortressgb.com, 1 -fortressinc.ca, 1 fortresslinux.com, 1 fortresslinux.nl, 1 fortresslinux.org, 1 @@ -58373,9 +57541,9 @@ fotoallerlei.com, 1 fotoapp.ch, 1 fotoarchiv-niederrhein.de, 1 -fotoballon.com, 1 fotoblog.nrw, 1 fotobodyart.nl, 1 +fotobrb.de, 1 fotobringer.de, 1 fotobrinke.de, 1 fotochip.tk, 1 @@ -58391,7 +57559,6 @@ fotografessa.pl, 1 fotografiadellalucerossa.com, 1 fotografiamakro.pl, 1 -fotografiarte.com.es, 1 fotografies.tk, 1 fotografija.tk, 1 fotografoivanalmeida.com.br, 1 @@ -58407,6 +57574,7 @@ fotomatonweb.es, 1 fotomodel.cf, 1 fotomodels.tk, 1 +fotonbolivia.com.bo, 1 fotonippon.com, 1 fotontechnik.pl, 1 fotonza.ru, 1 @@ -58423,6 +57591,7 @@ fotostudio87.nl, 0 fotostudiobasic.tk, 1 fotosubmarina.tk, 1 +fotosyeventos.es, 1 fototaniej.pl, 1 fototjansterkalmar.se, 1 fototutorial.tk, 1 @@ -58438,7 +57607,6 @@ foucheplumbers.com, 1 foudufafa.de, 0 fougereettralala.fr, 1 -found.com, 1 foundationalucc.com, 1 foundationassure.com, 1 foundationforfamilies.org, 1 @@ -58448,7 +57616,6 @@ foundationrepairasheville.com, 1 foundationrepairbasementwaterproofingtn.com, 1 foundationrepairchicagoil.com, 1 -foundationsasha.org, 1 foundationspecialisteast.com, 1 foundationspecialistmi.com, 1 foundchurch.co.uk, 1 @@ -58486,7 +57653,6 @@ fourseasonssunroomsyosset.com, 1 fourstrategy.de, 1 fourwaysplumber24-7.co.za, 1 -fourwheeltrends.com, 1 fousekis.tk, 1 fousetmoney.tk, 1 foutras.com, 1 @@ -58515,9 +57681,7 @@ foxdemos.ml, 1 foxdev.co, 1 foxdirectory.tk, 1 -foxes.no, 1 foxeworks.net, 1 -foxfoxgo.com, 1 foxholehq.net, 1 foxing.club, 1 foxite.me, 1 @@ -58538,7 +57702,6 @@ foxtrials.com, 1 foxtrotfm.tk, 1 foxus.lt, 1 -foxy-it.com.ua, 1 foxycredit.com, 1 foxygf.com, 1 foxytubes.com, 1 @@ -58568,7 +57731,6 @@ fpnet.tk, 1 fpnpmcdn.net, 1 fpoe.eu, 1 -fppq.org.br, 1 fprinnovaciones.es, 1 fprl39.ru, 1 fprojects.lv, 1 @@ -58613,7 +57775,6 @@ fragmentspuren.de, 1 fragmentus.tk, 1 fragnation.tk, 1 -fragnet.net, 0 fragolabs.com, 1 fragstore.net, 1 fragzona.tk, 1 @@ -58695,10 +57856,9 @@ framinghampd.gov, 1 frammenti.tk, 1 framomans.nl, 1 -framotec.de, 1 fran.cr, 1 franc-token.com, 1 -franc-token.fr, 1 +franca-ravet.eu, 1 francabellarsi.tk, 1 france-cartouches.fr, 1 france-chien.fr, 1 @@ -58816,7 +57976,6 @@ franklintownshipcarbonpa.gov, 1 franklintwpbeavercopa.gov, 1 franklinvillagemi.gov, 1 -frankly.ch, 1 frankmungoattorney.com, 1 franksgreatoutdoors.com, 0 franksiler.com, 1 @@ -58874,7 +58033,6 @@ frasesparaface.com.br, 1 frasestop.com, 1 frasestop.com.br, 1 -fraseteca.com.br, 1 fratellisbt.it, 1 fratelliscarrone.com, 1 fratellistomboli.it, 1 @@ -58883,7 +58041,6 @@ fraternitynetworkest.ga, 1 fraternityphotosers.ga, 1 fraternityphotosest.ga, 1 -fratia.com, 1 fratiicazanoi.ro, 1 fratreunioners.ga, 1 fratreunionest.ga, 1 @@ -58989,6 +58146,7 @@ free-apply.com, 1 free-barcode-generator.net, 1 free-bitco.ml, 1 +free-braindumps.com, 1 free-cms.tk, 1 free-codecs.com, 1 free-generate.tk, 1 @@ -59079,6 +58237,7 @@ freedomkiaparts.com, 1 freedomonline.bg, 1 freedomonthenet.org, 1 +freedomravenswood.co.nz, 1 freedomreporting.com, 1 freedomrepository.com, 1 freedomsanctuary.co.uk, 1 @@ -59133,7 +58292,6 @@ freeme.gq, 1 freemedia.tech, 1 freemegamovies.com, 1 -freememesdownload.in, 1 freemilf.org, 1 freemilfpics.com, 1 freeminecraftmaps.tk, 1 @@ -59210,7 +58368,6 @@ freesports.ml, 1 freestart.hu, 1 freesteam.net, 1 -freesteam.org, 1 freestylemartialarts.tk, 1 freesunday.tk, 1 freetagboards.tk, 1 @@ -59263,7 +58420,6 @@ freifunk-myk.de, 1 freifunk-remscheid.de, 1 freightcenter.com, 1 -freightinsightservice.com, 1 freightscore.net, 1 freitas.org, 1 freitasbastos.com.br, 1 @@ -59353,10 +58509,8 @@ freshrss.eu, 1 freshrss.nl, 1 freshsexpics.com, 1 -freshsheetmusic.com, 1 freshsnap.org.au, 1 freshtest.tk, 1 -freshwave.gr, 1 fresno.tk, 1 fresnocountyjobs.gov, 1 fresnofloodcontrol.gov, 1 @@ -59398,7 +58552,6 @@ friederes.lu, 0 friederloch.de, 1 friedhelm-wolf.de, 1 -friedhoff.com, 1 friedli.info, 1 friedrich-foto-art.de, 1 friedrich.report, 1 @@ -59567,7 +58720,7 @@ fronterasblog.tk, 1 frontierbrasil.tk, 1 frontierclimate.com, 1 -frontiermovinghtx.com, 1 +frontiermovinghtx.com, 0 frontiernav.net, 1 frontiernetworks.co.uk, 1 frontiers.nl, 1 @@ -59594,7 +58747,7 @@ frosty-gaming.xyz, 1 frosty.sk, 1 frosty.style, 1 -frostymr.com, 1 +frostymr.com, 0 frostysummers.com, 1 frothy285.com, 1 froufe.com, 0 @@ -59640,7 +58793,6 @@ fruitfits.com, 1 fruitfulenglish.com, 1 fruition.co.jp, 1 -fruitiquewholesale.com.au, 1 fruitjuicetab.ch, 1 fruitlandia.gov, 1 fruitlandmi.gov, 1 @@ -59797,7 +58949,6 @@ fuck.it, 1 fuckar.ch, 1 fuckcf.cf, 1 -fuckebayscalpers.com, 1 fuckedintraffic.com, 1 fuckimm.com, 1 fucknazis.cf, 1 @@ -59814,7 +58965,6 @@ fuckxichina.com, 1 fuckyou.monster, 1 fuckyoupaypal.me, 1 -fudaoyuan.com, 1 fuddittu.tk, 1 fudgeapps.co.uk, 1 fudgeapps.uk, 1 @@ -59832,7 +58982,6 @@ fuelco.com.au, 1 fuelcycle.com, 1 fueleconomy.gov, 1 -fuelfinance.sa, 1 fuelgalicia.tk, 1 fuelingfilms.com, 1 fuelpumpu.com, 1 @@ -59866,6 +59015,7 @@ fuhui-zhs.com, 1 fuhuiapac-zh.com, 1 fuhuiapps.com, 1 +fuhuiasia-zh.com, 1 fuhuicorporate.com, 1 fuhuifinance.com, 1 fuhuiglobal-zh.com, 1 @@ -59880,7 +59030,6 @@ fuhuiofficial.com, 1 fuhuionline.com, 1 fuhuiso.com, 1 -fuhuistation.com, 1 fuhuistocks.com, 1 fuhuitoutiao.com, 1 fuhuitouzi.com, 1 @@ -59932,8 +59081,6 @@ fulgaz.com, 0 fulgentoncology.com, 1 fulgenzis.com, 1 -fulgurant.com, 1 -fulihua.com, 1 fulisex.com, 1 fuliwang.info, 1 full-hd.info, 1 @@ -59963,7 +59110,6 @@ fullmoondesignhouse.tk, 1 fullmoonhentai.tk, 1 fullpaisa.com, 1 -fullsafe.com, 1 fullsize.ml, 1 fullsizefordclub.tk, 1 fullsolar.com, 1 @@ -60012,12 +59158,10 @@ fundacaoedp.pt, 1 fundacaoeveris.com.br, 1 fundacion.in, 1 -fundacionasilo.es, 1 fundacionfade.org, 1 fundacionfranciscofiasco.org, 1 fundacionindigo.tk, 1 fundacionlaboral.org, 1 -fundacionminutodigital.org, 1 fundacionsiempreadelante.org, 1 fundacionsilverina.org, 1 fundacjamatkiewy.pl, 1 @@ -60052,7 +59196,6 @@ funeralshowers.ga, 1 funeralshowest.ga, 1 funerare-cazacu.com, 1 -funerare24.ro, 1 funfactorleeds.co.uk, 1 funfacts.cz, 1 funfm.tk, 1 @@ -60192,7 +59335,6 @@ funy.eu.org, 1 funzack.cf, 1 fuoriporta.com, 1 -fupeng.com, 1 fur-shop.tk, 1 fur.mt, 1 fur.red, 1 @@ -60234,7 +59376,6 @@ furnfurs.com, 1 furnishedproperty.com.au, 1 furnishmyhome.ca, 1 -furniteco.com, 1 furniture-for-home.tk, 1 furniture-warehouse.co.za, 1 furnitureconcept.co.uk, 1 @@ -60260,6 +59401,7 @@ furrycdn.org, 1 furrycon.top, 1 furrycraft.ga, 1 +furryfandomclub.cn, 0 furrytech.network, 1 furs.town, 1 fursandfur.tk, 1 @@ -60308,6 +59450,7 @@ fusionauth.io, 1 fusionbd.net, 1 fusioncx.com, 1 +fusiondelave.com, 1 fusiondiagnostics.in, 1 fusionespeluqueria.es, 1 fusionfacades.co.uk, 0 @@ -60318,7 +59461,6 @@ fusionplatter.eu, 1 fusions.co.jp, 1 fusionstudios.tk, 1 -fusiontaxes.com, 1 fuso.net, 1 fussball.pt, 1 fussballmanager.de, 1 @@ -60339,7 +59481,6 @@ futarara.ga, 1 futaritomo.tk, 1 futaroulette.com, 1 -futbito.com, 1 futbol-tv.tk, 1 futbolistasveteranas.com, 1 futbolmodesto.tk, 1 @@ -60381,7 +59522,6 @@ futurefund.gov.au, 1 futurefundapp.com, 1 futuregrowthva.com, 1 -futureimmigration.net, 1 futuremadein.eu, 1 futurenode.dk, 1 futureofyoucdc.sg, 1 @@ -60417,7 +59557,6 @@ fuyu.moe, 1 fuzenet.net, 1 fuzhi.com, 1 -fuzigames.com, 1 fuzion.co.th, 1 fuzoku-h.com, 0 fuzoku-sodan.com, 1 @@ -60433,7 +59572,6 @@ fveevaete.com, 1 fvg.io, 1 fvivas.com, 1 -fvledilizia.it, 1 fvr-concept.be, 1 fw-einsatz.de, 1 fwaux.de, 1 @@ -60463,9 +59601,7 @@ fxcg-education.com, 1 fxci.com, 1 fxcm-arabic.com, 1 -fxcm-asia.com, 1 fxcm-chn.com, 1 -fxcm-global.com, 1 fxcm-id.com, 1 fxcm-markets.com, 1 fxcm-online.com, 1 @@ -60484,6 +59620,7 @@ fxcmbullion.com, 1 fxcmchn.com, 1 fxcmglobal-zh.com, 1 +fxcmglobal-zhs.com, 1 fxcmglobal.com, 1 fxcmhub.com, 1 fxcmidn.com, 1 @@ -60530,7 +59667,6 @@ fyndiq.se, 1 fyndloggan.se, 1 fyndus.de, 1 -fynesdesigns.com, 1 fyol.pw, 1 fyou.co, 1 fyp-aiman.com, 1 @@ -60612,7 +59748,6 @@ ga-digitazion.com, 1 ga-part.ru, 1 ga.fr, 1 -ga4wp.com, 1 gaaog.com, 1 gaasuper6.com, 1 gabalakarvansarayhotel.az, 1 @@ -60661,10 +59796,11 @@ gabriella.cf, 1 gabriellabastos.tk, 1 gabriellearruda.com, 1 +gabrielquesada.com, 1 gabrielrm.dynu.net, 1 gabrielsimonet.ch, 1 gabrielsteens.nl, 1 -gabrielvillarreal.com, 1 +gabrielvillarreal.com, 0 gabrielyin.com, 0 gabryjeluk.tk, 1 gabskent.de, 1 @@ -60677,6 +59813,7 @@ gachea.cl, 1 gacheamotors.cl, 1 gachiyase.com, 1 +gachoki.com, 1 gachter.name, 0 gachw.org, 0 gaci88play.com, 1 @@ -60684,7 +59821,6 @@ gacirenin.tk, 1 gackowski.tk, 1 gadaj.eu, 1 -gadalkindom.ru, 1 gadanie.cf, 1 gadanie.ml, 1 gadatel.ml, 1 @@ -60707,7 +59843,7 @@ gadgetmaniac.tk, 1 gadgets-cars.com.es, 1 gadgets-mall.com, 1 -gadgets4all.pt, 1 +gadgets4all.pt, 0 gadgetsandwearables.com, 1 gadgetsgigabytesandgoodwill.com, 1 gadgetshome.ml, 1 @@ -60738,10 +59874,8 @@ gagnerenfant.tk, 1 gagop.org, 0 gagramore.cf, 1 -gagygnole.ch, 0 gaiafood.co, 1 gaiamiacola.it, 1 -gaianutri.fr, 1 gaijin.network, 1 gailfellowsphotography.com, 1 gailingen.de, 1 @@ -60854,7 +59988,6 @@ galinkltd.com, 1 galinos.gr, 1 galio.lt, 1 -galiuzvejoti.org, 1 galive.ga, 1 galizae-sports.tk, 1 gallagher.com, 1 @@ -61083,6 +60216,7 @@ gamhealth.net, 1 gamilab.no, 1 gamindustri.fr, 1 +gaminfo.com, 1 gaming-club.tk, 1 gaming-dice.tk, 1 gaming-life.tk, 1 @@ -61090,6 +60224,7 @@ gaming-online.tk, 1 gaming.cz, 1 gamingaktier.com, 1 +gamingat.work, 1 gamingblogx.com, 1 gamingboard.eu, 1 gamingdirectory.com, 1 @@ -61141,7 +60276,6 @@ gandour.com, 0 gangbangs.tk, 1 ganggalbichler.at, 1 -ganglioslinfaticos.com, 1 gangnamcool.com, 1 gangnamoffices.com, 1 gangrulz.tk, 1 @@ -61163,7 +60297,6 @@ gao.rocks, 1 gao4.pw, 1 gaodebo.com, 1 -gaodu.com, 1 gaoice.top, 1 gaoinnovation.gov, 1 gaoinnovationlab.gov, 1 @@ -61174,7 +60307,6 @@ gaon.network, 1 gaoqirun.com, 1 gaos.org, 1 -gaotong.com, 1 gaozih.com, 1 gap150.jp, 1 gapfa.ro, 1 @@ -61230,9 +60362,9 @@ gardenroomsdirect.co.uk, 1 gardensuperstore.com.au, 1 gardentotable.org, 1 -garder.me, 1 gardinenzubehoer.tk, 1 gardinia.ae, 1 +gardinolsson.se, 1 gardnerbender.com, 1 garduri-electrice-animale.ro, 1 gardurialuminiuiasi.ro, 1 @@ -61261,7 +60393,6 @@ garmonia.tk, 1 garmtech.com, 1 garmtech.email, 1 -garnerseo.co.uk, 1 garnetnv.com, 1 garnishandglaze.com, 1 garnix-openair.de, 1 @@ -61323,7 +60454,6 @@ gas-online.cz, 1 gas-proekt.tk, 1 gas.tn, 1 -gasar.com, 1 gasb87leaseaccounting.com, 1 gasbarkenora.com, 1 gasdetect.com.br, 1 @@ -61331,7 +60461,6 @@ gasesdelaguajira.com, 1 gasfitermaipu.cl, 1 gasgipfel.de, 1 -gashalot.com, 1 gasherde.tk, 1 gashtline.ir, 1 gasigasy.mg, 1 @@ -61339,7 +60468,6 @@ gasiorek.com.pl, 1 gasketech.com.au, 1 gasmar.cl, 1 -gasometria.com, 1 gaspard-ulliel.tk, 1 gaspard12aout.ca, 1 gasparesganga.com, 1 @@ -61355,6 +60483,7 @@ gassyukumenkyoguide.com, 1 gastarbajter.tk, 1 gastepress.com, 1 +gastfamilie.de, 1 gasthausbauernhof.ch, 1 gasthaustalacher.ch, 1 gastonvietto.tk, 1 @@ -61380,7 +60509,6 @@ gate-tower-eye-clinic.com, 1 gate.sc, 1 gate2home.com, 1 -gate4you.com, 1 gatechhotel.com, 1 gategroup.com, 1 gatehub.net, 1 @@ -61408,6 +60536,7 @@ gatilagata.com.br, 1 gatilhoarmas.com.br, 1 gatitlesearch.com, 1 +gatlinheatandair.com, 1 gatlink.tk, 1 gatomix.net, 1 gator34.com, 1 @@ -61420,7 +60549,6 @@ gaudi-renove.com, 1 gaumenverfuehrer.de, 1 gauravswarnkar.com, 1 -gauravtiwari.org, 1 gaurl.ga, 1 gautam-iiith.tk, 1 gautam-k.tk, 1 @@ -61430,7 +60558,6 @@ gauting.de, 1 gav.sh, 1 gavarny.be, 1 -gavaskee.com, 1 gaveme.top, 1 gavilanz.ddnsfree.com, 1 gavin.sh, 1 @@ -61464,7 +60591,6 @@ gayga.gov, 1 gaygay.pro, 1 gaygeeks.de, 1 -gayglobaltravel.com, 0 gayhotmovies.com, 1 gaylaktika.com, 1 gaymen.pictures, 1 @@ -61512,6 +60638,7 @@ gbcsummercamps.com, 1 gbdavisplasticsurgery.com, 1 gbecreativeagency.com, 1 +gbedu360.com, 1 gbenson.net, 1 gbes.com, 1 gbfoundation.org, 1 @@ -61522,7 +60649,7 @@ gbiotech.tk, 1 gbisigma.com, 1 gbk-host.de, 1 -gbk-teamplan.de, 1 +gbk-teamplan.de, 0 gbkom.de, 1 gbl.selfip.net, 0 gbm.net, 1 @@ -61536,6 +60663,7 @@ gbronka.com, 1 gbrx.com, 0 gbs.com.ua, 1 +gbs.sa.com, 1 gbsapri.it, 1 gbsvelasco.com, 1 gbthome.com, 1 @@ -61556,9 +60684,7 @@ gchp.ie, 0 gchq.wtf, 1 gclegal.com.au, 0 -gclpower.com, 1 gcmrc.gov, 1 -gcmsnotesrequest.ca, 1 gcn.ie, 1 gcode.space, 1 gcoded.de, 1 @@ -61566,7 +60692,6 @@ gconduit.com, 1 gconstruction.org, 1 gcoption.pro, 1 -gcorevape.ca, 1 gcqd.fr, 1 gcrabtreespaces.com, 1 gcrcollectif.ca, 1 @@ -61594,7 +60719,6 @@ gdefilm.com, 1 gdesemena.ru, 1 gdh.digital, 1 -gdhd.com, 1 gdhinc.com, 1 gdhzcgs.com, 0 gdit.com, 1 @@ -61646,7 +60770,6 @@ geba-online.de, 1 gebaeude-braun.de, 1 gebaeudebilanzierung.de, 1 -gebaeudeklima-schweiz.ch, 1 gebbs.com, 1 gebbscareer.com, 1 gebbsmyspace.com, 1 @@ -61666,11 +60789,11 @@ gechr.io, 1 geckler-ee.de, 0 geckobiketours.com, 1 -geckorosso.au, 1 geckoroutes.com, 0 geckos-geocaching.de, 0 geckosurfschool.com, 1 -geco-lab.it, 1 +geckowithahat.com, 1 +geco-lab.it, 0 gecosan.com, 1 gedachtekaarsje.nl, 1 gedc.wa.gov.au, 1 @@ -61684,7 +60807,6 @@ geek-hub.de, 1 geek-rooms.tk, 1 geek.ch, 1 -geek.tw, 1 geek1.de, 1 geekabit.nl, 1 geekanatomy.com, 1 @@ -61741,7 +60863,6 @@ geekzuprepairs.com, 1 geelaeden.de, 1 geele.co.th, 1 -geely.ci, 1 geemprestimos.com, 1 geenspam.net, 1 geerdsen.net, 1 @@ -61771,6 +60892,7 @@ geilefrauen.pics, 1 geileverhalen.tk, 1 geilmail.de, 1 +geincos.com, 1 geipert.eu, 1 geiriadur.ac.uk, 1 geiser-family.ch, 1 @@ -61785,7 +60907,6 @@ geko.cf, 1 gelaendermanufaktur.de, 1 gelanc.ml, 1 -geland.com, 1 gelaterista.de, 1 gelb-computer.de, 1 gelcocktail.fr, 1 @@ -61805,6 +60926,7 @@ gelkanet.hu, 1 gellenhaza.hu, 1 gellenhazikozoshivatal.hu, 1 +gellis12.ca, 1 gellis12.com, 1 gelmostop.tk, 1 geloft.cf, 1 @@ -61855,8 +60977,6 @@ gemonite.com, 1 gemooi.com, 1 gemquery.com, 1 -gemsen.com, 1 -gemstn.com, 1 gemstones.com, 1 gemwerx.com, 1 gen.cn.eu.org, 1 @@ -62080,17 +61200,13 @@ gentleentuit.be, 1 gentlent.blog, 1 gentlent.cn, 1 -gentlent.co, 1 gentlent.com, 1 gentlent.eu, 1 gentlent.group, 1 gentlent.help, 1 -gentlent.info, 1 gentlent.io, 1 -gentlent.org, 1 gentlent.tech, 1 gentlent.uk, 1 -gentlent.us, 1 gentlent.xyz, 1 gentlentapis.com, 1 gentlentgroup.com, 1 @@ -62098,7 +61214,6 @@ gentmuziekstad.be, 1 gentoo-blog.de, 0 gentooblog.de, 1 -gentouch.com, 1 gentrack.com, 0 gentryarkansaspd.gov, 1 gentrydeng.cn, 1 @@ -62111,7 +61226,6 @@ genuwine.com, 1 genuxtsg.com, 1 genxreviewest.ga, 1 -genya.it, 1 genyo.com.br, 1 genz.co.nz, 1 genzia.ga, 1 @@ -62133,7 +61247,6 @@ geoconvention.ga, 1 geodatasource.com, 0 geodecoder.com, 1 -geodesic-tents.com, 1 geodesign.tk, 1 geodesist-msk.ru, 1 geodnet.com, 1 @@ -62144,10 +61257,10 @@ geoffmyers.com, 1 geoffreyrichard.com, 1 geoffsec.org, 1 -geofit.ru, 1 geoflowerstudio.com, 1 geoforex.ro, 1 geofox.eu, 1 +geofox.org, 1 geogas.com.au, 1 geogr-helv.net, 1 geografia-peru.tk, 1 @@ -62213,6 +61326,9 @@ georgesand.be, 1 georgeshobeika.cf, 1 georgeslasaucisse.fr, 1 +georgesriverbusiness.com, 1 +georgesriverbusiness.com.au, 1 +georgesriverlocal.com.au, 1 georgestaupin.com, 1 georgestone.ca, 1 georgetownohio.gov, 1 @@ -62267,6 +61383,7 @@ geothermalproducts.info, 1 geotrack.email, 1 geotracsolutions.com, 1 +geotrellis.io, 1 geotrust.com.ru, 1 geotruth.net, 1 geourl.me, 1 @@ -62293,8 +61410,6 @@ gerber-construction.com, 1 gerbil.tk, 1 gerbils.tk, 1 -gerbyte.co.uk, 1 -gerbyte.com, 1 gerbyte.uk, 1 gerd-frank.com, 1 gerda.nl, 1 @@ -62303,6 +61418,7 @@ gerenciadeedificios.com, 1 gerer-mon-foyer.fr, 1 geret.cl, 1 +gerganamarkova.com, 1 gergoladi.me, 1 geriartriya.ru, 1 gerimileva.com, 1 @@ -62322,8 +61438,6 @@ germaniumsoft.com, 1 germanmasterpainters.nz, 1 germanophobia.tk, 1 -germanpavilion.com, 1 -germanpay.com, 1 germanpest.pro, 1 germanrhymes.de, 1 germanrojas.ga, 1 @@ -62333,8 +61447,6 @@ germantownwi.gov, 1 germantrip.tk, 1 germanyague.com, 1 -germanymade.com, 1 -germanypay.com, 1 germanytravel.ga, 1 germanytravelguide.ml, 1 germfr.ee, 1 @@ -62369,7 +61481,6 @@ geschmackspiloten.de, 0 geschwinder.net, 1 geseduc.cl, 1 -gesellig.com, 1 gesentorno.tk, 1 gesetz.tk, 1 gesica.cloud, 1 @@ -62406,15 +61517,13 @@ get-your-business.tk, 1 get.gov, 1 get.how, 1 -get2career.com, 1 -get2mod.com, 1 getabear.com, 1 getacrane.co.uk, 1 getahearing.com, 1 getaldea.com, 1 getalink.ga, 1 getalitools.ru, 1 -getanresources.com, 1 +getanresources.com, 0 getanswer.ga, 1 getar.tk, 1 getaskoll.at, 1 @@ -62522,7 +61631,6 @@ getmello.org, 1 getmeloan.org, 1 getment.io, 1 -getmerch.eu, 1 getmimo.com, 0 getmojito.com, 0 getmonero.cz, 1 @@ -62586,7 +61694,7 @@ gett-group.com, 1 getteamninja.com, 1 gettext.tk, 1 -getthefriendsyouwant.com, 1 +getthefriendsyouwant.com, 0 getthejobicanhelp.com, 1 getthink.co.uk, 1 getthinkndti.co.uk, 1 @@ -62597,7 +61705,6 @@ gettingsmarteraboutthesmartgrid.org, 1 gettingtvers.ga, 1 gettopquality.com, 1 -gettrust.com, 1 getts.ro, 1 getts.shop, 1 gettwo.ml, 1 @@ -62611,7 +61718,6 @@ getwashed.net, 1 getwatchy.com, 1 getwemap.com, 1 -getword.com, 1 getwork.tk, 1 getworkshopmanuals.com, 1 getwsodo.com, 1 @@ -62671,7 +61777,6 @@ gfcleisure.co.uk, 1 gfcnieuws.com, 1 gfcorp.jp, 1 -gfedating.com, 1 gfestival.fo, 1 gfgmmarketing.com, 1 gfiber.com, 1 @@ -62708,9 +61813,9 @@ gg9297.co, 1 gg9397.com, 1 gg9728.co, 1 +ggaustraliagames.com, 1 ggb.world, 1 ggchamber.com, 1 -ggcp.com, 1 ggddrenthe.nl, 1 ggdrop.com, 1 ggdrop.top, 1 @@ -62745,7 +61850,6 @@ ghazals.tk, 1 ghazi.im, 1 ghbtns.com, 1 -ghcci.com, 1 ghcoaching.mx, 1 ghcr.io, 1 ghe.com, 1 @@ -62787,6 +61891,7 @@ ghostinfluence.com, 1 ghostlight.tk, 1 ghostly.studio, 0 +ghostmail.no, 1 ghostmarket.io, 1 ghostnight.ga, 1 ghostpi.pro, 1 @@ -62854,7 +61959,6 @@ giardiniere.roma.it, 1 giardinoperfetto.com, 1 giat-infotech.com.my, 1 -giatrakos.com, 1 gibberfish.org, 1 gibbon.tk, 1 gibbonedu.org, 1 @@ -62884,7 +61988,6 @@ giebel.it, 1 giedrioukis.lt, 1 gielectrical.com.au, 0 -giemsa.com, 1 gierds.de, 1 gieschke.de, 1 giesela.io, 1 @@ -62897,7 +62000,6 @@ gifsonline.tk, 1 gift.me, 1 gift4ever.tk, 1 -giftbaskets.ru, 1 giftbasketsoverseas.com, 1 giftbasketswindsor.com, 1 giftbit.com, 1 @@ -62915,7 +62017,6 @@ giftofsquare.org, 1 giftomatic.io, 1 giftpoint.io, 1 -giftprinted.com, 1 gifts.best, 1 giftscop.com, 1 giftsenda.com, 1 @@ -62958,7 +62059,6 @@ gigatron.tk, 1 gigawa.lt, 1 gigawattz.com, 1 -gigaway.com, 1 giggear.com.au, 1 gigharborsound.com, 1 gigharborwa.gov, 1 @@ -62975,6 +62075,7 @@ gikovatelojavirtual.com.br, 1 gil.gg, 1 gilandrad.tk, 1 +gilangcp.com, 1 gilbert-schmalriede.de, 1 gilbertosimoni.tk, 1 gilbertsvilleny.gov, 1 @@ -63007,7 +62108,6 @@ giltedge.travel, 1 gim-app.tk, 1 gim.ac.in, 1 -gimahhot.com, 1 gimbal.ca, 1 gimme.money, 1 gimmickbots.com, 1 @@ -63038,7 +62138,6 @@ ginosfiredup.ca, 1 ginospizza.com, 1 gintaresdental.lt, 1 -gintian.com, 1 gintonic.tk, 1 ginv.us, 1 ginx.tv, 1 @@ -63053,7 +62152,6 @@ giomi.com.tr, 1 gion-ent.co.jp, 1 giopiu.it, 1 -giordan.com, 1 giordano.com, 1 giordanomultiservice.it, 1 giorgi.us, 1 @@ -63077,7 +62175,6 @@ gippert-klein.de, 1 gipsplitka.ru, 1 gipuzkoabasket.tk, 1 -giradiscos.com, 1 giraffe.net, 1 giraffeduck.com, 1 giraffenland.de, 1 @@ -63125,6 +62222,7 @@ girsedesign.de, 1 girskii.com, 1 girtby.net, 1 +giryatrija.hr, 1 gis.ee, 1 gisa.gv.at, 1 gisac.org, 1 @@ -63246,12 +62344,12 @@ gjcampbell.co.uk, 1 gjengset.com, 1 gjenopptakelse.no, 1 +gjensidige.no, 1 gjnoonan.co.uk, 1 gjung.com, 1 gk-it.ru, 1 gkanev.com, 1 gkb2.ru, 1 -gkbm.com, 1 gkcmp.com.br, 1 gkconsultancy.tk, 1 gkdforum.eu.org, 1 @@ -63260,14 +62358,12 @@ gkelement.ru, 1 gkepm.com, 1 gkhull.com, 1 -gklearnstudy.in, 1 gklparis.fr, 1 gkmusicindia.tk, 1 gknews.tk, 1 gkoenig-innenausbau.de, 1 gkralik.eu, 1 gkrru4v.xyz, 1 -gks-bildung.ch, 1 gkstyle.net, 0 gku-winterling.de, 1 gkv-gorinchem.nl, 1 @@ -63317,7 +62413,6 @@ glascentro.de, 1 glasdon.com, 1 glase.shop, 1 -glasengel.de, 1 glaserceramics.com, 1 glaserfotografie.de, 1 glasfaser-im-hanseviertel.de, 1 @@ -63329,13 +62424,11 @@ glass-blaster.com, 1 glass.google.com, 1 glass.photo, 1 -glassact.com, 1 +glassact.com, 0 glasschmuck-millefiori.de, 1 -glasschneider.com, 1 glasscometro.com.au, 1 glassellparkschool.org, 0 glassemployees.com, 1 -glasses3d.com, 1 glassfoxowo.com, 1 glasshouse.com.tr, 1 glassicasino.in, 1 @@ -63348,14 +62441,12 @@ glassportal.ca, 1 glassportpapd.gov, 1 glassrainbowtrust.org.je, 1 -glassrepairsperth.com.au, 1 glassrom.org, 1 glassrom.pw, 1 glasssculpture.org, 1 glasstechnics.be, 1 glasswall.com, 1 glassworld.tk, 1 -glaston.com, 1 glastuershop24.de, 1 glaswerk-mellenbach.de, 1 glaswolsite.tk, 1 @@ -63363,7 +62454,6 @@ glauca.digital, 1 glauca.space, 1 glaucoma.uk, 1 -glavfundament.ru, 0 glavred.info, 0 glazedmag.fr, 1 glazkova.ga, 1 @@ -63429,16 +62519,13 @@ glimhome.com, 1 glimpses.tk, 1 glini.net, 1 -glistrr.com, 1 glit.sh, 1 glitchcity.wiki, 1 glitchcomic.tk, 1 glitched.online, 1 -glitery.com, 1 glitterblast.uk, 1 glitteringmariah.tk, 1 glitzerstuecke.de, 1 -glitzybingo.co.uk, 1 glixee.com, 1 glk.academy, 1 glleiloes.com.br, 1 @@ -63467,7 +62554,6 @@ globalacademicgroup.com, 1 globalaccountservice.com, 1 globalairt.com, 1 -globalamend.com, 1 globalbearings.com.au, 1 globalbridge-japan.com, 1 globalbroadcastsolutions.com, 1 @@ -63500,7 +62586,6 @@ globalenv.online, 1 globalepsilon.com, 1 globalfaraday.com, 1 -globalflavorjourney.com, 1 globalformat.de, 1 globalfuhui.com, 1 globalgamingalmanac.com, 1 @@ -63508,7 +62593,6 @@ globalgate.cc, 1 globalgivingtime.com, 1 globalgovernancewatch.org, 1 -globalgrowth.group, 1 globalhealth.gov, 1 globalhomeautomation.ca, 1 globalhomicideers.ga, 1 @@ -63517,6 +62601,7 @@ globalimmigrationvisa.com, 1 globalind.com.au, 1 globalink.tk, 1 +globalinvestorgate.com, 1 globalios.net, 1 globalipaction.ch, 1 globalisierung-fakten.de, 1 @@ -63592,10 +62677,10 @@ globalzonetoday.com, 1 globaz.ch, 1 globe-brasil.tk, 1 +globe.gov, 1 globecollege.nl, 1 globedx.exchange, 1 globegazette.com, 1 -globeinform.com, 1 globelink-group.com, 1 globemusic.es, 1 globepestsolutions.com.au, 1 @@ -63637,7 +62722,6 @@ glorycambodia.com, 1 glorycamrealty.com, 1 gloryhealthcarellc.com, 1 -glorymark.com, 1 glorynonprofit.org, 1 gloryofloveband.tk, 1 gloryofmusic.tk, 1 @@ -63782,7 +62866,6 @@ gnomon-transport.com.ng, 1 gnosco.net, 1 gnosis.bg, 1 -gnosislabs.net, 1 gnostic-union.com, 1 gnrinfo.tk, 1 gns.gov.pt, 1 @@ -63825,10 +62908,8 @@ go.microsoft.com, 1 go.ne, 1 go2archive.nl, 1 -go2biz.com, 1 go2mob.tk, 1 go2sh.de, 1 -go2store.com, 1 go2ubl.nl, 1 go4games.ro, 0 go4it.ro, 0 @@ -63844,6 +62925,7 @@ goaheadireland.ie, 1 goalgrass.com, 1 goalswizard.com, 1 +goalthinking.com.br, 1 goalup.com.br, 1 goanalyse.co.uk, 1 goang.com, 1 @@ -63854,11 +62936,11 @@ goathub.io, 0 goatlord.tk, 1 goatstore.ca, 1 +goaudits.com, 1 gobarrelroll.com, 1 gobebra.com, 1 gobeline.com, 1 gobetweenfilms.com, 1 -gobeyond.ai, 0 gobi.tk, 1 gobiernousa.gov, 1 goblintears.com, 1 @@ -63893,9 +62975,9 @@ godark.uk, 1 godating.tk, 1 godaxen.tv, 1 -godblessus.com, 1 godbo9.com, 0 godclan.hu, 1 +godd-tv.com, 1 goddamnwinnebago.com, 1 goddard.au, 1 goddard.id.au, 1 @@ -63908,7 +62990,6 @@ godish.com, 1 godles.pl, 1 godlovechristchurch.com, 1 -godloveme.com, 1 godmusicapp.com, 1 godnathistorie.dk, 1 godns.ru, 1 @@ -63975,15 +63056,12 @@ gofoodieonline.com, 1 gofoodservice.com, 1 goforcex.top, 0 -gofree.co, 1 gofriends.cf, 1 -gofront.com, 1 gofundhourly.tk, 1 gofundme.com, 1 goge.ml, 1 gogebic.gov, 1 gogetssl.com, 0 -goghini.com, 1 gogle-analytics-srv2456.com, 1 gogle-analytics.com, 1 gogleapis.com, 1 @@ -64047,14 +63125,11 @@ goldchip.com, 1 goldclubcasino.com, 1 goldcoast-plumbing.com.au, 1 -goldcoast.org, 1 goldcoastasian.com, 1 goldcoastit.com.au, 1 goldcoastphotographycourses.com, 1 -goldcoastplumbingcompany.com.au, 1 goldcreek.tk, 1 golddealer.com, 1 -golddeer.com, 1 golden-earring.nl, 1 golden-kamuy.com, 1 golden-sea.tk, 1 @@ -64080,7 +63155,6 @@ goldenhost.ca, 1 goldenhouse.ga, 1 goldeninvestmentbarcelona.com, 1 -goldenjoy.com, 1 goldenkeys.io, 1 goldenmunchbakeshop.com, 1 goldenoaksgolfclub.com, 1 @@ -64109,11 +63183,8 @@ goldfingermusic.tk, 1 goldfm1031.tk, 1 goldfmromania.ro, 1 -goldhabour.com, 1 goldheartassembly.com, 1 goldhill.ml, 1 -goldinna.ir, 1 -goldkid.com, 1 goldkrupp.com, 1 goldloeckchen159.net, 1 goldmanpropertygroup.com, 1 @@ -64137,7 +63208,6 @@ goldwater.gov, 1 goldwaterfoundation.gov, 1 goldwaterscholarship.gov, 1 -goldwish.com, 1 goldysoptic.bg, 1 goldzilla.eu, 1 gole.ms, 1 @@ -64157,7 +63227,6 @@ golfbyzipers.ga, 1 golfbyzipest.ga, 1 golfcabrio.de, 1 -golfcartrentals.gr, 1 golfcarttips.com, 0 golfcleanerers.ga, 1 golfcleanerest.ga, 1 @@ -64213,7 +63282,6 @@ gomicrophone.ml, 1 gomine.tk, 1 gomiso.com, 1 -gommers.org, 1 gommista.roma.it, 1 gomods.link, 1 gomoon.com, 1 @@ -64222,7 +63290,6 @@ gomtz.gq, 1 gon.nl, 1 gon45.com, 1 -gonadotropina.com, 1 gonalops.gq, 1 goncalofontoura.tk, 1 goncalves-admredes.cf, 1 @@ -64234,6 +63301,7 @@ gondawa.com, 1 gondon.tk, 1 gonebald.tk, 1 +gonegocio.net, 1 gonenli.com, 1 gonepal.com, 1 gonerogue.ml, 1 @@ -64262,27 +63330,18 @@ good-luck3500.ga, 1 good-wishes-4-u.ga, 1 gooday.life, 1 -goodbargin.com, 1 goodbeast.com, 1 -goodbenefit.com, 1 goodbits.tech, 1 goodbriar.com, 1 goodchoiceflowers.com, 1 -goodcoat.com, 1 -goodcollection.com, 1 gooddatingsites.ml, 1 gooddayatwork.co.uk, 1 gooddomain.com, 1 gooddomainna.me, 1 goodearth.com.tw, 1 -goodeditor.com, 1 goodees.com, 1 goodenglish.ga, 1 -goodenvironment.com, 1 goodesign.su, 1 -goodface.com, 1 -goodfame.com, 1 -goodfarm.com, 1 goodfarms.com, 1 goodfeatherfarms.com, 1 goodfeels.net, 1 @@ -64297,6 +63356,7 @@ goodjobs.gov, 1 goodkino.ga, 1 goodlandks.gov, 1 +goodlife.co.ke, 1 goodlink.ml, 1 goodlosersest.ga, 1 goodlovelies.com, 1 @@ -64307,11 +63367,8 @@ goodmoodsocken.de, 1 goodold.se, 1 goodopportunity.ga, 1 -goodpawn.com, 1 goodpeople.tk, 1 -goodproof.com, 1 goodryb.top, 1 -goodschain.com, 1 goodseed.nl, 1 goodsex4all.com.br, 1 goodsey.com, 1 @@ -64325,7 +63382,6 @@ goodsync.com, 1 goodtasteofhome.com, 1 goodtea.com, 1 -goodteach.com, 1 goodth.ink, 1 goodtimesrvsales.com, 1 goodtotell.nl, 1 @@ -64365,7 +63421,6 @@ goombi.fr, 1 goondocks.io, 1 goonersworld.co.uk, 1 -goonfleet.com, 1 goontu.be, 1 gooodnews.ga, 1 goooo.info, 1 @@ -64411,7 +63466,6 @@ gorbilet.com, 1 gorbov.tk, 1 gorby.tk, 1 -gorce.com, 1 gorchakov.org, 1 gordas.cf, 1 gordeijnsbouw.nl, 1 @@ -64563,7 +63617,6 @@ gotoexam.tk, 1 gotohomerepair.com, 1 gotolinux.ru, 1 -gotomap.com, 1 gotomi.info, 0 gotomojo.com, 1 gotonet.tk, 1 @@ -64595,6 +63648,7 @@ gotvax.us, 1 gotver.tk, 1 gotzg.de, 1 +gouda-rf.se, 1 goudenharynck.be, 1 goudt.nl, 1 gouforit.com, 1 @@ -64603,19 +63657,15 @@ gougeul.org, 1 goukon.ru, 1 gouplinkit.com, 1 -goupnutrition.com.br, 1 gourgouli.com, 1 gourmetfestival.de, 1 gourmetspalencia.com, 1 gourmetstars.cz, 1 gourmetvitamins.ga, 1 -goushuang.com, 1 -gousou.com, 1 gousto.co.uk, 1 goutsmits-tegelwerken.nl, 1 gouvernement.ga, 1 gouwdata.nl, 0 -gouwen.com, 1 gov-online.go.jp, 1 gov.exposed, 1 gov.ky, 1 @@ -64666,10 +63716,8 @@ gowv.com, 1 goxyshuk.duckdns.org, 0 goyahkles-spirit-to.tk, 1 -goyoyo.com, 1 goz.net.tr, 1 goz.tr, 1 -gozenhosting.com, 1 gp-engineering.se, 1 gp-lightstone.de, 1 gpalabs.com, 1 @@ -64691,6 +63739,7 @@ gpisoftware.com, 1 gpl25.ml, 1 gplans.us, 1 +gpldesigners.com, 1 gplintegratedit.com, 1 gpltimes.club, 1 gpltimes.com, 0 @@ -64709,7 +63758,6 @@ gps4net.com, 1 gps4net.eu, 1 gpsarena.ro, 1 -gpsbag.com, 1 gpsblackbox.com, 1 gpsfix.cz, 1 gpskoordinaten.de, 1 @@ -64723,15 +63771,12 @@ gpthub.gg, 1 gptunnel.kz, 1 gptunnel.ru, 1 -gpu-society.org, 1 gpu.nu, 1 gpwatimes.org, 1 gpwih.com, 1 gpwmd-portal.org, 1 gpz500s.tk, 1 gq-magazine.co.uk, 1 -gqms.com, 1 -gqyyingshi.com, 0 gr.pn, 1 gr.search.yahoo.com, 0 gr4vy.com, 1 @@ -64771,7 +63816,6 @@ gracieuniversity.com, 1 gracodesign.eu, 1 gradedblue.com, 1 -gradelink.com, 1 gradenotify.com, 1 gradhoodies.ca, 1 gradient9.com, 1 @@ -64792,11 +63836,6 @@ gradyt.com, 1 graecum.org, 1 graeskmad.dk, 1 -graetgossip.com, 1 -graetintelligence.com, 1 -graetnew.com, 1 -graetnewsnetwork.com, 1 -graetreport.com, 1 graf-igor.ch, 1 graf.re, 1 grafana.com, 1 @@ -64860,7 +63899,6 @@ grampage.ru, 1 gramtarang.org.in, 1 gran-hermano.tk, 1 -grana.top, 1 granagroup.eu, 1 granalacant.tk, 1 granary-demo.appspot.com, 0 @@ -64894,13 +63932,13 @@ grandcountydronepilot.com, 1 grande-rock.tk, 1 grande.coffee, 1 -grandepresion.com, 1 grandesmaisons.fr, 1 grandfallscamp.com, 1 grandfieldok.gov, 1 grandfootball.tk, 1 grandhomemx.com, 1 grandhotelbrno.cz, 1 +grandhotelswanage.co.uk, 1 grandi-books.gq, 1 grandiegames.com, 1 grandisco.tk, 1 @@ -64909,14 +63947,12 @@ grandislevt.gov, 1 grandmarine.es, 1 grandmasfridge.org, 0 -grandmass.com, 1 grandmasternetwork.com, 1 grandmusiccentral.com.au, 1 grandpachy.tk, 1 grandpad.biz, 1 grandpad.net, 1 grandpadusercontent.com, 1 -grandpcd.com, 1 grandprixradio.be, 1 grandprixradio.nl, 1 grandrapidsmn.gov, 1 @@ -64928,10 +63964,8 @@ grandviewgynecology.ca, 1 grandviewheights.gov, 1 grandwailea.com, 1 -grandwill.com, 1 grandworldnghiduong.com, 0 granfort.es, 0 -granfutbol.com, 1 grangecon.tk, 1 grangette.eu, 1 grani.gq, 1 @@ -64980,7 +64014,6 @@ grantsolutions.gov, 1 granttwpstclairmi.gov, 1 granulate.io, 1 -graonatural.com.br, 0 grape33.com, 1 grapee.jp, 1 grapeintentions.com, 1 @@ -64988,8 +64021,6 @@ graph.org, 1 graphe.gq, 1 graphene.software, 1 -graphenecompany.com, 1 -grapheneenergy.com, 1 grapheneengine.com, 1 grapheneos.ca, 1 grapheneos.com, 1 @@ -64999,7 +64030,6 @@ grapheneos.org, 1 grapheneos.ovh, 1 grapheneos.social, 1 -graphenepower.com, 1 graphic-schools.com, 1 graphic-shot.com, 0 graphicatwork.com, 1 @@ -65018,7 +64048,6 @@ grapholio.net, 1 graphpaper.studio, 1 graphviewer.tk, 1 -grapixo.com, 1 grapplinginsider.com, 1 grasboom35plus.nl, 1 grasdealer.com, 1 @@ -65070,6 +64099,7 @@ gravelylawn.com, 1 gravelymower.com, 1 gravescountyky.gov, 1 +gravicgroup.com, 1 gravilink.com, 1 gravirovshik.ru, 1 gravitascreative.net, 1 @@ -65217,8 +64247,6 @@ green-wood.com, 1 green.com.do, 1 green1052.com, 1 -green4good.ca, 1 -greenaddress.it, 1 greenangels.com.ua, 1 greenartistsswiss.ch, 0 greenassembly.fr, 1 @@ -65236,7 +64264,6 @@ greenconcern.com, 1 greencore.com, 1 greencross.cf, 1 -greencups.com, 1 greencybersec.com, 1 greencyprus.com, 1 greendaylivecrew.tk, 1 @@ -65268,11 +64295,12 @@ greengorych.io, 1 greengov.gov, 1 greengrocery.tk, 1 -greenhandy.com, 1 greenhats.de, 1 +greenheritage.com.pl, 1 greenhillhosting.com, 1 greenholiday.tk, 1 greenhollowbowmen.tk, 1 +greenhost.net, 1 greenhous-technology.tk, 1 greenislandgroupny.com, 1 greenislemn.gov, 1 @@ -65281,7 +64309,6 @@ greenlakecountywi.gov, 1 greenland-estate.tk, 1 greenland-organic.com, 1 -greenleft.org.au, 1 greenlifetour.tk, 1 greenlighttreeservices.com, 1 greenline.financial, 1 @@ -65308,7 +64335,6 @@ greenroach.ru, 1 greenroom.tk, 1 greenrushdaily.com, 1 -greensad36.ru, 1 greensboro.com, 1 greensborocc.org, 1 greensborosecuritycameras.com, 1 @@ -65376,7 +64402,6 @@ gregmc.ru, 1 gregmckeown.com, 1 gregmilton.com, 1 -gregmilton.org, 1 gregmote.com, 1 grego.pt, 1 gregoirow.be, 1 @@ -65518,6 +64543,7 @@ grindgore.tk, 1 grinmore.com, 1 grinned.tk, 1 +grinnellksroots.com, 1 grinnellplanes.com, 1 grinnellplans.com, 1 grinpis.tk, 1 @@ -65527,7 +64553,6 @@ gripencrossfit.gq, 1 gripnijmegen.rip, 1 gripopit.nl, 1 -gripsealwaterproofing.com.au, 1 gripvol.nl, 1 gripwenab.cf, 1 grishavirus.cf, 1 @@ -65553,7 +64578,6 @@ groeneoldtimer.nl, 1 groener-schulze.com, 1 groenlinks.nl, 1 -groenoordbv.nl, 1 groentebesteld.nl, 1 groenteclub.nl, 1 groentefruitzeep.com, 1 @@ -65660,6 +64684,7 @@ groups.google.com, 1 groupsgyani.com, 0 groupsite.blue, 1 +groupvhm.com, 1 groupx.tk, 1 groutandseal.co.nz, 1 grove-archiv.de, 1 @@ -65681,26 +64706,24 @@ growatiopex.com, 1 growbydata.com, 1 growbyrabbit.com, 1 -growcodile.com, 1 growebmarketing.com, 0 growery.org, 1 growglam.com, 1 -growidentity.com, 1 growingallthings.co.uk, 1 growinghumankindness.com, 1 growinguncomfortable.com, 1 -growitsecure.com, 1 growledlamp.fr, 1 growme.gq, 1 growth-rocket.com, 1 growth.design, 1 growthagent.com, 1 growthandrenewal.ca, 1 +growthauction.com, 1 growthbutton.in, 1 growthlab.com.my, 1 growthoutpatient.com, 1 growthseedconsulting.com, 1 -growthservicesinc.com, 1 +growthservicesinc.com, 0 growthsimulationest.ga, 1 growthtoysers.ga, 1 growthtoysest.ga, 1 @@ -65769,10 +64792,8 @@ grupo-rbd.com, 1 grupo-zoom.com, 1 grupoalbedo.com.br, 1 -grupoandrey.com.mx, 1 grupoauxteclic.com, 1 grupobit.net, 1 -grupocnj.com.br, 1 grupodcasa.tk, 1 grupodecoroinhaspnsa.tk, 1 grupodepasajeros.tk, 1 @@ -65798,7 +64819,6 @@ grupomutual.fi.cr, 1 grupomwr.com, 1 grupooncoclinicas.com, 1 -grupopalmadorada.com, 1 grupoparco.com, 1 grupopilau.com.br, 1 grupoproabienesraices.com.mx, 1 @@ -65807,6 +64827,7 @@ grupos.cf, 1 gruposanjose.tk, 1 gruposousa.pt, 1 +grupotorivac.com, 1 grupovendap.com, 1 grupovisabeira.com, 1 gruppa.ml, 1 @@ -65837,7 +64858,6 @@ gryphzia.cf, 1 gryte.tk, 1 grzegorzchomutowski.pl, 1 -grzesiak.com, 1 gs-pflege.de, 1 gs-schlossberg.de, 1 gs93.de, 1 @@ -65873,7 +64893,7 @@ gsmmedia.tk, 1 gsmr.org, 1 gsmsale.nl, 1 -gsmsolutions.co.rs, 0 +gsmsolutions.co.rs, 1 gsmtool.tk, 1 gsmvermist.tk, 1 gsp.com, 1 @@ -65883,7 +64903,6 @@ gsrank.org, 1 gsrc.io, 1 gss.ind.br, 1 -gst.name, 1 gstackrankers.com, 1 gstehlik.com, 1 gstrans.bg, 1 @@ -65942,7 +64961,6 @@ gtupgrade.eu, 1 gtxmail.de, 1 gtxthere.tk, 1 -gtzq.com, 1 gu153gx.uk, 1 guachinchestenerife.com, 1 guadagnare.info, 1 @@ -65957,8 +64975,6 @@ guamcourts.gov, 1 guanggaonet.com, 1 guangjiangk.com, 1 -guangku.com, 1 -guanlu.com, 1 guanquan.com, 1 guanxiong.com, 1 guanzhong.ca, 1 @@ -66016,7 +65032,6 @@ guejarsierra.tk, 1 guell.email, 1 guelo.ch, 1 -guelphcondopros.com, 1 guelphhydropool.com, 1 guendra.dedyn.io, 1 guenstiger-it-support.ch, 1 @@ -66065,7 +65080,7 @@ guhei.net, 1 guhenry3.tk, 1 guhsdaz.org, 1 -guiabroker.com, 1 +guiaconsejosescolares.org, 1 guiadelautoconsumosolar.es, 1 guiaextra.com, 1 guiahotelera.com.co, 1 @@ -66115,10 +65130,11 @@ guidetosanjuans.com, 1 guidetostlucia.com, 1 guidetourism.tk, 1 +guidingdementia.com, 1 +guidingdementia.org, 1 guidinglightapostolic.com, 1 guidoclub.fr, 1 guidopedia.ga, 1 -guigen.com, 1 guild.xyz, 1 guilded.gg, 1 guildgearscore.cf, 1 @@ -66173,7 +65189,6 @@ gulfcoastfirm.com, 1 gulfcoastwaterauthoritytx.gov, 1 gulfdinar.com, 1 -gulffamilyclinic.com, 1 gulfstream.ru, 0 gulfvestors.com, 1 gulkhannasir.tk, 1 @@ -66227,16 +65242,12 @@ guochanren.com, 1 guoda.art, 1 guogetv.com, 1 -guoke.com, 1 guolaoban.xyz, 1 guolaw.ca, 1 -guomai.com, 1 guoman.com, 1 guopin.com.cn, 1 guozeyu.com, 1 -guozheng.com, 1 guozhenhao.com, 0 -guping.com, 1 gupy.io, 1 gura.moe, 1 gurbetilan.com, 0 @@ -66302,7 +65313,6 @@ gutenburger-marburg.de, 1 gutendag.ga, 1 gutetexte.tk, 1 -gutex.de, 0 guthabenkarten-billiger.de, 1 gutieli.com, 1 gutierrezvidal.tk, 1 @@ -66427,7 +65437,6 @@ gymagine.ch, 1 gymbase.ml, 1 gymbunny.de, 1 -gymedin.com, 1 gymguyzclearwater.com, 1 gymguyzstpete.com, 1 gymguyztampa.com, 1 @@ -66442,7 +65451,6 @@ gymnastic.cf, 1 gymnastic.ga, 1 gymnastic.gq, 1 -gymnastic.ml, 1 gymnastic.tk, 1 gymnasticbodies.com, 1 gymnastikfitness.se, 1 @@ -66487,6 +65495,7 @@ gzonemu.ga, 1 gztelli.ch, 1 h-advisors.global, 1 +h-clinic.com.ua, 1 h-e-a-t.com, 1 h-gac.gov, 1 h-i-ambacht.nl, 1 @@ -66522,7 +65531,6 @@ h2gonc.gov, 1 h2hc.email, 1 h2insaat.com, 1 -h2o-securities.com, 1 h2ocoin.org, 1 h2ole.com, 1 h2omusic.tk, 1 @@ -66638,8 +65646,6 @@ hack-net.gq, 1 hack.fi, 1 hack2kbc.servehttp.com, 1 -hackabate.com, 1 -hackabate.net, 1 hackablestuff.cf, 1 hackade.org, 0 hackadena.com, 1 @@ -66735,7 +65741,6 @@ hadaly.fr, 1 hadan-it.com, 0 hadanoshika.com, 1 -hadassah.moscow, 1 haddos.tk, 1 hades-black.biz, 1 hades-black.com, 1 @@ -66756,7 +65761,6 @@ hadotifpc.in, 1 hadouk.in, 1 hadouken.tk, 1 -hadoverde.com, 1 hadrienbbt.fr, 1 hadroncms.com, 1 hadrons.org, 1 @@ -66810,11 +65814,9 @@ hahnbowersock.net, 1 haibao.club, 1 haibara-ai.cn, 1 -haichuang.com, 1 haiduc.tk, 1 haifaworld.tk, 1 haifengz.com, 0 -haifun.com, 1 haigle.com, 1 haihuan.com, 1 haileybury.com.au, 1 @@ -66846,7 +65848,6 @@ hairextensionshop.tk, 1 hairextensionstore.tk, 1 hairextensionsuk.tk, 1 -hairfalls.com, 1 hairfitwolvega.nl, 1 hairgrowth.cf, 1 hairgrowth.gq, 1 @@ -66873,7 +65874,6 @@ hairywomenpics.com, 1 haislipcorp.com, 1 haitaka.cc, 1 -haitang.com, 1 haitangsoshu.com, 0 haitangsoushu.com, 0 haitou.tk, 1 @@ -66913,6 +65913,7 @@ hakurei.ga, 1 hakurei.win, 1 hal-9th.space, 1 +hal-jp.net, 1 halacs.hu, 1 halagroup.ml, 1 halalbooking.com, 1 @@ -66969,6 +65970,7 @@ hallandwilcox.com.au, 1 hallcopainting.com, 1 hallelujahsoftware.com, 1 +halleplaces.de, 1 hallettxn.com, 1 halli.tk, 1 halliday.work, 1 @@ -66994,6 +65996,7 @@ hallways.tk, 1 halneff.ga, 1 halo.fr, 1 +haloandre.com, 1 halocredit.pl, 0 halocrm.io, 1 halogenos.org, 1 @@ -67003,6 +66006,7 @@ haloobaloo.com, 1 halopedia.org, 1 haloperidol.cf, 1 +halopsa.com, 1 haloscenter.com, 1 halovanic.org, 1 halpin.tk, 1 @@ -67021,14 +66025,13 @@ hamarimarriage.tk, 1 hamartrophy.cf, 1 hamaslul.com, 1 -hamasu.com, 1 hamave.nl, 0 hambook.org, 1 hambot.fr, 1 hamburg1.de, 1 hamburgcode.com, 1 -hamburger-polo-club.de, 1 hamburger-reinigung.de, 1 +hamburger-umzuege.de, 1 hamburger-wirtschaft.de, 1 hamburgerbesteld.nl, 1 hamburgerland.tk, 1 @@ -67075,7 +66078,6 @@ hammerofthor-india.com, 1 hammerstorm.ga, 1 hammertonbarbados.com, 1 -hamminga.nl, 1 hammondwi.gov, 1 hamoominim.tk, 1 hamoup.com, 1 @@ -67132,7 +66134,6 @@ handballinside.de, 1 handballmania.tk, 1 handbrake.fr, 1 -handcity.com, 1 handcuffedgirls.me, 1 handelsbanken.co.uk, 1 handelsbanken.com, 1 @@ -67140,7 +66141,6 @@ handelsbanken.fi, 1 handelsbanken.no, 1 handelsbanken.se, 1 -handelsbeurs.com, 1 handheldsound.com, 1 handhockeyers.ga, 1 handhockeyest.ga, 1 @@ -67171,13 +66171,11 @@ handmadeselling.com, 1 handmadetutorials.ro, 1 handphones.tk, 1 -handpiece.com, 1 handpresso.com, 1 handsender-express.com, 1 handsome-samurai.jp, 1 handsomeabel.tk, 1 handsonscience.com.au, 1 -handsontheheart.eu, 1 handstandstudio.ga, 1 handsup.dance, 1 handtales.com, 1 @@ -67198,6 +66196,7 @@ handyschaft.de, 1 handysex.live, 1 haneenshirt.com, 1 +hanetf.com, 1 hanewin.net, 1 hanfmuseum.de, 1 hanfoot.tk, 1 @@ -67211,7 +66210,6 @@ hangardasaves.com.br, 1 hangargeek.ml, 1 hanginman.xyz, 1 -hangkei.com, 1 hangout, 1 hangouts.google.com, 1 hangryum.com, 1 @@ -67221,9 +66219,7 @@ hanhardt.org, 1 haniasitek.com, 1 haniha.com, 1 -haninasolo.com, 1 hanisirfan.cf, 1 -haniwadogu-kindai.jp, 1 hanjl.com, 1 hanjuapp.com, 1 hanke.se, 1 @@ -67238,11 +66234,12 @@ hannahandnick.com, 1 hannahbarrettyoga.com, 1 hannaljungberg.tk, 1 +hannas-pretty.com, 1 hannasalzenstein.com, 1 hannehovi.fi, 1 hannekroencke.com, 1 hannes.paris, 1 -hannit.de, 1 +hannit.de, 0 hannoluteijn.nl, 1 hannover-96.tk, 1 hannover-gis.de, 1 @@ -67263,7 +66260,6 @@ hansbruis.tk, 1 hanschconsulting.com, 1 hanschventures.com, 1 -hansee.com, 1 hansen-kronshagen.de, 1 hansen.hn, 1 hanseyachtsag.com, 1 @@ -67297,9 +66293,6 @@ hanzcollection.online, 1 hanzi-trainer.org, 1 hao-zhang.com, 1 -haofeng.com, 1 -haoke.com, 1 -haoming.com, 1 haorenka.co, 1 haoskin.com.tw, 1 haoskin.tw, 1 @@ -67309,7 +66302,6 @@ haozhexie.com, 1 haozi.me, 1 hapfox.de, 1 -hapiao.com, 1 hapijs.cn, 1 hapissl.com, 1 hapivm.com, 1 @@ -67379,7 +66371,6 @@ happymoney.com, 1 happymothersday.tk, 1 happynight.tk, 1 -happypawsjournal.com, 1 happypixeldesigns.com, 1 happyplantparent.com, 1 happyproject.in, 1 @@ -67418,10 +66409,8 @@ harahanla.gov, 1 harajiplastic.ir, 1 harakeke.net, 1 -harald-d.dyndns.org, 1 harald-pfeiffer.de, 1 harambo.cf, 1 -harapanrakyat.com, 1 harapecorita.com, 1 harapjunk.hu, 1 harasov.tk, 1 @@ -67434,6 +66423,7 @@ harbor.com, 1 harborbyte.com, 1 harborhillsdaycamp.com, 1 +harborspringslistings.com, 1 harboursport.co.nz, 1 hard-drive-recovery-blog.tk, 1 hard.email, 1 @@ -67473,7 +66463,6 @@ hardnet.cz, 1 hardnode.org, 1 hardnoiser.tk, 1 -hardpay.com, 1 hardrain980.com, 0 hardrock.tk, 1 hardrocksportsbook.com, 1 @@ -67488,6 +66477,7 @@ hardtodo.org, 1 hardwa.re, 1 hardwake.tk, 1 +hardware64.de, 1 hardwareforum.ga, 1 hardwarelog.in, 1 hardwarelogin.com, 1 @@ -67504,8 +66494,6 @@ harfordpark.org, 1 harfordvotes.gov, 1 hargamobilmu.com, 0 -harghita.com, 1 -hargita.com, 1 hari-katha.tk, 1 hari-tech.com, 1 haribilalic.com, 1 @@ -67535,6 +66523,7 @@ harmony-labradoodles.nl, 1 harmony.co.id, 1 harmonyeg.net, 1 +harmonyencoremdm.com, 1 harmonyfarm.com, 1 harmonyheadspa.hu, 1 harmonylife.ro, 1 @@ -67678,7 +66667,6 @@ hasbara.tk, 1 haschrebellen.de, 1 hasdf.de, 1 -hasecuritysolutions.com, 1 haselsteiner.me, 1 hasenmueller.de, 1 hasgeek.com, 1 @@ -67694,7 +66682,6 @@ hashi.icu, 1 hashi.sbs, 1 hashiconf.com, 0 -hashicorp.com, 0 hashimah.ca, 1 hashimoto-jimusho.com, 1 hashinteractive.com, 0 @@ -67781,7 +66768,6 @@ haughtonla.gov, 1 haugr.net, 1 hauller.ch, 1 -haulpackaging.com, 1 hauntedcastle.tk, 1 hauntedhouserecords.co.uk, 1 hauntedtruth.tk, 1 @@ -67818,6 +66804,7 @@ hautetime.com, 1 hautsache-friesoythe.de, 1 hautsdefrance.fr, 1 +hautzentrum-innenstadt.de, 1 havaci.tk, 1 havadurumu15gunluk.org, 1 havana-club.com, 1 @@ -67840,7 +66827,7 @@ haven-staging.cloud, 1 havencyber.com, 1 havenhandscare.co.uk, 1 -havenstudios.com, 1 +havenquilters.com, 1 haventoday.org, 0 haverford.com, 1 havernbenefits.com, 1 @@ -67879,7 +66866,6 @@ hawkmachinery.com.au, 1 hawkofgeorgia.com, 1 hawkrovers.tk, 1 -hawksguild.com, 0 hawle-service.at, 1 hawler.tk, 1 hawo.academy, 1 @@ -67889,7 +66875,6 @@ hay.email, 1 hayai.space, 1 hayalgucu.net, 1 -hayalhanephotography.com, 1 hayalmeyal.com, 1 hayashi-rin.net, 1 hayatmurat.tk, 1 @@ -67960,7 +66945,6 @@ hbgshop.cf, 1 hbh.sh, 1 hbility.eu, 0 -hbl-stahl.de, 1 hbl.com, 1 hblbb.com, 1 hblwrk.de, 1 @@ -68072,7 +67056,6 @@ hdtvblogsest.ga, 1 hdtvboarders.ga, 1 hdtvboardest.ga, 1 -hdunited.com, 1 hdv.paris, 1 hdv12.horse, 1 hdview.co.uk, 1 @@ -68098,7 +67081,6 @@ heade.cf, 1 headed2.com, 1 headforcloud.com, 1 -headhuntercolombia.com, 1 heading2australia.ga, 1 headlight.tech, 1 headlineclub.gr, 1 @@ -68118,7 +67100,6 @@ headwayapp.co, 1 healdsburg.gov, 1 healinfoods.com, 1 -healingfoundation.org.au, 1 healingmatters.ca, 1 healingriverscounseling.net, 0 healingthenaturalway.cf, 1 @@ -68135,7 +67116,7 @@ health-ashlandcounty-oh.gov, 1 health-click.com.tw, 1 health-e.org.za, 1 -health-ecore.com, 1 +health-ecore.com, 0 health-in-mind.org.uk, 1 health-match.com.au, 1 health-plan-news.com, 1 @@ -68267,7 +67248,6 @@ healthfitstore.com, 1 healthflavor.ga, 1 healthfleet.ga, 1 -healthfoam.com, 1 healthfortwaltonbeach.tk, 1 healthfortworth.tk, 1 healthfrederick.tk, 1 @@ -68399,6 +67379,7 @@ healthsantaana.tk, 1 healthsantaclara.tk, 1 healthscience.tk, 1 +healthscopeservices.com, 1 healthseason.ga, 1 healthseattle.tk, 1 healthsession.ga, 1 @@ -68453,6 +67434,7 @@ healthyarizona.tk, 1 healthyarkansas.tk, 1 healthybeauty365bn.com, 1 +healthybrewhub.com, 1 healthyburn.tk, 1 healthychoices.tk, 1 healthyclinic.tk, 1 @@ -68518,6 +67500,7 @@ heartlandcu.com, 1 heartlandmosaic.com, 1 heartlandtownandcountry.tk, 1 +heartmountaintech.com, 1 heartofamericaservicecompany.com, 1 heartofgod.tk, 1 heartoftexaseye.com, 1 @@ -68597,6 +67580,7 @@ hebronnh.gov, 1 hec-espace-entreprise.ch, 0 hec.global, 1 +hec.org.au, 1 hecco.io, 1 heccubus.tk, 1 hechaocheng.ga, 1 @@ -68791,6 +67775,7 @@ helenevanwunnik.tk, 1 helenkellersimulator.org, 1 helenmarie.ie, 1 +helenmcguinness.online, 1 helensmithpr.co.uk, 1 helenssjoholm.cf, 1 helenssjoholm.ga, 1 @@ -68840,8 +67825,10 @@ heliosvoting.org, 0 heliport-moscow.ru, 1 heliport-parts.ru, 1 +helisimmer.com, 1 helium.computer, 1 heliumtech.tk, 1 +heliwing.com, 1 helix.am, 1 helixagencyservices.com, 0 helixternak.com, 1 @@ -68855,7 +67842,6 @@ hellblast.tk, 1 hellendumanrealty.com, 1 hellenicagora.co.uk, 1 -hellenichandmade.com, 1 hellenicmusicacademy.com, 1 hellerarko.de, 1 hellfreak.tk, 1 @@ -68906,7 +67892,6 @@ hellosayge.com, 1 hellosells.com, 1 hellosixpackabs.com, 1 -helloskip.com, 0 hellosmoove.co.uk, 1 hellosmoove.com, 1 hellotandem.com, 1 @@ -68971,7 +67956,6 @@ helppc.com.ua, 1 helprb.ru, 1 helpscoutdocs.com, 1 -helptasker.com, 1 helptasker.net, 1 helptasker.org, 1 helptasker.ru, 1 @@ -68992,7 +67976,6 @@ helsi.me, 1 helsingfors.guide, 1 helsinginlaakariyhdistys.fi, 0 -helsinki.systems, 1 helsinki.tools, 1 helst.org, 1 heluna.tk, 1 @@ -69008,7 +67991,6 @@ hemdian.com, 1 hemi.xyz, 1 hemkop.se, 1 -hemmens.eu, 1 hemmersbach.com, 1 hemnet.se, 1 hemnia.com, 1 @@ -69020,6 +68002,7 @@ hen.ee, 1 hen.ne.ke, 1 henchtechnology.com, 1 +hendersonchambers.co.uk, 1 hendersoncountyil.gov, 1 hendersondepo.com, 1 hendersonhouse.org, 1 @@ -69074,7 +68057,6 @@ henriksoderlund.com, 1 henrilammers.nl, 1 henrimalhas.pt, 1 -henriquediogo.com, 1 henrri.net, 1 henry.gg, 1 henryalanbrown.com, 1 @@ -69097,6 +68079,7 @@ henryocallaghan.com, 1 henrys.glass, 1 henryveraonline.com, 1 +henryveraonline.net, 1 hensiek.com, 1 hensin.com, 1 hentai-paradise.fr, 1 @@ -69174,7 +68157,6 @@ herdwilliam.ml, 1 herdwilliam.tk, 1 herealways.tk, 1 -herecafe.com, 1 heredapoxetine.gq, 1 hereditary.us, 1 herefordlighthouse.org, 0 @@ -69210,6 +68192,7 @@ hermanbrouwer.nl, 1 hermandevries.com, 1 hermann-hesse-kolleg.de, 1 +hermann-wagener.de, 1 hermanncomm.com, 1 hermanoscarrera.tk, 1 hermanwallace.com, 1 @@ -69256,15 +68239,12 @@ heronhallacademy.org.uk, 1 heroofkings.com, 1 heroplusgroup.com, 0 -heroway.com, 1 heroxin.com, 1 -herp.careers, 1 herpderpderpderp.com, 1 herpes-no.com, 1 herq.top, 0 herr-webdesign.de, 1 herrald-skeeleren.tk, 1 -herramientasbazarot.com, 1 herrderzeit.de, 1 herregruppa.no, 1 herrenblut.tk, 1 @@ -69299,7 +68279,6 @@ herzberg.site, 1 herzfuersoziales.at, 1 herzig.cc, 1 -herzlos.com, 1 herzpfa.de, 1 herzzuherz.de, 1 hes.com.cy, 1 @@ -69345,6 +68324,7 @@ hetfundament.team, 1 hethely.ch, 1 hetiservices.com, 1 +hetjop.nl, 1 hetkomtnooitmeergoed.nl, 1 hetmanrecovery.com, 1 hetmedialab.nl, 1 @@ -69361,7 +68341,6 @@ heute.training, 1 heutger.de, 1 heutger.net, 1 -hev.edu.ee, 1 hevenerfeld.de, 1 hevenkin.cn, 1 hevertonfreitas.com.br, 1 @@ -69418,6 +68397,7 @@ hey-staging.com, 1 hey.com, 1 hey.pw, 1 +heybilly.io, 1 heyblogging.com, 0 heybookmark.ga, 1 heybookmark.gq, 1 @@ -69425,6 +68405,7 @@ heybyrdie.com, 1 heydenbluth.de, 1 heydorff.duckdns.org, 1 +heydudd.com, 1 heyfiesta.com, 1 heyfordpark.com, 0 heyfranky.com, 1 @@ -69433,7 +68414,6 @@ heyitsfree.net, 1 heyjoecoffee.com, 1 heyjoflyer.win, 1 -heyjournal.com, 1 heylogin.com, 1 heynowbots.com, 1 heyomg.com, 1 @@ -69452,6 +68432,7 @@ hf51-domeinen.nl, 1 hf51.nl, 1 hfa3.org, 1 +hfh-gmbh.de, 1 hfholidays.co.uk, 1 hfikq8.cf, 1 hflsdev.org, 0 @@ -69460,7 +68441,6 @@ hfsctx.gov, 1 hfsg-habicht.at, 1 hfvuejq.pro, 1 -hfwk.com, 1 hfx405.de, 1 hfxtwppa.gov, 1 hg.eu, 1 @@ -69468,6 +68448,7 @@ hg.python.org, 1 hg0086.la, 0 hg71839.com, 1 +hga670.com, 1 hgb.club, 1 hgc369.com, 1 hgcityca.gov, 1 @@ -69544,12 +68525,10 @@ hiczp.com, 1 hidalgo-project.eu, 1 hidashin.co.jp, 1 -hidayatullah.com, 1 hidbo.de, 1 hidden-audio.de, 1 hidden.gq, 1 hiddenbyleaves.tk, 1 -hiddencafebcn.com, 0 hiddendragon.ml, 1 hiddenempire.tk, 1 hiddenhand.finance, 1 @@ -69578,7 +68557,6 @@ hidir.dyndns.org, 1 hidra.tk, 1 hidrasecurity.com, 1 -hidrolimpiadora.com.es, 1 hidrolimpiadorasprofesionales.org, 1 hidromar.es, 1 hidroshoping.com.br, 1 @@ -69616,7 +68594,6 @@ high-heels.se, 1 high-roller.ru, 1 high-school-atka.ga, 1 -high-solar.com, 1 high-tech.tk, 1 high-toxic.de, 1 high-way.me, 1 @@ -69664,7 +68641,6 @@ highrank.ga, 1 highrank.tk, 1 highschooldublin.com, 1 -highship-industries.com, 1 highskillacademy.com, 1 highskilled.tk, 1 highsky.ir, 1 @@ -69673,7 +68649,6 @@ highspenfc.tk, 1 highspire.gov, 1 highsprings.gov, 1 -highstage.com, 1 highstakesdb.com, 1 hightech.construction, 1 hightechbrain.net, 1 @@ -69692,7 +68667,6 @@ highwayzen.org, 1 highworldnet.ga, 1 higilopocht.li, 1 -higsegeirl.com, 1 higueras.tk, 1 hiig.edu.ee, 1 hiitrepublic.com.au, 1 @@ -69701,6 +68675,7 @@ hiiw.de, 1 hik-cloud.com, 1 hikagestudios.com, 1 +hikarilan.life, 1 hikarinet.tk, 1 hikawa.top, 1 hiker.cool, 1 @@ -69721,7 +68696,7 @@ hilarymundial.tk, 1 hilbertwi.gov, 1 hilde.link, 1 -hiledge.com, 1 +hilfikernet.ch, 1 hilfikers.com, 1 hilinecreators.tk, 1 hilite.org, 1 @@ -69757,7 +68732,6 @@ hilltopviewsonline.com, 1 hilnu.com, 1 hilomrm.com, 1 -hiltonfoundation.org, 0 hilunetan.tk, 1 hima.com, 1 himalaja-kender.hu, 1 @@ -69771,7 +68745,6 @@ himeji-kanbee.jp, 1 himens.com, 0 himic.ru, 0 -himiku.com, 1 himj.de, 1 himnosycanticos.org, 1 himpler.com, 0 @@ -69830,7 +68803,6 @@ hipnos.net, 1 hipnosecriciuma.com.br, 1 hipnosisypsicoterapia.com, 1 -hipnosisyterapias.com, 1 hipnotista.tk, 1 hipocampo.org, 1 hipodromcasusu.tk, 1 @@ -69865,7 +68837,6 @@ hireshield.com, 1 hirevets.gov, 1 hirevo.eu, 1 -hirevue.com, 1 hirewiz.tk, 1 hirezzportal.com, 1 hiring-process.org, 1 @@ -69895,7 +68866,6 @@ his.com, 1 hisax.de, 1 hiseplast.com.br, 0 -hispadent.com.do, 1 hispalazarus.tk, 1 hispania.ml, 1 hispanidad.tk, 1 @@ -69952,7 +68922,6 @@ hitekcomputing.net, 1 hitekmechanical.com, 1 hitel.tk, 1 -hiteshchandwani.com, 1 hitflow.fr, 1 hitflow.net, 1 hitfm.ml, 1 @@ -69961,7 +68930,6 @@ hithouse.tk, 1 hitiles.tk, 1 hitimewine.net, 1 -hititgunesi-tr.com, 1 hititleers.ga, 1 hititleest.ga, 1 hitkey.tk, 1 @@ -70011,6 +68979,7 @@ hiwebsite.tk, 1 hiwiki.tk, 1 hix.fi, 1 +hixy.tk, 1 hiyacar.co.uk, 1 hiyd.uk, 1 hiyoko.group, 1 @@ -70129,7 +69098,6 @@ hmarchat.tk, 1 hmbana.org, 1 hmcdj.cn, 1 -hme360.com, 1 hmforces-railcard.co.uk, 1 hmka.com, 0 hmnd.io, 1 @@ -70144,7 +69112,8 @@ hmy.com, 1 hn.search.yahoo.com, 0 hn122.cc, 1 -hndmd.com, 1 +hnb.lk, 1 +hnec.ly, 1 hnfertilizermachine.com, 1 hnmd9.gq, 1 hnn.net.br, 1 @@ -70161,12 +69130,11 @@ hoahop.tk, 1 hoanghaiauto.vn, 1 hoangvangioi.com, 1 -hoaphathomes.com, 1 hoardit.ml, 1 hoathienthao.com, 1 hoathienthao.vn, 1 hobartok.gov, 1 -hobarttownhotel.com.au, 1 +hobarttownhotel.com.au, 0 hobbiesworld.tk, 1 hobbious.com, 1 hobby-drechselei.de, 1 @@ -70317,7 +69285,7 @@ holandacastro.com, 1 holanuevayork.com, 1 holbrookaz.gov, 1 -holdengreene.com, 0 +holdengreene.com, 1 holdenmaine.gov, 1 holdenmo.gov, 1 holderbekebvba.be, 1 @@ -70376,14 +69344,11 @@ hollandsweb.com, 1 hollandwi.gov, 1 hollermann.eu, 1 -hollingsworthpaul.com, 1 hollistermo.gov, 1 hollmann.international, 1 hollowman.ml, 1 -hollowrap.com, 1 hollowwinds.xyz, 1 holly.lgbt, 1 -holly.pink, 1 hollybanks.net, 1 hollybonnerdesigns.com, 1 hollyforrest.ca, 1 @@ -70657,6 +69622,7 @@ homeforeveryone.tk, 1 homeforfamily.tk, 1 homeformula.ga, 1 +homefortress.space, 1 homeforum.tk, 1 homefromhomecornwall.co.uk, 1 homegang.ga, 1 @@ -70700,10 +69666,10 @@ homelion.ga, 1 homelove.tk, 1 homelovehome.tk, 1 -homelykw.com, 1 homemadetips.ga, 1 homemadetipsers.ga, 1 homemadetipsest.ga, 1 +homemaintenanceservicesindubai.com, 1 homemarks.ga, 1 homemaster-chita.ru, 1 homematicblog.de, 1 @@ -70808,6 +69774,7 @@ hommecontemporain.org, 1 hommels.xyz, 1 homnest.fr, 0 +homnya.com, 1 homo.ga, 1 homo1145.xyz, 1 homofaberevent.com, 1 @@ -70823,7 +69790,7 @@ hompus.nl, 1 homs.design, 1 homyak.gq, 1 -homyhomee.com, 1 +homygo.eu, 1 homyremedies.com, 1 honaragah.com, 1 honatec.tech, 1 @@ -70932,8 +69899,6 @@ hoop.la, 1 hoopa-nsn.gov, 1 hooperlabs.xyz, 1 -hoopernewton.com, 1 -hoopers.club, 1 hoopertechnicalsolutions.com, 1 hooprelief.tk, 1 hoops-inc.com, 1 @@ -70950,7 +69915,7 @@ hopeandhealing.cz, 1 hopeforlorn.tk, 1 hopeforukraine.org.uk, 1 -hopefultexas.com, 1 +hopefultexas.com, 0 hopeharborwellness.com, 1 hopemeet.info, 1 hopemeet.me, 1 @@ -70972,7 +69937,6 @@ hopo.design, 1 hoponmedia.de, 1 hoppenr.xyz, 1 -hopperoofing.com, 1 hoppinjohn.org, 0 hoppy.com, 1 hoppygo.com, 1 @@ -70981,7 +69945,6 @@ hopsfeatherfest.at, 1 hopsmaus-shop.de, 0 hopted.com, 1 -hor.rent, 1 hor.website, 1 horablanquiazul.tk, 1 horaceli.com, 1 @@ -71032,7 +69995,7 @@ hornby.com, 1 horne.com, 1 horneytownbrewing.com, 1 -horngyihyangped.com.tw, 0 +horngyihyangped.com.tw, 1 hornofamerica.com, 1 horntec.at, 1 hornwiesen-grundschule.de, 1 @@ -71236,7 +70199,6 @@ hot-shots-photos.com, 1 hot-spa.ch, 0 hot.ee, 1 -hot.in.th, 1 hot.v.ua, 1 hot101fm.tk, 1 hotaircoldlove.tk, 1 @@ -71282,7 +70244,6 @@ hotel-lacourcarree.com, 1 hotel-le-vaisseau.ch, 0 hotel-leda.com, 1 -hotel-navis.hr, 1 hotel-promyk.pl, 1 hotel-rosner.at, 1 hotel-rosskopf.it, 1 @@ -71293,7 +70254,6 @@ hotel-zurrose.de, 1 hotel3232nyc.com, 1 hotel43.com, 1 -hotelalpino.com, 1 hotelandplace.com, 1 hotelbird.com, 1 hotelbiz.cf, 1 @@ -71303,7 +70263,6 @@ hotelcasadelmar.com, 1 hotelcharlestonsantateresa.com, 1 hotelcoco.co.uk, 1 -hotelconsulado.com.br, 1 hotelcorporate.codes, 1 hotelcorporatecodes.com, 1 hoteldahu.it, 1 @@ -71445,7 +70404,6 @@ houghcovidtest.com, 1 houghcovidtest.com.au, 1 houghtonstatebank.com, 1 -houhuayuan.com, 1 houlang.ac.cn, 1 houraiteahouse.net, 1 hourlyearning.tk, 1 @@ -71476,6 +70434,7 @@ housemart.company, 1 housemouse.tk, 1 houseofaceonline.com, 1 +houseofbrighde.co.uk, 1 houseoffilters.com, 1 houseofhipsters.com, 1 houseofpheromones.com, 0 @@ -71488,15 +70447,14 @@ houseroxrecords.com, 1 housese.at, 1 housesmartdecore.tk, 1 -housesumo.com, 1 housia.cz, 1 housing.com, 1 housingauctions.net, 1 +housingcenter.com, 1 housinglincolncountyor.gov, 1 housingloan.jp, 1 housingokc.gov, 1 housr.in, 1 -housten.com, 1 houston-building-maintenance.com, 1 houston-probate-law.com, 1 houstonaudubon.org, 1 @@ -71508,7 +70466,7 @@ houstoncountyga.gov, 1 houstongaragedoorsrepair.com, 1 houstongraniteguy.com, 1 -houstonhomerevival.com, 1 +houstonhomerevival.com, 0 houstonhughes.tk, 1 houstonlake.gov, 1 houstonlockout.com, 1 @@ -71578,7 +70536,6 @@ howieisawesome.com, 1 howlers.tk, 1 howlinhawk.tk, 1 -howlite.com, 1 howlonghaswilliambeenwaitingforhislicence.uk, 1 howmanymilesfrom.com, 1 howmuch.cf, 1 @@ -71593,7 +70550,6 @@ howsecureismypassword.net, 1 howsmyssl.com, 1 howsmytls.com, 1 -howto-connect.com, 1 howto-outlook.com, 0 howtobehealthy.tk, 1 howtobestraightbook.com, 1 @@ -71629,7 +70585,6 @@ hoyabit.com, 1 hoychivilcoy.tk, 1 hoyenapple.com, 1 -hoyerfamilysaffron.com, 1 hoyosdelespino.tk, 1 hoz-pack.com.ua, 1 hozana.si, 0 @@ -71648,13 +70603,11 @@ hpc.mil, 1 hpccsystems.com, 0 hpeditor.tk, 1 -hpfaucet.xyz, 0 hpfxd.com, 1 hphp.ga, 1 hpisavageforum.com, 1 hpk.edu.ee, 1 hpkp-faq.de, 1 -hplace.com.br, 1 hpm.pt, 1 hpmleadership.com, 1 hpneo-conseil.com, 1 @@ -71664,9 +70617,11 @@ hpscb.com, 1 hpsdigital.hu, 1 hpsldc.com, 1 +hpsq.io, 1 hpthealing.com, 1 hpvtimmerwerken.nl, 1 hqblog.cn, 0 +hqcdn.com, 1 hqsy.net, 1 hqteas.com, 1 hqtrannytube.com, 1 @@ -71772,7 +70727,6 @@ hscomposites.co.nz, 1 hse-dev.com, 1 hse-online.com, 1 -hse-reglementaire.com, 1 hseal.co.uk, 1 hselectricalservices.com, 1 hsg-lumdatal.de, 1 @@ -71804,7 +70758,6 @@ hsts.ovh, 1 hstsbadnosniff.com, 1 hstspreload.appspot.com, 1 -hstspreload.com, 1 hstspreload.de, 1 hstspreload.me, 1 hstspreload.org, 1 @@ -71816,7 +70769,6 @@ hsys.eu, 1 hszemi.de, 1 ht.mk, 1 -ht04.org, 1 htaccessbook.com, 1 htb-email.co, 1 htb-email.com, 1 @@ -71824,7 +70776,6 @@ htb.click, 1 htb.co.uk, 1 htb.uk, 1 -htbap.net, 1 htbemail.co, 1 htbemail.co.uk, 1 htbemail.com, 1 @@ -71899,7 +70850,6 @@ httpsecured.net, 1 httpsiseasy.com, 1 httpsispisseasy.com, 1 -httpsnow.com, 1 httpsredirector.com, 1 httpstaak.tk, 1 httpstest.eu, 1 @@ -71915,15 +70865,11 @@ hu.search.yahoo.com, 0 hua-in.net, 1 huabianwa.com, 0 -huachuang.com, 1 huagati.co.th, 1 huagati.com, 1 -huaiming.com, 1 -huajuapan.com, 1 huakai.es, 1 huakai.it, 1 huakan.com, 1 -huaken.com, 1 huang.nu, 1 huangban.org.cn, 1 huangguancq.com, 1 @@ -71949,9 +70895,7 @@ huanqiu1988.com, 1 huanta.tk, 1 huanvm.com, 1 -huanwei.com, 1 huanxu.com, 1 -huanyu.com, 1 huapont.com, 1 huapood.com, 1 huaqian.art, 1 @@ -71986,7 +70930,6 @@ hubilo.com, 1 hublaagram.ml, 1 hubmark.co, 1 -hubnet.fr, 1 hubok.net, 1 hubovra.nl, 1 hubrecht.at, 1 @@ -72077,22 +71020,12 @@ huhao.tk, 1 huhu.cf, 1 huibrotladen.com, 1 -huichun.com, 1 -huicui.com, 1 -huiguniang.com, 1 -huijiao.com, 1 -huijun.com, 1 huiketang.com, 1 huiles-et-olives.fr, 1 -huimin.com, 1 -huimou.com, 1 huininga.com, 1 huininga.nl, 1 huininga.org, 1 -huiri.com, 1 huirongis.me, 1 -huiruan.com, 1 -huirun.com, 1 huis-en-tuin.be, 1 huisaandecosta.nl, 1 huisartsen-ict.nl, 1 @@ -72101,7 +71034,6 @@ huisartsenpraktijkzonnehoed.nl, 1 huisartsenpraktijkzwalm.be, 1 huisdierinfopunt.tk, 1 -huisdiervoordeelshop.nl, 0 huiser.nl, 1 huisfind.nl, 1 huisjeboompje-baby.nl, 1 @@ -72236,7 +71168,6 @@ humuluslupulus.de, 1 humus.tk, 1 huna.viajes, 1 -hunanbank.com, 1 hunaniinfotech.com, 1 hund.io, 1 hund.ml, 1 @@ -72303,7 +71234,6 @@ huntsvillealtransit.gov, 1 huntsvillecottage.ca, 1 huntvac.com, 1 -huntventuregear.com, 1 huny.eu.org, 1 hunzai.tk, 1 huoduan.com, 1 @@ -72314,14 +71244,11 @@ huonit.com.au, 0 huoyankan.com, 1 huoyou.com, 1 -huozhen.com, 1 hup.hu, 0 -hupoyunlar.com, 1 -hurbo.com, 1 hurdafiyatlari.site, 1 +hurdaphysio.fi, 1 hurinkazan2020.com, 1 hurling.net, 1 -hurom.ba, 1 huron.tk, 1 huronsd.gov, 1 hurra-blog.tk, 1 @@ -72335,6 +71262,8 @@ hurriyetseriilan.tk, 1 hurstbourneacresky.gov, 1 hurstiharrell.tk, 1 +hurstvilleentertainmentcentre.com, 1 +hurstvilleentertainmentcentre.com.au, 1 hurt-orange.pl, 1 hurtigrabat.dk, 1 hurtigtinternet.dk, 1 @@ -72350,6 +71279,7 @@ huskyeye.de, 1 huskygifts.com, 1 huskyinc.us, 0 +huskysat.org, 1 huskytaildigital.com, 1 husqvarnamoped.se, 1 hussam.eu.org, 1 @@ -72462,7 +71392,6 @@ hybusiness.it, 1 hycken.com, 1 hyckenberg.com, 1 -hycu.com, 1 hydeparkwinterwonderland.com, 1 hydra-interactive.com, 1 hydra.az, 1 @@ -72479,7 +71408,6 @@ hydroagro.pl, 1 hydrochlorothiazide.gq, 1 hydrochlorothiazide125.ga, 1 -hydrocloud.net, 1 hydrocontrol.hr, 1 hydrocontrolsystems-janssenwaterproofing.com, 1 hydrocontrolsystems.com, 1 @@ -72506,7 +71434,6 @@ hydroturbine.info, 0 hydrozen.io, 1 hydrozone.fr, 1 -hyds.com, 1 hyec.jp, 1 hyex.com.au, 1 hyfood.it, 1 @@ -72556,7 +71483,6 @@ hyperion.gmbh, 0 hyperion.io, 1 hyperionms.com, 1 -hyperjewel.com, 1 hyperlaunch.co, 1 hypermonkey.tk, 1 hypernode.com, 1 @@ -72577,7 +71503,6 @@ hypervsn.com, 1 hypexstore.tk, 1 hyphen.co.za, 1 -hyphenpda.co.za, 1 hypno-thera.fr, 1 hypnobb.com, 1 hypnos.hu, 1 @@ -72588,6 +71513,7 @@ hypnosis.edu, 1 hypnosium.com, 1 hypnotechs.com, 1 +hypnotic.de, 1 hypnotistanbul.com, 1 hypnotizedgirls.ml, 1 hypnovir.us, 1 @@ -72631,7 +71557,6 @@ hyrin.tk, 1 hyrius.net, 1 hyrulekingdom.tk, 1 -hyrules.com, 1 hyrumcity.gov, 1 hys-te-ria.tk, 1 hyser.com.ua, 1 @@ -72663,10 +71588,7 @@ hyzy.fr, 1 hz601.org, 1 hzbk.org, 0 -hzib.com, 1 -hzmpower.com, 1 hzqdl.com, 1 -hzsx.com, 1 hztgzz.com, 1 hzuuuz.top, 1 i--b.com, 1 @@ -72694,7 +71616,6 @@ i-med.com.au, 1 i-office.com.vn, 1 i-on.by, 0 -i-panic.com, 1 i-pinged-everyone.today, 1 i-port-voice.com, 1 i-prince.tk, 1 @@ -72719,7 +71640,6 @@ i10z.com, 1 i18nweave.com, 1 i24.host, 1 -i2capmark.com, 1 i2education.com, 0 i2forensicmasters.com, 1 i2pc.es, 1 @@ -72759,7 +71679,6 @@ iacono.com.br, 0 iactor.co.jp, 1 iactu.info, 1 -iadb.org, 1 iadore.tk, 1 iadschool.com, 1 iadttaveras.com, 1 @@ -72885,7 +71804,6 @@ ibericarmovilsur.es, 1 ibericarreicomsa.es, 1 ibericartechnik.es, 1 -ibesa.com, 1 ibetora.com, 1 ibex.co, 1 ibexpackaging.com, 1 @@ -72926,7 +71844,6 @@ ibra.org.uk, 1 ibrainmedicine.org, 1 ibrave.nl, 1 -ibread.org, 1 ibrom.eu, 1 ibron.co, 0 ibsglobal.co.za, 1 @@ -72947,14 +71864,12 @@ ibvv.cz, 1 ibwc.gov, 1 ibwil.com, 1 -ibyen.com, 1 ibz.be, 1 ic3.gov, 1 ica.coop, 1 ica.org, 1 icade.fr, 1 icafecash.com, 1 -icagency.it, 1 icams-portal.gov, 1 icanbecreative.com, 1 icanhazpass.com, 1 @@ -73023,13 +71938,11 @@ icemyworld.tk, 1 icenter.ee, 1 icentury.ca, 1 -icepharmaceuticals.com, 1 icerockproperties.com, 1 iceshadow.tk, 1 icetechworld.com, 1 icewood-bois.com, 1 icfre.org, 1 -icfree.com, 1 ich-finde-wikipedia-toll.tk, 1 ich-hab-die-schnauze-voll-von-der-suche-nach-ner-kurzen-domain.de, 1 ich-tanke.de, 0 @@ -73078,8 +71991,7 @@ iclinic.ua, 1 icliniq.com, 1 icloud.com, 1 -icmarket.com, 1 -icmtx.com, 1 +icmtx.com, 0 icnagenda.fr, 1 icnc.ga, 1 icnsoft.org, 1 @@ -73118,7 +72030,6 @@ icpc2016.in.th, 1 icpcnj.org, 1 icpcorp.com, 1 -icpe.nl, 1 icq-project.net, 1 icq-world.tk, 1 icq.com, 1 @@ -73232,7 +72143,6 @@ idealbody.gq, 1 idealcontabilidade.net, 0 idealdedetizadorabh.com.br, 1 -idealdream.es, 1 idealga.gov, 1 idealimobiliariabh.com.br, 1 idealize.ml, 1 @@ -73261,7 +72171,6 @@ ideasinlab.com, 1 ideasledgrowth.com, 1 ideasroom.eu.org, 1 -ideau.pl, 1 ideawake.com, 1 ideaweb.de, 1 idec.com, 1 @@ -73391,7 +72300,6 @@ idxforza.com, 1 idysse.com, 1 ie.search.yahoo.com, 0 -ieach.com, 1 ieap.it, 1 iec-telecom.com, 1 iedereenaanzet.nl, 1 @@ -73421,14 +72329,14 @@ iesledzkarjeru.lv, 1 iesm.lk, 1 iesonline.co.in, 1 +iesvegadesanmateo.org, 1 ieval.ro, 1 ievgenialehner.com, 1 iewar.com, 1 iexaminer.org, 1 if-news.ru, 1 -if-sikkerhet.no, 1 if0.ru, 1 -ifacservice.be, 1 +ifacservice.be, 0 ifactfind.com.au, 1 ifactfind.io, 1 ifadian.club, 1 @@ -73475,7 +72383,6 @@ ifort.fr, 1 ifoss.me, 1 ifpi.se, 1 -ifpma.com, 1 ifrabb.fr, 1 iframefinancement.be, 1 ifreemax.ml, 1 @@ -73501,14 +72408,12 @@ ig.me, 1 iga-semi.jp, 1 igad.int, 1 -igaku.com, 1 igame.ml, 1 igamingaffiliateprograms.com, 1 igamingdirectory.com, 1 igamingnews.com, 1 igamingnyheder.dk, 1 igamingpocketdirectory.com, 1 -igamingradio.com, 1 igamingsuppliers.com, 1 igarage.nl, 0 igc-market.ru, 1 @@ -73526,7 +72431,6 @@ iggprivate.com, 1 iggsoft.com, 1 iggsoftware.com, 1 -iggyz.com, 1 igi-2.com, 1 igi.codes, 0 igiftcards.de, 1 @@ -73624,6 +72528,7 @@ ihacker.ai, 1 ihakkitekin.com, 1 ihatethissh.it, 1 +ihaunt.co.uk, 1 ihazurip.com, 1 ihc.im, 1 ihda.org, 1 @@ -73634,12 +72539,18 @@ iheartguys.org, 1 iheatwithoil.com, 1 ihempz.cz, 0 +ihersua.com, 1 +ihersua.com.es, 1 ihersua.es, 1 +ihersua.eu, 1 +ihersua.nom.es, 1 +ihersua.org.es, 1 +ihersua.xyz, 1 +ihk-muenchen.de, 1 ihk-onlinewahl2021.de, 1 ihkk.net, 1 ihls.world, 0 ihmc.us, 1 -ihmmarketing.com, 1 ihmphila.org, 1 ihmsp.org, 1 ihonk.com, 1 @@ -73669,8 +72580,10 @@ iid.sg, 1 iideaz.org, 1 iidentifii.com, 1 +iieccpora.org, 1 iiet.pl, 0 iig-order.com, 1 +iig-qa.com, 1 iihr.res.in, 1 iii-coalition.us, 1 iiid.work, 1 @@ -73680,7 +72593,6 @@ iiinhoj.com, 1 iiipublishing.com, 1 iiit.pl, 1 -iimpress.com, 1 iinehp.com, 1 iinf.in, 1 iinix.com, 1 @@ -73727,7 +72639,6 @@ ikama.cz, 1 ikara.social, 1 ikari-san.tk, 1 -ikaria.com.gr, 1 ikaros.tk, 1 ikarus-itkurs.de, 1 ikazumitsu.tk, 1 @@ -73835,6 +72746,7 @@ ilhan.name, 1 ilhombek.ml, 1 iliad78.net, 1 +iliamna.media, 1 iliastsi.net, 1 ilienonline.com, 1 ilife.bg, 1 @@ -73857,7 +72769,6 @@ ilionsky.com, 1 iljadr.be, 1 ilkeston.cc, 1 -ilkmat.com, 1 ilkofis.com, 1 illaadventure.com, 1 illadrodimerendine.it, 1 @@ -73914,9 +72825,9 @@ ilondres.es, 1 ilonewolfs.com, 1 ilonpolku.fi, 1 -ilosaarirock.com, 1 ilovechina.com, 1 ilovecomputering.com, 1 +iloveecommerce.com.br, 1 ilovefun.tk, 1 ilovegrowingmarijuana.com, 1 iloveherb.ru, 1 @@ -73933,7 +72844,6 @@ ilpiacenza.it, 1 ilpuntomagazine.it, 1 ilpuntosano.it, 1 -ilrg.com, 1 ilrovescio.info, 1 ils-savaient.fr, 1 ils.lt, 1 @@ -73949,6 +72859,7 @@ ilug-ktm.tk, 1 iluman.tk, 1 ilumantio.tk, 1 +ilumina2photo.es, 1 iluminatia.com, 1 ilunion.tk, 1 ilusionistas.tk, 1 @@ -73958,6 +72869,7 @@ ilustrart.art, 1 iluvbooks.org, 1 ilya-potemin-domain.tk, 1 +ilya.top, 1 ilyabakhlin.com, 1 im-a.cricket, 1 im-alter-daheim.ch, 0 @@ -73972,6 +72884,7 @@ im4h.de, 1 im4h.eu, 1 im4h.info, 1 +im66.net, 1 ima-solutions.fr, 1 imadalin.ro, 1 image-cdn.co.uk, 1 @@ -73981,10 +72894,9 @@ image4arab.tk, 1 imagealbums.tk, 1 imagebin.ca, 1 -imageboom.com, 1 imagecom.tk, 1 imageconsultingmalta.com, 1 -imagecurl.com, 1 +imagecurl.com, 0 imagelr.com, 1 imagen891.tk, 1 imagenesdedibujosalapizfacilesdehacer.com, 1 @@ -73994,7 +72906,6 @@ imagequix.com, 1 imagerecall.tk, 1 imagerive.ch, 0 -imagesbank.com, 1 imagetostl.com, 1 imageurs.com, 1 imagevillage.ir, 1 @@ -74067,7 +72978,6 @@ imdbpro.com, 1 imdbresume.com, 1 ime-a-tolerancia-eredmenye.club, 1 -ime.moe, 1 imed.com.pt, 1 imed.pt, 1 imedi.it, 1 @@ -74085,7 +72995,6 @@ imfacademy.com, 1 imforza.com, 0 img.ovh, 1 -img.ren, 1 imgaa.com, 1 imgbb.com, 1 imgen.top, 1 @@ -74094,6 +73003,7 @@ imgmodels.com, 0 imgo.ga, 1 imgo.tk, 1 +imgossip.net, 1 imgup.co, 1 imguploaden.nl, 1 imhealth.co.uk, 1 @@ -74256,7 +73166,6 @@ immospezial.info, 1 immospezial.net, 1 immospezial.org, 1 -immovisual.be, 1 immtel.co, 1 immtel.com, 1 immune.cf, 1 @@ -74312,7 +73221,6 @@ impacto.cw, 1 impactovenezuela.com, 1 impactparcels.co.uk, 1 -impactparcels.com, 1 impactphysio.co.uk, 1 impactpub.ch, 0 impactyou.nl, 1 @@ -74429,7 +73337,6 @@ impulsewebdesign.nl, 1 impulsocristiano.com, 1 imput.net, 1 -imqrscan.com, 1 imranc.ca, 1 imranhossen.ml, 1 imransarwar.com, 1 @@ -74511,7 +73418,6 @@ inboxen.org, 1 inboxsms.tk, 1 inboxxme.com, 1 -inc.studio, 1 incarceratedwombats.com, 1 incarter.ga, 1 incaweb10.es, 1 @@ -74648,7 +73554,6 @@ india-ennenga.ga, 1 india-export.com.ua, 1 india.info, 1 -indiaai.gov.in, 1 indiaexport.com.ua, 1 indiaflowermall.com, 1 indiafm.tk, 1 @@ -74694,10 +73599,7 @@ indianwarriors.tk, 1 indianwellsca.gov, 1 indianwomen.cf, 1 -indiapost.com, 1 indiapostgdsonline.gov.in, 1 -indiascience.in, 1 -indiasec.com, 1 indiatechblogger.cf, 1 indiatourhelp.tk, 1 indiatravel.ml, 1 @@ -74766,7 +73668,6 @@ indogenius.org, 1 indogermantrade.de, 1 indoidnews.ga, 1 -indoittraining.com, 0 indonesiatrip.tk, 1 indoor-kletterwald.de, 1 indoorbattingcages.net, 1 @@ -74807,7 +73708,7 @@ industrialcomputers.com, 1 industrialcontainer.com, 1 industrialgassprings.com, 1 -industrialprecisionmfg.com, 1 +industrialprecisionmfg.com, 0 industriascruz.co, 1 industrilokal.com, 1 industrydecarbonization.com, 1 @@ -74964,7 +73865,6 @@ info4camper.com, 1 infoamin.com, 1 infoapis.net, 1 -infoautonomos.com, 1 infobae.com, 1 infobalkans.com, 1 infobanglanet.tk, 1 @@ -74992,10 +73892,8 @@ infocrypto.pl, 1 infocus.company, 1 infocusvr.net, 1 -infodesk.at, 1 infodis.com, 1 infoduv.fr, 1 -infoeccos.com, 1 infofactory.it, 1 infofarmacos.cl, 1 infoflora.ch, 1 @@ -75055,7 +73953,7 @@ informaciondeciclismo.com, 1 informacionsexual.com, 1 informadb.pt, 1 -informalflowers.com, 1 +informalflowers.com, 0 informasidumay.gq, 1 informassist10.fr, 1 informat.ga, 1 @@ -75086,6 +73984,7 @@ informburo.kz, 1 informeforesea.com.br, 1 informelles.tk, 1 +informeseg.com.br, 1 informspb.tk, 1 inforok.tk, 1 inforopub.tk, 1 @@ -75112,7 +74011,6 @@ infosystem.cf, 1 infotabla.si, 1 infotax24.com.pl, 1 -infoteck.solutions, 1 infotectsecurity.com, 1 infoteka.cf, 1 infotelsystems.com, 1 @@ -75120,7 +74018,6 @@ infotune.nl, 1 infotv.io, 1 infotype.ga, 1 -infovb.org, 1 infoventas.store, 1 infovision-france.com, 1 infowaywebsolutions.com, 1 @@ -75157,7 +74054,6 @@ infraflux.com, 1 infrafuse.com, 1 infrafusion.com, 1 -infragard.org, 1 infragardnational.org, 1 infraget.com, 1 infralicht.nl, 1 @@ -75213,6 +74109,7 @@ infrony.com, 1 infruction.com, 1 infstudios.nl, 1 +infundo.it, 1 infuse-mn.gov, 1 infusemedia.com, 1 infyz.com, 1 @@ -75229,6 +74126,7 @@ ingatlanjogaszok.hu, 1 ingatlanneked.hu, 1 ingbusiness.pl, 1 +ingc.com.tn, 1 inge-r.nl, 1 ingebroer.com, 1 ingegnereambientale.tk, 1 @@ -75258,7 +74156,6 @@ ingkprf.ru, 1 inglebycakes.co.uk, 1 inglesencanada.cf, 1 -inglesfoco.com.br, 1 inglesideonthebaytx.gov, 1 inglesnarede.com.br, 1 inglessantacruz.tk, 1 @@ -75316,6 +74213,7 @@ injerry.com, 1 injigo.com, 0 injuryactive.com, 1 +injurylawyers.com, 1 injurylawyersphoenixaz.com, 1 injust.cf, 1 injust.ga, 1 @@ -75333,7 +74231,6 @@ inkburnest.ga, 1 inkdawgz.com, 1 inkedin.com, 1 -inkedindarkness.com, 1 inkflaremagazine.com, 1 inkforall.com, 1 inkhor.se, 1 @@ -75361,6 +74258,7 @@ inkywanderer.com, 0 inl.gov, 1 inl.int, 1 +inlandwaterwaylistings.com, 1 inlce.com, 1 inlights.io, 0 inlimiters.ga, 1 @@ -75374,7 +74272,6 @@ inlink.ltd, 1 inlink.one, 1 inlocon.de, 1 -inlucknow.org, 1 inlumi.com, 1 inmaaa.cf, 1 inmateintake.com, 1 @@ -75408,14 +74305,12 @@ inner-vision.tk, 1 innerdarkside.tk, 1 innerfence.com, 1 -innerglowessentials.net, 1 innerlifeskills.com, 1 innerlightcrystals.co.uk, 1 innermarkerranch.com, 1 innermindpsychology.com.au, 1 innermostparts.org, 1 innerpeace.tk, 1 -innersafe.com, 1 innerspace.ae, 1 innewsweekly.com, 1 innico.cf, 1 @@ -75438,7 +74333,6 @@ innosec.ch, 1 innosoftfusiongo.com, 1 innosysdelft.com, 1 -innotech.ge, 1 innoteil.com, 1 innoteknology.com, 1 innova-online.at, 1 @@ -75464,10 +74358,10 @@ innovativebuildingsolutions.co.za, 1 innovativeglass.co.nz, 1 innovativeideaz.org, 1 -innovativepergola.com, 1 innovativeplumbingpros.com, 1 innovativetrials.com, 1 innovativeunderwriters.com, 1 +innovent.com, 1 innover.se, 1 innoviafilms.com, 0 innoviahome.com, 1 @@ -75487,7 +74381,6 @@ inolution.com, 1 inomics.com, 1 inondation.ch, 0 -inorbit.io, 0 inorden.se, 1 inoreader.com, 1 inorigo.com, 1 @@ -75500,9 +74393,9 @@ inostudio.ru, 0 inotec.eu, 1 inotic.ir, 1 -inourtime.cn, 1 inovalon.com, 1 inovalon.global, 1 +inovamedia.net, 1 inovangroup.com.tr, 1 inovasirumahku.tk, 1 inovatasarim.com, 1 @@ -75542,7 +74435,6 @@ ins1gn1a.com, 1 insaattedarik.com.tr, 1 insane.studio, 1 -insane.zone, 1 insaneair.co.uk, 1 insanedevs.com, 1 insanepyro.tk, 1 @@ -75561,6 +74453,7 @@ insee.com.vn, 1 insegne.roma.it, 1 insemed.de, 1 +inser.com.co, 1 inserta.tk, 1 insertcoin.fr, 1 insertcoins.net, 1 @@ -75588,21 +74481,18 @@ insiderateers.ga, 1 insiderateest.ga, 1 insidergazette.com, 1 -insiderpie.de, 1 insiders.ga, 1 insiderx.com, 1 insidethefirewall.tk, 1 insidetheigloo.com, 1 insideuniversal.net, 1 insideview.com, 1 -insightfulpsychics.com, 1 insighti.com, 1 insights.plus, 1 insights.solutions, 1 insightsoftware.com, 1 insightsvt.com, 1 insighttv.com, 1 -insignis.in, 1 insinuator.net, 1 insisypheprod.fr, 1 insitepackaging.com, 1 @@ -75617,11 +74507,13 @@ insono.no, 1 insouciant.org, 1 insource.org, 1 +inspiraenterprise.com, 1 inspirascholen.be, 1 inspiration.gr, 1 inspirationallight.com, 1 inspirationalstories.com, 1 inspirationalstories.tk, 1 +inspirator.blog, 1 inspire-av.com, 1 inspired-builds.co.uk, 0 inspired-creations.co.za, 1 @@ -75655,7 +74547,6 @@ insside.net, 1 insst.es, 1 insta-viewer.ml, 1 -instabizmart.com, 1 instacart.careers, 1 instacart.com, 1 instachina.ru, 1 @@ -75672,7 +74563,6 @@ instahub.net, 0 instalamosyreformamos.es, 1 instalatii-pardoseala.ro, 1 -install-solar.co.uk, 1 installation-hotte-cuisine.com, 1 installation-of-xenon.tk, 1 installationdehotte.com, 1 @@ -75720,11 +74610,8 @@ institutoaccesibilidadweb.com, 1 institutoclaro.org.br, 1 institutoessencia.com, 1 -institutofacial.com, 1 institutogiuseppe.com.ar, 1 -institutoiboru.com.br, 1 institutoliderar.edu.co, 1 -institutopensi.org.br, 1 institutovinton.com, 1 instocktho.cc, 1 instride.com, 1 @@ -75770,7 +74657,6 @@ insured-event.tk, 1 insuredcloud.ga, 1 insuredcreativity.com, 1 -insurelife.today, 1 insuremycar.ru, 1 insureon.com, 1 insurethebox.tk, 1 @@ -75789,6 +74675,7 @@ int-ext-design.fr, 1 int-refer.nhs.uk, 1 int21h.jp, 1 +int3.org, 1 int64software.com, 1 intab.io, 1 intafe.co.jp, 1 @@ -75805,6 +74692,7 @@ intecore.com, 1 inteforge.com, 1 integ.jp, 1 +integr8t.net, 1 integra-belgium.be, 1 integraalwelzijn.nl, 0 integrafin.co.uk, 1 @@ -75856,7 +74744,7 @@ intelics.com.au, 1 intelius.cf, 1 intellar.agency, 1 -intellect-ls.com, 1 +intellect-ls.com, 0 intellecta.is, 1 intellective.us, 1 intellectmoney.ru, 1 @@ -75864,7 +74752,6 @@ intellego.de, 1 intellek.io, 1 intellektuaalomand.ee, 1 -intellesense.com, 1 intelliance.eu, 1 intellibill.io, 1 intellicore.cl, 1 @@ -75946,7 +74833,6 @@ intercom.io, 1 intercomcdn.com, 1 intercomcdn.eu, 1 -intercomp-cbu.ru, 1 intercomp.ru, 1 intercomunicador.org, 1 intercomunicadores.org, 1 @@ -76100,12 +74986,12 @@ internetzentrale.net, 1 internetzonei.com, 1 internews24.com, 1 -internewscast.com, 1 interparcel.com, 1 interplex.com, 1 interpol.gov, 1 interpoolme.com, 1 interprete.tk, 1 +interratrade.gr, 1 intersectionconsultancy.co.uk, 1 intersein-landshut.de, 1 intersein-sangha-landshut.de, 1 @@ -76166,7 +75052,6 @@ intlib.cn, 1 intlib.sbs, 1 intlib.us.kg, 1 -intlliesafesolutions.com, 1 intmissioncenter.org, 0 into-the-mountain.com, 1 intomsk.tk, 1 @@ -76215,8 +75100,11 @@ intstyle.com.ua, 1 intsurfing.com, 1 intsys.fi, 1 +intuitionmedicine.org, 1 +intuitionmedicineonline.org, 1 intux.be, 0 intvonline.com, 1 +intvoting.com, 1 intygrate.com, 1 inu.nl, 1 inuba.com, 1 @@ -76226,9 +75114,9 @@ inusasha.de, 1 inuyasha-petition.tk, 1 inuyasi.com, 1 -inv-demo.co.uk, 1 invadecafe.tk, 1 invaded.ga, 1 +invadion.com, 1 invalida.ru, 1 invantive-apps-for-dynamics-crm.com, 1 invantive-apps-for-magento.com, 1 @@ -76243,7 +75131,6 @@ invantive.net, 1 invantive.org, 1 invariax.com, 1 -invasivespeciesinfo.gov, 1 invata-ma.ro, 1 invenio.software, 1 invenpro.tech, 1 @@ -76446,7 +75333,6 @@ ionhowto.com, 1 ionicframework.com, 0 ionicshop.xyz, 1 -ionita.com, 1 ionize.cloud, 1 ionlabs.kr, 1 ionline.ml, 1 @@ -76471,7 +75357,6 @@ iostream.by, 1 iosxr.de, 1 iot-alliances.com, 1 -iotaiy.com, 1 iotaker.jp, 1 iotanodes.org, 1 iotbusinessforum.com.br, 1 @@ -76502,6 +75387,8 @@ iox.is, 1 ioxio-dataspace.com, 1 ioxio-showroom.com, 1 +ioxio.com, 1 +ioxio.io, 1 ip-addr.es, 1 ip-audio.org, 1 ip-cam-pro-cz.com, 1 @@ -76619,7 +75506,6 @@ ipresent.com, 1 iprisk.info, 1 iprjb.org, 0 -ipro.sbs, 1 iprod.it, 1 iproducemusic.com, 1 iproductrepair.com, 1 @@ -76634,7 +75520,7 @@ ipsec.pl, 1 ipsecurelink.com, 1 ipsilon-project.org, 1 -ipsnoticias.net, 1 +ipso.com.tr, 1 ipso.paris, 1 ipso.ro, 1 ipssl.li, 1 @@ -76691,6 +75577,7 @@ iqsecurity.eu, 1 iqsmn.org, 0 iqtechportal.com, 1 +iqxbusiness.com, 1 ir.to, 1 iraanswersers.ga, 1 iraanswersest.ga, 1 @@ -76703,7 +75590,6 @@ iran-oil.tk, 1 iran-speedex.tk, 1 iranactua.tk, 1 -iranbrands.review, 1 irancenter.tk, 1 iranconnect.tk, 1 irandex.ga, 1 @@ -76878,8 +75764,6 @@ irontv.me, 1 ironwaytransport.com, 1 ironwind.ga, 1 -ironwolftechnology.com, 1 -ironwoodlabs.net, 1 ironwoodmi.gov, 1 ironycats.net, 1 iroomz.co.uk, 1 @@ -76976,6 +75860,7 @@ isbaseballstillon.com, 1 isbk.de, 0 isbndirect.com, 1 +isbul.net, 1 isc.org, 0 isc2.org, 0 isc2estoniachapter.ee, 1 @@ -76985,7 +75870,6 @@ iscontrol.com.mx, 1 iscoolentertainment.com, 1 iscribblesolutions.com, 1 -iscrizioniexpofelina.it, 1 iscultas.pp.ua, 1 isde.org, 1 isdecolaop.nl, 1 @@ -77008,6 +75892,7 @@ isg-one.com, 0 isg-tech.com, 1 isgp-studies.com, 1 +isgrenovation.com, 1 ishadow.com, 1 ishamf.com, 1 ishapita.com, 1 @@ -77035,7 +75920,6 @@ ising.pl, 1 isiponline.ca, 1 isis.cloud, 1 -isiso.com.tr, 1 isistomie.com, 0 isitan.com, 0 isitchristmas.com, 1 @@ -77119,13 +76003,11 @@ isliada.org, 1 islief.com, 1 islightdown.today, 1 -islikimas.lt, 1 islipny.gov, 0 islykaithecutest.cf, 1 islykaithecutest.ml, 1 ismail-biber.tk, 1 ismailtoraman.com, 1 -ismailtoraman.com.tr, 1 ismart.org, 1 ismat.com, 0 ismekkurs.com, 1 @@ -77165,6 +76047,7 @@ isolta.lv, 1 isolta.se, 1 isolvedhcm.com, 1 +isongrp.com, 1 isonsecure.com, 0 isontechnologies.com, 1 isopres.de, 1 @@ -77260,7 +76143,6 @@ istec.com.ua, 1 istech.com.tr, 1 istekparcam.com, 1 -istekparcam.com.tr, 1 isterfaslur.com, 1 istevitrin.com, 1 isthatarabic.com, 1 @@ -77363,7 +76245,6 @@ itabenar.tk, 1 itactiq.com, 1 itactiq.info, 1 -itaguai.com, 1 itaiferber.net, 1 itaindustrial.com.br, 1 itaja.com, 1 @@ -77394,7 +76275,6 @@ italianweddingmusicians.com, 1 italianweddingvideographers.com, 1 italiasera.it, 1 -italiataxi.ru, 1 italiatopnews.tk, 1 italiensk-tolk.dk, 1 italik.co.uk, 1 @@ -77402,7 +76282,6 @@ italk.ml, 1 italyinspires.com, 1 italyisbeautiful.com, 1 -italymade.com, 1 italyspecialty.coffee, 1 itamservices.nl, 1 itap.gov, 1 @@ -77412,7 +76291,6 @@ itascacountymn.gov, 1 itaseguroviagem.com.br, 1 itasolution.it, 1 -itauba.com, 1 itbfrance.fr, 1 itbn.hu, 1 itbog.org, 1 @@ -77527,7 +76405,6 @@ itmatournai.tk, 1 itmedicinai.lt, 1 itmindscape.com, 1 -itmoto.com, 1 itms.co.jp, 1 itnet.com.ua, 1 itnota.com, 1 @@ -77536,6 +76413,7 @@ itochan.jp, 1 itochufsm.co.jp, 1 itodentalsetagaya.jp, 1 +itoezichtprotocol.com, 1 itoezichtprotocol.nl, 1 itoma.tech, 1 itondersteuning.eu, 1 @@ -77553,7 +76431,6 @@ itprosmgmt.com, 1 itprotect.pl, 1 itqlatam.com, 1 -itracks.com, 1 itradeit.in, 1 itradenetwork.com, 1 itraffic.cf, 1 @@ -77587,7 +76464,6 @@ itsalan.tk, 1 itsallmath.org, 1 itsanicedoor.co.uk, 1 -itsapetthang.com, 1 itsaw.de, 1 itsayardlife.com, 1 itsayorki.de, 1 @@ -77601,8 +76477,6 @@ itsch-itsche.com, 1 itscitycommerce.com, 1 itsdcdn.com, 1 -itsdho.com, 1 -itsdho.org, 1 itse.com, 1 itsec.link, 1 itsecblog.de, 1 @@ -77610,7 +76484,6 @@ itsecrnd.com, 1 itsecuritycoach.com, 1 itseeze.com, 1 -itself.com, 1 itservis.org, 1 itsevann.com, 1 itsevident.com, 1 @@ -77657,7 +76530,6 @@ itt-shop.com, 1 itt-us.com, 1 ittgame.tk, 1 -ittm.com, 1 ittreservations.com, 1 ittykins.com, 1 itunesgiftcard.in.th, 1 @@ -77688,12 +76560,10 @@ itxuc.com, 1 ity.moe, 1 ityco.com, 1 -ityug247.com, 1 itzahammer.tk, 1 itzamnaxelahomestay.tk, 1 itzap.com.au, 1 itzer.de, 1 -itzgeek.com, 1 itzine.ru, 1 itzkavin.tk, 1 itzlive.tk, 1 @@ -77740,13 +76610,9 @@ ivelop.me, 0 ivendi.com, 1 iventishirts.com, 1 -ivepos.com, 1 ivermectin.gq, 1 -ivermectinc19.com, 1 iversionesdp.com, 1 -ivertubani.com, 1 ivetazivot.cz, 1 -ivetebolos.com.br, 1 ivfausland.de, 1 ivfeny.hu, 1 ivi.cx, 1 @@ -77807,6 +76673,7 @@ iwanttrack.com, 1 iwantyoutocomment.tk, 1 iwasaki-dental-c.jp, 1 +iwascoding.com, 1 iwascoding.de, 1 iwase-eyeclinic.com, 1 iwasfit.com, 1 @@ -77832,6 +76699,8 @@ iwonder.tw, 1 iworksus.com, 1 iwp.ch, 1 +iwsquote.com, 1 +iwstraining.com, 1 iwtsd.gov, 1 iww.me, 0 iww.mx, 1 @@ -77863,6 +76732,7 @@ iyanmv.com, 1 iyassu.com, 1 iyiarastir.com, 1 +iyincaishijiao.com, 1 iyn.me, 1 iyouewo.com, 1 iyoumu.top, 1 @@ -77883,6 +76753,7 @@ izhevsk-news.net, 1 izi-agency.com, 1 izidream.bg, 1 +izimaths.fr, 1 izipik.gq, 1 izitex.shop, 1 izkustvo.com, 1 @@ -77933,7 +76804,6 @@ j-ph.ovh, 1 j-robertson.com, 1 j-step.or.jp, 1 -j-storm.com, 0 j.ac, 1 j.wtf, 1 j00228.com, 1 @@ -78092,7 +76962,6 @@ jacksonvilleal.gov, 1 jacksonvillebeach.gov, 1 jacksonvillega.gov, 1 -jackspub.net, 1 jackstone.tk, 1 jacksutton.info, 1 jacktor.com, 1 @@ -78114,7 +76983,6 @@ jacobs-implantate.at, 1 jacobsmeubels.nl, 1 jacobspctuneup.tk, 1 -jacobtamassiaadvocacia.adv.br, 1 jacobtaylor.id.au, 1 jacool.tk, 1 jacopo.tk, 1 @@ -78130,6 +76998,7 @@ jad.so, 1 jadalaq.com, 1 jadara.info, 1 +jadb.nl, 1 jadchaar.me, 1 jadedmonkey.tk, 1 jadeglobal.com, 1 @@ -78148,7 +77017,6 @@ jaeger.link, 1 jaehyeon.it, 1 jaenparaisointerior.es, 1 -jaepinformatica.com, 1 jaetech.org, 1 jafarmehdipor.ga, 1 jafisportcamp.pl, 1 @@ -78160,6 +77028,7 @@ jagerkin.tk, 1 jagerman.com, 1 jagogame.tk, 1 +jagoti.co.id, 1 jags.tk, 1 jagspecialisters.ga, 1 jagspecialistest.ga, 1 @@ -78176,7 +77045,6 @@ jahner.xyz, 1 jahro.me, 1 jahubar.tk, 1 -jahzara.com, 1 jaialdi.tk, 1 jaiho-zeetoz1server.ga, 1 jailbait.ml, 1 @@ -78189,7 +77057,6 @@ jainnotary.ca, 1 jaion.tech, 1 jaion.xyz, 1 -jaipurescortagency.com, 1 jairocarbonell.com, 1 jairoenfrancien.tk, 1 jairsinho.me, 1 @@ -78206,7 +77073,6 @@ jake.ac, 1 jakegines.in, 1 jakegyllenhaal.ga, 1 -jakemansfield.com, 1 jakerullman.com, 0 jakeslab.tech, 1 jakewales.com, 1 @@ -78244,7 +77110,6 @@ jall.com.br, 1 jallatte.fr, 1 jaloozone.ml, 1 -jaltest.com.pe, 1 jaluzelemoderne.ro, 1 jaluziperde.tk, 1 jam-roll.jp, 1 @@ -78491,7 +77356,6 @@ japornpics-video.com, 1 jappleng.com, 1 jaquelin.tk, 1 -jaquishbiomedical.com, 1 jar.cool, 1 jaraizaboli.tk, 1 jaramilloconstrucciones.pe, 1 @@ -78505,7 +77369,6 @@ jardinesmonumentalescarrizales.com, 1 jardinparaisodeleden.com, 1 jardins-loisirs.com, 1 -jardinstaugustin.com, 1 jaredfernandez.com, 1 jaredkunz.com, 1 jaredonline.tk, 1 @@ -78546,7 +77409,6 @@ jarski.eu, 1 jarvel.com, 1 jarvisairfoil.com, 1 -jas-ac.com, 1 jas-team.net, 1 jasasewaspg.com, 1 jasch.tk, 1 @@ -78571,7 +77433,6 @@ jason-isaacs.tk, 1 jason.red, 1 jasonamorrow.com, 0 -jasonchampagne.fr, 1 jasoncoopermd.com, 1 jasoncosper.com, 1 jasoncs.eu.org, 1 @@ -78608,7 +77469,6 @@ jatekjatek.hu, 1 jatekvasarlas.hu, 1 jateng.press, 1 -jatinpropmart.com, 1 jatransportadora.com, 1 jaumepons.net, 1 jav.hk, 1 @@ -78663,7 +77523,6 @@ jaybrokers.com, 1 jaydehaidar.com, 1 jaydenrichardson.com, 1 -jayf.de, 1 jayfreestone.com, 1 jayfrogel.com, 1 jayharris.ca, 1 @@ -78713,6 +77572,7 @@ jb0.de, 1 jb138.cc, 1 jbarzoutfitters.com, 0 +jbayetsecretariat.be, 1 jbbd.fr, 1 jbbdev.com, 1 jbc88.cc, 1 @@ -78828,7 +77688,6 @@ jcx.se, 1 jd-group.co.uk, 0 jd1.de, 1 -jd777.vip, 1 jdc.io, 1 jdcdirectsales.com, 1 jdcdirectsales.com.ph, 1 @@ -78936,7 +77795,6 @@ jeevanmag.tk, 1 jeevansathi.com, 1 jef.yt, 1 -jeff-chong.com, 1 jeff-dom.ovh, 1 jeff.win, 1 jeffbuswell.com, 1 @@ -78952,6 +77810,7 @@ jeffersoncountysheriffmt.gov, 1 jeffersonknoxohio.gov, 1 jeffersonkyattorney.gov, 1 +jeffersonlandscaping.com, 1 jeffersonohio.gov, 1 jeffersonreal.uk, 1 jeffersonregan.co.uk, 1 @@ -79000,6 +77859,7 @@ jelleluteijn.nl, 1 jelleluteijn.pro, 1 jelleraaijmakers.nl, 1 +jellinbah.com.au, 1 jellybeanpress.com, 1 jellyfin.spdns.eu, 1 jellyfish.co, 1 @@ -79019,7 +77879,6 @@ jemezsprings-nm.gov, 1 jemnezymy.com, 1 jemoreng.tk, 1 -jemputan-karyawan.site, 1 jems-il.gov, 1 jemshoes.com, 1 jena-fans-aurich.tk, 1 @@ -79030,10 +77889,10 @@ jenakultur.de, 1 jenascarpetcleaning.com.au, 1 jencshiny-org.tk, 1 +jendeindustries.com, 1 jendela360.com, 1 jendies.com, 1 jenelle.ml, 1 -jeneratorkiralama.name.tr, 1 jenever.amsterdam, 1 jeney.eu, 1 jenhargrovephotography.com, 1 @@ -79066,7 +77925,6 @@ jennyjones.tk, 1 jennymovies.com, 1 jennysarl.ch, 0 -jennysbakery.com.au, 1 jennysource.tk, 1 jennystella.net, 1 jennythebaker.com, 1 @@ -79104,7 +77962,6 @@ jeremyness.com, 1 jeremyrobinlyons.com, 1 jeremysermersheim.com, 1 -jeremysnotes.com, 1 jeremywinn.com, 1 jeremywinn.xyz, 1 jerichoproject.org, 1 @@ -79171,6 +78028,7 @@ jessevictors.com, 1 jessica-freddy.ch, 1 jessica-weller.de, 1 +jessicabanos.es, 1 jessicabarends.nl, 1 jessicabenedictus.nl, 0 jessicapiva.com, 1 @@ -79285,7 +78143,6 @@ jffrank.com, 1 jfgselbitztal.tk, 1 jfhr.de, 1 -jfhr.me, 1 jfjtransport.com, 1 jfklibrary.gov, 1 jfkvirtual.com.co, 1 @@ -79372,12 +78229,12 @@ jianren.cf, 1 jianren.ml, 1 jianshebingtuan.com, 1 +jianying.com, 1 jianyu-studio.com, 1 jianyu.io, 1 jianyuan.art, 1 jianyuan.pro, 1 jianyv.com, 1 -jianzhan.com, 1 jiaoliuben.com, 1 jiaoyu8.cn, 1 jiaqiang.vip, 1 @@ -79408,7 +78265,6 @@ jif.gc.ca, 1 jigidi.com, 1 jigsawplanet.com, 1 -jiguang.com, 1 jigyoushoukei.co.jp, 1 jiheng.tk, 1 jiid.ga, 1 @@ -79510,6 +78366,7 @@ jinliming.ml, 1 jinng.org, 1 jino.gq, 1 +jinritemai.com, 1 jinshabu.net, 1 jinspace.net, 1 jintaiyang123.org, 1 @@ -79537,7 +78394,6 @@ jitsipatapoe.ddns.net, 0 jittruckparts.com, 1 jiuchen.com, 1 -jiudao.com, 1 jix.im, 1 jix.net, 1 jixing.one, 1 @@ -79552,6 +78408,7 @@ jizzoh.com, 1 jizzoh.net, 1 jizzoh.org, 1 +jj-fishing.com, 1 jj5197.co, 1 jj6729.co, 1 jj6957.co, 1 @@ -79580,6 +78437,7 @@ jkfasham.com.au, 1 jkg.tw, 1 jkinteriorspa.com, 1 +jkjpm.com, 1 jkloli.tk, 1 jkmoving.com, 0 jkng.eu, 1 @@ -79607,7 +78465,6 @@ jldrenergysaver.com, 1 jlifeoc.com, 1 jliu.xyz, 1 -jlkhosting.com, 1 jlmirall.es, 1 jlmunn.com, 1 jlobbinsphoto.com, 1 @@ -79749,7 +78606,6 @@ jobfury.com, 1 jobhouse.jp, 1 jobie.tk, 1 -jobin.care, 1 jobindex.dk, 1 jobintourism.gr, 1 jobit.gr, 1 @@ -79818,7 +78674,6 @@ jodyboucher.com, 0 jodymackphotography.com, 1 jodynye.com, 1 -jodyshop.com, 1 joe-st.de, 1 joearodriguez.com, 1 joecod.es, 1 @@ -79840,6 +78695,7 @@ joelfries.com, 1 joelito.tk, 1 joelj.org, 1 +joelkoen.com, 1 joelkoeper.de, 1 joelle.me, 1 joelleandpeter.co.uk, 1 @@ -79853,14 +78709,12 @@ joembayawaphotography.com, 1 joemc.com, 1 joepitt.co.uk, 0 -joeran.de, 1 joerg-wellpott.de, 1 joerger.ch, 1 joergschneider.com, 1 joerss.at, 1 joesalter.com, 1 joeseago.com, 0 -joeshare.info, 0 joeshimkus.com, 1 joeskup.com, 1 joesmotorpool.fr, 1 @@ -79989,7 +78843,6 @@ johnspion.tk, 1 johnstownpa.gov, 1 johnstownrockcowi.gov, 1 -johnstyle.fr, 1 johnswarbrick.com, 1 johnthenerd.com, 1 johntomasowa.com, 1 @@ -80057,11 +78910,11 @@ jom.tj, 1 jomactransport.com, 1 jomagus.de, 1 +jomblee.com, 1 jomibe.de, 1 jomjohor.my, 1 jomla.ae, 1 jomo.tv, 1 -jomslot.com, 1 jomsolat.tk, 1 jon.es, 1 jonadamich.tk, 1 @@ -80141,7 +78994,6 @@ jonizatorywody24.pl, 1 jonkerkamman.tk, 1 jonkermedia.nl, 0 -jonkpl.com, 1 jonlabelle.com, 1 jonleibowitz.com, 1 jonnichols.info, 1 @@ -80149,7 +79001,6 @@ jonnybarnes.uk, 1 jonnyflash.tk, 1 jonnygreenwood.tk, 1 -jonnykrysh.me, 1 jonoalderson.com, 1 jonohewitt.com, 1 jonola.com, 1 @@ -80178,12 +79029,11 @@ joomlaguru.pl, 0 joompress.biz, 1 joona.pw, 1 -joone.org, 1 -joonstudios.com, 1 joorshin.ir, 1 joostdeheer.nl, 1 joostmaglev.nl, 1 jootshop.ga, 1 +joox.com.br, 1 jophson.tk, 1 joqi4.gq, 1 jora.biz, 1 @@ -80227,6 +79077,7 @@ jornadahypera.com.br, 1 jornalalerta.com.br, 1 jornalaquidf.com.br, 1 +jornalbrasilatual.com.br, 1 jornalero.tk, 1 jornaya.com, 1 jorsev.com, 1 @@ -80246,6 +79097,7 @@ joseetesser.nl, 1 josef-lotz.de, 1 josefernandomorilloardila.tk, 1 +josefienbouwmeister.nl, 1 josefinagrau.tk, 1 josefjanosec.com, 1 joseflegal.com, 1 @@ -80340,7 +79192,6 @@ journal-officiel.ga, 1 journaldufumeur.ch, 1 journales.com, 1 -journalexpress.ca, 1 journalgameers.ga, 1 journalgameest.ga, 1 journalism-schools.com, 1 @@ -80380,6 +79231,7 @@ joworld.net, 0 joy-ride.yokohama, 1 joy.co.ua, 1 +joy.szkola.pl, 1 joyas.gt, 1 joyberryenterprises.com, 1 joyblz.com, 1 @@ -80396,7 +79248,6 @@ joyfulevents.tk, 1 joyfulhealthyeats.com, 1 joyfully.fit, 1 -joyfullyjay.com, 1 joyinteractive.tk, 1 joyjohnston.ca, 0 joymarket.ir, 1 @@ -80627,6 +79478,9 @@ juanxt.ddns.net, 1 jub0bs.com, 1 jubelmart.ga, 1 +jubileestadium.com, 1 +jubileestadium.net.au, 1 +jubileestadium.org, 1 jubileum.online, 0 jucca-nautica.si, 1 jucelo.de, 1 @@ -80667,7 +79521,6 @@ judyrodman.com, 1 juegos-play.com, 1 juegosycodigos.mx, 1 -juejin.com, 1 juergaperu.tk, 1 juergen.tk, 1 juergenhecht.de, 1 @@ -80678,8 +79531,8 @@ jufem.tk, 1 juffalow.com, 1 juffrouwtoertjes.be, 1 +juflynt.nl, 1 jugaar.llc, 1 -jugendfrei.com, 1 jugendhackt.de, 1 jugendhackt.org, 1 jugendpresse-hessen.de, 1 @@ -80721,7 +79574,7 @@ julia.school, 1 julia0815.de, 1 juliafagel.com, 1 -juliahub.com, 1 +juliahub.com, 0 juliajuice.net, 1 juliakieser.de, 1 julian-miller.de, 1 @@ -80747,7 +79600,6 @@ julianvmodesto.com, 1 julianwallmeroth.de, 1 julianweigle.de, 1 -julianxhokaxhiu.com, 1 juliaoantiguidades.com.br, 1 juliard.club, 1 julias.zone, 1 @@ -80811,7 +79663,6 @@ jumpandjivechildrensparties.co.uk, 1 jumparoundbouncycastles.co.uk, 1 jumparty.co.uk, 1 -jumpcloud.com, 1 jumpeasy.com.au, 1 jumperke.be, 1 jumperweb.tk, 1 @@ -80873,6 +79724,7 @@ juniorsambo.tk, 1 juniorsbook.com, 1 juniorsplanet.in, 1 +juniper.es, 1 junis.nl, 1 junix.systems, 1 junjie.pro, 1 @@ -81042,7 +79894,6 @@ justmysocks.xyz, 1 justnajoua.tk, 1 justneworleans.com, 1 -justninja.com, 1 justnu.se, 0 justor.ru, 1 justpass.co.uk, 1 @@ -81087,7 +79938,6 @@ jvbouncycastlehire.co.uk, 1 jvdham.nl, 1 jvega.me, 1 -jvenglishtutor.com, 0 jvetter.net, 1 jvianes.ddns.net, 1 jvlfinance.cz, 1 @@ -81163,7 +80013,7 @@ k-ruoka.fi, 1 k-sails.com, 1 k-scar.com, 1 -k-scr.me, 1 +k-scr.me, 0 k-so.de, 1 k-system.de, 1 k-will.tk, 1 @@ -81173,7 +80023,6 @@ k.tt, 1 k0a1ex.com, 1 k1024.org, 1 -k1chn.com, 0 k2.works, 1 k21academy.com, 1 k24klik.com, 1 @@ -81224,7 +80073,6 @@ k87136.com, 0 k875.co, 0 k88107.com, 0 -k88116.com, 0 k88127.com, 0 k88172.com, 1 k88256.com, 1 @@ -81345,7 +80193,6 @@ kadymacdonalddenton.ca, 1 kaeme.com, 1 kaeptns-sechser.de, 1 -kaerengenharia.com.br, 1 kaeru-seitai.com, 1 kaese-journal.ch, 1 kaesehagen.nl, 1 @@ -81543,11 +80390,11 @@ kaloix.de, 1 kalolina.com, 1 kalombo.ru, 1 -kalompaturi.com, 1 kalpavriksh.org, 1 kalsa.ga, 1 kalsbouncies.com, 1 kaltenbrunner.it, 1 +kaltenburg.org, 1 kalterersee.ch, 1 kaltmiete.com, 1 kaluga-news.net, 1 @@ -81569,6 +80416,7 @@ kamagrajel.online, 1 kamagrajel.org, 1 kamalame.co, 1 +kamaltek.com, 1 kamandula.tk, 1 kamanja.io, 1 kamareddine.tk, 1 @@ -81577,7 +80425,6 @@ kamata-shinkyu-seikotsu.jp, 1 kamataryo.com, 1 kamataworks.com, 1 -kamatoycleaner.com, 1 kamazuri.art, 1 kambistories.com, 1 kamchatka-news.net, 1 @@ -81585,7 +80432,6 @@ kamchatkawinter.tk, 1 kamcolorectal.com, 1 kamel.social, 1 -kameldesign.com, 1 kameliya.tk, 1 kamennyj-pisatel.tk, 1 kameno-news.tk, 1 @@ -81611,7 +80457,6 @@ kaminbau-laub.de, 1 kaminholz.eu, 1 kaminoke.info, 0 -kaminoweb.com, 1 kaminoyamasaigube.com, 1 kaminy-msk.ru, 0 kamio.co.uk, 1 @@ -81656,7 +80501,6 @@ kanakdharaenterprise.com, 1 kanal-c.net, 1 kanal-schaefer.de, 1 -kanalbutikken.no, 1 kanali.info, 1 kanalmarysko.cz, 1 kanalsamochodowy.pl, 1 @@ -81701,7 +80545,6 @@ kangaroos.org, 1 kangaroosgardencentre.ca, 1 kangavar.tk, 1 -kangbo.com, 1 kangdaniel.cn, 1 kangia.gl, 1 kangkai.me, 1 @@ -81758,7 +80601,6 @@ kantrok.com, 1 kantube.tk, 1 kanui.ml, 1 -kanuking.de, 1 kanuvu.de, 1 kanvasbaski.tk, 1 kanz.jp, 1 @@ -81771,7 +80613,6 @@ kaosintesta.tk, 1 kap-kirche.de, 1 kap.pe, 1 -kapaci.com, 1 kapageridis.com, 1 kapakinig.org, 1 kapamed.ro, 1 @@ -81786,6 +80627,7 @@ kaplanco.com, 1 kaplanprofessional.edu.au, 1 kaplatzis.com, 1 +kaplonrealty.com, 1 kappar.is, 1 kapparhokappa.tk, 1 kappelrodeck.de, 1 @@ -81803,7 +80645,6 @@ kapukoaldizkaria.tk, 1 kapulakennel.tk, 1 kapunet.tk, 1 -kaputt.com, 1 kaputtendorf.tk, 1 kaputtzich.duckdns.org, 1 kara-fabian.com, 1 @@ -81825,17 +80666,10 @@ karamanportal.com, 1 karamomo.net, 1 karand.me, 1 -karangsonodesaku.com, 1 karanjthakkar.com, 1 karanlyons.com, 1 -karaodesign.fr, 1 karaoglanis-info.tk, 1 karaoglanis.tk, 1 -karaokerentalcalgary.com, 1 -karaokerentaledmonton.com, 1 -karaokerentalmontreal.com, 1 -karaokerentalottawa.com, 1 -karaokerentaltoronto.com, 1 karaokeyboards.tk, 1 karapatan.org, 1 karapuzz.tk, 1 @@ -81896,7 +80730,6 @@ karkkilandemarit.fi, 1 karl-klein.de, 1 karlamouracortinas.com, 1 -karlapepe.lel.br, 1 karlayura.com.au, 1 karlbowden.com, 1 karlegloff.com, 1 @@ -81946,7 +80779,7 @@ karpfgarten.ch, 1 karpierz.me, 1 karpo.tk, 1 -karppaamo.fi, 0 +karppaamo.fi, 1 karr.ga, 1 karramba.tk, 1 karriharju.tk, 1 @@ -81964,13 +80797,11 @@ karta-paliwowa.pl, 1 kartacha.com, 1 kartalbombe.com.tr, 1 -kartalvincisletmeciligi.com, 1 kartar.net, 0 kartek.com, 1 kartenplanet.ch, 1 kartikmohta.com, 1 karting-normandie.fr, 0 -kartingzone.ru, 1 kartoffel-stampfer.com, 1 kartoffel-tobi.de, 1 kartonki.tk, 1 @@ -82003,7 +80834,6 @@ kashlatam.com, 1 kashmash.com, 1 kashmirartquest.tk, 1 -kashmirdmc.co.in, 1 kashousing.tk, 1 kashta-svgeorgi.com, 1 kasiafricagroup.org, 1 @@ -82018,6 +80848,7 @@ kaskojs.com, 1 kaskoqa.com, 1 kasowitz.com, 1 +kaspa-store.com, 1 kasparovru.ml, 1 kasparovru.tk, 1 kasper-team.tk, 1 @@ -82027,7 +80858,6 @@ kass-media.com, 1 kassa.at, 1 kassa.com, 1 -kassa24.kz, 1 kasse.pro, 1 kasselwasser.de, 1 kassemmal.at, 1 @@ -82039,6 +80869,7 @@ kastankaoffice.cz, 1 kastas.com, 1 kastas.com.tr, 1 +kastechssg.com, 1 kasteelhoensbroek.nl, 1 kastelruth.biz, 1 kastemperaturen.ga, 1 @@ -82119,7 +80950,6 @@ kati0.com, 1 katiebenson.tk, 1 katiechai.xyz, 1 -katiemadethat.shop, 1 katiepears.net, 1 katieriker.com, 1 katieskandy.co.uk, 1 @@ -82247,6 +81077,7 @@ kazard.co.za, 1 kazarmy.tk, 1 kazeso.kz, 1 +kazettadigitalizalas.hu, 1 kazfeed.com, 1 kazgeodor.kz, 1 kazigk.me, 1 @@ -82262,7 +81093,6 @@ kazumi-clinic.com, 1 kazumi.ooo, 1 kazuno-jc.or.jp, 1 -kazusa.cc, 1 kazusa.uk, 1 kazvel.com, 1 kazy111.info, 1 @@ -82336,6 +81166,7 @@ kcptun.com, 1 kcra.com, 1 kcroonews.com, 1 +kcschannel.co.za, 1 kcsconstructioncompany.com, 1 kcsh.men, 1 kcsonline.biz, 1 @@ -82369,7 +81200,6 @@ kdyby.org, 0 kdyzvodanekdevytecemusidotectnekamjinam.cz, 1 kdyzvodanekdevytecemusidotictnekamjinam.cz, 1 -ke.fo, 1 ke.ke, 1 ke8gtp-vf.herokuapp.com, 1 keaipublishing.com, 1 @@ -82429,7 +81259,6 @@ keep.moe, 1 keepa.com, 1 keepagree.gq, 1 -keepclean.me, 0 keeperapp.com, 1 keepersecurity.com, 1 keepersecurity.com.au, 1 @@ -82456,7 +81285,6 @@ keganthorrez.com, 1 kegelschiene.net, 0 kehlenbach.net, 1 -kehrle.xyz, 1 keian.tk, 1 keibablood.com, 1 keiebijters.nl, 1 @@ -82479,6 +81307,7 @@ keio-formula.com, 1 keioni.com, 1 keiralewis.co.uk, 0 +keis-software.com, 1 keisaku.org, 1 keishi.co.jp, 1 keishi.net, 1 @@ -82554,7 +81383,7 @@ kelvinchung.tk, 1 kelvindecosta.com, 1 kelvinfichter.com, 0 -kelyan.fr, 0 +kelyan.fr, 1 kemahtx.gov, 1 kemanai.akita.jp, 1 kemand.com, 1 @@ -82595,6 +81424,7 @@ kemsia.nl, 1 ken-electric.com.br, 1 ken.fm, 1 +kenaquatic.com, 1 kenbillionsyuan.tk, 1 kenbonny.net, 0 kenda.eu.org, 1 @@ -82648,7 +81478,6 @@ kenoshanews.com, 1 kenpobolivia.tk, 1 kenpotalca.tk, 1 -kenrick95.org, 1 kenrossjewellers.com.au, 1 kens.pics, 0 kensbouncycastles.co.uk, 1 @@ -82675,8 +81504,7 @@ kenwood.eu, 1 kenx5.eu.org, 1 kenyachildrencentres.com, 1 -kenyonleblanc.com, 1 -kenyons.info, 1 +kenyonleblanc.com, 0 kenzelmann.eu, 1 kenzelmann.li, 1 kenzelmann.name, 1 @@ -82691,6 +81519,7 @@ kepoper.com, 1 keppler.tk, 1 kepsbt.hu, 1 +keptknowledge.com, 1 kepub.net, 1 keralamurals.in, 1 keralataxis.com, 0 @@ -82703,7 +81532,6 @@ kerdry.com, 1 kerebro.com, 1 kerenzedakah.org, 0 -kergall.com, 1 keridos.de, 1 keritial.eu.org, 1 kerjoo.com, 1 @@ -82778,6 +81606,7 @@ ketoanvietnam.tk, 1 ketocanine.ca, 1 ketoconazole.gq, 1 +ketogen.ge, 1 ketoliv.dk, 1 ketotadka.com, 1 kets.ru, 1 @@ -82786,7 +81615,6 @@ kettcar.net, 1 kettererholmes.tk, 1 kettinggeleider.be, 1 -kettlebellspower.com, 1 kettlemetalbbq.com, 1 kettleworx.com, 1 kettmail.com, 1 @@ -82826,7 +81654,8 @@ kevincordes.de, 1 kevincox.ca, 1 kevincoynepage.tk, 1 -kevindreid.com, 0 +kevindreid.ca, 1 +kevindreid.com, 1 kevinfigueroamusic.tk, 1 kevinfoley.org, 1 kevinfumbles.com, 1 @@ -82861,7 +81690,6 @@ key-tracker.de, 1 key.sa, 1 key4.com.ua, 1 -keyabode.eu, 1 keyacademy.bg, 1 keyandswirl.com, 1 keybase.io, 1 @@ -82929,7 +81757,7 @@ kf8957.com, 0 kfassessment.eu, 1 kfbl.cc, 1 -kfc.bike, 1 +kfc.bike, 0 kfgleasing.pl, 1 kfintech.com, 1 kfjgyb.com, 0 @@ -83068,7 +81896,7 @@ kickasscanadians.ca, 1 kickasspoker.com, 1 kickback-studios.com, 1 -kickbackservices.com, 1 +kickbackservices.com, 0 kickex.com, 1 kickico.com, 1 kickitfootball.com.au, 1 @@ -83102,7 +81930,6 @@ kiddyboom.ua, 1 kiddyland.co.jp, 1 kidfitseries.com.au, 1 -kidfriendlythingstodo.com, 1 kidify.co.uk, 1 kidis.lt, 1 kidisov.tk, 1 @@ -83147,6 +81974,7 @@ kidzonet.io, 1 kidzpartiesllp.co.uk, 1 kidzsmile.co.uk, 1 +kidzwhizz.com, 1 kiebel.de, 1 kiedys.net, 1 kiefnersoftware.com, 1 @@ -83159,8 +81987,8 @@ kielervorderladerverein.de, 1 kielux.de, 1 kielwi.gov, 1 +kiengiang.gov.vn, 1 kienlen.org, 1 -kientrucphunguyen.com, 1 kienviethung.com, 1 kiepe-hannover.de, 1 kieran-mcguire.uk, 1 @@ -83280,6 +82108,7 @@ kimicar.de, 1 kimino-school.com, 1 kimisia.net, 1 +kimitang.com, 1 kimmel.com, 0 kimmel.in, 0 kimmerheide.de, 1 @@ -83410,6 +82239,7 @@ kingdomcrawlers.tk, 1 kingdommediacorp.com, 1 kingdomnubia.com, 1 +kingdomsail.com, 1 kingedwardvii.co.uk, 1 kingfast.cc, 1 kingfast.eu.org, 1 @@ -83427,8 +82257,6 @@ kingofthecastlesentertainments.co.uk, 1 kingofthecastlesouthwales.co.uk, 1 kingofthecastlesrhyl.co.uk, 1 -kingpay.com, 1 -kingpie.co.za, 1 kingpin.pro, 1 kingpincages.com, 1 kingroot.com, 1 @@ -83530,6 +82358,7 @@ kintore.tv, 1 kintsu.com.br, 1 kintsugispace.com, 1 +kintyre.net, 1 kinualive.com, 1 kinugasa.or.jp, 1 kinvault.com, 1 @@ -83542,7 +82371,6 @@ kiosbank.id, 1 kiosk.ac, 1 kioske.de, 1 -kiosque-famille.net, 1 kiot.eu, 1 kiousis.me, 1 kiow.com, 1 @@ -83657,7 +82485,6 @@ kita-nimmersatt-bundorf.de, 1 kita-sun.com, 1 kitabgaul.com, 0 -kitabnamabayi.com, 0 kitacoffee.com, 1 kitaharima-ikiiki.com, 1 kitarino.net, 1 @@ -83676,6 +82503,7 @@ kitchenvile.com, 1 kitchenware.ml, 1 kitchenware.tk, 1 +kitchenwarehouseltd.com, 1 kitchfurnit.tk, 1 kitconsulting.ninja, 1 kite-surf.tk, 1 @@ -83739,6 +82567,7 @@ kiwakai-ginza.com, 1 kiwanissale.com, 1 kiwanisyp.org, 1 +kiwanoprint.com, 1 kiwee.eu, 1 kiweeagentur.de, 1 kiwi.com, 1 @@ -83752,7 +82581,6 @@ kiwipedia.sk, 1 kiwiplace.com, 0 kiwitastic.com, 1 -kiwiz.co.uk, 1 kixby.com, 1 kizetroniko.tk, 1 kizkulesi.tk, 1 @@ -83827,7 +82655,6 @@ kkws.co, 1 kkychristianblog.com, 1 kkyy.me, 1 -kkzxak47.com, 1 kl008888.com, 1 klaasvantornout.tk, 1 klacki.de, 1 @@ -83851,6 +82678,7 @@ klarmobil-empfehlen.de, 1 klaro.org, 1 klart.se, 1 +klasko.ru, 1 klaspas.be, 1 klassen.tk, 1 klassenfahrt-tirol.at, 1 @@ -84162,6 +82990,7 @@ knovos.com, 1 know-howsystems.net, 1 know.cf, 1 +know.domains, 1 know2protect.gov, 1 knowage-suite.com, 1 knowasiak.com, 1 @@ -84211,7 +83040,6 @@ knuwiki.tk, 1 knxstore.cz, 1 knyawningrenovation.com, 0 -knygos.lt, 1 knzb.nl, 1 ko-private-diary.com, 1 ko80.com, 1 @@ -84230,7 +83058,6 @@ kobayashi-zeimukaikei.jp, 1 kobb.tk, 1 kobe-shimasui.jp, 1 -kobejet.com, 1 koberl.com, 1 kobes.ca, 1 kobet.tk, 1 @@ -84306,6 +83133,7 @@ koehlhoff.de, 1 koehn-consulting.com, 1 koehn.com, 1 +koehn.lol, 1 koelbli.ch, 1 koeldezomerdoor.nl, 1 koelnmafia.de, 1 @@ -84317,7 +83145,7 @@ koenleemans.nl, 1 koenrh.com, 1 koenrh.net, 1 -koenrh.nl, 0 +koenrh.nl, 1 koenzk.nl, 1 koeppelingenieure.de, 1 koerperkult.ch, 1 @@ -84331,7 +83159,6 @@ koffiekoeken.tk, 1 koffiekompaan.nl, 1 kofler.info, 1 -kofman-group.com, 1 kogak.ninja, 1 kogax.com, 0 kogi.fr, 1 @@ -84345,6 +83172,7 @@ kohlmajer.de, 1 kohlpharma.com, 1 kohparadise.com, 1 +kohqaf.org, 1 koidulag.edu.ee, 1 koifish.org, 1 koing.de, 1 @@ -84355,7 +83183,6 @@ koivukangas.fi, 1 koj.co, 1 kojast.de, 1 -koje-und-meer.de, 1 koji-tsujitani.net, 1 kojiishikawa.com, 1 kojipkgs.fedoraproject.org, 1 @@ -84382,8 +83209,6 @@ kokwatersport.nl, 1 kol7asry.com, 1 kolabtree.com, 1 -kolaci.tech, 1 -kolaczek.cz, 1 koladeogunleye.com, 1 kolakamal.tk, 1 kolania.com, 1 @@ -84493,6 +83318,7 @@ kon.cat, 1 kona-m.co.kr, 1 konaki.net, 1 +konasam.com, 1 konata.tech, 1 konbantsan.com.tr, 1 koncertbooking.com, 1 @@ -84549,7 +83375,6 @@ kongjie.cf, 1 kongjie.ml, 1 kongkritpost.com, 1 -kongpay.com.br, 1 kongress-hostessen.de, 1 kongressband.de, 1 koniag-gs.com, 1 @@ -84583,7 +83408,6 @@ konstantinlichtenwald.com, 0 konstanz.tk, 1 konstitucia.com, 1 -konstructdigital.com, 1 konsul.ga, 1 konsul.tk, 1 konsultacii-buhgaltera.ga, 1 @@ -84735,6 +83559,7 @@ korjoin.com, 1 korkortet.tk, 1 korkortonline.se, 1 +korlatlanmobilinternet.hu, 1 korn-klan.tk, 1 korofilms.com, 1 koroleva.ml, 1 @@ -84890,10 +83715,12 @@ kozhzamenitely.tk, 1 koziagora.com, 1 koziknet.com, 1 +kozinetspurewal.com, 1 kozitsyn.name, 1 kozlov.cf, 1 kozmetikatrend.hu, 1 kozmetikus.tk, 1 +kozpure.com, 1 kozuna.it, 1 kozune.com, 1 kp-opt.ru, 1 @@ -84903,9 +83730,9 @@ kpfanworld.com, 1 kpinterface.com, 1 kpinvest.eu, 1 +kpit.com, 1 kpkhub.com, 1 kplante.com, 1 -kplastics.in, 1 kplasticsurgery.com, 1 kplnet.net, 1 kpmgccc.co.nz, 0 @@ -84916,7 +83743,6 @@ kpop.ro, 1 kpopnewsdaily.com, 1 kpopsource.com, 1 -kppnmataram.com, 1 kprem.com, 1 kprf-school74.tk, 1 kproferm.com, 1 @@ -84981,6 +83807,9 @@ kran.ga, 1 krang.org.uk, 1 kranjnakolo.ml, 1 +krankenkasse-schweiz-liste.ch, 1 +krankenkasse-schweiz-vergleich.ch, 1 +krankenkasse-schweiz-wechseln.ch, 1 krankenpflege-haushaltshilfe.de, 1 krankenpflege-journal.com, 1 krankenpflege.ch, 1 @@ -85012,6 +83841,7 @@ krauseent.com, 0 krausekauft.de, 1 krautomat.com, 1 +kravitz.institute, 1 kraynik.com, 1 kraz.tk, 1 krazykastles.co.uk, 1 @@ -85063,7 +83893,6 @@ kreideseetaucher.de, 1 kreidlernet.tk, 1 kreiglaw.com, 1 -kreisau.com, 1 krelln.net, 1 kremalicious.com, 1 kremenchug-news.ru, 1 @@ -85098,7 +83927,6 @@ krillz.se, 1 krilotek.com, 1 krilov.tk, 1 -krimikiosk.de, 1 krimisound.com, 1 krimisound.it, 1 krimmebel.ru, 1 @@ -85186,7 +84014,6 @@ krome.sg, 1 krometis.com, 1 kromozottrud.hu, 1 -kroms.org, 1 krona.ddns.net, 1 kronanshopping.se, 1 kronofogden.se, 1 @@ -85259,7 +84086,6 @@ krymp.no, 1 kryolansaudi.com, 1 krypmonet.com, 1 -krypsys.com, 1 krypt.com, 1 kryptera.se, 1 kryptix.eu, 1 @@ -85450,7 +84276,6 @@ kuaishou.cf, 1 kuaitiyu.org, 1 kuaiyaojing.com, 1 -kuaiyun.com, 1 kualitatem.com, 1 kualo.co.uk, 1 kualo.com, 1 @@ -85471,7 +84296,6 @@ kubiaktr.pl, 1 kubica.ch, 1 kubierecki.pl, 1 -kubilaykiraz.com, 1 kubiqo.io, 1 kubit.ai, 1 kubit.co, 1 @@ -85517,6 +84341,7 @@ kuhakukawa.ml, 1 kuhio.net, 1 kuhlecloud.co.za, 1 +kuhn-alexander.net, 1 kuhnerts.eu, 1 kuinin.tk, 1 kuitunenguthrie.tk, 1 @@ -85549,7 +84374,6 @@ kulshe.com, 1 kultham.ml, 1 kulthist.tk, 1 -kulthome.ro, 1 kultmobil.se, 1 kultur-vor-ort.com, 1 kultur-werkstatt-wulfen.tk, 1 @@ -85622,6 +84446,7 @@ kupid.com, 1 kupinska.pl, 1 kupipled.cf, 1 +kupisafe.com, 1 kupislivki.tk, 1 kupitmtz.gq, 1 kupitraktor.gq, 1 @@ -85669,14 +84494,12 @@ kurmanchalbank.com, 1 kurnia.tk, 1 kuroedov.com, 1 -kuroha.co.uk, 1 kuroinu.jp, 1 kuroit.com, 0 kurona.ga, 1 kuronarupolyphenol.jp, 1 kuropatina.tk, 1 kurosawa-yakkyoku.com, 1 -kurrabagroup.exposed, 1 kurrende.nrw, 0 kurs-dron.pl, 1 kurs-elektryka.pl, 1 @@ -85702,6 +84525,7 @@ kurtneuweiler.com, 1 kurtosys.com, 1 kurtschlatzer.com, 1 +kurtschleinbeck.com, 1 kurumsalsayfa.com, 1 kurungkurawal.id, 1 kuruppa.xyz, 1 @@ -85736,7 +84560,6 @@ kutaisi.it, 1 kutalek.cz, 1 kutano.ca, 1 -kutedaki.com, 1 kutekeiki.com, 1 kuti.hu, 1 kutinsoft.com, 1 @@ -85806,7 +84629,6 @@ kwadraadtevredenheid.nl, 1 kwai.tv, 1 kwalifikacje.gov.pl, 1 -kwanafo.space, 1 kwc.gov, 1 kwcolville.com, 1 kweb.ml, 1 @@ -85889,7 +84711,6 @@ kylianvermeulen.com, 0 kylianvermeulen.nl, 1 kylie-pomada.tk, 1 -kylinseating.in, 1 kylsgl.com, 1 kylvaja.fi, 1 kymcojp.com, 1 @@ -85928,7 +84749,6 @@ kyujin-office.net, 1 kyushu-ds.com, 1 kyusyu.org, 1 -kyxtro.com, 1 kyzyl-senir.ml, 1 kz-dentalclinic.com, 1 kz.search.yahoo.com, 0 @@ -85979,6 +84799,7 @@ la-baldosa.fr, 0 la-bonne-cuisine.fr, 1 la-boutique-langlois.fr, 1 +la-boutique-web.com, 1 la-casa.tk, 1 la-compagnie-des-elfes.fr, 1 la-dameblanche.fr, 1 @@ -85996,7 +84817,6 @@ laa.gov.ly, 1 laab.gv.at, 1 laac.io, 1 -laagenciaespacial.com, 1 laakevahinko.fi, 1 laanius.dk, 1 laarroceriacolombiana.com, 1 @@ -86017,7 +84837,6 @@ labandadeases.es, 1 labandadelamente.tk, 1 labandadelexpreso.tk, 1 -labande-annonce.fr, 1 labanochjonas.se, 1 labanskoller.se, 1 labanskollermark.se, 1 @@ -86027,7 +84846,6 @@ labbuilders.co.uk, 1 labcenter.com, 1 labcoat.jp, 1 -labdesign.com.ua, 1 labdistill.com, 1 labeillebretonne.fr, 1 label-octopus.org, 1 @@ -86304,9 +85122,7 @@ lafillepolyvalente.com, 1 lafka.org, 1 laflanelle.fr, 1 -laflash.com, 1 lafleur-salon.tk, 1 -laflota.com, 1 laforgedhiram.fr, 1 laforgia.xyz, 1 lafr4nc3.xyz, 1 @@ -86324,6 +85140,7 @@ lagarblanco.es, 1 lagardere-tr.it, 1 lagardere-tr.ro, 1 +lagavach.com, 1 lagence.ch, 1 lagencerie.fr, 1 lagerauftrag.info, 0 @@ -86379,6 +85196,7 @@ lainoa.eus, 1 lainwired.net, 1 laiqon.com, 1 +laironcorp.com, 1 lairribeiro.com, 1 laissetamarc.ca, 1 laissetamarc.com, 1 @@ -86436,7 +85254,9 @@ lakeshiremo.gov, 1 lakesidegolfclub.com, 1 lakesideholidays.uk, 1 +lakesideinternationalhotel.com, 1 lakesidelodges.uk, 1 +lakesiderealty.info, 1 lakesideweb.design, 1 lakesitetn.gov, 1 lakespropertymgt.com, 1 @@ -86548,6 +85368,7 @@ lammertbies.com, 1 lammertbies.nl, 1 lamnea.se, 1 +lamocheattitude.fr, 1 lamontre.ru, 1 lamorera.tk, 1 lamorralla.tk, 1 @@ -86643,7 +85464,6 @@ landisit.com, 1 landkind.com, 1 landkreis-augsburg.de, 1 -landless-city.net, 1 landlimited.com, 1 landloperfm.tk, 1 landlordy.com, 1 @@ -86666,12 +85486,10 @@ landscapeloanest.ga, 1 landscapephotography.org.au, 1 landscapesmore.com, 1 -landscaping-montreal.com, 1 landscaping.ga, 1 landscaping.gq, 1 landscapingipswich.com, 1 landscapingrepairers.ga, 1 -landschaftsbaugartenbau.de, 1 landsearch.com, 1 landsforsale.co.il, 1 landslide.tk, 1 @@ -86793,7 +85611,6 @@ lapakmaboy.com, 1 lapaksulawesi.tk, 1 lapakus.com, 1 -lapalabra.do, 1 lapapeleriadelola.com, 1 laparcela.tk, 1 laparoscopyhospital.com, 1 @@ -86815,6 +85632,7 @@ lapeyre.xyz, 1 lapicena.eu, 1 lapina.tk, 1 +lapinas.com, 1 lapinator.net, 1 lapinmalin.tk, 1 lapismagico.com, 1 @@ -86834,7 +85652,6 @@ lapoly.ga, 1 laponder.online, 1 laponders.com, 1 -laporantercepat.com, 1 laportedufutur.org, 1 lapositiva.com.pe, 1 lapparente-aise.ch, 0 @@ -86850,13 +85667,13 @@ laptopgiasi.vn, 1 laptopnaive.com, 1 laptopnewbie.eu.org, 1 +laptoppicker.com, 1 laptopuri.tk, 1 laptopworld.dk, 1 lapublicpress.org, 1 lapulgaflamenco.com, 1 laqira.io, 1 laquestionviterepondue.com, 1 -laquiromancia.online, 1 lara-eu.org, 1 larabergmann.de, 1 larabouillere.fr, 1 @@ -86900,7 +85717,6 @@ larepublicacultural.es, 1 larete.ch, 1 large-print.ru, 1 -largerpweor.uk, 1 largescaleforums.com, 1 largest-soldiers.cf, 1 largeviewer.com, 1 @@ -86990,7 +85806,6 @@ laserplaza.net, 1 laserpunch.tk, 1 lasersolutions.tk, 1 -laserweb.com.br, 1 lasfolladoras.com, 1 lasik-safely.com, 1 lasiodora.tk, 1 @@ -87033,6 +85848,7 @@ lastbooks.gq, 1 lastcast.bg, 1 lastenrad-gifhorn.de, 1 +lastfriends.site, 1 lastingcar.com, 1 lastingmarksers.ga, 1 lastingmarksest.ga, 1 @@ -87055,7 +85871,6 @@ lasttweetinaws.com, 1 lastville.com, 1 lastwill.ie, 1 -lasvegascombatacademy.com, 1 lasvegasfit.org, 1 lasvegasnevada.gov, 1 laszlo.sh, 1 @@ -87091,16 +85906,13 @@ latentviewanalytics.com, 1 lateral.dog, 1 lateralsecurity.com, 0 -lateraltrust.com, 1 laterna.cz, 1 laterremotodealcorcon.tk, 1 latestbitcoinnews.io, 1 -latestbitcoinnews.org, 1 latestcoin.tk, 1 latestimmigrationnews.today, 1 latestjobhub.in, 1 latestmobiles.tk, 1 -latestnewsinusa.com, 1 latestnewsonworld.tk, 1 latestpornvideos.com, 1 latestsonglyrics.ml, 1 @@ -87161,9 +85973,9 @@ laudablesites.com, 1 laudlab.de, 1 laudon.nl, 0 +lauerz.online, 1 laufpix.de, 1 lauftreff-himmelgeist.de, 0 -laugarvatn.com, 1 laughingelkstudio.com, 1 laughinggrapepublishing.com, 1 laughingloon.com, 1 @@ -87204,11 +86016,9 @@ laurencball.com, 1 laurenleesmith.tk, 1 laurenlobue.com, 1 -laurenparkerway.com, 1 laurensfoundation.org, 1 laurenslatest.com, 1 laurensvanderblom.nl, 1 -laurentcar.ro, 1 laurentfinance.com, 1 laurentianlanes.com, 1 lauresta.lt, 1 @@ -87251,10 +86061,10 @@ laventura.tk, 1 laventusdigital.co.uk, 1 lavhire.tk, 1 -laviaregia.com, 1 laviedalex.ovh, 1 lavinaec.com, 1 lavinya.net, 1 +lavipere.com, 1 laviro.tk, 1 lavita.de, 1 lavitagarden.tk, 1 @@ -87299,7 +86109,6 @@ lawebdeljose.tk, 1 lawebnobasta.tk, 1 lawfirmyashajustice.co.id, 1 -lawformt.com, 1 lawgic.com.ua, 1 lawhery.com, 1 lawinform.com.au, 1 @@ -87364,7 +86173,6 @@ lawyerscredentialsest.ga, 1 lawyerscreenerers.ga, 1 lawyerscreenerest.ga, 1 -lawyersnew.com, 1 lawyersofmissouri.com, 1 lawzakon.tk, 1 lawzana.com, 1 @@ -87432,6 +86240,7 @@ lbjlibrary.gov, 1 lblok.pl, 1 lbls.me, 0 +lbo.management, 1 lbofrance.com, 1 lbpc.pro, 0 lbrlh.tk, 1 @@ -87500,7 +86309,6 @@ lcc.mw, 1 lcclub.fr, 1 lccwillcounty.gov, 1 -lcdchart.com, 1 lcdf.education, 1 lce-events.com, 1 lcemsami.gov, 1 @@ -87508,9 +86316,9 @@ lcgaj.com, 1 lchardingplumbing.com.au, 1 lcht.ch, 0 -lchtraf.com, 1 lckube.it, 1 lclarkpdx.com, 1 +lcle.uk, 1 lclnet.de, 1 lcmmadison.org, 1 lcnwallet.com, 1 @@ -87564,6 +86372,7 @@ ldlorangecountylocksmith.com, 1 ldm-systems.ru, 1 ldm2468.com, 1 +ldoe-grantprogram.com, 1 lds52mm.com, 1 ldsvoicesoftherestoration.com, 1 ldts.es, 1 @@ -87595,7 +86404,6 @@ le-tempo.com, 1 le-therapeute.com, 1 le-upfitter.com, 1 -le-vario.net, 1 le0n.ddns.net, 1 le0yn.ml, 1 le130rb.com, 1 @@ -87693,7 +86501,6 @@ learnatf.gov, 1 learnattack.de, 1 learnbin.net, 1 -learnblockchain.io, 1 learncamerarepair.com, 1 learnchesswithdrwolf.com, 1 learncoding.tk, 1 @@ -87701,6 +86508,7 @@ learndoj.gov, 1 learnedhacker.com, 1 learnerdriving.com, 1 +learnfastify.com, 1 learnhowtoplayguitar.tk, 1 learning-engineering-virtual-institute.org, 1 learning-id.com, 1 @@ -87799,7 +86607,6 @@ lebureau27.fr, 1 lebureau27.lu, 1 lebuys.ca, 1 -lebv.org, 1 lecandide.info, 1 lecannabis.at, 1 lecannabis.com, 1 @@ -87837,7 +86644,6 @@ lecreative.tk, 1 lectronz.com, 1 lecturaweb.tk, 1 -lecturia.org, 1 lecul.site, 1 led-sk.ru, 1 led.xyz, 0 @@ -87896,7 +86702,6 @@ leefl.gov, 1 leefrente.nl, 1 leeghwatermusicals.nl, 1 -leehomeremodel.com, 1 leekimball.com, 1 leekspin.ml, 1 leekspin.tk, 1 @@ -87915,7 +86720,6 @@ leertipp.de, 1 leeryan.tk, 1 leeshunhing.com, 1 -leesilvey.com, 0 leet2.com, 1 leetbunny.tk, 1 leetcode.com, 1 @@ -87974,7 +86778,6 @@ legalanchor.ga, 1 legalatlanta.com, 1 legalatlantic.ga, 1 -legalbeagle.com.hk, 1 legalbeagles.info, 1 legalbeast.ga, 1 legalbetcanada.com, 1 @@ -88015,7 +86818,6 @@ legalintergrity.ga, 1 legalis.pl, 1 legalisierung.tk, 1 -legalit.es, 1 legality.site, 1 legaliz.ml, 1 legalizeit.tk, 1 @@ -88085,7 +86887,6 @@ legendofkrystal.com, 1 legendofmi.com, 1 legends-game.ru, 0 -legendtour.com, 1 legendwiki.com, 1 leger-voertuigen.tk, 1 legere.info, 1 @@ -88146,6 +86947,7 @@ leibniz-trifft.de, 1 leibniztrifft.de, 1 leicabiosystems.com, 1 +leicacyprus.com, 1 leicester.bike, 1 leicesterastronomicalsociety.co.uk, 1 leicestermoneyman.com, 1 @@ -88156,6 +86958,7 @@ leighannorsi.com, 0 leighneithardt.com, 1 leignier.org, 1 +leilaarias.com.br, 1 leilaelu.com.br, 1 leilakaleva.fi, 1 leilautourdumon.de, 1 @@ -88225,7 +87028,6 @@ lemco.dk, 1 lemedecin.fr, 1 lemediateur-creditagricole-nord-est.com, 1 -lemgstudio.com, 1 lemieuxproducts.com, 1 leminhduong.com, 1 lemitron.fr, 1 @@ -88234,6 +87036,7 @@ lemmy.cafe, 1 lemmy.one, 1 lemmyfund.org, 1 +lemner.md, 1 lemoine.at, 1 lemon.nl.eu.org, 1 lemonade.com, 1 @@ -88243,7 +87046,6 @@ lemoncloud.eu.org, 1 lemoniax.com, 0 lemonpic.ga, 1 -lemonrotools.com, 1 lemonsociety.cf, 1 lemonsoftware.eu.org, 1 lemontownshippa.gov, 1 @@ -88279,7 +87081,6 @@ lenergietoutcompris.fr, 1 lenetwizz.fr, 1 lengby.com, 1 -lengoo.com, 1 lengua-alemana.tk, 1 lenguajecoloquial.com, 1 lenguajecoloquial.es, 1 @@ -88324,6 +87125,7 @@ lens.xyz, 1 lenseshop.tk, 1 lensexperts.com, 1 +lensflair.studio, 1 lenspirations.com, 1 lenstamiri.com, 1 lenstore.co.uk, 1 @@ -88386,6 +87188,7 @@ leoniepur-porn.com, 1 leonieslonging.org, 1 leonklingele.de, 1 +leonorebrandwebsites.nl, 1 leonpa.gov, 1 leonplast.tk, 1 leontiekoetter.de, 1 @@ -88407,7 +87210,6 @@ leotrepp.org, 1 leovanna.co.uk, 1 lep.gov, 1 -lepad.com, 1 lepalierjuridique.com, 1 lepartiecomemoracoes.com.br, 1 lepat.es, 1 @@ -88418,7 +87220,6 @@ lephilnet.tk, 1 lephone.com, 1 lepidum.jp, 1 -leping.com, 1 lepka.tk, 1 lepkov.ru, 1 leplus.net, 1 @@ -88504,7 +87305,6 @@ lesgarianes.com, 1 lesgitesdusapey.fr, 0 lesgoodnews.fr, 1 -leshetu.com, 0 leshok.tk, 1 leshop.ch, 1 lesin.tk, 1 @@ -88522,14 +87322,12 @@ lesmobiles.com, 1 lesnet.co.uk, 1 lesnoticiesdensergialarcon.site, 1 -lesouffledesaintjean.fr, 1 lesours.in, 1 lesparqueteurs.xyz, 1 lespasseursdelivres.fr, 1 lespatriotes.tk, 1 lespecialiste-pradelexcellence.com, 1 lesperlesdunet.tk, 1 -lespetitschiffons.com, 1 lespinasse.org, 1 lesplatanes.ch, 0 lesportmusic.tk, 1 @@ -88537,7 +87335,7 @@ lesprofsplacotent.com, 1 lesptitspasdelyne.fr, 1 lesptitstutos.fr, 1 -lesrivesdegaronne.com, 1 +lesrivesdegaronne.com, 0 lesschwab-privacyportal-ui.azurewebsites.net, 1 lessets-graphiques.com, 1 lessharp.com, 1 @@ -88605,7 +87403,6 @@ letsbrand-holding.nl, 1 letsbrandholding.com, 1 letsbrandholding.nl, 1 -letscleanlaundry.in, 1 letsclimact.com, 1 letscrackit.ml, 1 letsdebug.net, 1 @@ -88623,6 +87420,7 @@ letsight.com, 1 letsknow.ga, 1 letsknow.tk, 1 +letsme.sh, 1 letson.me, 1 letsorganise.uk, 1 letspartyrugby.co.uk, 1 @@ -88637,6 +87435,7 @@ letterbox-online.de, 1 letterrill.gq, 1 letters.nl, 1 +lettersblogatory.com, 1 lettings101.org, 0 letto.ru, 1 lettori.club, 1 @@ -88745,6 +87544,7 @@ lewisjuggins.co.uk, 1 lewismcyoutube.uk, 1 lewistonutah.gov, 1 +lewood.io, 1 lewt.me, 1 lex-legal.com.ua, 1 lex18.com, 1 @@ -88763,7 +87563,6 @@ lexic.co, 1 lexico.pt, 1 lexicography.online, 1 -lexiconbank.com, 1 lexicore.ga, 1 lexifax.ga, 1 lexikon24.tk, 1 @@ -88811,6 +87610,7 @@ lezdombliss.com, 1 lezdomsm.com, 1 lezen.tk, 1 +leziblog.com, 1 lezzetyurdu.com.tr, 1 lf-space.com, 1 lfashion.eu, 1 @@ -88822,6 +87622,7 @@ lfg.com.ph, 1 lfgss.com, 1 lfi-mv.de, 0 +lfmosqueira.com.br, 1 lfn.moe, 1 lfnaturopathie.com, 1 lforla.org, 1 @@ -88853,7 +87654,6 @@ lgnsh.fr, 1 lgobchod.cz, 1 lgrs.com.au, 1 -lgs.com, 1 lgsc.lv, 1 lgscripts.com.br, 1 lgsg.us, 1 @@ -88888,7 +87688,6 @@ li-project.com, 1 li.fi, 1 li.finance, 1 -li.gz.cn, 1 li.search.yahoo.com, 0 li1436-89.members.linode.com, 1 lia-fox.org, 1 @@ -88909,17 +87708,14 @@ liana.site, 1 lianand.com, 1 liangbi.ml, 1 -liange.com, 1 lianglongcredit.com, 0 liangmian.com, 1 liangxingai.com, 1 liangyichen.net, 0 -lianid.com, 1 lianka.eu, 1 lianka.pl, 1 lianka.uk, 1 lianseng.com, 1 -liansuan.com, 1 liantao.com, 1 lianwen.kim, 1 liaozheqi.cn, 1 @@ -89121,6 +87917,7 @@ licx.ml, 1 licx.ru, 1 lida-vets.co.uk, 1 +lidana.ai, 1 lidarlatinoamerica.com, 1 lidarwindtechnolog.cf, 1 lidarwindtechnolog.ga, 1 @@ -89189,7 +87986,6 @@ life4net.tk, 1 lifeandhealthtips.tk, 1 lifeandhowtosurviveit.com, 1 -lifeartstudios.net, 1 lifeasgame.tk, 1 lifeatthemax.graphics, 1 lifeatthemax.marketing, 1 @@ -89205,6 +88001,7 @@ lifeconnections.ro, 1 lifecoresystems.com, 1 lifecraft.cf, 1 +lifecreator.cn, 1 lifedrops.com.au, 1 lifegoesonsojustsmile.tk, 1 lifehacker.com, 1 @@ -89241,7 +88038,6 @@ lifeofpromotion.com, 1 lifepathdoc.com, 1 lifepathpsychiatry.com, 1 -lifepub.com, 1 liferay.com, 1 lifereset.it, 1 lifesaverhindi.tk, 1 @@ -89262,6 +88058,7 @@ lifestylecityspa.nl, 1 lifestyledoctor.in, 1 lifestylefoodies.com, 1 +lifestylereno.com, 1 lifestylexplocial.tk, 1 lifetech.com.my, 1 lifetecinc.com, 1 @@ -89269,11 +88066,13 @@ lifetimeguaranteedhousepainting.com, 1 lifetimemedsers.ga, 1 lifetimemedsest.ga, 1 +lifetimetraining.co.uk, 1 lifetoolscdc.com, 1 lifetree.network, 1 lifeupgame.fr, 1 lifewithdyna.com, 1 lifexpert.tk, 1 +lifexue.com, 1 lifi.is, 1 lift-world.info, 1 lift.hr, 1 @@ -89281,7 +88080,6 @@ liftbleskspb.ru, 1 liftedpixel.net, 1 liftie.info, 1 -liftntake.com, 1 lig.ink, 0 liga.am, 1 liga.ng, 1 @@ -89327,7 +88125,6 @@ lightography.com, 1 lightonelectrical.com.au, 1 lightquantum.moe, 1 -lightred.com, 1 lightrun.com, 1 lights0123.com, 1 lightsfromspace.com, 0 @@ -89371,7 +88168,6 @@ lijstbob.nl, 1 lijstje.be, 1 lijstje.nl, 1 -lika21.ru, 1 likans.tk, 1 like-boss.ga, 1 like-rabota.tk, 1 @@ -89386,7 +88182,6 @@ likehifi.de, 1 likenewhearing.com.au, 1 likenosis.com, 1 -likeour.com, 1 likesec.net, 1 likesec.se, 1 likesolidaria.com.co, 1 @@ -89474,7 +88269,6 @@ limebulgaria.com, 1 limechain.tech, 0 limecho.net, 1 -limehost.com, 1 limehotel.tk, 1 limelightnashville.cf, 1 limelightnashville.ga, 1 @@ -89488,7 +88282,6 @@ limestonecountyema-al.gov, 1 limestonemechanical.ca, 1 limetaxi.com.ua, 1 -limetechnologies.net, 1 limetee.cz, 1 limetorrent.gq, 1 limetw.eu.org, 1 @@ -89597,6 +88390,7 @@ lindsay-lohan.tk, 1 lindsaylakeinspections.com, 1 lindsborgks.gov, 1 +lindscatering.com, 1 lindseyadelman.com, 1 lindseyfansite.tk, 1 lindskogen.se, 1 @@ -89609,7 +88403,7 @@ lineaesse5.it, 1 lineage2.es, 1 lineageos.org, 1 -lineamagazin.ru, 1 +lineamagazin.ru, 0 lineamortal.tk, 1 linebet.com, 1 linebooks.cf, 1 @@ -89625,7 +88419,6 @@ linestep.jp, 1 lineto.com, 1 linext.cn, 0 -linfadenopatia.com, 1 linfamilygc.com, 1 linge-ma.ro, 1 lingerie.com.br, 1 @@ -89653,14 +88446,13 @@ linhaoyi.com, 0 linherest.tk, 1 linhua.org, 1 +linium.duckdns.org, 1 linjerry.tk, 1 -linjie.com, 1 link-group.tk, 1 link-innovation.de, 1 link-knighki.cf, 1 link-list.tk, 1 link-live.com, 1 -link-man.net, 1 link-medital.com, 1 link-net.ga, 1 link.com, 1 @@ -89797,7 +88589,6 @@ linss.org, 1 linss.org.cn, 1 linssindustries.com, 1 -lintmx.com, 1 linu.gq, 1 linuos.com, 1 linuq.org, 1 @@ -89822,6 +88613,7 @@ linux.fi, 1 linux.im, 1 linux.pizza, 1 +linux0001.com, 1 linux3.org, 1 linux4.de, 1 linux4all.tk, 1 @@ -89837,7 +88629,6 @@ linuxdashboard.com, 1 linuxdays.cz, 1 linuxdoc.org, 1 -linuxfan.com, 1 linuxforu.tk, 1 linuxforum.ch, 1 linuxforwindows.com, 1 @@ -89846,7 +88637,6 @@ linuxhostingindia.in, 1 linuxhostsupport.com, 1 linuxiac.com, 1 -linuxil.org, 1 linuxiuvat.de, 1 linuxkompis.se, 1 linuxlatbot.tk, 1 @@ -89870,8 +88660,6 @@ linzeliang.com, 1 linzyjx.com, 1 liobet.com, 1 -liodex.com, 1 -liofactoryadvisory.lu, 1 lion-app.de, 1 lion-heart.men, 1 lion-king.ru, 1 @@ -89879,20 +88667,18 @@ lion3star.store, 1 lionard.com, 1 lionchita.tk, 1 -lionessport.com, 0 lionesstamar.com, 1 lionheartsecurityservices.com, 1 -lionkitchenremodel.com, 1 lionland.tk, 1 lionpa.ws, 1 lions.gr.jp, 1 +lionsclubgeraardsbergen.be, 1 lionsk.tk, 1 lionsroarnews.com, 1 lioraaja.com, 1 liorggi.ga, 1 lip.pt, 1 lipacom.ga, 1 -lipad.ca, 1 lipartydepot.com, 1 lipator.cf, 1 lipaversavers.com, 1 @@ -89910,12 +88696,10 @@ lipovka.tk, 1 lipowebsite.tk, 1 lippu1.fi, 1 -lips.ne.jp, 1 liptor.gq, 1 lipturess.tk, 1 liq.com.br, 1 liqd.net, 1 -liqiao.com, 1 liqiuyu.com, 1 liqueur.wiki, 1 liquid.cz, 1 @@ -89961,7 +88745,6 @@ lisamay.com.au, 1 lisamildon.com, 1 lisanotes.com, 1 -lisansall.com, 1 lisanshizmetleri.com, 1 lisapinder.com, 1 lisapo.info, 1 @@ -89980,7 +88763,6 @@ lishayut-prav.gq, 1 lishayut-prav.ml, 1 lishayut-prav.tk, 1 -lisheencastle.com, 1 lishizhen.com, 1 lisiano.eu, 1 lisieuxarquitetura.com.br, 1 @@ -90096,7 +88878,6 @@ litoslab.nl, 1 litportal.gq, 1 litteraturkanonen.se, 1 -litterfreeriversandstreams.eu, 1 littery.com, 1 little-brother.eu, 1 little-cake.com, 0 @@ -90159,6 +88940,7 @@ littlesouls.ml, 1 littlesouthafrica.co.uk, 1 littlestars.bg, 1 +littletigerchinese.com, 1 littlewatcher.com, 1 littleyokohamakennel.tk, 1 liturgical.net, 1 @@ -90168,11 +88950,9 @@ litwinek.pl, 1 litz.ca, 1 litzenberger.ca, 1 -liubai.com, 1 liubliu.co.uk, 1 liud.im, 1 liudon.com, 1 -liuhecai.com, 1 liujr.tk, 1 liujunyang.com, 0 liukang.com, 1 @@ -90180,9 +88960,7 @@ liul.in, 1 liuliuya.com.tw, 1 liulo.cf, 1 -liunian.com, 1 liups.net, 1 -liups.one, 1 liuq.org, 1 liuqiao.best, 1 liuqiao.cf, 1 @@ -90245,7 +89023,6 @@ livefoot.fr, 1 liveforspeed.se, 1 livefortheviews.com, 1 -livefussball.com, 1 livehomecams.co.uk, 1 liveint.org, 1 liveinternet.v.ua, 1 @@ -90258,7 +89035,6 @@ livelifewithintent.com, 1 livelifewithstyle.com, 1 livelink.tk, 1 -livelondon.fr, 1 livelong.tk, 1 livelonglife.tk, 1 livelovelaughlg.com, 1 @@ -90277,7 +89053,6 @@ livequote.info, 1 liveregistratie.nl, 1 liverfoundation.org, 1 -liverider.co.jp, 1 liverkids.tk, 1 livermoreca.gov, 1 livermorefireco.gov, 1 @@ -90293,7 +89068,6 @@ livestep.one, 1 livestone.tk, 1 livestrana.tk, 1 -livesure.com, 1 livesync.win, 1 liveteachers.in, 1 livetec.show, 1 @@ -90317,7 +89091,6 @@ living-with-outlook-2010.com, 1 living.video, 1 livingafrugallife.com, 1 -livingbitsandthings.com, 1 livingdex.ca, 1 livingdocs.io, 1 livinghebrew.tk, 1 @@ -90371,7 +89144,6 @@ lizheng.de, 1 lizhi.io, 1 lizhihezi.com, 1 -lizhu.com, 1 lizhuan.cn, 0 lizkimball.com, 1 liznewton.com.au, 1 @@ -90388,7 +89160,7 @@ ljcybersolutions.uk, 1 ljdesign.be, 1 ljekarne-plantak.hr, 1 -ljoonal.xyz, 1 +ljesports.com, 1 ljpc-hosting.nl, 0 ljs.io, 1 ljskatt.com, 1 @@ -90427,7 +89199,6 @@ llcgeek.com, 1 llcig.com, 1 llcigroup.com, 1 -llcj.com, 1 llcradar.com, 0 lldigital.co.il, 1 lleidanoticies.com, 1 @@ -90443,7 +89214,6 @@ llumar.com, 1 llvm.us, 1 llyncelyn.com, 1 -lm-architecture.com, 1 lm-landscapes.co.uk, 1 lm1628.com, 1 lm228.cn, 1 @@ -90471,7 +89241,6 @@ lndns.net, 1 lndrive.space, 1 lneuber.de, 1 -lnf.lt, 1 lnhrdt2.ch, 1 lnhydy.cn, 1 lnk.bio, 1 @@ -90484,6 +89253,7 @@ lnsrv.net, 1 lntecc.com, 1 lntpower.com, 0 +lntsufin.com, 1 lnttechservices.com, 1 lnxy.eu, 1 lnyltx.cn, 1 @@ -90551,7 +89321,6 @@ localcryptos.com, 1 locald.at, 1 localdating.ml, 1 -localdigitaldesign.com, 1 localenv.uk, 1 localethereum.com, 1 localexpert.realestate, 1 @@ -90565,7 +89334,7 @@ localiza.io, 1 localized.tk, 1 localizejs.com, 1 -localizestaging.com, 0 +localizestaging.com, 1 locall.cf, 1 locallandscape.services, 1 locallawfirms.com, 1 @@ -90603,9 +89372,6 @@ location-vacances-campello.com, 1 location-vacances-croatie.tk, 1 location-vacances.biz, 1 -locationkaraokemontreal.com, 1 -locationkaraokeottawa.com, 1 -locationkaraokequebec.com, 1 locationmarrakechvoiture.com, 1 locations-casuniv.fr, 1 locations.tk, 1 @@ -90669,7 +89435,6 @@ locksmithsammamishwa.com, 1 locksmithsanantonio-247.com, 1 locksmithsanantoniotexas.com, 1 -locksmithsbluff.com, 1 locksmithsbuda.com, 1 locksmithscottsdaleaz.com, 1 locksmithservice-houston.com, 1 @@ -90678,12 +89443,10 @@ locksmithspring.com, 1 locksmithspringtx.com, 1 locksmithssanmarcostx.com, 1 -locksmithstaffordtx.com, 1 locksmiththewoodlands.com, 1 locksport.org.nz, 1 lockte.com, 1 lockwoodonlinejournals.com, 1 -loco-concepts.nl, 1 loco-creations.nl, 1 loco-socials.nl, 1 locomediagroep.nl, 1 @@ -90726,7 +89489,6 @@ lofirmo.com, 1 loforo.com, 1 loft.com.br, 1 -lofthotel.com, 1 lofttravel.com, 1 loftyideas.ml, 1 loftymedia.ca, 1 @@ -90737,7 +89499,6 @@ log4shell.org, 1 logactiond.org, 1 logal.media, 1 -logalot.com, 1 loganandmaria.com, 1 logancapital.com, 1 logancooper.jp, 1 @@ -90803,7 +89564,6 @@ login.sapo.pt, 0 login.ubuntu.com, 1 login.yahoo.com, 0 -logindefense.com, 1 logingate.hu, 1 loginsecure.eu, 1 loginsoft.com, 1 @@ -90881,6 +89641,7 @@ lojaapi.com, 1 lojaapoio.com.br, 1 lojabeeways.com.br, 1 +lojabrandelero.com.br, 1 lojabrother.com, 1 lojadafloresta.pt, 0 lojadamimo.com.br, 1 @@ -90909,6 +89670,7 @@ lojapneusxpress.com.br, 1 lojaprimemed.com.br, 1 lojaprojetoagua.com.br, 1 +lojashampoo.pt, 1 lojaskd.com.br, 0 lojasmary.com.br, 1 lojasoulstyle.com.br, 1 @@ -90930,7 +89692,6 @@ lokace.eu, 1 lokan.id, 1 loket.nl, 1 -lokiani.com, 1 lokinet.org, 1 lokjagruktafoundation.com, 1 lokmatnews.in, 1 @@ -91029,9 +89790,7 @@ lonavla.tk, 1 lonca.co, 1 lonchaney.com, 1 -londer.be, 1 londis.co.uk, 1 -london-design.co.uk, 0 london-mafia.tk, 1 london-transfers.com, 1 london-wealth.com, 1 @@ -91102,7 +89861,6 @@ longest.tk, 1 longevita.co.uk, 1 longevitadental.com, 1 -longevitahairtransplant.com, 1 longevityfaq.com, 1 longevitywi.com, 1 longflexing.com, 1 @@ -91122,11 +89880,9 @@ longlanepasture.org, 1 longlink.tk, 1 longlivehongkong.com, 1 -longlu.com, 1 longma.pw, 1 longma168.cn, 1 longmeadowma.gov, 1 -longmenzhen.com, 1 longmontnetworking.com, 1 longmontwaterheaters.com, 1 longpaddock.qld.gov.au, 1 @@ -91196,6 +89952,7 @@ lootdog.io, 1 loothole.com, 1 lootlemon.com, 1 +lootrix.live, 1 loots.eu, 1 lootstudios.com, 0 loottitan.com, 1 @@ -91270,7 +90027,6 @@ loreofthenorth.com, 1 loreofthenorth.net, 1 loreofthenorth.nl, 1 -loreynts.com, 1 loricozengeller.com, 0 lorimar.bg, 1 lorimullins.com, 1 @@ -91311,6 +90067,7 @@ losemperadores.tk, 1 loser.wtf, 1 losespiritus.tk, 1 +losethisball.com, 1 loseweightbaby.tk, 1 loseweightin5days.tk, 1 losfiesteros.tk, 1 @@ -91321,7 +90078,6 @@ losgringos.tk, 1 loshalcones.tk, 1 loshogares.mx, 1 -losinterrogantes.com, 1 losjardines.tk, 1 loslegendarios.tk, 1 losless.fr, 1 @@ -91338,7 +90094,6 @@ lospadillas.com, 1 lospadrinosmagicos.tk, 1 lospegotes.tk, 1 -losperone.com, 1 lospozuelos.tk, 1 losratonescoloraos.tk, 1 losrosales.tk, 1 @@ -91392,7 +90147,6 @@ loteamentoabertocapivari.com.br, 1 lotekk.gq, 1 lotereiki.tk, 1 -loteriasdominicana.com.do, 1 lothai.re, 1 lothiandisabilitysport.co.uk, 1 lothiandomestics.co.uk, 1 @@ -91674,7 +90428,6 @@ lqd.plus, 1 lqd.pp.ua, 1 lqhi.cn, 1 -lqy.me, 1 lr-expert.ru, 1 lr04d.xyz, 1 lr4.uk, 1 @@ -91775,7 +90528,7 @@ luathungson.vn, 1 lubar.me, 1 lubartow24.pl, 1 -lubchemspecialties.com, 1 +lubchemspecialties.com, 0 lubosabo.tk, 1 lubot.net, 1 lubotodorov.com, 1 @@ -91798,7 +90551,7 @@ lucasbasler.com, 1 lucasbastos.com, 1 lucasbergen.ca, 1 -lucasbonomi.com, 1 +lucasbonomi.com, 0 lucascantor.com, 1 lucascosta-ido.ml, 1 lucascountyohiovotes.gov, 1 @@ -91842,6 +90595,7 @@ luciferianism.tk, 1 lucille-thomas.fr, 1 lucillewillemsen.tk, 1 +lucio-perez.com, 1 luciobarcellona.it, 1 luciogelsi.com, 1 lucishere.cz, 1 @@ -91885,7 +90639,6 @@ lucym.co.nz, 1 lucymontebello-arte.com, 1 lucysan.net, 1 -luda.plus, 1 ludasmith.co.uk, 1 lude.tk, 1 ludek.biz, 1 @@ -91937,7 +90690,6 @@ lugopress.nl, 1 lugros.tk, 1 lugui.in, 1 -luhaifeng.com, 1 luhkultour.de, 1 lui.vn, 1 luinonotizie.it, 1 @@ -91981,7 +90733,6 @@ lukaskollmer.de, 1 lukasldc.com, 1 lukasmatuska.cz, 0 -lukaspapcun.tech, 1 lukasrod.cz, 1 lukasschauer.de, 1 lukastautz.de, 1 @@ -92035,6 +90786,7 @@ lumaistore.com.br, 1 lumapartners.com, 1 lumapr.com, 1 +lumasearch.com, 1 lumbardhi.tk, 1 lumbercartel.ca, 1 lumberg-automationusa.com, 1 @@ -92051,7 +90803,6 @@ lumien.net, 1 lumieredesoy.com, 1 luminabh.com.br, 1 -luminal-creation.com, 1 luminaproject.ml, 1 luminary.pl, 1 luminateimpactlab.com, 1 @@ -92123,7 +90874,6 @@ lunenburgva.gov, 1 lunepieters.co.za, 1 lunextd.com, 1 -lungcancermesothelioma.top, 1 lungta.pro, 1 lunguflorin.ro, 1 luniak.net, 1 @@ -92138,6 +90888,7 @@ lunulanails.nl, 1 luo.bo, 1 luobo8.com, 1 +luoe.cloud, 1 luoe.me, 1 luoh.cc, 1 luoh.me, 1 @@ -92179,7 +90930,6 @@ luripump.se, 1 lurishop.com.br, 1 lurkmirror.ml, 1 -lurun.com, 1 lusakatimes.com, 1 lusc.ch, 1 lushclub.tk, 1 @@ -92249,7 +90999,6 @@ luxereside.com, 1 luxerone.com, 1 luxest.az, 1 -luxetn.com, 1 luxfosdecoenterprise.com, 1 luxhair.com.ua, 1 luxhome.tk, 1 @@ -92274,6 +91023,7 @@ luxuryfashion.hu, 1 luxurygifts.tk, 1 luxuryhome.co.id, 1 +luxuryhomefloripa.com, 1 luxuryhomeinfo.tk, 1 luxuryhomenews.tk, 1 luxuryhomepro.tk, 1 @@ -92288,7 +91038,6 @@ luxurythatlasts.com, 1 luxuryweddingsindonesia.com, 1 luxuryweeks.com, 1 -luxusco.com, 1 luxushair.com, 1 luxusnataliri.cz, 1 luxusnivoucher.cz, 1 @@ -92303,6 +91052,7 @@ luzi-type.ch, 1 luzica.tk, 1 luziekurth.com, 1 +luzonic.do, 1 luzsaude.pt, 1 lv.com, 1 lv.lk, 1 @@ -92318,8 +91068,8 @@ lvfc.co, 1 lvftw.com, 1 lvg-heidelberg.info, 1 -lvg.cl, 1 lvguitars.com, 1 +lvi.bz, 1 lvkasz.us, 1 lvkaszus.pl, 1 lvlv.cf, 1 @@ -92385,7 +91135,9 @@ lyndo.ga, 1 lyndontownshipmi.gov, 1 lynero.dk, 0 +lyness.com, 1 lyness.io, 1 +lyness.net, 1 lyngvaer.no, 1 lynho.com.br, 1 lynk.hopto.org, 1 @@ -92409,7 +91161,6 @@ lynx-webservice.com, 0 lynx.com.au, 1 lynx.nl, 1 -lynxbroker.com, 1 lynxbroker.cz, 1 lynxbroker.pl, 1 lynxbroker.sk, 1 @@ -92420,7 +91171,6 @@ lyon-synergie.com, 1 lyonelkaufmann.ch, 0 lyonliving.com, 1 -lyonsbarry.com, 1 lyonsbytes.com, 1 lyontwp-higginsmi.gov, 1 lyoproform.fr, 1 @@ -92430,14 +91180,13 @@ lyrex.net, 1 lyric.co.uk, 1 lyrica.systems, 1 -lyrical-nonsense.com, 1 lyricfm.ie, 1 lyricheaven.com, 1 lyricsforyou.gq, 1 lyricsupdater.tk, 1 -lyriki.com, 1 lyriksidan.ga, 1 lyrique.ch, 1 +lys-universal.com, 1 lys.ch, 0 lysander-hans.com, 1 lyscarrental.com, 1 @@ -92488,16 +91237,13 @@ m-mail.fr, 1 m-matsuo.co.jp, 1 m-monitor.pl, 1 -m-mts.ru, 1 m-net.de, 1 m-o-v-i-e.tk, 1 -m-o-x.de, 1 m-office.pl, 1 m-partners.biz, 1 m-r-team.de, 1 m-ses.fr, 1 m-team.cc, 1 -m-teq.nl, 0 m-tower.nl, 1 m-warrior.tk, 1 m.ac, 1 @@ -92533,7 +91279,6 @@ m3u8play.com, 1 m42-gmbh.de, 1 m426.ch, 1 -m4c.ro, 1 m4g.ru, 1 m4rcus.de, 1 m4rkos.de, 1 @@ -92546,7 +91291,6 @@ m7kni.com, 1 m7mzo.com, 1 m7worknow.com, 1 -m8593.com, 1 m9297.co, 1 m9728.co, 1 m9t.ch, 1 @@ -92605,7 +91349,6 @@ mabusalah.tk, 1 mac-i-tea.ch, 0 macabeo.bio, 1 -macai.com, 1 macailabritton.com, 1 macalha.com, 1 macallan-tls.com, 1 @@ -92626,8 +91369,8 @@ macaw.net, 1 macaw.nl, 1 macawi.com, 1 +macbo.de, 1 maccharlesindia.com, 1 -macchinetta.com, 1 macdj.tk, 1 macdn.net, 1 macdonaldcody.com, 1 @@ -92678,7 +91421,6 @@ mackies.ga, 1 mackinawil.gov, 1 macksproductions.in, 1 -maclafferty.be, 1 maclayer.com, 1 macleans.ca, 1 maclemon.at, 1 @@ -92690,11 +91432,10 @@ macnetwork.eu, 0 macnetwork.fr, 0 macnetwork.net, 0 -macnews.org, 1 maco.org.uk, 1 macompta.fr, 1 macon-newsroom.com, 1 -macon.de, 1 +macon.de, 0 maconcountymo.gov, 1 maconnerie-dcs.ch, 1 maconqc.com, 1 @@ -92810,6 +91551,7 @@ madisonsquarerealestate.com, 1 madisontwpmi.gov, 1 madisonvilleky.gov, 1 +madisskips.com.au, 1 madkids.ga, 1 madknight.tk, 1 madlandezboard.tk, 1 @@ -92874,17 +91616,16 @@ madtown.tk, 1 madu369.com, 1 maduexclusive.com, 1 -maduracion.com, 1 maduradas.info, 1 maduradas.net, 1 madviewer.tk, 1 +madvoxel.com, 1 madwarlock.com, 1 mae-berlinistanbul.com, 1 maedacolo.com.br, 1 maedchenflohmarkt.at, 1 maedchenflohmarkt.de, 1 maeitems.ca, 1 -maeliacreation.fr, 1 maeln.com, 1 maelstrom-fury.eu, 1 maelstrom.ninja, 1 @@ -92937,6 +91678,7 @@ magazinecards.ga, 1 magazinedabeleza.net, 1 magazinedotreino.com.br, 1 +magazinefeminina.com.br, 1 magazinhaberajansi.com, 1 magazinhaberi.tk, 1 magazone.cf, 1 @@ -92947,7 +91689,6 @@ magdahavas.com, 1 magdakostyra.pl, 1 magdalena-pulawska.pl, 1 -magdalenabee.com, 1 magdalenabus.tk, 1 magdalenatransa.tk, 1 magdeburg.directory, 1 @@ -92972,7 +91713,7 @@ mager.org, 1 magesaigon.com, 1 magescobd.com, 1 -magesy.blog, 0 +magesy.blog, 1 magesypro.com, 1 magewell.nl, 1 maggianos.com, 1 @@ -93067,7 +91808,6 @@ magna-carta.co.za, 1 magnacumlaude.co, 1 magnamus.it, 1 -magnatechnology.com, 1 magnatronic.com.br, 1 magneetfolie.nl, 1 magnes.priv.pl, 1 @@ -93126,7 +91866,6 @@ magonote-nk.com, 1 magornitho.org, 1 magosmedellin.com, 1 -magraebela.com, 1 magsdata.com, 1 magu.kz, 1 maguire.tk, 1 @@ -93137,6 +91876,7 @@ magwin.co.uk, 1 magyarepitok.hu, 1 mah-nig.ga, 1 +mah24.com, 1 mahabharat.tk, 1 mahadhanconnect.com, 1 mahadihasan.cf, 1 @@ -93157,7 +91897,6 @@ mahavirmandirpatna.org, 1 mahawi.sk, 1 mahayana.tk, 1 -mahayogam.org, 1 mahbobmax.tk, 1 mahboobi.tk, 1 mahdafweb.tk, 1 @@ -93309,6 +92048,7 @@ mainehousing.org, 0 mainehuts.org, 1 mainelosap.gov, 1 +mainestreetsolutions.com, 1 mainframeserver.space, 1 mainfrankentheater.de, 1 mainhattan-handwerker.de, 1 @@ -93318,7 +92058,6 @@ mainroller.de, 1 mainsec.de, 1 mainspitze.social, 1 -mainspy.com, 1 mainstaysafetywedge.com, 1 mainstream-tech.com, 1 mainstreetauto.com, 1 @@ -93347,7 +92086,6 @@ maisciencianaescolams.com.br, 1 maiscrm.com, 1 maiscuidar.com, 1 -maiscupoes.com, 1 maisecom.com.br, 1 maisempregonet.com, 1 maisgasolina.com, 1 @@ -93387,7 +92125,6 @@ majameer.com, 1 majasballites.lv, 1 majavucic.com, 1 -majdanpek.com, 1 majelisriyadhah.com, 1 majemedia.com, 1 majesnix.org, 1 @@ -93433,7 +92170,6 @@ makedin.net, 1 makedonija.net.mk, 1 makeevkanews.ru, 1 -makeh2o.com, 1 makeit-so.de, 0 makeitpopadvertising.com, 1 makeitright.ca, 1 @@ -93456,7 +92192,6 @@ makeplans.com, 1 makepro.net, 1 maker.systems, 1 -maker.to, 0 makera.ga, 1 makerdao.com, 1 makerichmondhome.com, 1 @@ -93474,7 +92209,6 @@ makeupillusion.com, 1 makeuplove.nl, 1 makeuppleasure.it, 1 -makeupstoremx.com, 1 makeurbiz.com, 1 makeurl.ml, 1 makeus.tk, 1 @@ -93502,7 +92236,6 @@ makonet.com.au, 1 makos.jp, 1 makowitz.cz, 1 -makrama.shop, 1 makromedikal.com.tr, 1 maksa.ga, 1 maksima.kh.ua, 1 @@ -93702,7 +92435,6 @@ mamiechacha.com, 1 mamijaclean.tk, 1 mamilitante.fr, 1 -mamilove.com, 1 mamlaka.ml, 1 mamlaka.tk, 1 mammabelly.com.br, 1 @@ -93732,24 +92464,21 @@ man-stuff.co.uk, 1 man3s.jp, 0 mana.ee, 1 -mana.wiki, 1 manab-it.com, 1 manach.net, 1 manaenergija.lv, 1 manage.cm, 1 manage.com, 0 manageairlinesbooking.com, 1 -manageathome.co.uk, 1 -managed-it.africa, 1 managed-it.co.za, 1 managedhosting.de, 0 managedserver.it, 1 -managedservicesraleighnc.com, 1 managedtreasures.com, 1 managedwphosting.nl, 0 managefile.tk, 1 managefuhui.com, 1 management-companie.ro, 1 +management-constructii.ro, 1 managementboek.nl, 1 managementforstartups.com, 0 manageprefs.com, 1 @@ -93884,6 +92613,7 @@ manitaggarwal.com, 0 manitasavila.com, 1 manitbd.com, 0 +manitcloud.com, 1 manito.kr, 1 manitoba.ca, 1 manitoulinairport.ca, 1 @@ -93942,7 +92672,6 @@ manojsharan.me, 1 manolitodarts.tk, 1 manologaribay.tk, 1 -manongamedicals.com, 1 manopaskola.lt, 1 manorhousecapital.com, 1 manoro.de, 1 @@ -93956,7 +92685,6 @@ mansdell.net, 1 mansfeld.pl, 1 manshamita.com, 1 -manshatech.com, 1 mansikka-sachi.com, 1 mansionflip.com, 1 manski.net, 1 @@ -93971,7 +92699,6 @@ mantaro.site, 1 manteca.gov, 1 manteena.com.au, 1 -mantella.nl, 1 mantenimiento-zaragoza.com, 1 mantenimientodeinstalacioneselectricas.es, 1 mantenimientoimpresoras.com, 1 @@ -93986,7 +92713,6 @@ mantraptownshipmn.gov, 1 manual-pdf.com, 1 manual-user-guide.com, 1 -manualcert.ie, 1 manualdousuario.net, 0 manualowl.com, 1 manualredeye.com, 1 @@ -94033,6 +92759,7 @@ manyhotfiesta.ml, 1 manylots.ru, 1 manyo.jp, 1 +manypets.com, 1 manyproservices.com, 1 manytricks.com, 1 manytubes.ga, 1 @@ -94040,6 +92767,7 @@ manyvids.com, 1 manyzero.ml, 1 manzanagroup.ru, 1 +manzanareshairph.com, 1 manzanita-nsn.gov, 1 maomihz.com, 1 maone.net, 1 @@ -94072,6 +92800,7 @@ mapa-airsoft-akci.cz, 1 mapadados.com, 1 mapadoacolhimento.org, 1 +mapailytics.com, 1 mapasmundi.com.br, 1 mapausenaturelle.fr, 1 mapblender.com, 1 @@ -94134,7 +92863,6 @@ marakovits.net, 1 maralclock.ir, 1 maranathacarechildren.com, 1 -maranello.wine, 1 maranightmare.net, 1 maranza.org, 1 marasgroup.com.au, 1 @@ -94144,6 +92872,7 @@ maratonyayincilik.com, 1 marauderos.tk, 1 marazul.tk, 1 +marbas.com.tr, 1 marbellaclub.com, 1 marbellaoptic.ro, 1 marbermedical.com, 1 @@ -94197,6 +92926,7 @@ march-consulting.jp, 1 marcha.org.ar, 1 marchagen.nl, 1 +marchand.net.pl, 1 marchellenevers.tk, 1 marchesini.com, 1 marchesini.com.ua, 1 @@ -94229,6 +92959,7 @@ marcomediacion.com, 1 marcopiottante.tk, 1 marcoreitmeier.de, 1 +marcosavasta.it, 1 marcositaliandeli.co.uk, 0 marcossan.com, 1 marcosteixeira.tk, 1 @@ -94273,7 +93004,6 @@ margagriesser.de, 1 margan.ch, 0 margaretgel.com, 1 -margarethouse.co.uk, 1 margaridamendessilva.com, 1 margaritafries.com, 1 margaritamun.com, 1 @@ -94398,7 +93128,6 @@ mario420.ga, 1 marioabela.com, 1 mariogarcia.tk, 1 -mariogasparini.com.br, 1 mariogeckler.de, 0 mariokartworld.wiki, 1 marioncounty911illinois.gov, 1 @@ -94410,6 +93139,7 @@ marioncountysheriffar.gov, 1 marioncountytn.gov, 1 marionflclerk.gov, 1 +marionmanagement.com.au, 1 marionswcdfl.gov, 1 mariontownshipbeavercountypa.gov, 1 mariontwpcvxmi.gov, 1 @@ -94465,7 +93195,6 @@ market-garden.tk, 1 market.android.com, 1 market.us, 1 -marketbar.ie, 1 marketbasket.tk, 1 marketcalls.in, 1 marketcavalli.it, 1 @@ -94482,6 +93211,7 @@ marketing4trends.com, 1 marketinganalytics.africa, 1 marketingautomationplan.nl, 1 +marketingbab.com, 1 marketingbrandingnews.com, 1 marketingbrandingnews.net, 1 marketingco.nl, 1 @@ -94504,7 +93234,7 @@ marketkarma.com, 1 marketking.ga, 1 marketlocal.ly, 0 -marketmotion.com.au, 0 +marketmotion.com.au, 1 marketnews.com, 0 marketone.com, 1 marketplace.tf, 1 @@ -94559,6 +93289,7 @@ marks.sa, 1 marksclassicautos.com, 1 marksm.it, 1 +marksmandigitalmedia.com, 1 marksmanhomes.com, 1 marksterlingrealtor.com, 1 markstevenkirk.com, 1 @@ -94569,7 +93300,7 @@ markt-reichenberg.de, 1 markt8asten.nl, 1 marktcontact.com, 1 -markterweele.nl, 1 +markterweele.nl, 0 marktgorman.com, 1 marktguru.at, 1 marktguru.de, 1 @@ -94623,7 +93354,6 @@ marmotte.love, 1 marmurmedical.com, 1 marny.eu, 1 -marocallo.com, 1 marocmail.ma, 1 marocnews.tk, 1 marocweb.tk, 1 @@ -94741,7 +93471,6 @@ martinboerhof.nl, 1 martinbrandt.de, 1 martinbrower.us, 1 -martinbuildingservices.co.uk, 1 martincernac.cz, 1 martincornelissen.tk, 1 martindales.ltd.uk, 1 @@ -94845,13 +93574,8 @@ marvos.se, 1 marw.org, 1 marwadionline.com, 1 -marx.pp.ua, 1 marxist.party, 1 marxists.org, 1 -marxists.pp.ua, 1 -marxists.ru, 1 -marxists.sbs, 0 -marxists.su, 0 marxmyths.org, 1 marxpark.tk, 1 mary-e-kay.tk, 1 @@ -94891,13 +93615,11 @@ masanunciosimpresos.com, 1 masarik.sh, 1 masaze-hanka.cz, 1 -masazomiestas.lt, 1 mascarablond.tk, 1 mascarbo.tk, 1 mascarillas.blog, 1 maschine.email, 1 maschinen.email, 1 -mascorazon.com, 1 mascotarios.org, 1 mascotasneron.es, 1 masdemariette.com, 1 @@ -94922,6 +93644,7 @@ masholdings.com, 1 mashonkavortu.tk, 1 mashoom.co.uk, 1 +mashrique.shop, 1 mashrmail.com, 1 mashrmail.io, 1 mashtibax.ga, 1 @@ -94942,7 +93665,6 @@ maskmail.co, 1 maskmy.id, 1 maskni.sa, 1 -maskova.net, 1 maskstyle.tk, 1 maslenka.tk, 1 maslin.io, 1 @@ -94985,14 +93707,13 @@ massagegunadvice.com, 1 massagehabits.com, 1 massagekartan.ga, 1 -massages-du-monde-charente.fr, 1 -massagespaindia.com, 1 massagetherapyschoolsinformation.com, 1 massaggi.it, 1 massaggio.it, 1 massagik.ml, 1 massana.es, 1 massanews.com, 1 +massarbsettlement.com, 1 massauditor.gov, 1 massazh.cf, 1 massbank.eu, 1 @@ -95003,6 +93724,7 @@ masshost.tk, 1 masshpc.gov, 1 massimo.com.my, 1 +massindia.in, 1 massive.tk, 1 massiveanalyser.com, 1 massiveassault.tk, 1 @@ -95043,7 +93765,6 @@ masterdigitale.com, 1 masterdistillers.net, 1 mastere.tn, 1 -masterfishing.bg, 1 masterflitzer.xyz, 1 masterglasses.ru, 1 masterhelenaroma.com, 1 @@ -95169,7 +93890,6 @@ materialyinzynierskie.pl, 1 materiel-grand-format.fr, 1 materna.life, 1 -maternalwellness.es, 1 maternityfashion.in, 1 maternoinfantile.online, 1 maternum.com, 1 @@ -95223,7 +93943,6 @@ mathleaks.se, 1 mathnet.ru, 1 mathome.spdns.org, 1 -mathomedesign.com, 1 maths.network, 1 mathsource.ga, 1 mathspace.co, 1 @@ -95245,7 +93964,6 @@ matipl.pl, 1 matis.rs, 1 matiu.tk, 1 -mativeagency.com, 1 matjaz.it, 1 matkrain.is, 1 matkrainapartments.is, 1 @@ -95253,6 +93971,7 @@ matkuling.no, 1 matlss.com, 1 matnkat.com, 1 +matogrossonoticias.com.br, 1 matolab.lt, 1 matomari.tk, 1 matopu.tk, 1 @@ -95270,6 +93989,7 @@ matraquilhosporto.pt, 1 matraquilhosportugal.pt, 1 matreon.nl, 1 +matribu.lu, 1 matrichelp.co.za, 1 matrieux.dk, 1 matrimonio.com, 1 @@ -95342,7 +94062,6 @@ mattga.ca, 1 mattgemmell.com, 1 mattgoddardphotography.co.uk, 1 -mattgodwin.com, 1 matthew-carson.info, 1 matthewaker.com, 1 matthewbarnesmusic.com, 1 @@ -95382,6 +94101,7 @@ matthiasott.ch, 1 matthiasott.com, 1 matthiasschwab.de, 1 +matthiasstockert.de, 1 matthiasweiler.de, 0 matthiaswillemsen.me, 1 matthieu-munoz.fr, 0 @@ -95390,7 +94110,7 @@ matthijssen.info, 1 matthijsvos.com, 1 matthijsvos.org, 1 -mattia98.org, 0 +matthrkac.com.au, 1 mattiash.se, 1 mattilsynet.no, 1 mattlaks.com, 1 @@ -95474,6 +94194,7 @@ mauldincookfence.com, 1 mauletsmallorca.tk, 1 maumovie.ml, 1 +maunder.ru, 1 maunium.net, 1 maurice-walker.com, 0 mauricechavez.tk, 1 @@ -95516,6 +94237,7 @@ mavericklive.co.uk, 1 maverickmobilemechanics.com, 1 maveris.com, 0 +mavgroup-eu.com, 1 mavic.com, 1 mavicafegrill.com, 1 maviepearl.net, 1 @@ -95531,6 +94253,7 @@ max-anime.tk, 1 max-apk.com, 0 max-moeglich.de, 1 +max-thoene.de, 1 max-went.pl, 1 max.com, 1 max.gov, 1 @@ -95572,7 +94295,6 @@ maxdargent.com, 1 maxdata.nl, 1 maxdata.pt, 1 -maxdeposit.com, 1 maxdespachante.com.br, 1 maxedgymequipment.com, 1 maxgamez.tk, 1 @@ -95628,7 +94350,6 @@ maxlaumeister.com, 1 maxley.yachts, 1 maxmabyte.com, 1 -maxmanroe.com, 1 maxmanus.ga, 1 maxmarket.bg, 1 maxmatthe.ws, 0 @@ -95655,7 +94376,6 @@ maxtire.com, 1 maxtransport.az, 1 maxtruxa.com, 1 -maxtvstream.com, 1 maxundlara.at, 1 maxundlara.com, 1 maxundlara.eu, 1 @@ -95679,9 +94399,7 @@ mayanet.tk, 1 mayangateway.com, 1 mayansandtikal.com, 1 -mayaroconstituency.org, 1 mayashoefke.tk, 1 -maybankfoundation.com, 1 maybankjobs.com, 1 maybeonline.de, 1 maybeshewill.xyz, 1 @@ -95697,7 +94415,6 @@ mayfieldheightsohio.gov, 1 mayflowerbocawina.tk, 1 mayflowercreative.com, 1 -mayflowerfairytales.com, 1 mayhem.moe, 1 mayiadvise.nl, 1 mayito.tk, 1 @@ -95804,7 +94521,6 @@ mc-auth.com, 1 mc-connect.net, 1 mc-jobs.net, 1 -mc-mods.org, 1 mc-servers.com, 1 mc-sin.ch, 1 mc-teemocraft.tk, 1 @@ -95842,7 +94558,6 @@ mccommando.tk, 1 mcconciergerie.com, 1 mcconecountymt.gov, 1 -mccoolesredlioninn.com, 1 mccordscvs.com, 1 mccreadylaw.com, 1 mccsc.edu, 1 @@ -95889,6 +94604,7 @@ mcgaccountancy.co.uk, 1 mcgarrybair.com, 1 mcgavocknissanwichitaparts.com, 1 +mcgee.red, 1 mcgillsbuses.co.uk, 1 mcgovernance.com, 1 mcgrailvineyards.com, 1 @@ -95992,7 +94708,6 @@ mcsfikirsanat.com, 1 mcsfoundation.org.uk, 0 mcsidan.tk, 1 -mcsmalltian.com, 1 mcsmart.ru, 1 mcsnovatamabayan.com, 1 mcsoneca.tk, 1 @@ -96023,7 +94738,6 @@ md-mb.ro, 1 md-progressistes.fr, 1 md-service.net, 1 -md28.in, 1 md5check.com, 1 mdaemon.de, 1 mdaemon.tips, 1 @@ -96056,6 +94770,7 @@ mdjobsite.com, 1 mdl.co.ua, 1 mdlayher.com, 1 +mdleom.com, 1 mdma.net, 1 mdme.co, 1 mdmed.clinic, 1 @@ -96063,7 +94778,6 @@ mdmpsicologiaclinica.com, 1 mdns.eu, 1 mdosch.de, 1 -mdpharma.com, 1 mdpp.com.br, 1 mdpparish.com, 1 mdrsp.de, 1 @@ -96071,7 +94785,6 @@ mds-paris.com, 1 mdsave.com, 1 mdscomp.net, 1 -mdsny.com, 1 mdtaxconnect.gov, 1 mdtitlesearch.com, 1 mdtorelli.it, 1 @@ -96101,7 +94814,6 @@ mealcast.ml, 1 mealpedant.com, 1 meals.lv, 1 -mealsnmemories.in, 1 meamod.com, 1 meandliora.com, 1 meandmyemotions.org, 1 @@ -96139,7 +94851,6 @@ mebeliside.bg, 1 mebelisk.com.br, 1 mebelizori.com, 1 -mebelnik.pro, 1 mebeloffice.com.ua, 1 mebelok.com, 1 mebelshik.tk, 1 @@ -96276,9 +94987,7 @@ meccano.srl, 1 meccrcog-oh.gov, 1 mecenat-cassous.com, 1 -mecenatfoot.fr, 1 meceware.com, 1 -mecexis.com, 1 mechafightclub.com, 1 mechainics.com, 1 mechanical.tk, 1 @@ -96293,8 +95002,10 @@ mechmk1.me, 1 mechsoftgroup.com, 1 mechta.gq, 1 +mechtylda.info, 1 meciel.net, 1 mecloudprinter.com, 1 +mectilde.info, 1 mecu.com, 1 med-academy.org, 1 med-colleges.com, 1 @@ -96369,7 +95080,7 @@ media4u.tk, 1 mediaarea.net, 1 mediaareplural.ca, 1 -mediabackoffice.co.jp, 0 +mediabackoffice.co.jp, 1 mediabogen.net, 1 mediabooks.ml, 1 mediaboutique.nl, 1 @@ -96380,7 +95091,6 @@ mediacolor.fr, 1 mediacomponents.com, 1 mediadex.be, 1 -mediaelf.freeboxos.fr, 1 mediafly.com, 1 mediafocus.biz, 1 mediaforkids.org, 1 @@ -96490,7 +95200,6 @@ medicine.lv, 1 medicinesfast.com, 0 medicinia.com.br, 1 -medicininismetalas.lt, 0 medicinskavranje.edu.rs, 1 mediciventures.com, 1 mediclinik.tk, 1 @@ -96548,6 +95257,7 @@ mediumforgood.com, 1 mediums.cf, 1 mediumseznam.cz, 1 +medivisionsc.com, 1 medivox.tk, 1 mediweed.tk, 1 mediwish.com, 1 @@ -96608,7 +95318,6 @@ medvedka-nasekomoe.tk, 1 medvedkovo-hovrino.ru, 1 medvesajt.hu, 1 -medvet.com.es, 1 medvidi.com, 1 medxpf.com, 0 medy-me.com, 1 @@ -96689,7 +95398,6 @@ megacellenerji.com, 1 megacompany.cz, 1 megadesignecv.com.br, 1 -megadimensao.com.br, 1 megaelettrostimolatore.com, 1 megafilez.tk, 1 megaflix.nl, 1 @@ -96699,6 +95407,7 @@ megaherz.tk, 1 megahobby.jp, 1 megahost.kz, 1 +megahost.xyz, 1 megahostingbr.tk, 1 megahouse.co.jp, 1 megaimpressao3d.com.br, 1 @@ -96776,7 +95485,6 @@ meharossii.ru, 1 mehdavia.tk, 1 mehdibouchema.be, 1 -mehdiqurancenter.com, 1 meherbaba.sk, 1 mehhh.xyz, 1 mehibo.tk, 1 @@ -96786,7 +95494,6 @@ mehmettaze.com, 1 mehostdd.com, 0 mehrabpurtimes.tk, 1 -mehrd.ad, 1 mehrgarh.tk, 1 mehrleben.at, 1 mehrnevesht.com, 1 @@ -96868,6 +95575,7 @@ meinua.de, 1 meinungsplatz.ch, 1 meinungsplatz.de, 1 +meinvermittler.ch, 1 meis.space, 1 meise.cf, 1 meise.ml, 1 @@ -96891,7 +95599,6 @@ mejofi.net, 1 mejofi.nl, 1 mejofi.org, 1 -mejor-broker.com, 1 mejorator.net, 1 mejorator.org, 1 mejorcoberturamovil.es, 1 @@ -96913,7 +95620,6 @@ mekatrotekno.com, 1 mekawy.tk, 1 mekegi.com, 1 -meken.com, 1 mekhaodee.com, 1 mekkaoui.cf, 1 meklon.net, 1 @@ -96996,6 +95702,8 @@ melina-schefczyk.de, 1 melinacurves.com, 1 melinamay.net, 1 +melini.hu, 1 +melini.rs, 1 melino.com.ua, 1 meliowebweer.nl, 1 melisica.tk, 1 @@ -97064,6 +95772,7 @@ meme.fi, 1 meme.institute, 1 memecoin.org, 1 +memecoincook.com, 1 mememan.org, 1 memememememememe.me, 1 memento-mori.cf, 1 @@ -97213,11 +95922,10 @@ menthiere.fr, 1 menti.com, 1 mentimeter.com, 1 -mentionlink.com, 1 +mentionlink.com, 0 mentiq.az, 1 mentolo.tk, 1 mentonein.gov, 1 -mentor-fit.com, 1 mentor.gov, 1 mentoringauchan.es, 1 mentorsinchief.com, 1 @@ -97228,6 +95936,7 @@ menuiserie-deumer.be, 1 menuiseriebertin.ca, 1 menukart.com, 1 +menumag.bg, 1 menupay.com, 1 menureader.ml, 1 menzel4you.tk, 1 @@ -97243,6 +95952,7 @@ meow.enterprises, 1 meow.plus, 1 meowescorts.com, 1 +meowlu.com, 1 meowmc.net, 1 meowstodon.net, 1 meowtech.network, 1 @@ -97250,7 +95960,6 @@ mepau.com.au, 1 mepc.jp, 1 mepcoeng.ac.in, 1 -meperidina.com, 1 mephedrone.org, 1 meplusliora.com, 1 meppel.nl, 1 @@ -97338,6 +96047,7 @@ mercerisland.gov, 1 merchant-portal.co.kr, 1 merchantaccountsolutions.com, 1 +merchcity.com, 1 merchstudio.ru, 1 merck-animal-health-usa.com, 1 merck-animal-health.ca, 1 @@ -97443,6 +96153,7 @@ mesdagh.be, 1 mesec.cz, 1 mesh.gov, 1 +meshcore.forum, 1 meshdigital.io, 1 meshekard.co.il, 1 meshflow.be, 1 @@ -97451,7 +96162,6 @@ meshintranet.com, 1 meshlib.io, 1 meshnet.nl, 1 -meshotes.com, 1 mesjumelles.fr, 1 meskiukas.tk, 1 meslekkursu.com, 1 @@ -97494,7 +96204,6 @@ mestopodvodu.cz, 1 mestriga.com, 1 mesutates.tk, 1 -mesutsahin.net, 1 mesvision.com, 1 mesvt.com, 1 meszlenyiattila.tk, 1 @@ -97513,12 +96222,10 @@ metabound.co.uk, 1 metabox.io, 1 metacareers.com, 1 -metacase.pt, 1 metachems.com, 1 metaclays.io, 1 metacoda.com, 1 metacode.biz, 1 -metacompliance.com, 1 metacortex.cf, 1 metacred.com, 1 metacritic.com, 1 @@ -97531,7 +96238,7 @@ metagaming.tk, 1 metaintro.net, 1 metait.de, 1 -metajive.com, 1 +metajive.com, 0 metakari.one, 1 metal-madness.tk, 1 metal-news.tk, 1 @@ -97541,8 +96248,8 @@ metalargentum.tk, 1 metalbus.tk, 1 metalcity.tk, 1 -metalcon.az, 1 metalcorenews.ga, 1 +metaldraft.com, 1 metalempire.tk, 1 metaleonsociety.io, 0 metalequipped.com, 1 @@ -97576,15 +96283,16 @@ metaltracks.tk, 1 metalu.ch, 0 metalunion.tk, 1 +metalurgicabb.com, 1 metalurgicafundao.pt, 1 metalwarfare.com, 1 metalwarrior.tk, 1 metalweaverscreations.com, 1 metalworkingexpo.com, 1 +metamail.com, 1 metamente.me, 1 -metamer.io, 1 metamorfosis.cf, 1 -metamorphouse.ch, 0 +metamorphouse.ch, 1 metanoia8295.com, 1 metanoiaphotography.com, 1 metanomial.com, 1 @@ -97604,6 +96312,7 @@ metasurfforecast.com, 1 metasymbolic.studio, 1 metasysteminfo.com, 1 +metatagmedia.com, 1 metaurl.io, 1 metavr.ru, 1 metaword.co.jp, 1 @@ -97612,11 +96321,11 @@ metayou.gq, 1 metcalfecountyky.gov, 1 metebalci.com, 1 +metechmultimedia.com, 1 metecnoamericas.com, 1 meteo-parc.com, 1 meteoabegondo.tk, 1 meteoariccia.it, 1 -meteoben.com, 1 meteobox.co, 1 meteobox.com, 1 meteobox.cz, 1 @@ -97637,7 +96346,6 @@ meteowiki.tk, 1 meter.md, 1 meterhost.com, 1 -meterinsight.com, 0 metex.exchange, 1 metformin365.tk, 1 method.com, 0 @@ -97660,8 +96368,6 @@ metiers.ma, 1 metimedelivered.com, 1 metin2.community, 1 -metin2.download, 1 -metin2dev.org, 1 metisengineering.com, 1 metitlesearch.com, 1 metiz.site, 1 @@ -97677,7 +96383,6 @@ metprint.hu, 1 metrahometheater.com, 1 metreurjob.com, 1 -metric.ai, 0 metricmutt.com, 1 metrika.ml, 1 metriks.ru, 1 @@ -97716,7 +96421,6 @@ metronome.ga, 1 metrophone.vn, 1 metroplanorlando.gov, 1 -metroplex.me, 1 metropole.com.au, 1 metropolis.ga, 1 metropolis5000.tk, 1 @@ -97738,13 +96442,13 @@ metsosivut.fi, 1 metspoedbeschikbaar.nl, 1 mett.nl, 1 -mettekorshoj.dk, 1 +metteframarketing.dk, 1 mettelenejohansson.dk, 1 mettin.org, 1 metu.social, 1 metver.tk, 1 metyweb.ga, 0 -meubairro360.com.br, 1 +meu.re, 1 meubanco7.com.br, 1 meubebepa.com.br, 1 meublesrosa.be, 1 @@ -97773,11 +96477,11 @@ mew.build, 1 mewah.my, 1 mewl.com, 1 +mewmu.com, 1 meww.net, 1 mex-it-up.com, 1 mexaliu.ml, 1 mexby.com, 1 -mexeo.re, 1 mexicankrill.com, 1 mexico.rs, 1 mexico.sh, 1 @@ -97883,7 +96587,6 @@ mgr-dev.tech, 1 mgrcred.online, 1 mgriff.id.au, 1 -mgrossklaus.de, 0 mgrt.net, 1 mgsdb.com, 1 mgsisk.com, 1 @@ -97910,6 +96613,7 @@ mhermans.nl, 1 mhertel.com, 1 mhf.gc.ca, 1 +mhf.rs, 1 mhforce.com, 1 mhg-dev.com, 1 mhg-platform.com, 1 @@ -97949,7 +96653,6 @@ mi-soul.com, 1 mi.ras.ru, 1 mi1k.cn, 1 -mi80.com, 1 mia-manager.dk, 1 mia.tf, 1 mia.tw, 0 @@ -97972,7 +96675,6 @@ miamibeachcommunitychurch.com, 1 miamicountyohioauditor.gov, 1 miamidadeclerk.gov, 1 -miamidadeshades.com, 1 miamifl.casa, 1 miamifl.homes, 1 miamiopenmri.com, 1 @@ -98030,6 +96732,7 @@ michael.zone, 1 michaelabbas.tk, 1 michaelaelsner.de, 1 +michaelahern.net, 1 michaelamead.com, 1 michaelasawyer.com, 1 michaelband.co, 1 @@ -98056,7 +96759,6 @@ michaelizquierdo.com, 1 michaeljames.com.au, 1 michaeljdennis.com, 0 -michaelkellas.com, 1 michaelkennedy.ie, 1 michaelkiske.tk, 1 michaelkleinert.de, 1 @@ -98118,7 +96820,6 @@ michelefaccioni.it, 1 michelegreenmd.com, 1 michelgolfier.ml, 1 -michelinb2b.com, 1 michelinmedia.com, 1 michelkok.tk, 1 michellavat.com, 1 @@ -98155,7 +96856,6 @@ mickel.tk, 1 mickelvaessen.com, 1 mickey-krasilnikov.com, 1 -mickeyspizzalincolnpark.com, 1 mickybottenberg.com, 1 mickyfanclub.tk, 1 micled.com, 1 @@ -98270,6 +96970,7 @@ midlandslotus.co.uk, 1 midmembers.org, 1 midmichiganasphaltpaving.com, 1 +midni.gob.es, 1 midnight-bonnie.xyz, 1 midnight-gaming-community.tk, 1 midnightmechanism.com, 1 @@ -98310,7 +97011,6 @@ miegl.com, 1 miegl.cz, 1 mielboreal.com, 0 -mielehybla.it, 1 mielelpinsapar.com, 0 mielenosoitukset.fi, 1 mielkan.com, 1 @@ -98332,10 +97032,11 @@ mifi.holdings, 1 mifi.ventures, 1 mifo-adviesgroep.nl, 1 -mifuturo.cl, 1 mig.ee, 1 mig5.net, 1 mig81.com, 1 +migametall.com, 1 +migametall.hu, 1 migg.it, 1 miggy.org, 1 migherworld.com, 1 @@ -98351,13 +97052,13 @@ migliorailtuoambiente.it, 1 migliori-siti-di-incontro.com, 1 migliorini.adv.br, 1 -mignet.io, 1 mignonne.com, 0 mignonneapi.com, 1 migrafill.net, 1 migraine-en-werk.nl, 1 migraine.com, 1 migrainecollaborative.org, 1 +migrainedisorders.org, 1 migrainereliefplan.com, 1 migrantskillsregister.org.uk, 1 migrantworker.gov, 1 @@ -98404,7 +97105,7 @@ mijam.xyz, 1 mijn-maagband.tk, 1 mijnafspraak.nl, 1 -mijnblog.nl, 1 +mijnblog.nl, 0 mijncloud.space, 1 mijndiad.com, 1 mijndiad.nl, 1 @@ -98421,10 +97122,10 @@ mijnonesie.nl, 1 mijnpensioenportaal.nl, 1 mijnpidz.nl, 1 -mijnrecepten.be, 1 -mijnrecepten.com, 1 -mijnrecepten.eu, 1 -mijnrecepten.nl, 1 +mijnrecepten.be, 0 +mijnrecepten.com, 0 +mijnrecepten.eu, 0 +mijnrecepten.nl, 0 mijnreisoverzicht.nl, 1 mijnsite.ovh, 1 mijnstaatvandienst.nl, 1 @@ -98493,7 +97194,6 @@ mijntrined.nl, 1 mijnvogaanvraag.nl, 1 mijnwefact.nl, 1 -mijp.com, 1 mika.moe, 1 mikado-rybak.ru, 1 mikadoe.nl, 0 @@ -98579,7 +97279,6 @@ mikori.sk, 1 mikorrhiza-gomba.hu, 1 mikos.tk, 1 -mikoulloa.com, 1 mikper.com, 0 mikrokosmos.tk, 1 mikropixel.de, 1 @@ -98699,11 +97398,9 @@ milkameglepetes.hu, 1 milkeclair.com, 1 milkenroar.com, 1 -milkingit.net, 1 milkingmachine.tk, 1 milkmoovement.io, 1 milkteacant.com, 1 -milkyperu.com, 1 milkypond.org, 1 milkywan.fr, 1 mill-luxe.fr, 1 @@ -98866,14 +97563,13 @@ mindfulslumber.com, 1 mindgard.co.uk, 1 mindgtc.com, 1 -mindhand.com, 1 mindingourway.com, 1 mindjee.tk, 1 mindleaking.org, 1 mindmatters.social, 1 mindmax.fi, 1 mindmeister.com, 1 -mindminers.com, 1 +mindminers.com, 0 mindmusic.online, 1 mindmynature.com, 1 mindomo.com, 1 @@ -98901,14 +97597,13 @@ mine-pixl.de, 1 mine-temoin.fr, 1 mine260309.me, 0 -mineads.gg, 1 +mineads.gg, 0 minebbs.com, 1 minebitcoin.tk, 1 minecity.fun, 1 minecraft-game.ga, 1 minecraft-server.eu, 1 minecraft.buzz, 1 -minecraft.menu, 1 minecraft.social, 1 minecraft.vip, 1 minecraft.wiki, 1 @@ -99036,6 +97731,7 @@ mining-club.tk, 1 mining-technology.com, 1 mining.diamonds, 1 +miningclub.info, 1 miningsurveys.com, 1 miningtronics.com, 0 minintendo.tk, 1 @@ -99063,7 +97759,6 @@ minivaro.de, 1 miniverse.social, 1 minivideoadapterssales.tk, 1 -miniwatt.info, 1 minix.jp, 1 minjusticia.gob.cl, 1 mink-coat.tk, 1 @@ -99089,6 +97784,7 @@ minng.cc, 1 minnisites.com, 1 minnit.chat, 1 +minnowmountain.com, 1 minoar.com, 1 minobar.com, 1 minocyclinee.gq, 1 @@ -99119,7 +97815,6 @@ mintdsmile.com.au, 1 mintea-noua.ro, 1 mintea.pw, 1 -minteriorsstl.com, 1 minterslab.com, 1 mintersvault.com, 1 mintert.net, 1 @@ -99154,20 +97849,19 @@ mio-ip.ch, 1 miobeach.nl, 1 miobt.eu.org, 0 -miomiojoyeria.com, 1 +miodysudnik.pl, 1 +miomiojoyeria.com, 0 miomiorun.com, 0 miorganics.ro, 1 miottawavotes.gov, 1 -miova.io, 1 +miova.io, 0 mipadlettings.com, 1 mipapo.de, 1 mipediatra.tk, 1 mipesa.cz, 1 mipiaci.co.nz, 0 mipiaci.com.au, 0 -mipiao.com, 1 miplanilla.com, 1 -mipnet.cl, 1 mipolak.eu, 1 mipromo.com, 1 miproximopaso.org, 1 @@ -99188,6 +97882,7 @@ mira.fun, 1 mira.systems, 1 mirabella.tk, 1 +mirabelletour.sk, 1 miracech.cz, 1 miracl.com, 1 miracle-dome.com, 1 @@ -99211,7 +97906,6 @@ miramar.ca, 1 miramichireader.ca, 1 mirandaberkhof.com, 1 -mirandacarvalholeiloes.com.br, 1 mirandakids.bg, 1 miranza.es, 1 mirasee.com, 1 @@ -99318,7 +98012,6 @@ missblisshair.com.au, 1 missdoertie.net, 1 missdream.org, 1 -misseguf.dk, 1 missevent.pl, 1 missflora.se, 1 missguidedus.com, 1 @@ -99395,7 +98088,6 @@ misterspex.de, 1 misterspex.es, 1 misterspex.fi, 1 -misterspex.fr, 1 misterspex.nl, 1 misterspex.no, 1 misterspex.se, 1 @@ -99441,6 +98133,7 @@ mitenloytaatyota.fi, 1 mitensaadatoita.fi, 1 mitensaadatyota.fi, 1 +mitersonfishing.bg, 1 mitev.gq, 1 mitevi.com, 1 mitfahrgelegenheit.de, 1 @@ -99493,7 +98186,6 @@ mitsubishi-stanok.ru, 0 mitsubishielectric-rce.eu, 1 mitsubishielectric.es, 1 -mitsubishisurabayainfo.com, 1 mitsuhashi.jp, 0 mitsuindia.in, 1 mitsuwashika.com, 1 @@ -99507,6 +98199,7 @@ mittendorff.tk, 1 mittenofficesystems.com, 1 mitterbach.org, 1 +mitteschmiede.de, 1 mittid.dk, 1 mittilmeld.dk, 1 mittvarsel.no, 0 @@ -99516,7 +98209,6 @@ mitzpettel.com, 1 miui-germany.de, 1 miukimodafeminina.com, 1 -mivbsupport.com, 1 mivestuariolaboral.com, 1 mividasecreta.tk, 1 mivm.cn, 1 @@ -99540,7 +98232,6 @@ mix-books.ga, 1 mix-channel.ml, 1 mix-it.net, 1 -mix-master.fr, 1 mix-recruit.jp, 1 mix.my, 1 mixandplay.tk, 1 @@ -99563,6 +98254,7 @@ mixnmojo.com, 1 mixon.tk, 1 mixonbrand.com, 1 +mixov.net, 1 mixpanel.com, 0 mixposure.com, 1 mixtapesammelstelle.de, 1 @@ -99617,7 +98309,6 @@ mjrlegends.com, 1 mjs-soft.de, 1 mjsports.bet, 1 -mjstudios.tech, 0 mjstudios.tk, 1 mjt.me.uk, 1 mjuktvatten.nu, 1 @@ -99658,6 +98349,7 @@ mkeysolutions.com, 1 mkeysolutions.de, 1 mkg-laposte.info, 1 +mkg-pch.com, 1 mkgrupkelesvinckiralama.com.tr, 1 mki-igrushki.ru, 1 mkie.cf, 1 @@ -99717,6 +98409,7 @@ mleydier.fr, 1 mlfilm.ml, 1 mlgsmokers.tk, 1 +mlh.com.lb, 1 mli-interface-api-test.azurewebsites.net, 1 mlii.net, 1 mlirb.com, 1 @@ -99731,7 +98424,6 @@ mlm.travel, 1 mlmjam.com, 1 mlmjunction.tk, 1 -mlmowing.com.au, 1 mlnews.ml, 1 mlo.no, 1 mlohr.com, 1 @@ -99782,7 +98474,6 @@ mmdc.ru, 0 mmdriving.ca, 1 mme.re, 1 -mmeaeasterndistrict.org, 1 mmgal.com, 1 mmhome.fr, 1 mmilog.hu, 1 @@ -99800,16 +98491,13 @@ mmmofnigeria.tk, 1 mmmonk.net, 1 mmmsancristobal.es, 1 -mmoarab.com, 1 mmocare.com, 1 -mmoe.moe, 1 mmogah.com, 1 mmoneko.com, 1 mmonit.com, 1 mmoradzadeh.com, 1 mmostats.com, 1 mmpi-ci.com, 1 -mmpiinternational.com, 1 mmpiservices.fr, 1 mmprojects.nl, 1 mmquality.com, 1 @@ -99858,6 +98546,7 @@ mnml.top, 1 mnmt.no, 1 mnnknz.de, 1 +mno.family, 1 mnocea.eu, 1 mnogoknighek.gq, 1 mnogoknighek.ml, 1 @@ -99903,7 +98592,6 @@ mobcsp.work, 1 mobele.fr, 1 moberi.com.ua, 1 -mobex.biz, 0 mobi-katalog.tk, 1 mobiclocks.com, 1 mobidevices.com, 1 @@ -99998,6 +98686,7 @@ mobiride.co, 1 mobistartv.ml, 1 mobius.network, 1 +mobizent.com, 1 mobmp4.info, 1 mobobe.com, 1 mobolight.ml, 1 @@ -100017,7 +98706,6 @@ mocdltraining.com, 1 mocent.de, 1 mochanstore.com, 1 -mochiai.blog, 0 mochilerostailandia.com, 1 mochiyuki.net, 1 mochizuki.moe, 0 @@ -100082,9 +98770,9 @@ modeldoll.tk, 1 modelfotografie.tk, 1 modeli.tk, 1 -modelisme-rc.net, 1 modell-lq.net, 1 modellbahnshop.de, 1 +modellbahnverwaltung.de, 1 modellismo.roma.it, 1 models-resource.com, 1 modelspoor-projecten.nl, 1 @@ -100092,7 +98780,6 @@ modemchild.net, 1 modenatoday.it, 1 modenodf.ru, 1 -moderamen.se, 1 moderaterna.se, 1 moderatoren.org, 1 modern-gaming.ga, 1 @@ -100100,6 +98787,7 @@ modernalisa.com, 1 modernapprenticeships.org, 1 modernautorepairs.com, 1 +modernbank.com, 1 moderncat.com, 1 moderncommercialrealestate.com, 0 moderndayprepping.com, 1 @@ -100113,7 +98801,6 @@ modernliferoleplay.cf, 1 modernmomarchy.com, 1 modernsaas.net, 1 -modernsextherapyinstitutes.com, 1 moderntech.dk, 1 moderntld.net, 1 moderntrainer.co.za, 1 @@ -100306,7 +98993,6 @@ mojoshowers.ga, 1 mojt.net, 1 mojtabagol.tk, 1 -mojtest.site, 1 mojzis.com, 1 mojzis.cz, 1 mojzisova.com, 1 @@ -100326,6 +99012,7 @@ mokutovo.tk, 1 molaclothing.pt, 0 mold-tech.com, 1 +mold.world, 1 molddesigner.com, 1 moldova-news.com, 1 moldova-online.ml, 1 @@ -100341,7 +99028,6 @@ moletechinternational.com, 1 molezzo.com, 1 molinillo.tk, 1 -molise.store, 1 molkerei-ammerland.com, 1 molleron.net, 1 molletjesveer.tk, 1 @@ -100396,7 +99082,6 @@ momobako.com, 1 momochrome.online, 1 momondersteuning.nl, 1 -momove.nl, 1 moms.com, 1 momsagainstcooties.com, 1 momsays.co.za, 1 @@ -100448,7 +99133,6 @@ monbento.com, 1 moncoachdata.com, 1 monconcoursdgfip.fr, 1 -moncredienligne.com, 1 monday-consulting.com, 1 mondayaftersunday.com, 1 mondaynightbrewing.com, 1 @@ -100507,7 +99191,6 @@ moneydaily.tk, 1 moneydecadadia.com, 1 moneyfactory.gov, 1 -moneyformybeer.com, 1 moneyfuxx.com, 1 moneygo.se, 1 moneygram.com, 1 @@ -100527,6 +99210,7 @@ moneytalks.com, 1 moneytech.tk, 1 moneytoday.se, 1 +moneza.lv, 1 monfilm.tk, 1 monforte.tk, 1 mongla168.net, 1 @@ -100654,7 +99338,6 @@ monsternet.pl, 1 monstersuniversity.ga, 1 monstertalesgame.com, 1 -monstertraxstudio.com, 1 monsterx.cn, 1 monstl.com, 1 monstresdesfetes.com, 1 @@ -100671,7 +99354,7 @@ montanabiack.de, 1 montanacreativitymovement.tk, 1 montanaguard.gov, 1 -montanaonlinedivorce.com, 0 +montanaonlinedivorce.com, 1 montanarenewables.org, 1 montanatitlesearch.com, 1 montanawi.gov, 1 @@ -100737,7 +99420,6 @@ montybennett.co, 0 montychristie.com, 1 monukiosk.com, 1 -monvalleyphotos.com, 1 monvanityideal.com, 1 monvoyagedentaire.com, 1 monweb.tk, 1 @@ -100780,7 +99462,6 @@ moonboxi.tk, 1 moonboys.de, 1 moonbyte.at, 1 -mooncharmshop.com, 1 moonchart.co.uk, 1 moondoor.tk, 1 moondrop.org, 1 @@ -100820,7 +99501,6 @@ moonshyne.org, 1 moonsmanagement.be, 1 moonspell.com, 1 -moonue.com, 0 moonwolfwiccanschool.tk, 1 moonzerotwo.tk, 1 mooo.asia, 1 @@ -100878,6 +99558,7 @@ morandofora.com.br, 0 morata.tk, 1 moratilla.ml, 1 +moravek.eu, 1 moravostavdruzstvo.cz, 1 morawiecki.pl, 1 moraxyc.com, 1 @@ -100917,6 +99598,7 @@ morespacestorage.co.uk, 1 moresw.com, 1 moretesting.tk, 1 +morethanabed.org, 1 morethancode.be, 1 morethandigital.info, 1 moretti.camp, 1 @@ -100961,12 +99643,10 @@ mormonvoiceest.ga, 1 mornatales.tk, 1 morningbird.eu, 1 -morningchew.com, 1 +morningchew.com, 0 morningcurve.com, 0 morninggarden.com, 1 -mornings.com, 1 morningstar.moe, 1 -moro-gastro.de, 1 moroccanews.tk, 1 morocco-vacations.com, 1 moroccofriendlytravel.com, 1 @@ -100988,7 +99668,8 @@ morph3d.tk, 1 morphbyte.com, 1 morpheusdata.com, 1 -morpheusmobile.com, 1 +morpheusmobile.com, 0 +morpheusrisk.com, 1 morphisec-utp.com, 1 morphitattachments.com.au, 1 morphysm.co, 1 @@ -101016,7 +99697,6 @@ mortenhc.dk, 1 mortezaafri.tk, 1 mortgageboss.ca, 1 -mortgagecalculator.biz, 1 mortgagecentre.com, 1 mortgageequitypartners.com, 1 mortgageexpert.io, 1 @@ -101048,7 +99728,7 @@ moscowsex.tk, 1 moscowtimes.tk, 1 mosdosug.ml, 1 -mosdot.org.il, 1 +moseic.com, 1 moselwi.gov, 1 moserhof.it, 1 moservice.id, 1 @@ -101201,6 +99881,7 @@ motorcyclenews.com, 1 motorcyclestudies.org, 1 motordearranque.com.br, 1 +motoreflex.pe, 1 motorfinanceonline.com, 1 motorhulp.eu, 1 motoridiricerca.tk, 1 @@ -101220,14 +99901,13 @@ motorways.tk, 1 motorwrappen.nl, 1 motoryachtclub-radolfzell.de, 1 -motorz.ca, 1 motorzone.od.ua, 1 motoselfservices.fr, 1 motospaya.com, 0 motostorie.blog, 1 +motostyle.ua, 1 mototax.ch, 1 mototeam.tk, 1 -mototec.it, 1 mototsi.com, 1 mototuristas.tk, 1 motovaruosad.ee, 1 @@ -101259,6 +99939,7 @@ mouche.fr, 1 moucloud.cn, 1 mouff.li, 1 +moufsel.fr, 1 moula-inc.jp, 1 mouldboard.ga, 1 moulin-pomerol.com, 1 @@ -101320,7 +100001,6 @@ movacare.de, 1 movaci.com, 1 movado.com, 1 -movahoteis.com.br, 1 moval.gov, 1 movavi.id, 1 movavi.ru, 1 @@ -101508,7 +100188,6 @@ mqbeauty.com.tw, 1 mqbx.nl, 1 mqroofing.com, 1 -mqtv.com, 1 mr-7.ru, 1 mr-a.de, 1 mr-anderson.org, 0 @@ -101525,7 +100204,6 @@ mr1xbet.com, 1 mr3.io, 1 mr8.de, 1 -mraag.xyz, 1 mradiofm.com, 1 mrafrohead.com, 1 mralonas.cf, 1 @@ -101649,6 +100327,7 @@ mrston.ml, 1 mrstuudio.ee, 1 mrsurething.com, 1 +mrtechmelbourne.com, 1 mrtg.com, 1 mrtieungao.tk, 1 mrtnzlml.com, 1 @@ -101756,7 +100435,6 @@ mspvendors.com, 1 msquadrat.de, 0 msquared.id.au, 1 -msr-schaltanlagen.de, 1 msrf.de, 1 msrmotorsports.com, 1 msroot.de, 1 @@ -101849,7 +100527,6 @@ mtinz.com, 1 mtirc.co, 1 mtjoytwppa.gov, 1 -mtkhs.com, 1 mtlabs.jp, 1 mtlconcerts.com, 1 mtlegnews.gov, 1 @@ -101922,7 +100599,6 @@ muclan.tk, 1 mucmail.de, 1 mucustoms.com, 1 -mudanzasacuna.com.co, 1 mudanzasmoreno.com, 1 mudanzasuiza.com.ec, 1 mudanzasytransportesbh.com, 1 @@ -101959,13 +100635,13 @@ mufid.tk, 1 muflon-linux.org, 1 muga.space, 1 +mugadavanje.rs, 1 muganworld.com, 1 mugawe.com, 1 mugdost.com, 1 mugen-kairou.art, 1 mugen.technology, 1 mugrabyhostel.tk, 1 -mugsocks.com.au, 1 muguayuan.com, 1 muhabbet.org, 1 muhammadlukman.ml, 1 @@ -101996,7 +100672,6 @@ mujerescolombianas.tk, 1 mujeresparalasalud.org, 1 mujeryempresa.es, 1 -mujeryfamilia.com, 1 mujlinux.cz, 1 mujoco.org, 1 muk-kobetsu.com, 1 @@ -102025,14 +100700,15 @@ mullen.net.au, 1 mullens-usedcars.be, 1 mullett-townshipmi.gov, 1 +mullettlakelistings.com, 1 mulligangear.com, 0 mullinsfarms.com, 1 muloot.de, 1 mult.tv, 0 -multcabos.com, 1 multerer.biz, 1 multi-cryptex.gq, 1 multi-fruit.tk, 1 +multi-prets-hypotheques.ca, 1 multi-pribor.ru, 1 multi-serwis.com.pl, 1 multi-soudures.fr, 1 @@ -102044,7 +100720,7 @@ multicharts.com, 1 multicoin.capital, 0 multicolortv.com, 1 -multicom.ca, 1 +multicom.ca, 0 multiconsumos.tk, 1 multicore.cl, 1 multicorpbra.com, 1 @@ -102143,6 +100819,7 @@ mundofoto.tk, 1 mundofriki.es, 1 mundogamers.top, 1 +mundogesath.com, 1 mundoguatemalteco.com, 1 mundoinfrarrojo.com, 1 mundojoven.tk, 1 @@ -102178,7 +100855,6 @@ munisiacs.com, 1 munkeeboi.com, 1 munki.org, 1 -munndialarts.com, 1 munnezza.tk, 1 munroads.com, 1 muntajati-om.com, 0 @@ -102199,7 +100875,6 @@ murashun.jp, 1 muratatifsayar.com.tr, 1 muratbekgi.com, 1 -muratboyla.com, 1 muratcileli.tk, 1 muratoff.pp.ua, 1 muratore-roma.it, 1 @@ -102213,6 +100888,7 @@ murfy.kiwi, 1 murfy.nz, 1 murgi.de, 1 +murilloplasticsurgery.com, 1 murksbreider.tk, 1 murkycards.co.uk, 1 murl.ml, 1 @@ -102248,7 +100924,6 @@ mus-tech.info, 1 musacomo.com, 1 musafir-aceh.tk, 1 -musagil.com.tr, 1 musasionline.com, 1 musaslush.com, 1 muscatinecountyiowa.gov, 1 @@ -102260,6 +100935,7 @@ musclecarsillustrated.com, 1 muscles.cf, 1 muscloud.net, 1 +musco.ru, 1 muscolinomusic.com, 1 muscuolisq.cf, 1 musearchengine.com, 1 @@ -102319,7 +100995,6 @@ musicbykshitij.com, 1 musicc.net, 1 musicchris.de, 1 -musicedu.com.au, 1 musicfactory.ml, 1 musicfestivalsuite.com, 1 musicfiends.com, 1 @@ -102526,7 +101201,7 @@ mvzstartpagina.tk, 1 mw-power.ru, 1 mw.search.yahoo.com, 0 -mwahyunz.id, 1 +mwahyunz.id, 0 mwai.edu.ph, 1 mwamitours.com, 1 mwancloud.com, 1 @@ -102540,7 +101215,6 @@ mwdsls.gov, 1 mwe.st, 1 mwezi.org, 1 -mwhcp.org.au, 1 mwinds.tk, 1 mwmopd.gov, 1 mwms.nl, 1 @@ -102551,7 +101225,8 @@ mwr.team, 1 mwscouts.org, 1 mwskwong.com, 0 -mwstrategicservices.com, 1 +mwstportal.li, 1 +mwstrategicservices.com, 0 mwswire.com, 1 mwtj.com, 1 mwtown.gov, 1 @@ -102562,7 +101237,7 @@ mx-moto.fr, 0 mx-qr.com, 1 mx-quad.fr, 0 -mx-solutions.net, 1 +mx-server.uk, 1 mx.org.ua, 1 mx.search.yahoo.com, 0 mx310.jp, 1 @@ -102614,7 +101289,6 @@ my-monobank-card.com.ua, 1 my-montenegro.tk, 1 my-nextcloud.at, 1 -my-optika.ru, 1 my-pawnshop.com.ua, 0 my-pharmacie.com, 1 my-phone.tk, 1 @@ -102664,7 +101338,6 @@ myafweb.com, 1 myaggic.com, 1 myaggienation.com, 1 -myaipayment.com, 1 myairware.com, 1 myakkatactical.com, 1 myali.net, 1 @@ -102672,7 +101345,6 @@ myalpine.shop, 1 myalsadd.tk, 1 myalumil.com, 1 -myamend.com, 1 myamihealth.com, 1 myancestryai.com, 1 myandre.tk, 1 @@ -102773,10 +101445,8 @@ mycinema.pro, 1 mycircleworks.com, 1 myclang.com, 1 -myclasscam.com, 1 myclearhead.com, 1 myclgnotes.com, 1 -myclimate.com, 1 myclinicalstudybuddy.com, 1 myclon.tk, 1 mycloud-system.com, 1 @@ -102826,8 +101496,6 @@ mycues.gov, 1 mycumortgage.com, 1 mycyberspace.tech, 1 -mydabb.com, 1 -mydais.org, 1 mydarkness.cf, 1 mydarksite.tk, 1 mydarkstar.net, 1 @@ -102877,7 +101545,6 @@ mydsomanager.com, 1 mydx.ru, 1 mydxj.com, 1 -myeasyreversemortgage.com, 1 myebony.cam, 1 myecms.com, 1 myecp.com, 1 @@ -103001,7 +101668,6 @@ mygnmr.com, 0 mygo.pw, 1 mygobelin.tk, 1 -mygolf.click, 1 mygolfsimulator.com, 1 mygolod.com, 1 mygomel.tk, 1 @@ -103051,7 +101717,6 @@ myhuthwaite.com, 1 myibmchq.com, 1 myibp.ph, 1 -myicare.org, 1 myid.be, 1 myigetit.com, 1 myimg.cn, 1 @@ -103068,6 +101733,7 @@ myinvista.com, 1 myip.solutions, 1 myisolved.com, 1 +myit-officiel.com, 1 myitero.com, 1 myjbn.org, 1 myjourneytolakehead.ca, 1 @@ -103078,7 +101744,6 @@ mykademia.com, 1 mykarelia.ga, 1 mykarelia.tk, 1 -myke.website, 1 mykelseyonline.com, 1 mykill.pl, 1 mykitchen.gq, 1 @@ -103103,7 +101768,6 @@ mylegacyvip.com, 0 mylene-chandelier.me, 1 mylenwyd.com, 1 -mylever.com, 1 mylfca.com, 1 mylifeabundant.com, 1 mylifeinbalance.be, 1 @@ -103154,7 +101818,6 @@ mymdtaxes.gov, 1 mymed.de, 1 mymed.eu, 1 -mymedall.com, 1 mymedia.gotdns.com, 1 mymediabox.com, 1 mymerlin.co.nz, 0 @@ -103165,6 +101828,7 @@ mymkphotography.com, 1 mymlshouselisting.com, 1 mymo.in.th, 1 +mymobilexpert.com, 1 mymommyworld.com, 1 mymoneycoin.ml, 1 mymoranguito.com, 1 @@ -103247,7 +101911,6 @@ mypathologos.gr, 1 mypay.fr, 1 mypaymed.com, 1 -mypayment.ai, 1 mypaypac.com, 1 mypaypac.com.au, 1 mypaypac.net, 1 @@ -103313,6 +101976,7 @@ myredfoxlabs.com, 1 myref.net, 1 myreferral.systems, 1 +myrejuvenateclinic.com, 1 myrejuvenators.com, 1 myrekber.co.id, 1 myremont.tk, 1 @@ -103369,7 +102033,6 @@ myrewardspoints.com, 1 myria.com, 1 myriad.com, 1 -myriadhotel.com, 1 myriadlex.com.tw, 1 myriadof.com, 1 myriation.xyz, 1 @@ -103427,7 +102090,6 @@ mysidekick.io, 1 mysignal.com, 1 mysill.gr, 1 -mysilvershield.com, 1 mysimsem.com, 0 mysisterandi.co.za, 1 myslc.gov, 1 @@ -103548,9 +102210,6 @@ myunitypoint.org, 1 myunraid.ru, 1 myupdatestar.com, 1 -myupdatestudio.com, 1 -myupdatesystems.com, 1 -myupdateweb.com, 1 myusagepayments.com, 1 myvaccinefl.gov, 1 myvacompany.com, 1 @@ -103589,8 +102248,7 @@ mywebpharmacy.tk, 1 mywebserver.ml, 1 myweightlosstips.tk, 1 -mywellness360.in, 1 -mywestondental.com, 1 +mywestondental.com, 0 mywikis.net, 1 mywish.co.il, 1 mywonderkitchen.com, 1 @@ -103723,7 +102381,6 @@ naaronstoe.nl, 1 nab-services.ml, 1 nabc.au, 1 -nabc.com.au, 1 nabchelny-news.ru, 1 nabeer.ga, 1 nabeez.cf, 1 @@ -103738,7 +102395,6 @@ nac-6.fr, 1 nac.gov.pl, 1 nacc.gov.lb, 1 -nacds.org, 1 nacelle.com, 1 nach-holland.de, 1 nachalniku.cf, 1 @@ -103757,7 +102413,6 @@ nachovni.org, 1 nachrichten-heute.net, 1 nachsendeauftrag.net, 0 -nachsenden.info, 0 nachtherz.com, 1 nachtlebenliebe.de, 1 nachtmuziek.info, 1 @@ -103788,7 +102443,6 @@ nadelholzkulturen.de, 1 nadex.com, 1 nadezhda.ml, 1 -nadiafourcade-photographie.fr, 1 nadilo.com.br, 1 nadine-birkner.de, 1 nadine-chaudier.net, 1 @@ -103799,7 +102453,7 @@ nadjasummer.com, 1 nadlan.immo, 1 nadlerdentistry.com, 1 -nadoba-msk.ru, 1 +nadoba-msk.ru, 0 nadomna-rabota.tk, 1 nadoske.info, 1 nadsandgams.com, 1 @@ -103831,7 +102485,6 @@ nagelideeen.ml, 1 naggie.net, 1 nagoonline.com, 1 -nagorik.com, 1 nagoya.tk, 1 nagpurinstar.tk, 1 nagrad.tk, 1 @@ -103848,8 +102501,6 @@ naheulcraft.be, 1 nahfe.xyz, 1 nahman.tk, 1 -nahmii.dj, 1 -nahmii.dog, 1 nahouw.net, 1 nahrag.tk, 1 nahs-classof1972.com, 1 @@ -103876,7 +102527,6 @@ nailsart.roma.it, 1 nailshop.gq, 1 nailshour.com, 1 -nailspafinder.com, 1 naim.tk, 1 nairobibusinessreview.com, 1 nairus.com.br, 1 @@ -103932,7 +102582,6 @@ nakka.ch, 1 nakkati.tk, 1 nakliyat.name.tr, 1 -nakliye.name.tr, 1 nakluky.cz, 1 nako.blog, 1 nako.kr, 1 @@ -104011,6 +102660,7 @@ namu.wiki, 1 nanaimoneighbourhoods.ca, 1 nanaka.love, 1 +nanasdigital.com, 1 nanaya.net, 1 nanaya.pro, 1 nanboya.com, 1 @@ -104045,7 +102695,6 @@ nannyandhousekeeper.uk, 1 nannydream.com, 1 nano.voting, 1 -nanoavionics.com, 1 nanobattle.com, 1 nanodgx.com, 1 nanodynelabs.com, 1 @@ -104077,12 +102726,10 @@ nanubo.com, 1 nanubo.de, 1 nanxin.xyz, 1 -nanyuan.com, 1 nao-news.net, 1 nao.sh, 1 naocan.cf, 1 naocan.ml, 1 -naohasa.ru, 1 naotron.com, 1 napalha.com.br, 1 napavalleyregister.com, 1 @@ -104204,9 +102851,7 @@ nasavelkaceskoslovenskasvadba.eu, 1 nasbi.pl, 1 nascenteseguros.pt, 1 -naschart.com, 1 naschenweng.info, 1 -naschenweng.me, 1 naschtastisch.de, 1 nascloud.be, 1 nasdarq.com, 1 @@ -104273,7 +102918,7 @@ natalia-in-quebec.tk, 1 natalia-shablo.ru, 1 natalia-venezuela.tk, 1 -nataliaanderson.com.br, 1 +natalia.ovh, 1 nataliapearl.com, 1 nataliealba.net, 1 nataliehershlag.tk, 1 @@ -104347,9 +102992,9 @@ nationalbanken.dk, 1 nationalbankhelp.gov, 1 nationalbanknet.gov, 1 -nationalbluebadge.com, 1 nationalcement.com, 1 nationalchillies.in, 1 +nationalcontractorlicenseagency.com, 1 nationalcybersecuritysociety.org, 1 nationaldebtcounsellors.co.za, 1 nationaldepo.com, 1 @@ -104361,7 +103006,6 @@ nationalfleetparts.com, 0 nationalfuse.com, 1 nationalgangcenter.gov, 1 -nationalgridrenewables.com, 1 nationalhomequotes.com, 1 nationalmall.gov, 1 nationalmap.gov, 1 @@ -104400,7 +103044,6 @@ nationwidevideoproduction.com, 1 nationwidevideoproduction.net, 1 nationx.tk, 1 -nativalab.com, 1 native2ascii.net, 1 nativediving.com, 1 nativemeadowshoney.com, 1 @@ -104416,11 +103059,9 @@ natlec.com, 1 natmal.net, 1 nato-stamps.tk, 1 -natreningu.net, 1 natrespro.com, 1 natronaincident.gov, 1 natronasheriff.gov, 1 -natrowing.org, 1 nats-flop.tk, 1 natt.ca, 1 nattsafety.com, 1 @@ -104438,7 +103079,6 @@ natura2000.tk, 1 naturabuy.fr, 1 natural-hazards-and-earth-system-sciences.net, 1 -naturalbadbreathcures.com, 1 naturalbeautyadvisor.com, 1 naturalbladdercontrol.tk, 1 naturalcosmetics.cf, 1 @@ -104455,7 +103095,6 @@ naturalreaders.com, 1 naturalresources.wales, 1 naturalstyle.tk, 1 -naturaltec.com.br, 1 naturalwellnesssolutions.org, 1 naturana.news, 1 naturaprint.fr, 1 @@ -104536,6 +103175,7 @@ navarrete.tk, 1 navasdelpinar.com, 1 navasoft.com.tr, 1 +naveengranites.com, 1 navegantesdelcosmos.ec, 1 navegarea.tk, 1 naveka.ga, 1 @@ -104547,7 +103187,6 @@ navigantcu.org, 1 navigator-polska.com, 1 navigatorgpo.com, 1 -navigay.me, 1 navigo-inc.com, 1 navigo.cc, 1 navigo.global, 1 @@ -104576,12 +103215,12 @@ nax.io, 0 naxcivan.tk, 1 naxe.lv, 1 -nayakaaerial.com, 1 nayanaas.com, 1 nayapakistan.tk, 1 nayefalebrahim.com, 1 nayna.tk, 1 nayr.us, 1 +naytics.com, 1 naz-sciaves.eu, 1 nazareamarga.com, 1 nazareamarga.com.br, 1 @@ -104730,7 +103369,6 @@ ncli-design.com, 1 ncloud.freeddns.org, 1 nclpagamentos.com.br, 1 -ncmc.me, 1 ncmedicaidplan.gov, 1 ncmedicaidplans.gov, 1 ncmms.gov, 1 @@ -104764,6 +103402,7 @@ ncuc.gov, 1 ncvps.gov, 1 nd.net, 1 +ndaal.eu, 1 ndaccount.com, 1 ndanotaire.ca, 1 ndanotaires.ca, 1 @@ -104858,9 +103497,12 @@ nebucadnezzer.tk, 1 nebulae.co, 1 nebulise.com, 1 +nebulith.org, 1 +nebux.ai, 1 nebux.cloud, 1 nebux.es, 1 nebux.eu, 1 +nebux.io, 1 nec-x.com, 1 necd.me, 1 nechtan.io, 1 @@ -104982,7 +103624,6 @@ neide.ga, 1 neighbor.co.il, 1 neighborhood-threat.tk, 1 -neighborshop.de, 1 neighborsunitedwilmington.org, 1 neighbourly.com, 1 neil-barrett.com, 1 @@ -105058,7 +103699,6 @@ nellen.it, 1 nellislife.marketing, 1 nellydallois.fr, 1 -nellydental.com, 1 neln.jp, 1 neln.net, 1 nelnet.com, 1 @@ -105078,6 +103718,7 @@ nemagiya.tk, 1 nemahacountyne.gov, 1 nemberone.com, 1 +nemconcept.vn, 1 nemecl.eu, 1 nemesisenterprises.de, 1 nemesiz.tk, 1 @@ -105163,6 +103804,7 @@ neontemple.net, 1 neontri.com, 1 neoone.art, 0 +neopexel-server.my.id, 1 neophilus.net, 1 neophyt.ch, 1 neoplm.com, 1 @@ -105183,7 +103825,7 @@ neosys.com, 1 neosys.eu, 1 neotech-solutions.com, 1 -neoteric.eu, 1 +neoteric.eu, 0 neotiv.com, 1 neotracker.io, 0 neovapo.com, 1 @@ -105260,7 +103902,6 @@ nerdwallet.com, 1 nerdydev.net, 1 nerdyfam.tech, 1 -nerdyfux.com, 0 nerdygadgets.org, 1 nerdyhometech.com, 1 nerdynav.com, 1 @@ -105284,7 +103925,6 @@ nerull7.info, 1 nerv.com.au, 1 nerven.se, 0 -nervepay.com, 1 nervi.ga, 1 nesabamedia.com, 1 nesaltin.com, 1 @@ -105316,6 +103956,7 @@ nestra.tk, 1 nestreeo.com, 1 neswec.org.uk, 1 +net-abuse.email, 1 net-combo-ja.com, 1 net-file.tk, 1 net-news.gq, 1 @@ -105430,7 +104071,6 @@ nethorizon.pl, 1 nethound.ga, 1 nethruster.com, 0 -nethunter.top, 1 netica.fr, 0 netid.de, 1 netig.net, 0 @@ -105500,7 +104140,6 @@ netsec.cloud, 1 netsecma.com, 1 netsensai.pl, 1 -netsensor.com.br, 1 netshopgarden.com.br, 1 netsite.dk, 1 netslum.tk, 1 @@ -105543,6 +104182,7 @@ nettoyagesleriverain.com, 1 nettskjema.no, 1 nettunoguide.dk, 1 +nettverk.fi, 1 nettx.co.uk, 1 nettype.ca, 1 netube.org, 1 @@ -105586,7 +104226,6 @@ networkmidlands.uk, 1 networkmon.net, 1 networkperformancemonitoring.net, 1 -networkposting.com, 1 networksec.info, 1 networksecuritysolutions.info, 1 networksolutionsconsultant.com, 1 @@ -105672,7 +104311,7 @@ neurophysiotherapy.ga, 1 neuropsicologiaperin.com.br, 1 neuropsiperches.com, 1 -neuropsychologisthouston.com, 1 +neuropsychologisthouston.com, 0 neurosurgeryinmexico.com, 1 neuroticosanonimos.tk, 1 neuroticpoets.com, 1 @@ -105739,6 +104378,7 @@ new-pornvideos.com, 1 new-smile.cf, 1 new-standart.tk, 1 +new-techina.com, 1 new-tuning.tk, 1 new-vip.com, 1 new-vip1.com, 1 @@ -105782,7 +104422,7 @@ newbrightonresidents.org.nz, 1 newbronze.com.br, 1 newbrunswicknj.gov, 1 -newbrunswickonlinedivorce.com, 0 +newbrunswickonlinedivorce.com, 1 newbrunswicktoday.com, 1 newbss.co.uk, 1 newbuilding.tk, 1 @@ -105840,7 +104480,6 @@ newfield-ext.co.jp, 1 newfiepedia.ca, 1 newflavor.design, 1 -newfld.com, 1 newflexcareer.com, 1 newflorencemo.gov, 1 newflyer.ca, 1 @@ -105882,6 +104521,8 @@ newkaliningrad.ru, 1 newlands-fasteners.com.au, 1 newlanefinance.com, 0 +newledger.io, 1 +newledger.sg, 1 newlegalsteroid.com, 1 newlifefund.org, 1 newlondonhospital.org, 1 @@ -106025,7 +104666,6 @@ newsinpolitics.ga, 1 newsireland.tk, 1 newskiev.ru, 1 -newskinlasercenter.com, 1 newslanka.tk, 1 newsletteralerts.com, 1 newsletters.gq, 1 @@ -106037,7 +104677,6 @@ newspawn.net, 1 newspower.ir, 1 newsprinters.co.uk, 1 -newspro.io, 1 newspsychology.com, 1 newsquare.biz, 1 newsrostov.ru, 1 @@ -106093,7 +104732,6 @@ newyorkland.forsale, 1 newyorkmyc.org, 1 newyorknews.tk, 1 -newyorkpub.com.br, 1 newyorkreporting.com, 1 newyorkrp.tk, 1 newyorktitlesearch.com, 1 @@ -106160,7 +104798,6 @@ nextcloud.nerdpol.ovh, 1 nextcloudcn.com, 0 nextclouddarwinkel.nl, 1 -nextdayoff.com, 1 nextdayvapes.co.uk, 1 nextdoorhobby.com, 1 nextdoorhobby.de, 1 @@ -106220,7 +104857,6 @@ nexwebsites.com, 1 nexxen.com, 1 nexxera.com, 0 -nexxss.jp, 1 nexxus-sistemas.net.br, 1 nexy7574.co.uk, 1 nexzus.com, 1 @@ -106272,7 +104908,6 @@ nforto.com, 1 nfpors.gov, 1 nfpsa.lv, 1 -nfrdoz.com, 1 nfs.pub, 1 nfsec.pl, 1 nfshopnsave.com, 1 @@ -106293,16 +104928,15 @@ ngatikuri.tk, 1 ngawa-avocat-paris.fr, 1 ngbilling.com.br, 1 +ngbs.fun, 1 ngc.gov, 0 ngclearing.com, 1 ngefics.tk, 1 -ngelag.com, 1 ngen.ca, 1 ngergs.de, 1 nggukbo9lbfadcf5.gq, 1 nghe.net, 1 nghien4banh.com, 1 -nghiengacha.com, 1 ngiemboon.net, 1 nginx.io, 1 nginxtest.ml, 1 @@ -106319,6 +104953,7 @@ ngndn.jp, 1 ngns.cz, 1 ngo-online.de, 1 +ngo.luxe, 1 ngobrolgames.com, 1 ngontinhtruyen.com.vn, 1 ngoresan.tk, 1 @@ -106481,7 +105116,6 @@ nicholaslazzerini.com, 1 nicholasnassar.com, 1 nicholaspayton.com, 1 -nicholasquigley.com, 1 nicholaswilliams.net, 1 nicholsongoldsmiths.co.uk, 1 nicholsonkring.tk, 1 @@ -106565,9 +105199,9 @@ nicolas-hoizey.com, 1 nicolas-hoizey.photo, 1 nicolaschelly.tk, 1 -nicolasfrebert.fr, 1 nicolasfriedli.ch, 1 nicolasiung.me, 0 +nicolasjpsanchez.com, 1 nicolasmeric.ovh, 1 nicolasprovost.tk, 1 nicolaszambetti.ch, 1 @@ -106648,6 +105282,7 @@ nietveel.tk, 1 nietvolgensdeboekjes.nl, 1 nietzsche.com, 1 +nieuwbestand.nl, 1 nieuwe-casinos.net, 1 nieuwebroek.com, 1 nieuwebroek.nl, 1 @@ -106670,10 +105305,8 @@ nigah.com, 1 nigdeescort.tk, 1 nigel-aves-photography.com, 1 -nigelfreake.eu, 1 nigelpentland.co.uk, 1 nigelpentland.net, 1 -nigelvm.com, 1 nigelwright.com, 1 nigelwrightgroup.com, 1 nigeriaimagefoundation.org, 1 @@ -106777,6 +105410,7 @@ nikeyichinese.com, 1 nikhilramakrishnan.tk, 1 nikhilsd.com, 1 +nikiel.fr, 1 nikimix.com, 0 nikinterior2018.com, 1 nikitacartes.xyz, 0 @@ -106795,7 +105429,6 @@ niklasstinkt.com, 1 niko-mapping-studio.tk, 1 niko-vfx.com, 0 -nikodev.es, 1 nikoflix.site, 1 nikolab.com.ua, 1 nikolaev-news.ru, 1 @@ -106823,7 +105456,6 @@ nikosgkourtsas.gr, 1 nikosoikonomopoulos.tk, 1 nikosverths.tk, 1 -nikotiinipussit.com, 1 nikov.net, 1 nikscloud.eu, 1 nikskitchen.com.au, 1 @@ -106898,6 +105530,7 @@ ninetyninestreet.co.nz, 1 ninetyseven.tk, 1 ninetysixsc.gov, 1 +ninex.org, 1 ninfora.com, 1 ning.bo, 1 ningwei.net, 1 @@ -107062,7 +105695,6 @@ njdge.gov, 1 njdivorceandprenup.com, 1 njeda.gov, 1 -njedge.net, 1 njelderlawattorneys.com, 1 njeri.codes, 1 njfog.org, 1 @@ -107070,7 +105702,6 @@ njilc.com, 1 njj0121.com, 1 njleg.gov, 1 -njliner.me, 1 njliner.net, 1 njmihia.gov, 1 njngroup.org, 1 @@ -107122,6 +105753,7 @@ nlead.gov, 1 nlgr.de, 1 nlindt.com, 1 +nljasper.com, 1 nllboard.co.uk, 1 nlm.gov, 1 nlmaps.nl, 1 @@ -107183,7 +105815,6 @@ nndfn.com, 1 nnet.ca, 1 nnews.tk, 1 -nngroup.com, 1 nni-pulse-engagement-dev.azurewebsites.net, 1 nni-pulse-engagement-prd.azurewebsites.net, 1 nni-pulse-engagement-tst.azurewebsites.net, 1 @@ -107305,7 +105936,6 @@ nocyclopedia.tk, 1 nod.lv, 1 nod32.com.pt, 1 -nodbaltic.com, 1 nodde.cf, 1 nodecdn.net, 1 nodecore.mine.nu, 1 @@ -107335,6 +105965,7 @@ noexcusesc.gov, 1 noexec.org, 1 noexpo.org, 1 +nofibre.uk, 1 nofilter.gq, 1 nofraud-test.com, 1 nofrillsdns.com, 1 @@ -107386,7 +106017,6 @@ nokoshop.fr, 1 noktadedektor.com, 1 noktadetectors.com, 1 -noktadetectors.com.br, 1 nokton.com, 1 noktron.de, 1 nokya.tk, 1 @@ -107433,8 +106063,6 @@ nomee6.xyz, 1 nomercy.tv, 1 nomerel.com, 0 -nomerodekors-esport.no, 1 -nomerodekors.no, 1 nomesbiblicos.com, 1 nomial.co.uk, 1 nomifensine.com, 1 @@ -107446,7 +106074,6 @@ nomorigine.com, 1 nomsing.tk, 1 nomtechbytes.com, 1 -nomzamo.spdns.org, 1 nona.com.my, 1 nona.my, 1 noname-ev.de, 0 @@ -107497,7 +106124,7 @@ nooresunnat.tk, 1 noorsolidarity.com, 0 noorzaitribe.ga, 1 -noosebrigade.com, 1 +noosebrigade.com, 0 nooshu.com, 1 noosxe.com, 1 nootropic.com, 1 @@ -107523,7 +106150,6 @@ norad.sytes.net, 1 norada.com, 1 noradevot.com, 1 -noradrenalina.com, 1 norahheadhp.com.au, 1 norala.tk, 1 noralku.net, 1 @@ -107582,7 +106208,6 @@ nordloxsecure.com, 1 nordmark-pharma.de, 1 nordmoregatebilklubb.com, 1 -nordostvk.ru, 1 nordpass.asia, 1 nordpass.com, 1 nordsec.com, 1 @@ -107651,7 +106276,6 @@ nortecultural.tk, 1 nortek.com, 1 norterafoods.com, 1 -north-by-north-east.com, 1 north-cyprus.com, 1 northafrican.tk, 1 northamericangamingalmanac.com, 1 @@ -107687,13 +106311,14 @@ northeasternchimney.com, 1 northebridge.com, 0 northernbounty.ca, 1 -northernconcretecoating.com.au, 1 northernflame.tk, 1 northernhamsterclub.com, 1 northernimages.ca, 1 northerniowan.com, 1 northernlight.com, 0 northernlitescourier.ca, 1 +northernmichigancondo.com, 1 +northernmichiganvalues.com, 1 northernpowertrain.com, 1 northernskiesfcu.org, 1 northernstar.info, 1 @@ -107701,6 +106326,7 @@ northfayettepapolice.gov, 1 northfieldmn.gov, 1 northfieldnh.gov, 1 +northfinance.dk, 1 northflightaeromed.org, 1 northgatedoors.com, 1 northhampton-nh-pd.gov, 1 @@ -107743,7 +106369,7 @@ northsummitfireut.gov, 1 northtek.tk, 1 northteksystems.com, 1 -northtex.com, 1 +northtex.com, 0 northtexaspiano.org, 1 northtints.store, 1 northtopsailbeachnc.gov, 1 @@ -107762,7 +106388,6 @@ norwalkps.org, 0 norway-coast.no, 1 norwayinternetstuffs4u.tk, 1 -norwegenurlaub.no, 1 norwegian.events, 1 norwellma.gov, 1 norwich.edu, 1 @@ -108023,6 +106648,7 @@ novelas.net.br, 1 noveldadigital.es, 1 novelenergylighting.com, 1 +novelfm.com, 1 novelinglife.net, 0 novelly.in, 1 noveltr.com, 1 @@ -108104,6 +106730,7 @@ now101atm.tk, 1 nowaccy.info, 1 nowaesthetic.com, 1 +nowakowski.io, 1 nowaovivo.com.br, 1 nowarning.cc, 1 nowbb.tk, 1 @@ -108114,7 +106741,6 @@ nowhere.dk, 1 nowincluded.com, 1 nowinkijedynki.tk, 1 -nowisgone.com, 1 nowitzki.network, 1 nowlas.org, 0 nowloading.tk, 1 @@ -108127,7 +106753,6 @@ nowtricity.com, 1 nowysacz.pl, 1 nowzad.com, 1 -noxh.net, 1 noxi.ga, 1 noxiouspl.uk, 1 noxomusic.com, 1 @@ -108163,12 +106788,10 @@ npliga.org, 1 npm.li, 1 npmplus.org, 1 -npolls.com, 1 npportoes.com.br, 1 nprb.org, 1 npregion.org, 1 npsas.org, 1 -npsphotography.com, 1 nptelegraph.com, 1 nptfisheries.org, 1 nptn.tk, 1 @@ -108201,6 +106824,7 @@ nrsforu.com, 1 nrsmart.com, 1 nrthcdn.me, 1 +nrttv.com, 1 nrvc.net, 1 nrvn.cc, 1 nrvnastudios.com, 1 @@ -108213,7 +106837,6 @@ ns230kvopenhouse.com, 1 ns2servers.pw, 1 nsa.ovh, 1 -nsacom.com, 1 nsadns.uk, 1 nsaec.com, 1 nsamail.uk, 1 @@ -108237,12 +106860,12 @@ nsecure.nl, 1 nseicc.com, 1 nseindia.com, 1 -nseit.com, 1 nsep.gov, 1 nsf-journal.hr, 1 nsfw.dk, 1 nsfwph.com, 1 nsfwph.org, 1 +nsglamm.com, 1 nshipster.co.kr, 1 nsics.co.jp, 1 nsikakimoh.com, 1 @@ -108343,7 +106966,6 @@ nub.so, 1 nubank.com.br, 1 nube.com.br, 1 -nubeaustral.ar, 1 nubehogar.nsupdate.info, 1 nubian.cf, 1 nubian.tk, 1 @@ -108419,7 +107041,6 @@ null-d.com, 1 null-life.com, 1 null48.net, 1 -nullam.tech, 1 nullbit.tk, 1 nullcon.net, 1 nulldev.org, 1 @@ -108446,14 +107067,12 @@ numarasorgulama.tel, 1 numaxion.fr, 1 number.academy, 1 -number.com.br, 1 number.me, 1 number80shop.com, 0 numbercult.net, 1 numberspiral.pt, 1 numberzero.org, 1 numbots.com, 1 -numedes.com, 1 numeezy.com, 1 numeracle.com, 1 numerama.com, 1 @@ -108505,7 +107124,6 @@ nur-test.de, 1 nuraling.com, 1 nuranagi.rocks, 1 -nurbpropaganda.com.br, 1 nureg.club, 1 nureg.net, 1 nuria-fergo.tk, 1 @@ -108513,7 +107131,6 @@ nuriacamaras.com, 1 nurkamol.com, 1 nurmio.fi, 1 -nurmonvpk.fi, 1 nurnabi.ml, 1 nurrobin.de, 1 nurseactioners.ga, 1 @@ -108640,7 +107257,7 @@ nwaafund.org, 1 nwarskin.com, 1 nwbc.gov, 0 -nwcc.bike, 1 +nwcc.bike, 0 nwcg.gov, 1 nwcouncil.gov, 1 nwea.nl, 1 @@ -108749,7 +107366,6 @@ nymbus.com, 1 nymtc.org, 1 nynadynasir.my.id, 1 -nyoka-flutter.com, 1 nyoka-nodejs.com, 1 nyoka-react.com, 1 nyoka.io, 1 @@ -108875,6 +107491,7 @@ o3ptitschats.fr, 1 o3swap.com, 1 o5.cx, 0 +o5.gg, 1 o5.vc, 1 o5197.co, 1 o6729.co, 1 @@ -108924,7 +107541,6 @@ oanamancu.com, 1 oandgpr.com, 1 oanow.com, 1 -oase-fuer-wohlbefinden.ch, 1 oasegroen.nl, 1 oasis-info.co.uk, 1 oasisautospa.org, 1 @@ -108948,10 +107564,10 @@ obarax.com, 1 obatjantungrematik.tk, 1 obbr.tk, 1 -obcfl.com, 1 obcina.com, 1 obclub.tk, 1 obcom.tk, 1 +obdinvest.ru, 1 obdolbacca.ru, 1 obdr.it, 1 obds.net, 1 @@ -109035,6 +107651,8 @@ obraz-ural.ru, 1 obrazcovdvor.bg, 1 obrela.com, 1 +obreshkovisin.bg, 1 +obreshkovisin.com, 1 obrobka-zdjec.pl, 1 obs.plus, 1 obsahovka.eu, 1 @@ -109096,6 +107714,7 @@ occasion.nc, 1 occhelps.gov, 1 occm.cc, 1 +occucare.co.in, 1 occult-magick.ga, 1 occult-magick.gq, 1 occult-magick.ml, 1 @@ -109107,7 +107726,6 @@ occupations.org.ru, 1 occupy4elephants.tk, 1 occupybakersfield.tk, 1 -occurrence.fr, 1 ocd2016.com, 1 ocdadmin.com, 1 ocdelier.nl, 1 @@ -109122,12 +107740,14 @@ oceanborn.ml, 1 oceanborn.tk, 1 oceanbreezehomes.com, 1 +oceanbridge.com.my, 1 oceancity.vin, 1 oceancountynj.gov, 1 oceandns.eu, 1 oceandns.net, 1 oceane.training, 1 oceanearth.us, 1 +oceanengine.com, 1 oceanfirst.com, 0 oceaniahome.tk, 1 oceaniahotels.com, 1 @@ -109158,7 +107778,6 @@ ocg-card.com, 1 ochaken.cf, 1 ochatoosenbei.tk, 1 -ochelarium.ro, 1 ochemindessens.com, 1 ochevidcy.com, 1 ochioneta.es, 1 @@ -109167,7 +107786,6 @@ ochotnicky.com, 1 ochranaprirody.cz, 1 ochrepoint.com.au, 1 -ochsenfeld-design.de, 1 ochsenfeld-fotografie.de, 1 ochsenfeld.co, 1 ochsundjunior.ch, 1 @@ -109236,7 +107854,6 @@ octaviosimon.com, 1 octobanana.com, 1 octobered.com, 0 -octobit.com.ua, 1 octocaptcha.com, 1 octod.tk, 1 octoeverywhere.com, 1 @@ -109269,8 +107886,6 @@ oda-group.co.jp, 1 odabasi.ch, 1 odabilocal.com, 1 -odamigo.com, 1 -odaseva.com, 1 odatakao.com, 1 oday.org, 1 odbierzspozywke.pl, 1 @@ -109319,7 +107934,6 @@ odiqco.com.bd, 1 odisealinux.com, 1 odishainfo.tk, 1 -odishatv.in, 1 odisseo.io, 1 odlicomul.ga, 1 odmap.org, 1 @@ -109419,12 +108033,10 @@ offenekommune.de, 1 offenes-deutschland.de, 1 offensity.com, 1 -offensivesentinel.com, 1 offensivesentinel.es, 1 offentligsektormedmoln.se, 1 offeo.com, 1 offer-today.ml, 1 -offerfit.ai, 1 offerground.com, 1 offerhome.com, 1 offerman.com, 1 @@ -109571,6 +108183,7 @@ ogyaa.jp, 0 ogznet.com, 1 oh14.de, 0 +oh64.moe, 1 ohai.is, 1 ohai.social, 1 ohai.su, 1 @@ -109650,7 +108263,6 @@ oisd.nl, 1 oiseaux-mania.com, 1 oiseauxdesjardins.tk, 1 -oisehalatte-tourisme.eu, 1 oita-homes.com, 1 oitaven.es, 1 oitavenlife.com, 1 @@ -109730,7 +108342,6 @@ okmx.cloud, 1 okmx.de, 1 okmzt.com, 1 -okmzt.net, 1 okna-diskont.com.ua, 1 okna-tm.kz, 0 okna.ua, 1 @@ -109743,7 +108354,6 @@ okpo.tk, 1 okqubit.net, 1 okr.pub, 1 -okremarketing.com, 1 okrexperten.de, 1 okrodrigo.com, 1 oksafe-t.org, 1 @@ -109777,7 +108387,6 @@ okwu.cz, 1 ola.finance, 1 olabahisgo.com, 1 -olacatlitter.com, 1 olafbrzeski.com, 1 olafnorge.de, 1 olafvantol.nl, 1 @@ -109788,6 +108397,7 @@ olamisys.com, 1 olamisys.email, 1 olamisys.xyz, 1 +olaplexecuador.com, 1 olaradio.tk, 1 olartworks.com, 1 olasderisa.tk, 1 @@ -109829,6 +108439,7 @@ oldiesmusicguide.tk, 1 oldiesnest.com, 1 oldiesradio.tk, 1 +oldiesradiolive365.com, 1 oldinnpub.tk, 1 oldita.ru, 1 oldliverpoolrailways.tk, 1 @@ -109906,6 +108517,7 @@ olifant.fr, 0 oligenesi.it, 1 olihar.com, 1 +olimpiait.com, 1 olimpicmoradebre.tk, 1 olimplask.pl, 1 olimpoao.tk, 1 @@ -109917,7 +108529,6 @@ olive.dental, 1 olivea.cz, 0 olivedon.com, 1 -olivehealth.co.uk, 1 oliveoil.bot, 1 oliveoil.pro, 1 oliveoilranking.org, 1 @@ -109986,6 +108597,7 @@ ololmke.org, 1 olomercy.com, 1 olopp.org, 1 +oloveoil.store, 1 olphseaside.org, 1 olqoa.org, 1 olschurch.com, 1 @@ -110031,17 +108643,12 @@ omaharoofpros.com, 1 omahcoin.com, 1 omal.info, 1 -omamconsultancy.com, 0 -oman-stick.sale, 1 omanair.com, 1 omangrid.com, 1 omanhr.cf, 1 omanpost.om, 1 omar-webdesign.de, 1 omarflorist.com, 1 -omarh.net, 1 -omarhachach.com, 1 -omarhachach.net, 1 omarhussien.tk, 1 omarov.tk, 1 omarpalos.com, 1 @@ -110068,7 +108675,6 @@ omegachess.tk, 1 omegacode.pl, 1 omegahosting.net, 1 -omegamc.ua, 1 omegathermoproducts.nl, 1 omegleporn.to, 1 omenu.co.uk, 1 @@ -110219,7 +108825,7 @@ ondeck.com.au, 1 ondemandassociate.com, 1 onderka.com, 1 -onderzoeksraad.nl, 0 +onderzoeksraad.nl, 1 ondevamosjantar.com, 1 ondiet.biz, 1 ondoline.ch, 1 @@ -110233,12 +108839,12 @@ one-acleaning.com, 1 one-clue.com, 1 one-cozmic.com, 1 -one-daystudio.com, 1 one-dot.de, 0 one-host.ga, 1 one-news.net, 0 one-pass.cloud, 1 one-pixel.tk, 1 +one-place.com, 1 one-resource.com, 1 one-tab.com, 1 one2.digital, 1 @@ -110275,7 +108881,6 @@ onecore.rocks, 1 onedaygrandcanyonrafting.com, 1 onedeal.com.ua, 1 -onedevonshireplace.co.uk, 1 onedice.org, 1 onediversified.com, 0 onedot.nl, 1 @@ -110341,7 +108946,7 @@ onepeloton.co.uk, 0 onepeloton.com, 0 onepersona.io, 1 -onepieceplayer.com, 0 +onepieceplayer.com, 1 oneplanet.com, 1 oneplaykh.com, 1 onepluscamps.com, 0 @@ -110383,7 +108988,7 @@ onetouchrevealplus.com, 1 onetouchtour.com, 1 onetown.gq, 1 -onetranslations.com.br, 1 +onetranslations.com.br, 0 onetrust.com, 1 onets.es, 1 onetwentyseven001.com, 1 @@ -110401,6 +109006,7 @@ onewyo.gov, 1 onex.bet, 1 onezero24.net, 1 +onezeroit.com, 1 onfaloc.tk, 1 onfilm.tk, 1 onfleet.com, 1 @@ -110416,7 +109022,7 @@ onglobetrotter.com, 1 ongoal.gr, 1 ongoved.com, 1 -onguard.co, 1 +onguard.co, 0 onguardonline.gov, 1 onhistory.co.uk, 1 onhub1.com, 1 @@ -110643,6 +109249,7 @@ onlyu.eu, 1 onlyveg.tk, 1 onlyvintagewatches.com, 1 +onmail.no, 1 onmaps.de, 1 onmaru.com, 1 onmyodev.com, 1 @@ -110665,7 +109272,7 @@ onporn.fun, 1 onrampwallet.com, 1 onrangetout.com, 1 -onrealt.ru, 0 +onrealt.ru, 1 onrr.gov, 1 onsatv.com, 1 onscript.study, 1 @@ -110812,6 +109419,7 @@ open-ctp.org, 1 open-data-apps.org, 1 open-desk.org, 1 +open-douyin.com, 1 open-fixture-library.org, 1 open-future.info, 1 open-greenenergy.com, 1 @@ -110918,7 +109526,6 @@ openmirrors.ml, 1 openmtbmap.org, 1 openmydoor24.de, 1 -openmyfloridabusiness.gov, 0 opennippon.com, 1 opennippon.ru, 1 openpictures.ch, 1 @@ -110937,6 +109544,7 @@ openrecognition.org, 1 openremote.io, 1 openreplay.com, 1 +openresa.com, 1 openresearch.amsterdam, 1 openreview.net, 1 openroademail.com, 1 @@ -110946,10 +109554,10 @@ opensecurity.pl, 1 openseo.com.tr, 1 opensim.tk, 1 +openskies.world, 1 openslava.tk, 1 opensocial.at, 1 opensocietyuniversitynetwork.org, 1 -opensource-cms.nl, 1 opensource-training.de, 1 opensource.fund, 1 opensourcecombat.com, 1 @@ -110964,9 +109572,9 @@ openstem.com.au, 1 openstreetmap.is, 1 openstreetmap.org, 1 +opentapetes.com.br, 1 opentechalliance.com, 1 opentenders.tech, 1 -openthemagazine.com, 1 opentrack.info, 1 opentrackables.com, 1 opentrader.com.au, 0 @@ -111022,14 +109630,12 @@ opid.my.id, 1 opieoils.co.uk, 0 opil.no, 1 -opimo3d.com.br, 1 opin.me, 1 opinie.pl, 1 opinio.fr, 1 opinionipannolini.it, 1 opinioniprodotto.it, 1 opinionitech.com, 1 -opiniterupdate.com, 1 opioidaffectedyouth.org, 1 opioids.gov, 1 opioids.wiki, 1 @@ -111119,7 +109725,6 @@ optibelt.com, 1 optic-street.ru, 1 optical-faking.tk, 1 -opticaltest.com, 1 opticamasvision.com, 1 opticasocialvision.com, 1 opticiansri.org, 1 @@ -111159,11 +109764,13 @@ optimizemy.health, 1 optimom.ca, 1 optimon.io, 1 +optimum-general.com, 1 optimumactuaires.com, 1 optimumactuariat.ca, 1 optimumfinancier.ca, 1 optimumfinancier.com, 1 optimumfinanciere.fr, 1 +optimumfmw.com, 1 optimumgam.ca, 1 optimumgam.com, 1 optimumgam.fr, 1 @@ -111326,7 +109933,6 @@ orchideemilano.it, 1 orchidhousehotels.com, 1 orchidinsurance.com, 1 -orchidparfum.eu, 1 orchidplantscare.com, 1 orchids.ua, 1 orcomsilver.tk, 1 @@ -111420,7 +110026,6 @@ organicappraisalers.ga, 1 organicchurch.com, 1 organicconsumers.org, 1 -organicflavor.com.br, 1 organicindiausa.com, 0 organicossuliani.com.br, 1 organicpoint.in, 1 @@ -111436,6 +110041,7 @@ organizasyonbul.com, 1 organization-of-holidays.tk, 1 organizedrhyme.tk, 1 +organspende-register.de, 1 orgasmium.com, 1 orged.de, 1 orgsyn.in, 1 @@ -111461,6 +110067,7 @@ origamiii.me, 1 origamiking.wiki, 1 origemtemperos.com.br, 1 +origenix.ai, 1 origent.com, 1 origina.com, 1 originahl-scripts.com, 1 @@ -111530,9 +110137,9 @@ ornc.org, 1 ornikar.com, 1 ornithopter.tk, 1 -ornitina.com, 1 ornsyn.no, 1 ornua.com, 1 +oro-express.es, 1 oro.milano.it, 1 oro.roma.it, 1 oro97.com, 1 @@ -111550,6 +110157,7 @@ orrs.de, 1 orsal.fr, 1 orsecurity.com.au, 1 +orsemix.fr, 1 orsgo.com, 1 ortahisarsigorta.com, 1 ortanatech.com, 1 @@ -111609,7 +110217,6 @@ os.web.tr, 1 os33.net, 1 os76.xyz, 1 -osa.fyi, 1 osaamiskartoitus.fi, 1 osac.gov, 1 osacrypt.studio, 1 @@ -111637,6 +110244,7 @@ osateam.tk, 1 osawatomieks.org, 1 osb-alliance.de, 1 +osbap.com, 1 osbeck.com, 1 osboot.org, 1 osborne.tk, 1 @@ -111666,12 +110274,13 @@ oscom.tk, 1 oscontracting.com, 1 oscreen.ru, 1 -osdeployment.com, 1 -osdeployments.com, 1 +osdeployment.com, 0 +osdeployments.com, 0 osdfcon.org, 1 osdgen.com, 1 osdls.gov, 1 osduforum.org, 1 +ose49.fr, 1 oseido.tk, 1 osepideasthatwork.org, 1 osereso.tn, 1 @@ -111783,7 +110392,6 @@ ostrovseocitra.ml, 1 ostseebad-sellin.de, 1 osttopst.online, 1 -ostylelimo.com, 1 osuarez3.com, 1 osun.eu, 1 osuszanie-krakow.pl, 1 @@ -111825,9 +110433,7 @@ otg-drives.tk, 1 otgadaika.tk, 1 other98.com, 0 -othercdn.com, 1 otherkinforum.com, 1 -otherlandlabs.com, 1 otherwise.tk, 1 othrys.net, 1 oticasvisao.net.br, 1 @@ -111907,8 +110513,6 @@ ouders-uit-elkaar.nl, 1 oudersvannu.nl, 1 ouestacro.fr, 1 -ouestfrance-auto.pro, 1 -ouestlabs.com, 0 ouestlebug.com, 1 ouezzan.tk, 1 ouglor.com, 1 @@ -111977,9 +110581,11 @@ oursweb.net, 1 oursweb.org, 1 ourtableforseven.com, 1 +ourtimepress.com, 1 ouruglyfood.com, 1 ourvau.lt, 1 ourwildsavorykitchen.com, 1 +ourwisconsinlife.com, 1 ourwits.com, 1 ourworldindata.org, 0 ourworldspeaks.com, 1 @@ -111990,7 +110596,6 @@ out-of-england.ga, 1 out-of-england.gq, 1 out-of-england.ml, 1 -out-teach.org, 1 outagamie.gov, 1 outandproud.pl, 1 outbackspectacular.com.au, 1 @@ -112006,11 +110611,10 @@ outdoorlightingcalabasas.com, 1 outdoorlightingmalibu.com, 1 outdoormanufaktur.com, 1 -outdoorphoto.co.za, 1 outdoorswithmax.com, 1 outdoorsytravel.com, 1 outerface.net, 1 -outerlandstravel.com, 0 +outerlandstravel.com, 1 outerlimitsdigital.com, 1 outernet.tk, 1 outerspace.ga, 1 @@ -112048,7 +110652,6 @@ outskirtspress.com, 1 outsourced-payroll.com.au, 1 outsourcify.net, 1 -outsourcingdenomina.co, 1 outsourcingnominabogota.com, 1 outstack.vote, 1 outstanding.tk, 1 @@ -112077,7 +110680,6 @@ ovenapp.io, 1 ovenrepairaustin.com, 1 over-50s-insurance.uk, 1 -overa.net, 1 overallscanners.tk, 1 overca.sh, 1 overcached.com, 1 @@ -112141,16 +110743,19 @@ ovirt.org, 1 oviser.ml, 1 ovisy.com, 1 +ovmgroup.eu, 1 ovni-owners.org.uk, 0 ovnrain.com, 0 ovo.st, 1 ovochi.tk, 1 ovodakadarkut.tk, 1 ovog.pk, 1 +ovoreferralcode.com.au, 1 ovosimpatico.com, 1 ovosimpatico.org, 1 ovpn.com, 1 ovpn.to, 1 +ovrwlm.ai, 1 ovstravel.com, 1 ovuk.ru, 1 ovv.lt, 1 @@ -112171,7 +110776,6 @@ owise.tk, 1 owl-media.pl, 1 owl-media.ru, 1 -owl-media.us, 1 owl-stat.ch, 0 owl.et, 1 owl.net, 1 @@ -112210,7 +110814,6 @@ ownhosting.cloud, 1 ownhosting.de, 1 owningless.fr, 1 -ownparking.com, 1 ownservercloud.ddns.net, 1 ownsky.com, 1 ownsport.fr, 1 @@ -112229,7 +110832,6 @@ owrt-risk.dedyn.io, 1 owyheecounty.gov, 1 ox.restaurant, 1 -oxalato.com, 1 oxaliz.gq, 1 oxanababy.com, 1 oxborrow.ca, 1 @@ -112241,7 +110843,6 @@ oxford-review.com, 1 oxfordandcambridgetutors.com, 1 oxfordbus.co.uk, 1 -oxforddigital.com.au, 0 oxfordenglish.com.ua, 1 oxfordkneeinfo.com, 0 oxfordmd.gov, 1 @@ -112280,13 +110881,12 @@ oxxoshop.com, 0 oxyadvertising.com, 1 oxydac.com, 1 -oxydrate.com, 1 +oxydrate.com, 0 oxygames.tk, 1 oxygen.com, 1 oxygenated.cf, 1 oxygenforchennai.com, 1 oxygenupdater.com, 1 -oxygin.net, 0 oxylabs-china.net, 1 oxylabs.cn, 1 oxylabs.io, 1 @@ -112298,7 +110898,6 @@ oxytocin.org, 1 oxytocin.wiki, 1 oxyx.tk, 1 -oya.ai, 1 oyakyamacevler.net, 1 oyal.co.uk, 1 oyama-karate.tk, 1 @@ -112393,7 +110992,6 @@ p-pac.com, 0 p-pc.de, 1 p-soc.com.br, 1 -p-t.io, 1 p.ac, 1 p.lease, 1 p.lu, 1 @@ -112448,6 +111046,7 @@ paarberatung-hn.de, 1 paardenhulp.nl, 1 paardensportbak.nl, 1 +paarinekstase.at, 1 paarissohail.tk, 1 paaseiland.org, 1 paaspasst.de, 1 @@ -112493,6 +111092,7 @@ pabloroblesminister.com, 1 pablosaraiva.com, 1 pabpunk.tk, 1 +pabrikvideo.com, 1 pac-clad.com, 1 pacareerzone.org, 1 pacasino.com, 1 @@ -112522,13 +111122,13 @@ paciella.com, 1 pacificaent.net, 1 pacificbags.com.au, 1 -pacificbeachpub.com, 1 pacificblue.kiwi, 1 pacificblue.software, 1 pacificcashforcars.com.au, 1 pacificcycling.ga, 1 pacificdatastream.ca, 1 pacificdomes.com, 1 +pacificgateway.com, 1 pacificlife.my.id, 1 pacifico.com.pe, 1 pacificocooler.com, 1 @@ -112558,7 +111158,6 @@ packedagain.com, 1 packer.io, 0 packer.land, 1 -packet33.com, 1 packetapp.ru, 1 packetcrash.net, 1 packetfabric.com, 1 @@ -112578,6 +111177,7 @@ pacman.ltd, 1 pacnyc.org, 1 pacobarbera.tk, 1 +pacocollective.com, 1 pacoda.de, 0 pacogarcia.tk, 1 pacogorzados.tk, 1 @@ -112642,13 +111242,11 @@ paduwitze.de, 1 padzilla.com, 1 pae.com, 1 -pae.net.ru, 1 paegae.gr, 1 paerbikes.com, 1 paermartinsson.se, 1 paesa.es, 1 paf.com, 1 -paf.network, 1 paga.red, 1 pagalofacil.com, 1 pagalworld-news.ml, 1 @@ -112670,10 +111268,7 @@ pageboard.io, 1 pagebuilderaddons.com, 1 pagecrafter.com, 1 -pagedesignhub.com, 1 pagedesignpro.com, 1 -pagedesignshop.com, 1 -pagedesignweb.com, 1 pagefulloflies.io, 1 pagehost.one, 1 pagenews.tk, 1 @@ -112709,6 +111304,7 @@ pahira.gq, 1 paho.org, 1 pahom.gq, 1 +pahrc.org, 1 pahrumpnv.gov, 1 pahui.cf, 1 pahui.ml, 1 @@ -112964,7 +111560,6 @@ panaxis.li, 1 pancake-world.com, 1 pancake.gg, 1 -panchajanyafashions.com, 1 panda-bg.com, 1 panda-community.com, 1 panda-craft.tk, 1 @@ -113060,8 +111655,6 @@ pannellisolari.roma.it, 1 panneton.net, 1 pannovate.com, 1 -pano-guru.com, 1 -pano.ie, 1 panodprodukcjimuzycznej.pl, 1 panop.io, 1 panopterra.com, 1 @@ -113091,7 +111684,6 @@ panszelescik.pl, 1 pantagraph.com, 1 pantallasyescenarios.com, 0 -pantas.com, 1 pantera.tk, 1 panthenolplus.co.uk, 1 panthenolplus.com, 1 @@ -113117,6 +111709,7 @@ pao.moe, 1 paocaibang.net, 1 paocloud.co.th, 1 +paoderiomaior.pt, 1 paolodapul.net, 0 paolodemichele.it, 0 paolomargari.tk, 1 @@ -113187,7 +111780,6 @@ papuaekspose.com, 0 papuzkija.pl, 1 paqtam.com, 1 -par-allel.ru, 1 parabellum-barakaldo.tk, 1 parablu.com, 1 parabolaeditorial.com.br, 1 @@ -113225,13 +111817,13 @@ paradymecompanies.com, 0 paraelganzo.tk, 1 parafarmacia.it, 1 +paragardmdlportal.com, 1 paragliding-lessons.com, 1 paragon-access.com, 1 paragonremodeling.com, 0 paragonsigns.tk, 1 paragreen.net, 1 paraguay.tk, 1 -parakazanmafikirleri.com, 1 paraleli.ge, 1 parallel-worlds.tk, 1 parallelphotography.com, 1 @@ -113245,7 +111837,6 @@ parametricaeng.com, 1 paramloda.online, 1 paramo-pineiro.tk, 1 -paramount.jp, 1 paramountbank.com, 1 paramountdigitalcopy.com, 1 paramounthotelseattle.com, 1 @@ -113267,6 +111858,7 @@ parapina.bg, 1 paraplyen.tk, 1 parapsihologia.tk, 1 +paraquatmdlportal.com, 1 parareflex.fr, 1 paras.tk, 1 parasail.co.nz, 1 @@ -113287,13 +111879,12 @@ parcare.at, 1 parcbotanique.com, 1 parcdumbravaminunata.ro, 1 -parceirofinanceiro.pt, 1 parcelauditpartners.com, 1 +parcelow.com, 1 parceltrackr.com, 1 parcelup.com, 1 parcheggio-aeroportofiumicino.it, 1 parckwart.de, 1 -parcoursup-nouvelle-caledonie.fr, 1 parcoursup.fr, 1 pardal.tk, 1 pardanaud.com, 1 @@ -113325,6 +111916,7 @@ parfumer.tk, 1 parfumi-eu.com, 1 parfumi.tk, 1 +parfummobilvip.com, 1 parfumtester-100.ml, 1 parhoonshop.com, 1 pari-match.in, 1 @@ -113352,6 +111944,7 @@ parimatchsports.com, 1 parimatchtop.com, 1 parina.vn, 1 +parinay.com, 1 pario.li, 1 paripesa.com, 1 paripesa.ng, 1 @@ -113389,11 +111982,6 @@ parkaue.de, 1 parkavenue.co.za, 1 parkbee.com.br, 1 -parkcare.be, 1 -parkcare.es, 1 -parkcare.fr, 1 -parkcare.it, 1 -parkcare.nl, 1 parkcheap.de, 1 parkchesterinfo.com, 1 parkcitycu.org, 1 @@ -113406,7 +111994,6 @@ parkeer.nl, 1 parkeerserviceboxtel.nl, 1 parkefficient.de, 1 -parken-duesseldorfflughafen.de, 1 parkenamflughafen.de, 1 parkerco.gov, 1 parkercs.cf, 1 @@ -113469,7 +112056,6 @@ parleur.net, 1 parliament.gov.to, 1 parliamentcamp.com, 1 -parmacityfutsal.it, 1 parmartecultura.it, 1 parmatoday.it, 1 parmatwp.gov, 1 @@ -113478,6 +112064,7 @@ parmoli.tk, 1 parnassius.name, 1 parnassys.net, 1 +parniplus.com, 1 parnizaziteksasko.cz, 1 paroisses-theix-surzur.com, 1 parokia.hu, 1 @@ -113598,7 +112185,6 @@ partyaccommodationsest.ga, 1 partyausstatter24.de, 1 partyblitzsimi.com, 1 -partybutlers.co.uk, 1 partyclub.tk, 1 partycoin.ga, 1 partyevents.tk, 1 @@ -113613,6 +112199,7 @@ partyrocksbounce.co.uk, 1 partyschnaps.com, 1 partyshop.ge, 1 +partyshowlatam.com, 1 partytime-uk.co.uk, 1 partytimeltd.ie, 1 partywithunicorns.com, 1 @@ -113664,7 +112251,6 @@ pass-jobcoaching.nl, 1 passa.org, 1 passabook.com, 1 -passandsecure.fr, 1 passau-webdesign.com, 1 passbolt.com, 1 passedport.eu, 1 @@ -113719,6 +112305,7 @@ password-checker.de, 1 password.codes, 1 password.consulting, 1 +password.town, 1 passwordass.org, 1 passwordgenerator.ml, 1 passwordlist.io, 0 @@ -113746,13 +112333,11 @@ pasteblin.com, 1 pasteht.ml, 1 pasteleriaflomar.es, 1 -pastelpixels.studio, 1 pasterial.hopto.org, 1 pasternak.net, 1 pasternok.org, 1 pasteros.io, 1 pastetot.com, 1 -pasteurinstituteindia.com, 1 pasteworks.com, 1 pasticceria.milano.it, 1 pasticcerialorenzetti.com, 1 @@ -113816,6 +112401,7 @@ pathofexile2.com, 0 pathogen.nl, 1 pathologie-dna.nl, 1 +pathpartnertech.com, 1 pathsaversers.ga, 1 pathsaversest.ga, 1 pathwayscenterforgrief.org, 1 @@ -113837,6 +112423,7 @@ patioroof.cf, 1 patiosheders.ga, 1 patioshedest.ga, 1 +patito.lat, 1 patkub.vip, 1 patlis.com, 1 patmanx.tk, 1 @@ -113933,6 +112520,7 @@ pauld.codes, 1 pauldaugerdas.com, 0 pauldeconinck.tk, 1 +paulfairbairn.com, 1 paulgerberrealtors.com, 1 paulgo.io, 1 paulharrisoncars.com, 1 @@ -114036,6 +112624,7 @@ pawafuru.com, 0 pawapuro.ga, 1 pawapuro.tk, 1 +pawc.cc, 1 pawchewgo.com, 1 pawdecor.com, 1 pawealthmanagement.com, 1 @@ -114113,7 +112702,6 @@ payboy.rocks, 1 paycaptain.com, 1 paycardtech.com, 1 -paycentre.com, 1 paycom.com, 0 paycomdfw.com, 0 paycomonline.com, 0 @@ -114121,7 +112709,6 @@ paycrest.io, 1 paydepot.com, 1 paydollar.com, 1 -paydoor9.com, 1 paye.net, 0 payeasy.tech, 1 payexpresse.com, 0 @@ -114133,7 +112720,6 @@ payhub.jp, 1 payjunction.com, 1 payjunctionlabs.com, 1 -paykings.com, 0 paylabs.co.id, 1 paylessclinicers.ga, 1 paylessclinicest.ga, 1 @@ -114243,6 +112829,7 @@ pbiexplorer.com, 1 pbla.biz, 1 pbmdiscounter.nl, 1 +pbnews1.com, 1 pbo.vic.gov.au, 1 pborn.eu, 1 pbqs.site, 1 @@ -114263,7 +112850,7 @@ pc-pharma.com, 1 pc-reanimator.ru, 1 pc-remont.tk, 1 -pc-reparatur.me, 1 +pc-reparatur.com, 1 pc-service.me, 1 pc-servis-brno.com, 1 pc-soft.gq, 1 @@ -114305,12 +112892,12 @@ pcgalleries.com, 1 pcgamemc.com, 1 pcgamingfreaks.at, 1 +pcgf.eu, 1 pcgverademo.com, 1 pchan.is, 1 pchancs.com, 1 pchcorral.com, 1 pchelkaprint.kz, 1 -pchelpforum.net, 1 pci-e.net, 1 pci4.org, 1 pcing.ru, 1 @@ -114370,11 +112957,11 @@ pcunderground.com.ar, 1 pcvalueservices.com.au, 1 pcvirusclear.com, 1 -pcw.gov.ph, 1 pcwdevtwebsite.azurewebsites.net, 1 pcweb.info, 1 pd1rnt.nl, 1 pdamerica.org, 1 +pdau.edu.ua, 1 pdavislawgroup.com, 1 pdax.ph, 0 pdaxue.com, 1 @@ -114444,7 +113031,6 @@ peakbrokerageservices.com, 1 peakd.com, 1 peakhillre.ga, 1 -peakmachinery.com, 1 peakperformance.hr, 1 peakrepportal.com, 1 peaksalesrecruiting.com, 1 @@ -114459,6 +113045,7 @@ peanutproductionsnyc.com, 1 pearbloom.com, 1 pearl-dentalclinic.jp, 1 +pearlchaos.com, 1 pearle.nl, 1 pearlharbordrydockeisopenhouse.org, 0 pearljamargentina.tk, 1 @@ -114506,7 +113093,6 @@ pedalia.cc, 1 pedalirovanie.tk, 1 pedalr.eu, 1 -pedaltown.nl, 1 peddals.com, 1 peddep.org, 1 peddy.dyndns.org, 1 @@ -114539,9 +113125,11 @@ peekabooboudoir.com, 1 peekier.com, 1 peekit.ai, 1 +peekix.com, 1 peelawayyourpain.com, 1 peels.fr, 0 peen.ch, 1 +peene.be, 1 peenee.in.th, 1 peenor.xyz, 1 peep.gq, 1 @@ -114782,6 +113370,7 @@ pensiunealido.ro, 1 pentagon-area.tk, 1 pentagram.cf, 1 +pentagram.me, 1 pentagrid.ch, 1 pentahobigdata.com, 1 pentamexicali.tk, 1 @@ -114845,7 +113434,6 @@ peoplesdecade.org, 1 peoplesgazette.com, 1 peopleskills4u.net, 1 -peoplesknowledge.org, 1 peoplesliberationfront.tk, 1 peoplesnationalbank.com, 1 peoplesplatform.cf, 1 @@ -114894,7 +113482,6 @@ perala.me, 1 peraparker.cz, 1 perberestja.gq, 1 -percentagecheck.com, 1 perception-point.io, 1 perceptive.pro, 1 perceptivemediatech.com, 1 @@ -114909,7 +113496,6 @@ percymagic.tk, 1 perd.re, 1 perdanabagus.tk, 1 -perdele-draperii.ro, 1 perdita-capelli.tk, 1 perdolyathlendr.tk, 1 perecraft.com, 1 @@ -115006,7 +113592,6 @@ peridotcapitalpartners.com, 1 periferiaegyesulet.hu, 1 perigon.ch, 1 -perimetersitesecurity.com, 1 perin.name, 1 perini.com.au, 1 perinkac.cz, 1 @@ -115017,6 +113602,7 @@ periodicomirador.com, 1 periodicopcion.tk, 1 periodista.tk, 1 +periodonticsdentalimplants.com, 1 periony.com, 1 periosearch.tk, 1 periscope.tv, 1 @@ -115041,7 +113627,6 @@ perma-batteries.com, 1 permaculture.cf, 1 permaditya.my.id, 1 -permajack.com, 1 permajackofstlouis.com, 1 permajackstlouis.com, 1 permak.com.tr, 1 @@ -115059,7 +113644,7 @@ permasealwaterproofing.com, 1 permaset.com.au, 1 permeance108.com, 1 -permian-elec.com, 1 +permian-elec.com, 0 permis-a-points-bordeaux.com, 1 permis-a-points-montpellier.com, 1 permis-apoints.com, 1 @@ -115108,6 +113693,7 @@ persiandating.tk, 1 persiandevelopers.ir, 1 persianmassagetherapy.com, 1 +persianpool.ir, 1 persianrom.com, 1 persiart.shop, 1 persiennexperten.se, 1 @@ -115272,6 +113858,7 @@ petemerges.com, 1 petemerges.xyz, 1 peter-r.co.uk, 1 +peter-rader.pro, 1 peter-taban.de, 1 peter-zhu.ca, 1 peter.org.ua, 1 @@ -115282,7 +113869,6 @@ peterbischof.at, 1 peterborgapps.com, 1 peterboroughhydroponics.com, 1 -peterbruceharvey.com, 1 peterbulckaen.tk, 1 petercai.com, 1 petercawthron.com, 1 @@ -115317,6 +113903,7 @@ peterrentrop.com, 0 peters-halstenbek.de, 1 peters.consulting, 1 +peters.li, 1 petersburgmi.gov, 1 petersime.com, 1 petersonsbreakingnewsoftrenton.com, 1 @@ -115325,7 +113912,6 @@ petervaldesii.com, 0 petervanderwoude.nl, 1 petervantriet.nl, 1 -peteryoungfineart.com, 1 peteschmidt.com.au, 1 petevagabond.com, 1 petfa.ga, 1 @@ -115350,17 +113936,16 @@ petitbleu.fr, 1 petite-annonce.tk, 1 petite-maison.ch, 0 -petiteinparis.com, 1 petitenote.ch, 1 petitions.by, 1 petitions.pro, 1 petitmaison.net, 1 +petitnuagephotographie.be, 1 petitsfrenchies.com, 1 petitu.mx, 1 petkiss.ga, 1 petknight.ga, 1 petknob.com, 1 -petleasehub.com, 1 petless.ga, 1 petlife.od.ua, 1 petlife.vet, 1 @@ -115379,6 +113964,7 @@ petopplis.ga, 1 petops.de, 1 petos.tk, 1 +petoskeylistings.com, 1 petover.ga, 1 petpipe.ga, 1 petpower.eu, 1 @@ -115390,7 +113976,6 @@ petrachuk.com, 1 petrachuk.ru, 1 petrally.ga, 1 -petrapsy.nl, 1 petrarca.tk, 1 petras-pfotenuni.de, 1 petrates.ga, 1 @@ -115435,7 +114020,6 @@ petsnvets.org, 1 petspark.tk, 1 petsplash.ga, 1 -petsru.net, 1 petstick.ga, 1 petstok.com.br, 1 petstreaming.ga, 1 @@ -115454,7 +114038,6 @@ petutility.tk, 1 petvisual.ga, 1 petwall.info, 1 -petwebshop.com, 1 petwood.co.uk, 1 peuf.shop, 1 peukert.cc, 1 @@ -115496,6 +114079,7 @@ pfd-nz.com, 1 pfe.rs, 1 pfeconsulting.pro, 1 +pfeffenhausener-bachspatzen.de, 1 pfeffenhausener-nardinis.de, 1 pfefferkuchenprinzessin-dresden.de, 0 pfefferle.online, 1 @@ -115573,7 +114157,6 @@ pgtca.ca, 1 pgwellnesscoach.it, 1 ph-brand.jp, 1 -ph-consult.sk, 1 ph-ooe.at, 1 ph.search.yahoo.com, 0 ph3r3tz.net, 1 @@ -115581,6 +114164,7 @@ ph89.de, 1 pha.pub, 1 phagyo.com, 1 +phaidonbrand.com, 1 phalcon.com, 1 phannuoc.net, 1 phantasia.tk, 1 @@ -115604,6 +114188,7 @@ pharmaceuticalcannabis.org, 1 pharmacie-dufayel.fr, 1 pharmacie-matignon.com, 1 +pharmaciedegarde.be, 1 pharmacologydiscoveryservices.com, 1 pharmacy-evalar.ru, 1 pharmacy-schools.com, 1 @@ -115778,12 +114363,11 @@ phive.social, 1 phlaunt.com, 1 phobos.tk, 1 -phocamly.com, 1 phoe.exposed, 1 phoebestrong.org, 1 phoenix-correspondence-commission.gov, 1 phoenix-zug.ch, 1 -phoenix.dj, 1 +phoenix.dj, 0 phoenixadvisers.com, 1 phoenixboard.tk, 1 phoenixcourt.gov, 1 @@ -115799,13 +114383,11 @@ phoenixsalon.eu, 1 phoenixurbanspaces.com, 0 phoenixville.online, 1 -phoenixwebsitedesign.com, 1 phol.io, 1 pholder.com, 1 pholio.com, 1 phone-service-center.de, 1 phone-spy.ml, 1 -phone42.com, 1 phonedoc.it, 1 phonefilter.co.uk, 1 phonefleet.fr, 1 @@ -115886,12 +114468,10 @@ photoglobe.gr, 1 photogptai.com, 1 photograf.io, 1 -photograni.ru, 1 photographeremploymenters.ga, 1 photographeremploymentest.ga, 1 photographerforwedding.tk, 1 photographersdaydream.com, 1 -photography-insider.com, 1 photography-workshops.net, 1 photographyandvideo.tk, 1 photographybyctware.com, 1 @@ -115938,13 +114518,11 @@ photovoltaik-reinigung.biz, 1 photowall.com, 1 photowall.tk, 1 -photowire.uk, 1 photoworks.tv, 1 photune.net, 1 phoxden.net, 1 php.watch, 1 phpadmin666.com, 1 -phparcade.com, 1 phparena.net, 1 phpartners.org, 1 phpbb-tutorials.cf, 1 @@ -115982,6 +114560,7 @@ phrenology.com, 1 phrive.space, 1 phrlegal.com, 1 +phronesis.net, 1 phruse.com, 1 phryanjr.com, 0 phryneas.de, 1 @@ -116037,6 +114616,7 @@ physik.lol, 1 physio-koenigsee.de, 1 physio-nrj.ch, 1 +physioanna.at, 1 physiobalance.nl, 1 physiobrite.tk, 1 physiomeproject.org, 1 @@ -116084,7 +114664,6 @@ pianoschmitz.de, 1 pianotaku.com, 1 pianotuning.cn, 0 -pianyigou.com, 1 piaohong.tk, 1 piapia.com, 1 piasativa.com, 1 @@ -116130,14 +114709,15 @@ picked.cf, 1 pickemsheet.com, 1 pickenscountysc.gov, 1 +pickerellakelistings.com, 1 picketfence.tk, 1 pickhdtvers.ga, 1 pickhdtvest.ga, 1 pickle-publishing.com, 1 pickleland.com, 1 picklinik.id, 0 +pickmoney.es, 1 pickmysoap.gr, 1 -picknclickonline.com, 1 picknetworkiscoming.sg, 1 picknrg.com, 1 picksin.club, 1 @@ -116182,7 +114762,6 @@ picturegenetics.com, 1 picturepower.nl, 1 picturesalon.com, 1 -picturesat11.com, 1 picturesitaly.com, 1 picturesque-games.tk, 1 picturevictoria.vic.gov.au, 1 @@ -116191,6 +114770,7 @@ pidelo-peru.com, 1 pidgi.net, 1 pidjipi.com, 1 +pidocchi.it, 1 pidu.jp, 1 pie-express.xxx, 1 piebridge.me, 1 @@ -116217,6 +114797,7 @@ piening.ddns.net, 1 piensa-escribe.tk, 1 piepermail.nl, 1 +piepet.net, 1 pieq.eu, 1 pieq.eu.org, 1 pier1url.com, 1 @@ -116233,7 +114814,6 @@ pierpaoloamarante.it, 0 pierre-denoblens.net, 1 pierre-schmitz.com, 1 -pierrearnaud.com, 1 pierreborgmann.de, 1 pierrejeansuau.fr, 1 pierreloizeau.com, 1 @@ -116299,6 +114879,7 @@ pikepa.gov, 1 piketonohio.gov, 1 pikimusic.moe, 1 +pikjay.com, 1 pikker.ee, 1 pikkuegypti.tk, 1 pikminwiki.com, 1 @@ -116330,6 +114911,7 @@ pillser.com, 1 pilot-colleges.com, 1 pilot-gps.africa, 1 +pilot-pen.com.tw, 1 pilot.co, 1 pilot.com, 1 pilotbook.org, 1 @@ -116398,7 +114980,6 @@ pinedadegiguela.tk, 1 pinedahair.com, 1 pinefinancialgroup.com, 1 -pinegraph.com, 1 pinegrovetownshipmi.gov, 1 pineislandmn.gov, 1 pinellassheriff.gov, 1 @@ -116412,7 +114993,6 @@ pinfong.com, 1 ping-books.cf, 1 pingbandiannao.com, 0 -pingce.com, 1 pingminer.com, 1 pingnp.me, 0 pingodoce.pt, 1 @@ -116425,7 +115005,6 @@ pingvin.pro, 1 pingvinofnet.ml, 1 pinhadigital.com, 1 -pinheirobittencourt.com.br, 1 pinigseu.xyz, 1 pinimg.com, 1 pink-check.school, 1 @@ -116465,7 +115044,6 @@ pinleather.rs, 0 pinmeto.com, 1 pinnacle-tex.com, 1 -pinnaclecare.com, 1 pinnaclecommunityservices.com.au, 1 pinnaclefoundationrepair.com, 1 pinnacleholdings.com, 1 @@ -116544,6 +115122,7 @@ pionierboat.tk, 1 pionieren.tk, 1 pionplex.de, 1 +piotrandpawel.pl, 1 piovan.com, 1 pip-maker.com, 1 piparitaikina.fi, 1 @@ -116601,6 +115180,7 @@ pisatoday.it, 1 piscapisca.pt, 1 piscestrade.com, 1 +piscinasguadiana.com, 1 piscine.roma.it, 1 piscines-unibeo.com, 1 pisearch.cc, 1 @@ -116810,7 +115390,6 @@ pjsk.cc, 1 pjsk.eu.org, 1 pjv.co.id, 1 -pjweb.co.uk, 1 pk-master.tk, 1 pk-soft.tk, 1 pk.search.yahoo.com, 0 @@ -116866,6 +115445,7 @@ plagu.ee, 1 plagued.tk, 1 plaid.com, 1 +plainfeeder.com, 1 plainfieldil.gov, 1 plainfieldpolicenj.gov, 1 plainfieldvt.gov, 1 @@ -116900,7 +115480,7 @@ planbase.com, 1 planchasvertical.es, 1 plancke.io, 1 -plandecorones.net, 1 +plandecorones.net, 0 plandegralba.net, 1 plandomemanorny.gov, 1 plandy.me, 1 @@ -116917,7 +115497,6 @@ planetadjs.com, 1 planetalife.com, 1 planetamarrom.tk, 1 -planetamend.com, 1 planetamestizo.tk, 1 planetamotoshonda.com.br, 1 planetamusik.tk, 1 @@ -116933,7 +115512,6 @@ planetbreath.ch, 0 planetchiropracticga.com, 1 planetconnected.com, 1 -planetcopy.gr, 1 planete-lira.fr, 1 planete-secu.com, 1 planeteclipse.net, 1 @@ -117019,7 +115597,6 @@ plantidentification.co, 0 plantinum-cbd.com, 1 plantpro.gr, 1 -plantroon.com, 1 plantrustler.com, 1 plantsupplement.co.uk, 1 plantuml.online, 1 @@ -117051,7 +115628,6 @@ plasticdoctor.co.uk, 1 plasticdonut.tk, 1 plasticeyesurgery.com, 1 -plasticflash.com, 1 plasticisers.org, 1 plasticobiodegradable.com, 1 plasticosbiobasados.com, 1 @@ -117093,7 +115669,6 @@ platinumdjs.au, 1 platinumgatesecurity.co.uk, 1 platinumhomebuildersllc.com, 1 -platinumislandfunding.com, 1 platinumjubilee.gov.au, 1 platinumkids.com.br, 1 platinumpavingnj.com, 1 @@ -117102,7 +115677,6 @@ platinumsystems.biz, 1 platinumtalkers.ga, 1 platinumtalkest.ga, 1 -platitudemusic.com, 1 platodecomida.com, 1 platord.com, 1 platpoint.com, 1 @@ -117290,6 +115864,7 @@ plnog.pl, 1 plob.org, 1 plodwithme.com, 1 +ploi.cloud, 1 ploi.io, 1 plokko.com, 1 plomberie-rivesud.ca, 1 @@ -117306,7 +115881,6 @@ plothost.com, 1 plotly.com, 0 plotscout.ae, 0 -plougastel.com, 1 ploulech.fr, 1 plov.loan, 1 plowerolin.tk, 1 @@ -117372,7 +115946,6 @@ plusgrandevilledefrance.com, 1 plushev.tk, 1 pluslink.co.jp, 1 -plusnet.de, 0 pluspass.com, 1 plusport-api.com, 1 plusport.com, 1 @@ -117423,7 +115996,6 @@ pmcancerclasses.ca, 1 pmcancerrehab.ca, 1 pmcaregiver.ca, 1 -pmconsulting.es, 1 pmctcg.com, 1 pmctire.com, 0 pmdealerest.ga, 1 @@ -117435,7 +116007,6 @@ pmg.ua, 1 pmgroup-global.com, 0 pmh.codes, 1 -pmhobby.com.mt, 0 pmi-install.com, 1 pmi.edu, 1 pmi.gov, 1 @@ -117463,7 +116034,6 @@ pn.id.lv, 1 pnakosoft.com.au, 1 pnbholdings.com, 1 -pnbnet.net.in, 1 pnch.fi, 1 pneu01.fr, 1 pneu74.fr, 1 @@ -117471,7 +116041,6 @@ pneumania.fr, 1 pneumatici.roma.it, 1 pneumogen.net, 1 -pneupro.ma, 1 pnevmo-trade.ru, 1 pnfiles.tk, 1 png.ai, 1 @@ -117694,6 +116263,7 @@ poeditor.com, 1 poehlerflorian.de, 1 poeleapellets.org, 1 +poelediscount.com, 1 poemasonline.tk, 1 poemerx.com, 1 poemerx.net, 1 @@ -117705,7 +116275,6 @@ poemwallers.ga, 1 poemwallest.ga, 1 poenhub.xyz, 1 -poesis.io, 1 poetasmenores.tk, 1 poetbuyback.com, 1 poetenblog.tk, 1 @@ -117779,7 +116348,6 @@ pokafe.com, 1 pokagontownshipmi.gov, 1 pokalsocial.de, 1 -pokechewe.com, 1 pokedex.mobi, 1 pokeelektronik.com, 1 pokeelektronik.com.tr, 1 @@ -117877,9 +116445,6 @@ polatas.com.tr, 1 polatsemih.com, 1 polbox.fr, 1 -polcyb.com, 1 -polcyb.net, 1 -polcyb.org, 1 poldrack.me, 1 pole-mecanique.fr, 1 pole.net.nz, 1 @@ -117901,9 +116466,6 @@ policereferencecheck.com, 1 policesromandesrecrutement.ch, 1 policia.gob.ec, 1 -policingcyberspace.com, 1 -policingcyberspace.net, 1 -policingcyberspace.org, 1 policlinicasantoantonio.com, 1 policyhub.gov.au, 1 policymakr.com, 1 @@ -117915,13 +116477,14 @@ polifisio.com.br, 1 poliground.com, 1 poliigon.com, 1 +polijohn.com.br, 1 polimat.org, 0 polimats.com, 1 -polimednutraceuticos.com.mx, 1 polimer39.ml, 1 polina-gagarina.gq, 1 polioptics.com, 1 polis.or.at, 1 +polis812.ru, 1 polisanaraka.pl, 1 polisanarciarska.pl, 1 polisave.co.il, 1 @@ -117937,6 +116500,7 @@ polishforums.com, 1 polishhockey.tk, 1 polishmarriage.org, 1 +polishprofessionalsinboston.org, 1 polishtranslation.com, 1 polisi.go.tz, 1 polisipati.tk, 1 @@ -117988,7 +116552,6 @@ pollet-ghys.be, 1 pollet.tech, 1 pollev-embeds.com, 1 -pollev.com, 1 polleverywhere.com, 1 polliga.tk, 1 pollinators.ie, 1 @@ -118036,11 +116599,10 @@ polymathian.com, 1 polymerexpert.biz, 1 polymesh.network, 1 -polymics.com, 1 +polymics.com, 0 polyna.eu, 1 polynesia.tech, 1 polynomapp.com, 1 -polynoob.com, 1 polypane.rocks, 1 polyr.xyz, 1 polyring.ch, 1 @@ -118093,6 +116655,7 @@ ponio.xyz, 1 ponpokorin.tk, 1 ponpon.tk, 1 +ponsanliving.com, 1 ponte-camp.de, 1 ponteggi.it, 1 ponteggi.roma.it, 1 @@ -118124,7 +116687,6 @@ pookl.com, 1 pool-selber-bauen.de, 1 poolbarn.com.au, 1 -poolcalculator.net, 1 pooletranslation.com.au, 1 pools.shop, 1 poolsafely.gov, 1 @@ -118132,7 +116694,6 @@ poolsonline.tk, 1 poolspa.es, 1 pooltools.net, 1 -poolvilla-margarita.net, 1 poon.io, 1 poonawallafincorp.com, 1 poopa.loan, 1 @@ -118188,6 +116749,7 @@ popolini.com, 1 popova.tk, 1 popovdent.com, 1 +popovicsnoemi.hu, 1 popoway.cloud, 1 popoway.me, 1 popoway9.ml, 1 @@ -118269,7 +116831,6 @@ porncomichub.com, 1 porncomicshub.com, 1 porncomix69.com, 1 -porncomp.com, 1 porncompanions.com, 1 porndoe.com, 1 porndoepedia.com, 1 @@ -118287,11 +116848,8 @@ pornhun.xyz, 1 pornimg.net, 1 porniwi.com, 1 -pornless.biz, 1 -pornline.porn, 1 pornline.sex, 1 pornloupe.com, 1 -pornmax.net, 1 pornmega.net, 1 pornmei.com, 1 porno-geschichten.com, 1 @@ -118319,7 +116877,6 @@ porntop100.com, 1 porntube-vidios.ml, 1 porntvclip.com, 1 -pornultra.net, 1 pornvideos-tour.com, 1 pornvideos-tube.com, 1 pornvideos.tv, 1 @@ -118350,11 +116907,11 @@ portail-partenariats.fr, 1 portail-rh.fr, 1 portail.does-it.net, 1 +portaildm.fr, 1 portailsante.ca, 1 portal-books.ga, 1 portal-news.tk, 1 portal-ru.tk, 1 -portal-uang.com, 1 portal-vlastnikov.sk, 1 portal.fo, 1 portal.tirol.gv.at, 0 @@ -118417,6 +116974,7 @@ portingkit.com, 1 portis.io, 1 portiva.com, 1 +portlandcompostclaims.com, 1 portlandcrystalcompany.com, 1 portlandparamount.com, 1 portmeirion.co.uk, 0 @@ -118491,7 +117049,6 @@ positivepsychology.com, 1 positiverbeitrag.net, 1 positiverbeitrag.org, 1 -positivetherapy.in, 1 positivethinkingmind.com, 1 positivos.tk, 1 positronicmoron.tk, 1 @@ -118507,7 +117064,6 @@ post-anon.tk, 1 post-darwinian.com, 1 post-darwinism.com, 1 -post-health.net, 1 post-office.tk, 1 post-victoria.com, 1 post-x.org, 1 @@ -118520,6 +117076,7 @@ post.tf, 1 post4me.at, 1 postalco.de, 1 +postaltreasures.com, 1 postandfly.com, 1 postback.io, 0 postbanken.no, 1 @@ -118536,6 +117093,7 @@ postdarwinism.com, 1 postdeck.de, 1 postechbamboo.tk, 1 +postel.go.id, 1 posteo.com, 1 posteo.de, 1 posteo.net, 1 @@ -118604,12 +117162,12 @@ potato.im, 1 potatochip.tk, 1 potatodiet.ca, 1 -potatolighting.com, 1 potatopro.com, 1 potatosoft.kr, 1 potatosouprecipe.ml, 1 potatotee.com, 1 potatron.tech, 1 +potature.it, 1 potature.rimini.it, 1 potature.roma.it, 1 potbelly.com, 1 @@ -118626,7 +117184,6 @@ potolok-brest.tk, 1 potolok.am, 1 potomac.cf, 1 -potomacanalysis.com, 1 potomania.cz, 1 potosi-bolivia.tk, 1 potosivlgwi.gov, 1 @@ -118724,6 +117281,7 @@ powerfifty.com, 1 powerforpeople.tk, 1 powerfortunes.com, 1 +powerful-brand.com, 1 powerfulcom.net, 1 powergridess.com, 0 powergroup.tk, 1 @@ -118737,7 +117295,6 @@ powerlp.com, 1 powerman.name, 1 powerman.top, 1 -powermeter.at, 1 powerpc.pt, 1 powerpilot.co.za, 1 powerplan.com, 1 @@ -118774,6 +117331,7 @@ powersergwiringconsultants.com, 1 powershaper.io, 1 powershellmagic.com, 1 +powersmithsolar.com, 1 powersolusa.com, 1 powersport.lt, 1 powersrealtygrp.com, 1 @@ -118818,6 +117376,7 @@ pp6957.co, 1 pp9297.co, 1 pp9728.co, 1 +ppak.cz, 1 ppam.de, 0 ppapogey.com, 1 ppapogey.ru, 1 @@ -118833,6 +117392,7 @@ ppgod.us, 1 ppipe.net, 1 ppirs.gov, 1 +ppisettlementprogram.com, 1 ppissis.com.cy, 1 ppktgti.top, 1 ppld.org, 1 @@ -118850,6 +117410,9 @@ pppo.gov, 1 ppppp.click, 1 ppsclt.com, 1 +ppsl.nz, 1 +ppsoft.es, 1 +ppsoft.org, 1 ppssh.org, 1 ppt.org, 1 ppuglobe.com, 1 @@ -118870,7 +117433,6 @@ pr92.tk, 1 pra.rip, 1 praatmetdedokter.nl, 1 -prabharealty.in, 1 prabhasakshi.com, 1 prabirghosh.tk, 1 prac.to, 1 @@ -118884,7 +117446,6 @@ practicalcontracting.ca, 1 practicalgrowth.life, 1 practicalhomes.com.au, 1 -practicallabs.com, 1 practicallyedible.com, 1 practicalmamawellness.com, 1 practicalneurology.com, 0 @@ -118892,7 +117453,6 @@ practicepanther.com, 1 practicepath.com, 1 practiceplus.in, 1 -practisforms.com, 1 practixdevelopment.com, 1 practo.com, 1 practodev.com, 1 @@ -118910,7 +117470,6 @@ praemoveo.net, 1 praeparation-keppner.de, 1 praerien-racing.com, 1 -praescientanalytics.com, 1 praetzlich-hamburg.de, 1 praew.com, 1 pragatiparasguesthouse.co.in, 1 @@ -118939,6 +117498,7 @@ prairietechsolutions.com, 1 prairievilletwp-mi.gov, 1 praiss.net, 1 +prajituricisialtele.ro, 1 prajwal-koirala.com, 1 prakhar.uk, 1 prakharprasad.com, 1 @@ -118963,7 +117523,6 @@ prana-me.com, 1 pranabesh.com, 1 pranafilms.tk, 1 -pranavida.cl, 0 prancor.ru, 1 pranita-schals.de, 0 pranita.cz, 0 @@ -119028,7 +117587,6 @@ prazdnik-volgodonsk.tk, 1 prazdniki-sait.tk, 1 prazdniktost.tk, 1 -prazer24.com, 1 prazeremamamentar.com.br, 1 prc.gov, 1 prcarrier.tk, 1 @@ -119048,6 +117606,7 @@ precept.uk.com, 1 preci0.com, 1 preciadictos.tk, 1 +precio-facil.com, 1 preciofishbone.de, 1 preciosmejores.com, 1 preciousdad.com, 1 @@ -119081,7 +117640,6 @@ predication.ch, 1 predictz.com, 1 predilife.com, 1 -predkosci.pl, 1 predmetnyj-fotograf.by, 1 prednisolone1.gq, 1 predoiu.ro, 1 @@ -119145,7 +117703,6 @@ premierbouncycastles.co.uk, 1 premierconveyors.com, 1 premiercountertops.com, 1 -premierdesigns.org, 1 premierdisco.co.uk, 1 premieresloges.ca, 1 premierevents.ie, 1 @@ -119168,6 +117725,7 @@ premised.land, 1 premium-leech.com, 1 premium-rum.de, 1 +premium-security.com, 1 premium-vagyonkezeles.hu, 1 premium.web.id, 1 premiumcredit.am, 1 @@ -119176,9 +117734,9 @@ premiumlegalsupport.ga, 1 premiumlinks.net, 1 premiumpeaches.com, 1 +premiumpension.com, 1 premiumpictureframing.com, 1 premiumplus.io, 1 -premiumresidency.in, 1 premiumshop24.de, 1 premiumsleepingbags.com, 1 premiumsmile.ru, 1 @@ -119234,6 +117792,7 @@ presentationmedia.com, 0 presentationsteknik.org, 1 presentsofmind.com.au, 1 +preservationdatabase.org, 1 preserve-project.eu, 1 preserveart.org, 1 preservecrownhill.cf, 1 @@ -119335,6 +117894,7 @@ pretty-smile.com.tw, 1 prettycities.ga, 1 prettycloud.net, 1 +prettydecor.store, 1 prettydirtyteens.com, 1 prettygirlcheats.com, 1 prettykeira.tk, 1 @@ -119392,8 +117952,8 @@ pricelesspics.tk, 1 pricelistforbxmodules.ga, 1 pricelooper.com, 0 -priceofbusiness.com, 1 pricepropharmacy.com, 1 +priceri.com, 1 priceshop.com, 1 pricesmax.com.mx, 0 pricesniffer.co, 1 @@ -119422,6 +117982,7 @@ prikeshsavla.com, 1 prikolkz.tk, 1 prikpot.com, 1 +prim-wash.de, 1 prima-backoefen.de, 1 prima-badezimmermoebel.de, 1 prima-bohrmaschinen.de, 1 @@ -119472,7 +118033,6 @@ primatejs.com, 1 primates.com, 1 primaudialrecords.com, 1 -primavera-capital.com, 1 primbit.ru, 1 prime, 1 prime-host.ml, 1 @@ -119481,6 +118041,7 @@ prime4ktv.com, 1 primeauconsultinggroup.com, 1 primecapsslim.com.br, 1 +primechasedata.com, 1 primechef.com.mx, 1 primecore.com.au, 1 primecredit.com, 1 @@ -119518,7 +118079,6 @@ primorsk.com, 1 primorus.lt, 1 primos-tech.com, 1 -primrose-2.com, 1 primrosehillvets.ie, 1 primrosenyagwaya.online, 1 princebazawule.com, 1 @@ -119571,11 +118131,11 @@ printerdrivers.com, 1 printerinks.com, 1 printerinktoutlet.nl, 1 -printersdrivers.net, 1 printertonerkopen.nl, 1 printexpress.cloud, 1 printfn.com, 1 printful.com, 1 +printinggreen.com, 1 printkalender.nl, 1 printkinng.com.tw, 1 printme.com, 1 @@ -119656,11 +118216,11 @@ privacyget.tk, 1 privacyguidance.com, 1 privacyguides.net, 1 +privacyguides.org, 1 privacyinternational.org, 1 privacymanatee.com, 1 privacynator.eu, 1 privacynow.eu, 1 -privacypro.io, 1 privacypros.io, 1 privacyredirect.com, 1 privacysavvy.com, 1 @@ -119695,7 +118255,6 @@ privatecapsecurity.org, 1 privatedata.tk, 1 privatedns.uk, 1 -privatedomaincontrol.com, 1 privateger.me, 1 privategiant.com, 1 privatehd.to, 1 @@ -119746,6 +118305,9 @@ priyansh.net, 1 priz-kod.ru, 1 prizcode.ru, 1 +prize-check.ru, 1 +prize-code.ru, 1 +prizecheck.ru, 1 prizecode.ru, 1 prizehometickets.com.au, 1 prizelink.com.au, 1 @@ -119861,7 +118423,6 @@ proconnectnetwork.com, 1 procontrolservices.com, 1 procore.com, 0 -procorefoundations.com, 1 procostamar.com, 1 procountor.fi, 1 procountor.se, 1 @@ -119949,6 +118510,7 @@ profbioresearch.ga, 1 profboecker.eu, 0 profchristophergoh.com.sg, 1 +profdst.ru, 1 profection.biz, 1 profencing.com.au, 1 profesijupasaule.lv, 1 @@ -120058,6 +118620,7 @@ programador-web-freelance.es, 1 programagetit.com.br, 1 programagrowup.com.br, 1 +programalidera.com.br, 1 programando.tk, 1 programar.pt, 1 programarya.com, 1 @@ -120086,13 +118649,10 @@ progressivecfo.co.nz, 1 progressivedie.net, 1 progressivestreetdance.tk, 1 -progressivetree.com, 1 progressivett.com, 1 progressm.tk, 1 progressnet.nl, 1 -progressonderwijs.nl, 1 progressportaal.nl, 1 -progressverkiezingen.nl, 1 progresswww.nl, 1 progroep.nl, 1 progtime.net, 1 @@ -120112,7 +118672,6 @@ project-alice.io, 1 project-forum.tk, 1 project-haystack.org, 1 -project-icarus.nl, 1 project-ice.org, 1 project-merlin.co.uk, 1 project-novis.org, 1 @@ -120125,9 +118684,7 @@ project25.org, 1 project86fashion.com, 1 projectalias.com, 1 -projectarmy.net, 0 projectborealisgitlab.site, 1 -projectbotticelli.com, 1 projectbuild.tk, 1 projectbusiness.co, 1 projectcares.tk, 1 @@ -120182,7 +118739,6 @@ projekt-wild.tk, 1 projektarbeit-projektplanung.de, 1 projektentwicklung-westfalen.de, 1 -projektowanie-wnetrz.info, 1 projektzentrisch.de, 1 projest.ch, 0 projet-fly.ch, 1 @@ -120241,6 +118797,7 @@ promocion2007.tk, 1 promocionesperrigo.com, 1 promocjedladzieci.pl, 1 +promocode.co.il, 1 promocodes777.com, 1 promocodius.com, 1 promocoesbrastemp.com.br, 1 @@ -120250,7 +118807,7 @@ promods.net, 1 promods.store, 1 promofirstmedia.co.id, 1 -promohulp.nl, 1 +promohulp.nl, 0 promohunt.ru, 0 promokodi.tk, 1 promolife.be, 1 @@ -120399,7 +118956,6 @@ prospo.co, 1 prosportovani.cz, 1 prostaffplumbing.com, 1 -prostaglandina.com, 1 prostatecellatlas.org, 1 prostavropol.cf, 1 prostecheat.xyz, 1 @@ -120422,10 +118978,10 @@ prostoskidki.ml, 1 prostozaim.ml, 1 prostye-recepty.com, 1 -prosurf.com.hr, 1 prosurveillancegear.com, 1 prosvet.tk, 1 prosveta1901.tk, 1 +prosysinfotech.com, 1 protanki.ml, 1 protanki.tk, 1 protapnews.tk, 1 @@ -120443,7 +118999,6 @@ protectasecurity.pe, 1 protected-forms.com, 1 protectem.de, 1 -protecti.com, 1 protection-plexi.com, 1 protection-plexi.fr, 1 protection.ga, 1 @@ -120452,7 +119007,6 @@ protectoraircare.com.au, 1 protectwrap.ml, 1 protege.moi, 1 -proteinfit.com.tr, 1 proteinreport.org, 1 protek.si, 1 protek.tk, 1 @@ -120490,7 +119044,6 @@ prototype.bg, 1 prototyping-computer.ml, 1 protown.in.ua, 1 -protrainerbrasil.com.br, 1 protranslate24.ru, 1 protrolley.cf, 1 protteapapelaria.com.br, 1 @@ -120551,8 +119104,6 @@ prowpcare.com, 1 prowrestlingevents.tk, 1 prowrestlingsheet.com, 1 -prox.ru, 1 -proxaccess.com, 1 proxar.co.uk, 1 proxidize.com, 1 proxiel.com, 1 @@ -120574,7 +119125,6 @@ proxytool.cf, 1 proyectodia.com.mx, 1 proyectomca.es, 1 -proyectorium.com, 1 proyectosaludecuador.org, 1 proyectosinelec.com, 1 proyectostep.tk, 1 @@ -120616,7 +119166,6 @@ prushka.ml, 1 prushka.tk, 1 pruve.it, 1 -pruvitnow.com, 1 pruvo.net, 1 prvaboja.co.rs, 1 prvnirodinna.cz, 1 @@ -120685,7 +119234,6 @@ psg-calw.de, 1 psge.ps, 1 pshar.ma, 1 -pshostpk.com, 1 pshul.com, 1 pshweb.tk, 1 psi-tv.tk, 1 @@ -120696,11 +119244,11 @@ psicoeduca.com.br, 1 psicoexpansao.com.br, 1 psicologa-chus-campo-molina.com, 0 +psicologaigualada.es, 1 psicologajanainapresotto.com.br, 1 psicologamarianaortiz.com, 1 psicologatatianabayona.com, 1 psicologia.gay, 1 -psicologiaparatodos.com.mx, 1 psicologias.rio.br, 1 psicologo-especialista-barcelona.com, 1 psicologo.vip, 1 @@ -120760,7 +119308,6 @@ psoriasischecker.com, 1 pspapershow.ga, 1 pspenvases.es, 1 -pspepper.com.br, 1 psphp.tk, 1 psplus.ml, 1 psplus.tk, 1 @@ -120820,7 +119367,7 @@ psychologue-a-paris.com, 1 psychologue-grenoble.org, 1 psychologydegreeguide.org, 1 -psychologyforasafeclimate.org, 1 +psychologyforasafeclimate.org, 0 psychologytests.tk, 1 psychometric.careers, 1 psychometrictest.ca, 1 @@ -120940,6 +119487,7 @@ ptufdc.com, 1 ptupapers.tk, 1 pturl.tk, 1 +ptuskevicius.com, 1 ptwelding.net, 1 pty.gg, 1 puac.de, 1 @@ -120962,10 +119510,7 @@ publicaronline.net, 0 publicboards.com, 1 publiccarauctionscalifornia.com, 1 -publicdatacloud.com, 1 publicdatafiles.com, 1 -publicdatalibrary.com, 1 -publicdatalibrary.net, 1 publicdatalibrary.org, 1 publicdelivery.org, 1 publicdomainartwork.com, 0 @@ -121061,6 +119606,7 @@ pulizieuffici.milano.it, 1 pulizievap.it, 1 pulkovo-cargo.ru, 1 +pull-matrix.sbs, 1 pulledporkheaven.com, 1 pulley.co.jp, 1 pullman.milano.it, 1 @@ -121074,7 +119620,6 @@ pulpproject.org, 1 pulsadanvoucher.tk, 1 pulsagolden.tk, 1 -pulsarracing.com, 1 pulsedive.com, 1 pulselessflow.com, 1 pulsenetwork.com, 1 @@ -121143,7 +119688,6 @@ pupilgauge.com, 1 pupok.cf, 1 pupok.gq, 1 -puppiza.com, 1 puppo.space, 1 puppy.actor, 1 puppyfinder.com, 1 @@ -121164,10 +119708,10 @@ pura-ponia.ga, 1 pura-ponia.gq, 1 puragreement.tk, 1 +puraicostarica.com, 1 puralifesciences.com, 1 puravayalchurch.tk, 1 puravida-estate.com, 1 -puravidaeamor.com.br, 1 purchasebestone.tk, 1 purchaserprotect.co.uk, 1 purchasescooters.ga, 1 @@ -121183,6 +119727,7 @@ pureaudioplayer.ru, 1 pureblissdental.com.au, 1 purebuttons.com, 1 +pureceli.com, 1 purecodedigital.com, 1 puredayshop.com.tw, 1 puredc.com, 1 @@ -121193,6 +119738,7 @@ purefarminggame.com, 1 purefoot.jp, 1 pureholisticwellness.com, 1 +purekrea.com, 1 pureleverage.com, 1 purelife.photography, 1 pureliferx.com, 1 @@ -121200,7 +119746,6 @@ purelymail.com, 1 purelypestcontrol.com, 1 puremosquito.com, 1 -purenhd.com, 1 purepestandlawn.com, 0 pureromance.com, 1 puresanitization.com, 1 @@ -121263,6 +119808,8 @@ pursuitsafety.org, 1 pursuitwatch.org, 1 purtahan.tk, 1 +purupuru-shibuya.school, 1 +purupuru.school, 1 purwantara.id, 1 puryearlaw.com, 1 pusan.ac.kr, 1 @@ -121270,6 +119817,7 @@ pusatkemandiriananak.com, 1 pusatlicense.com, 1 pusatlojistik.com, 1 +pusatrail.com, 1 puschkin.ga, 1 pusehusetmalvik.no, 1 pusera.com, 1 @@ -121291,6 +119839,7 @@ pussplay.com, 1 pussycat.ml, 1 pussylickingnow.com, 1 +pussypatrol.com, 1 pustak.tk, 1 pustakvishwa.tk, 1 pusztul.at, 1 @@ -121333,7 +119882,6 @@ puyblanc.info, 1 puzi.nl, 1 puzz.gg, 1 -puzzlage.com, 1 puzzle-welt.ch, 1 puzzle2048.net, 1 puzzle2048.org, 1 @@ -121371,7 +119919,6 @@ pvpzone.fr, 0 pvrtours.com, 1 pvsite.ddns.net, 1 -pvtschlag.com, 0 pvtx.gov, 1 pvv-vermietung.de, 1 pvz.tools, 1 @@ -121462,6 +120009,7 @@ pyromaniac.tk, 1 pyrotechnologie.de, 1 pyscoalkickers.org, 1 +pysgmy.xyz, 1 pyspace.org, 1 pytalovo-news.ru, 1 pythia.nz, 1 @@ -121543,7 +120091,6 @@ qalpuch.cc, 1 qanatnews.tk, 1 qani.me, 1 -qanw.com.br, 1 qao.qld.gov.au, 1 qaq.cloud, 1 qaq.icu, 1 @@ -121588,13 +120135,14 @@ qctimes.com, 1 qcuarto.com.py, 1 qdabogados.com, 1 -qdcc.cn, 0 +qdcc.cn, 1 qde.com, 1 qde.org, 1 qde.rip, 1 qdecdn.com, 1 qdep.net, 1 qdm.tw, 1 +qdmnotizie.it, 0 qdolor.com, 1 qdon.space, 1 qdqlh.cn, 1 @@ -121613,6 +120161,7 @@ qeshmminer.com, 1 qewc.com, 1 qfes.qld.gov.au, 1 +qfixinfo.com, 1 qfjvv7f.xyz, 1 qgblog.org, 0 qgiv.com, 1 @@ -121637,7 +120186,6 @@ qiannews.net, 0 qianqiao.me, 1 qiantuwenlu.com, 1 -qiaohong.org, 1 qiaowai.com, 1 qiber.org, 1 qibgroup.com.au, 1 @@ -121663,7 +120211,6 @@ qingpat.com, 0 qingpei.me, 1 qingran.net, 1 -qingsha.com, 1 qingshanasd.cn, 1 qingyule.com, 1 qinlili.bid, 1 @@ -121676,7 +120223,6 @@ qisda.com.tw, 1 qisda.com.vn, 1 qisheiosxz.com, 1 -qissajewels.com, 1 qitano.com, 1 qitarabutrans.com, 0 qiu.moe, 0 @@ -121712,7 +120258,6 @@ qmarket.tk, 1 qmdcoin.com, 1 qmee.com, 1 -qmeeting.com, 1 qmenta.com, 1 qmeriaux.fr, 1 qmp-media.nl, 0 @@ -121773,6 +120318,7 @@ qqiao.me, 1 qqq6.com, 0 qqq67.com, 1 +qqr.es, 1 qqrss.com, 1 qr.ae, 1 qr.cl, 1 @@ -121788,7 +120334,6 @@ qrcodes.tools, 1 qrcodewiz.com, 1 qrcontagion.com, 0 -qrd.by, 1 qrida.qld.gov.au, 1 qrish.live, 1 qristianuli.com, 0 @@ -121802,7 +120347,6 @@ qrma.com.au, 1 qrmagic.com, 1 qrpatrol.com, 1 -qrplanet.com, 1 qrprincipal.com, 1 qrpth.eu, 1 qrsa.com.au, 1 @@ -121834,13 +120378,12 @@ qtpower.org, 1 qtspace.cn, 1 qttransformation.com, 1 -qtv.ge, 1 qtvr.com, 1 qu1x.org, 1 quackapp.com, 1 quacksire.dev, 1 -quad9.com, 0 -quad9.net, 0 +quad9.com, 1 +quad9.net, 1 quadcityjuggalos.tk, 1 quadernoapp.com, 1 quadomania.tk, 1 @@ -121875,8 +120418,6 @@ quality-automation.de, 0 quality-homeservice.com, 1 quality-life.gr, 1 -qualityairofhouston.com, 1 -qualityairoftexas.com, 1 qualitycarbonfiber.com, 1 qualitycesspool.com, 1 qualitychoiceplan.com, 1 @@ -121887,7 +120428,6 @@ qualityfactory.com, 1 qualityfireproofing.com, 1 qualitygame.tk, 1 -qualitykiosk.com, 1 qualitymark.com.br, 1 qualitymudjacking.com, 1 qualityofcourse.com, 0 @@ -121957,6 +120497,7 @@ quantumrehab.com, 1 quantumshade.ca, 1 quantumsportscenter.com, 1 +quantumthoughtworks.com, 1 quantumweb.ml, 1 quantuscreative.com, 0 quantweb.tk, 1 @@ -122000,6 +120541,7 @@ quay.net, 1 quayconsultingllc.com, 1 quaydental.ie, 0 +qubed.agency, 1 qubeit.co, 1 qubes-os.org, 1 qubhockey.tk, 1 @@ -122088,7 +120630,6 @@ query-massage.com, 0 query.gov.ps, 1 queryguard.net, 1 -quesartencomprar.com, 1 quesecelebra.info, 1 quessinternational.com, 1 quest-on-demand.com, 1 @@ -122210,7 +120751,6 @@ quinnstech.ga, 1 quinpro.nl, 1 quinta.news, 1 -quintacbls.cl, 1 quintadasmoitas.com, 1 quintadesanamaro.com, 1 quintanadelmonte.tk, 1 @@ -122277,6 +120817,7 @@ quorcis.fr, 1 quorrax.com, 1 quotable.ga, 1 +quotaly.com, 1 quoteidiot.com, 1 quoteinfo.net, 1 quotemegoods.com, 1 @@ -122291,7 +120832,6 @@ quoviz.com, 1 qupom.com.br, 1 quppa.net, 1 -quprop.com, 1 quran-archive.org, 1 qurani.tk, 1 quraninuskhe.com, 1 @@ -122303,6 +120843,7 @@ qusi.ml, 1 qussaikhuli.tk, 1 quto.ru, 1 +qutrade.io, 1 quuck.eu, 1 quuck.nl, 1 quuz.org, 1 @@ -122340,11 +120881,10 @@ qwus.tk, 1 qx.fi, 1 qx.se, 1 -qxbbt.com, 1 qxin.info, 1 qxpress.com.py, 1 qxq.moe, 1 -qxys.top, 1 +qxys.top, 0 qxzg.org, 1 qxzg.xyz, 1 qxzgssr.xyz, 1 @@ -122507,7 +121047,6 @@ rackoon.de, 1 raclet.co.uk, 1 raconconsulting.co.uk, 1 -racontemonhistoire.fr, 1 racquetdepot.co.uk, 1 racsoft.cl, 1 ract.au, 1 @@ -122654,6 +121193,7 @@ radiodiagonal.tk, 1 radiodoblen.tk, 1 radiodxguatemala.tk, 1 +radioeldoradofm.com.br, 1 radioelectrodance.fr, 1 radioelectronic.tk, 1 radioenam.tk, 1 @@ -122724,7 +121264,6 @@ radioperfect.tk, 1 radiopharereims.tk, 1 radiopicaflor.tk, 1 -radioplanetario.com, 1 radioplayer.ie, 1 radiopolarniki.spb.ru, 1 radiopranfm.cf, 1 @@ -122827,7 +121366,6 @@ rafclan.tk, 1 rafd.me, 1 rafes.co.id, 1 -raffleshealthinsurance.com, 1 rafinad.io, 1 rafo.tech, 1 rafo.tk, 1 @@ -122855,7 +121393,6 @@ ragnaroktop.com.br, 1 ragnarredbeard.com, 1 ragsnprints.com, 1 -ragstores.com, 1 ragt.ag, 1 ragunda.se, 1 ragundadalen.se, 1 @@ -122929,6 +121466,7 @@ railto.com.se, 1 railto.llc, 1 railtollc.com, 1 +railventory.com, 1 railvideo.co.uk, 1 railvideo.net, 1 railvideo.nl, 1 @@ -122999,7 +121537,6 @@ raistrick.art, 1 raistrick.it, 1 raitza.de, 1 -raj-bhat.com, 1 raj.nic.in, 1 rajabherfehdoost.com, 1 rajabpour.com, 1 @@ -123081,6 +121618,7 @@ ram-tenancy.ml, 1 ram.nl, 1 rama.ovh, 1 +ramanujantest.in, 1 ramapada.com, 1 ramatola.uk, 0 ramblingrf.tech, 1 @@ -123105,7 +121643,6 @@ rammsteinzone.tk, 1 ramonahillsideplayers.org, 1 ramonguilherme.com.br, 1 -ramos.tur.br, 1 ramowitha.com, 1 ramp.com, 1 rampal.eu, 1 @@ -123118,14 +121655,14 @@ ramsay.xyz, 1 ramsayshorsetransport.com, 1 ramsayshorsetransport.com.au, 1 -ramsdensforcash.co.uk, 1 +ramsdensforcash.co.uk, 0 ramsdensplc.com, 1 ramseycountymn.gov, 1 ramseycs.net, 1 ramsgatenoiseinstitute.org, 1 ramsor-gaming.de, 1 ramt.tk, 1 -ramtechmodular.com, 1 +ramtechmodular.com, 0 ramusa.org, 1 ramyamk.com, 1 ramydent.no, 1 @@ -123134,7 +121671,6 @@ ran-drunken.tk, 1 ran-ran.top, 1 ran-sama.ddns.net, 1 -rana.realestate, 1 ranasinha.com, 1 rancheriastereo.tk, 1 ranchesterwy.gov, 1 @@ -123175,7 +121711,6 @@ randombyte.com, 1 randomcouples.com, 1 randomdomain.io, 1 -randomforestweb.com, 1 randomforum.tk, 1 randomgays.com, 1 randomgirlsoncam.com, 1 @@ -123196,7 +121731,6 @@ randomuuid.org, 1 randomweb.tk, 1 randorn.com, 1 -randoxhealth.com, 1 randy.su, 1 randyandpixel.com, 1 randymajors.org, 1 @@ -123205,7 +121739,6 @@ ranfurlychambers.co.nz, 1 rangacat.com, 1 rangde.org, 1 -range-finder.com, 1 range-mate.co.uk, 1 range.co, 1 rangeforce.com, 1 @@ -123240,7 +121773,6 @@ ranktis.com, 1 rankya.com, 1 rannamoisaaiasalong.ee, 1 -rannseier.org, 1 ransomspares.co.uk, 1 ranson.com.au, 1 ransonwv.gov, 1 @@ -123270,7 +121802,6 @@ raphaelmoura.ddns.net, 1 raphaelschneider.de, 1 raphrfg.com, 1 -rapid-care.com, 1 rapidapp.io, 1 rapidcenter.tk, 1 rapidcityjournal.com, 1 @@ -123301,7 +121832,6 @@ raptorsupplies.co.uk, 1 raptorsupplies.com, 1 rapwoyska.tk, 1 -raqebpress.com, 1 raqoo.jp, 1 raquelmolinacases.tk, 1 raquest.com, 1 @@ -123348,6 +121878,7 @@ rasmera.ddns.net, 1 rasmushaslund.com, 1 rasnyder.com, 1 +rasolutions.it.com, 1 raspclock.com, 1 raspinaparvaz.com, 1 raspinerd.de, 1 @@ -123365,7 +121896,7 @@ ratajczak.one, 1 ratasdesign.com, 0 ratatosk.net, 1 -ratbarricade.com, 1 +ratbarricade.com, 0 ratd.net, 1 rate.is, 1 ratebridge.com, 1 @@ -123472,13 +122003,11 @@ rawdutch.nl, 1 rawfitco.com.au, 1 rawforce.tk, 1 -rawinfosec.com, 1 -rawley.co.uk, 1 +rawley.co.uk, 0 rawlinswy.gov, 1 rawlord.ga, 1 rawmarkable.co.uk, 1 rawmathub.gr, 1 -rawmedia.ma, 1 rawpearls.co.uk, 1 rawpearls.com, 1 rawr.sexy, 1 @@ -123486,6 +122015,7 @@ raxion.cf, 1 raxion.tk, 1 ray-works.de, 1 +rayagroup.pl, 1 rayann.cn, 1 raycarruthersphotography.co.uk, 1 raycast.xyz, 1 @@ -123565,7 +122095,6 @@ rbmafrica.co.za, 1 rbmediaglobal.com, 1 rbmland.com, 1 -rbnet.xyz, 1 rbprosthodontics.com, 1 rbs.co.uk, 1 rbs.com, 1 @@ -123581,6 +122110,7 @@ rbx.com, 1 rbx.gg, 1 rc-offi.net, 1 +rc-refer.nhs.uk, 1 rc-shop.ch, 1 rc.cruises, 1 rc21x.com, 1 @@ -123760,7 +122290,6 @@ readycolorado.gov, 1 readycontacts.com, 1 readydedis.com, 1 -readydesign.studio, 1 readyeutaw.gov, 1 readyfiction.com, 1 readyit.pl, 1 @@ -123769,6 +122298,7 @@ readyrowan.org, 1 readyscif.com, 1 readysell.net, 1 +readysetato.com, 1 readysetscif.com, 1 readysetworkpa.com, 1 readysetworksd.com, 1 @@ -123778,6 +122308,7 @@ readywithresourcestn.gov, 1 reaff.com, 0 reaganlibrary.gov, 1 +reagent-tests.uk, 1 reakcjonista.tk, 1 reaksi.id, 1 reaktionsfaehig.net, 0 @@ -123798,10 +122329,11 @@ realbiographies.cf, 1 realbiz.ml, 1 realbluesmagazine.com, 1 -realcapoeira.ru, 1 +realcapoeira.ru, 0 realcdn.nl, 1 realclearlife.com, 1 realclinic.jp, 1 +realcom.hu, 1 realdomdom.cf, 1 realestagency.com, 1 realestate-in-uruguay.com, 0 @@ -123846,6 +122378,7 @@ realizarse-japan.com, 1 realizegov.com, 1 realkeywords.ga, 1 +reall.uk, 1 realliance.net, 1 reallife-it.de, 1 reallifeforums.com, 0 @@ -123917,13 +122450,13 @@ rebaltica.lv, 1 rebane2001.com, 1 rebargroup.org, 1 +rebas.co, 1 rebase.com.br, 1 rebase.com.tr, 1 rebatekey.com, 1 rebatemy.rent, 1 rebecamode.ch, 1 rebecca.blackfriday, 1 -rebeccasedgewater.com, 1 rebeccawendlandt.com, 1 rebeccawilson.co.uk, 1 rebel-owl.com, 1 @@ -124037,9 +122570,6 @@ recoilbox.com, 1 recolic.cc, 1 recolic.net, 1 -recollect.co.nz, 1 -recollect.net.au, 1 -recollectcms.com, 1 recollection.fr, 1 recollective.com, 1 recolor.ml, 1 @@ -124105,7 +122635,7 @@ recycledinorsett.co.uk, 1 recycledinorsett.com, 1 recycleit.au, 1 -recyclenow.com, 0 +recyclenow.com, 1 recyclensave.sg, 1 recycling.tk, 1 recyklacekovu.cz, 1 @@ -124149,7 +122679,6 @@ redcode-web.design, 1 redcoded.com, 1 redcone.net, 1 -redconsultant.com, 1 redcontralarepresion.org, 1 redcorus.com, 1 redcreek.tk, 1 @@ -124224,6 +122753,7 @@ redi.tk, 1 rediazauthor.com, 1 redid.com.au, 1 +redingtongroup.com, 1 redion.me, 1 redir.me, 1 redireci.one, 1 @@ -124332,7 +122862,6 @@ reduktorntc-k.com.ua, 1 redulla.com, 1 redunion.tk, 1 -redusa.com, 1 redux.show, 1 redvau.lt, 1 redvent-decor.ru, 1 @@ -124340,7 +122869,6 @@ redware.co.uk, 1 redwater.co.uk, 1 redwaymu.cf, 1 -redweb.ws, 1 redweek.com, 1 redwheelweiser.com, 1 redwiki.tk, 1 @@ -124388,12 +122916,12 @@ reevaappliances.co.uk, 1 reevoo.com, 1 reezocar.com, 1 +refa.nl, 1 reface.ai, 1 refalm.com, 1 refb.org, 1 refbanners.com, 1 refbanners.website, 1 -refeds.org, 1 refer.codes, 1 refer.nhs.uk, 1 referat.club, 1 @@ -124436,7 +122964,6 @@ refood-cascaiscpr.eu, 1 reforestaction.com, 1 reform.ee, 1 -reforma.com.pe, 1 reformalliance.com, 1 reformando-t.es, 1 reformasflores.com, 1 @@ -124545,7 +123072,6 @@ regenwaterput.com, 1 regex.bingo, 1 regex.golf, 1 -regg.ae, 1 reggaesumfest.com, 0 reggaexplosion.tk, 1 reggea.tk, 1 @@ -124599,9 +123125,7 @@ registrarplus.nl, 1 registrarsconnect.co.uk, 1 registre.quebec, 1 -registrejornadalaboral.cat, 1 registrierung.tk, 1 -registrojornadalaboral.es, 1 registroparteviajeros.com, 1 registry.google, 1 registry.quebec, 1 @@ -124611,6 +123135,7 @@ regnix.net, 1 regnr.info, 1 regolithmedia.com, 1 +regorsecurity.ca, 1 regospel.tk, 1 regpacks.com, 1 regraph.de, 1 @@ -124631,9 +123156,7 @@ rehansaeed.com, 1 rehasport-informationen.de, 1 rehazonaliftservice.nl, 1 -rehena.com, 1 reher.pro, 1 -rehiring.com, 1 rehive.com, 1 rehoboth-hollandscheveld.nl, 1 rehobothbeachde.gov, 1 @@ -124729,6 +123252,7 @@ rejushiiplotter.ru, 1 rejuveaesthetic.com, 1 rejuven8byanita.com, 1 +rejuvenateivbar.com, 1 rejuvetclinicpromotion.com, 1 rekayasainformatika.com, 1 rekenkameroost.nl, 1 @@ -124766,7 +123290,6 @@ relais-laguiole.com, 1 relaisducoustoubi.com, 1 relanto.ai, 1 -relatableblog.com, 0 relatedgroup.com, 1 relates.link, 1 relatethesport.com, 0 @@ -124823,7 +123346,6 @@ relikwiarz.com, 1 relines.ru, 1 relionbattery.com, 1 -relishify.com, 1 relisten.nl, 1 reloading.ml, 1 relocatefeds.gov, 1 @@ -124878,7 +123400,6 @@ remilner.co.uk, 1 reminda.com, 0 reminded.tk, 1 -remington-europe.com, 1 remino.net, 1 remissan.com, 1 remissionclinic.com, 0 @@ -124894,6 +123415,7 @@ remodelate.mx, 1 remodelhealth.com, 1 remodulin.com, 1 +remondacastro.com.ar, 1 remonline.ru, 1 remont-45.tk, 1 remont-kazan.tk, 1 @@ -125006,8 +123528,6 @@ renewcleaningservices.net, 1 renewedhr.com, 0 renewgsa.com, 1 -renewittke.ch, 1 -renewittke.com, 1 renewmdcoastal.com, 1 renewmedispa.com, 0 renewpfc.com, 1 @@ -125056,7 +123576,6 @@ renovation-maison.paris, 1 renovationbm.ca, 1 renovationbm.com, 1 -renovationen.com, 1 renovationmp.fr, 1 renovationsatl.com, 1 renovationsf.cf, 1 @@ -125120,7 +123639,6 @@ renvisegrad.hu, 1 renwerks.com, 1 renxinge.cn, 0 -renyiyou.com, 1 renyu.ai, 1 reo.gov, 0 reoccupyportugal.com, 1 @@ -125134,7 +123652,6 @@ repairtly.com, 0 repairtoolbox.com, 1 repalriley38.com, 1 -repan.com, 1 repaper.org, 1 reparacionesdecalefones.com, 1 reparacionmovilesmurcia.com, 1 @@ -125161,6 +123678,7 @@ repauto.com.ua, 1 repaxan.com, 1 repay.com, 1 +repdom.net, 1 repeat.gg, 1 repeatresponse.com.au, 1 repettoshoes.tk, 1 @@ -125244,7 +123762,6 @@ republicmo.gov, 1 republictelecom.net, 1 republik-sombora.tk, 1 -republikalajm.com, 1 republique.org, 1 repugnant-conclusion.com, 1 repugnantconclusion.com, 1 @@ -125272,11 +123789,11 @@ resanebartar.tk, 1 resbi.tk, 1 resc.la, 1 -rescatec.com, 1 resch-verlag.com, 1 rescms-secure.com, 1 rescuenode.com, 1 rescuer.gq, 1 +rescuer.org.ua, 1 rescuer.tk, 1 rescueyourrestaurant.com, 1 research-panel.jp, 1 @@ -125287,7 +123804,6 @@ researchrealm.net, 1 researchresults.com, 1 researchstory.com, 1 -researchwriting.co.uk, 1 reseau-ait.ca, 1 reseau-image.com, 1 reseau-intranet.fr, 1 @@ -125298,10 +123814,10 @@ resellrefreshrepeat.com, 1 reserva-agora.pt, 1 reservadecitasonline.com, 1 -reservaelcortijosuitehouse.com, 1 reservationsair.com, 1 reservecalifornia.com, 1 reservetonshift.com, 1 +reservevaparks.com, 1 reservilaisliitto.fi, 1 reset12.co.uk, 1 resfriatech.com.br, 1 @@ -125311,7 +123827,6 @@ residence-donatello.be, 1 residence-edelweiss.com, 1 residence-les-floralies.fr, 1 -residence-simoncelli.com, 1 residencedesign.net, 1 residencemagazine.se, 1 residencescauri.it, 1 @@ -125455,6 +123970,7 @@ restock.ru, 1 restoclub.ru, 1 restomojo.tk, 1 +restoraguard.com, 1 restoran.cf, 1 restoranlibertas.com, 1 restorationphotos.tk, 1 @@ -125474,7 +123990,6 @@ resume4dummies.com, 1 resumecompanion.com, 1 resumegenius.com, 1 -resumegets.com, 1 resumehelp.com, 1 resumehelp.io, 1 resumelibros.tk, 1 @@ -125498,11 +124013,11 @@ retailcleaners.ga, 1 retaildisplaystands.com.au, 1 retailer-plattform.de, 1 +retailerapp.info, 1 retailing.cf, 1 retailmarket.net, 1 retailnext.net, 1 retailroadshow.com, 1 -retailzpos.com, 1 retalicecream.us, 1 retaque.tk, 1 retarara.tk, 1 @@ -125515,13 +124030,12 @@ retetop95.it, 0 reth.ch, 1 rethinkingchurch.net, 1 +rethinkproductivity.co.uk, 1 rethymnorooms.tk, 1 retia.cloud, 1 -reticket.me, 1 reticle.cf, 1 reticon.de, 1 retics.cf, 1 -retidurc.fr, 1 retiesebaan.tk, 1 retin.ml, 1 retinaconsultantstexas.com, 1 @@ -125554,6 +124068,7 @@ retroarms.cz, 1 retrobook.tk, 1 retrocdn.net, 1 +retrodunes.com, 1 retrofitness.com, 1 retrogamenews.tk, 1 retrogarb.co.uk, 1 @@ -125595,7 +124110,6 @@ reusables.org, 1 reuschtools.com, 1 reusesti.ro, 1 -reusorecicla.com.br, 1 reut42.de, 1 reuter-profishop.de, 0 reuter.de, 0 @@ -125629,7 +124143,6 @@ reverseaustralia.com, 1 reversec.com, 1 reversecanada.com, 1 -reversecrucifixkm.altervista.org, 1 reversedns.tk, 1 reverseengineer.net, 1 reverseloansolutions.com, 1 @@ -125668,7 +124181,6 @@ revisoronline.ml, 1 revisoronline.tk, 1 revista-atalaya.ml, 1 -revistabifrontal.com, 1 revistacocina.tk, 1 revistadelibros.com, 1 revistaespecies.ga, 1 @@ -125681,7 +124193,6 @@ revive-me.org, 1 reviveourhearts.com, 1 reviveplumbingmelbourne.com.au, 1 -revivewellholistichealth.com, 1 revivicor.com, 1 reviviendolavilla.tk, 1 revizor-online.cf, 1 @@ -125694,7 +124205,6 @@ revloop.com, 1 revmap.com, 1 revoka.de, 1 -revol.space, 1 revolucioncharango.com, 1 revolution-mining.com.au, 1 revolution.net.nz, 1 @@ -125723,6 +124233,7 @@ rewardoapp.com, 1 rewardscout.eu, 1 rewardsforjustice.net, 1 +rewardsgamble.com, 1 rewaste.com.au, 1 rewawatch.tk, 1 rewebsitepro.com, 1 @@ -125732,7 +124243,6 @@ rewire.com, 1 rewirenewsgroup.com, 1 rewisto.de, 1 -rewolucja.com, 1 rewolucja1905.online, 1 rework.fm, 1 rewoven.au, 1 @@ -125766,7 +124276,6 @@ reynoldsburg.gov, 1 reytorogroup.com, 1 reza-dev.com, 1 -rezarjuntos.co, 1 rezendemultimarcas.com.br, 1 rezept-planer.de, 1 rezett.com, 1 @@ -125784,7 +124293,7 @@ rfasafedrop.org, 1 rfbcnet.tk, 1 rfbz.ca, 1 -rfc3161.top, 0 +rfc3161.top, 1 rfdirectory.tk, 1 rfec.com, 1 rfeif.org, 1 @@ -125812,6 +124321,7 @@ rgnext.com, 1 rgpd-elearning.com, 1 rgservice.ml, 1 +rgshealthcare.com, 1 rgstatic.net, 1 rgtonline.com, 1 rgz.ee, 1 @@ -125859,7 +124369,6 @@ rhinelanderpd.gov, 1 rhinesuchus.com, 1 rhino-inquisitor.com, 1 -rhinobase.net, 1 rhinoplay.co.uk, 1 rhinosf1.com, 1 rhinostics.com, 1 @@ -125896,7 +124405,6 @@ rhyswebbmassage.com, 1 rhythmaning.org, 1 rhythmconsultant.com, 1 -riable.com, 1 riacanada.ca, 1 riachuello.tk, 1 riadnkob.com, 1 @@ -125906,7 +124414,6 @@ rialtocapital.com, 1 rian.gq, 1 riared.net, 1 -riauwebhost.com, 1 rib-cosinus.com, 1 rib-dinslaken.com, 1 rib-dinslaken.de, 1 @@ -125946,6 +124453,7 @@ riceforafrica.net, 1 ricelasvegas.com, 1 ricettedellanonna.net, 1 +ricettesemplicieveloci.altervista.org, 1 rich-good.com, 0 richadams.me, 1 richandsteph.co.uk, 1 @@ -125981,6 +124489,7 @@ richardson.tw, 1 richardson.webcam, 1 richardson.wiki, 1 +richardsonceballo.com, 1 richardsoncountyne.gov, 1 richardsondev.com, 1 richardsongomes.com, 1 @@ -126009,12 +124518,11 @@ richies.uk, 1 richiesroom.com, 1 richieste.it, 1 -richini.com, 1 richlandcenterwi.gov, 1 richlandcountyoh.gov, 1 richlandcountywi.gov, 1 richlandwa.gov, 1 -richlewis.com, 1 +richlewis.com, 0 richlj.net, 1 richlogic.blog, 1 richmix.org.uk, 1 @@ -126038,6 +124546,7 @@ rickmakes.com, 1 rickmanlegal.com, 1 rickmartensen.nl, 0 +ricknewman.pro, 1 rickoriginal.nl, 0 rickramos.com, 1 rickrussellhomes.com, 0 @@ -126102,7 +124611,7 @@ riemzac.com, 1 riepe-email.de, 1 riepe-mail.de, 1 -riepe.cc, 1 +riepe.cc, 0 riesenweber.id.au, 1 riesheating.com, 1 rieslingtrailclarecottages.ga, 1 @@ -126168,6 +124677,7 @@ riietr.com, 1 riigikogu.ee, 0 riino.site, 1 +riiplay.com, 1 rijah.dk, 1 rijalcloud.com, 1 rijk-catering.nl, 0 @@ -126180,7 +124690,6 @@ rikardhallberg.com, 1 rikkarlskoga.se, 1 riklewis.com, 1 -rikmeijer.nl, 1 rikpalm.nl, 1 riksby.com, 1 riku.pro, 1 @@ -126205,6 +124714,7 @@ rimax.vn, 0 rime.red, 1 rimessaggio.it, 1 +rimetsu.com, 1 rimin.moe, 1 riministreet.com, 0 riminitoday.it, 1 @@ -126261,7 +124771,6 @@ riosoil.com, 1 riosoils.co.uk, 1 riosoils.com, 1 -riotseeds.cloud, 1 ripadores.tk, 1 ripcorddesign.com, 1 ripcordsandbox.com, 1 @@ -126278,6 +124787,12 @@ ripper.store, 1 ripplecraft.cn, 1 ripplematch.com, 0 +ripplenews.club, 1 +ripplenews.co, 1 +ripplenews.io, 1 +ripplenews.live, 1 +ripplenews.news, 1 +ripplenews.world, 1 rippleproduction.com.tr, 1 rippling.com, 1 riproduzionichiavi.it, 1 @@ -126321,7 +124836,6 @@ rishikeshyogavalley.com, 1 rishta360.com, 1 risi-china.com, 1 -risilience.com, 1 rising-cubers.tk, 1 risingsoftware.com, 1 risingtidecapital.org, 1 @@ -126343,7 +124857,6 @@ risparmiare.info, 1 risparmiasicuro.it, 1 risquecosmetic.com, 1 -risquecv.fr, 1 risquefetish.com, 1 risquefetish.net, 1 risquefetish.org, 1 @@ -126363,7 +124876,6 @@ rit.ee, 0 rit.space, 1 ritacaldeira.com.br, 1 -ritaescortsdelhi.com, 1 ritaohio.gov, 1 ritas.tk, 1 ritchieneville.tk, 1 @@ -126375,14 +124887,12 @@ ritirocalcinacci.roma.it, 1 ritirocalcinacci.viterbo.it, 1 ritma.ca, 1 -ritmoloco.fr, 1 ritmos.tk, 1 ritmuzic.ml, 1 ritoge.com, 1 ritoner.it, 1 ritos.ru, 1 ritrium.com, 1 -ritsen.com, 1 ritsf.com, 1 rittau.org, 1 ritual-gratek.ru, 1 @@ -126412,10 +124922,8 @@ rivercityroofs.com, 1 riverford.co.uk, 1 riverlea.com.au, 1 -riverlinegaragedoor.com, 1 riverotravel.cl, 1 riverpark.casa, 1 -riverridgecc.com, 1 riverrun.tk, 1 rivers.gov, 1 riverschool.net, 1 @@ -126461,7 +124969,6 @@ rizonrice.club, 1 rizospastis.gr, 1 rizuwang.cn, 1 -rj-onderneemt.nl, 1 rjan.nl, 1 rjattachments.cn, 1 rjbmc.com, 1 @@ -126541,7 +125048,6 @@ rmsupply.nl, 1 rmt-construction.co.za, 1 rmtconstruction.co.za, 1 -rmupasswordstudy.com, 1 rmurai.com, 0 rmvalues.com, 1 rmw-energy.de, 1 @@ -126607,6 +125113,7 @@ robbievasquez.com, 1 robbinsdalemn.gov, 1 robbrestyle.com, 1 +robbyfoxdrywall.com, 1 robbyzworld.cf, 1 robdavidson.network, 1 robersonaudio.tk, 1 @@ -126619,7 +125126,6 @@ robertg.me, 1 robertglastra.com, 1 robertgonzalez.tk, 1 -roberthenrys.com, 1 roberthurlbut.com, 1 robertkrueger.de, 1 robertlowdon.com, 1 @@ -126641,7 +125147,6 @@ robertsjoneslaw.com, 0 robertsmits.be, 1 robertson-cg.com, 1 -robertsonblums.com, 1 robertsoncountytn.gov, 1 robertsonsofpitlochry.com, 1 robesoncountync.gov, 1 @@ -126719,11 +125224,9 @@ robpol86.com, 1 robpot.com, 1 robs-info.eu, 0 -robsamtechnology.com, 1 robspc.repair, 1 robstibal.com, 1 robtatemusic.com, 1 -robtex.com, 1 robu.in, 1 robust.ga, 1 robustac.com, 1 @@ -126737,7 +125240,6 @@ roc-tw.tw, 1 roc.gov.au, 0 rocabot.ddns.net, 1 -rocahub.org, 1 roccasemijoias.com.br, 1 rochcloud.cf, 1 rochediagram.com, 1 @@ -126827,6 +125329,7 @@ rockjumperbirding.com, 1 rocklandbrownwi.gov, 1 rocklandcountyny.gov, 1 +rocklandfinds.com, 1 rockler.com, 1 rocklerpro.com, 1 rocklinhousecleaning.com, 1 @@ -126880,6 +125383,7 @@ rodeohire.com, 1 rodeosales.co.uk, 1 roder-skarf.se, 1 +rodgersawnings.com, 1 rodichi.net, 1 rodin.tk, 1 rodinka.tk, 1 @@ -126908,6 +125412,7 @@ roedesonline.nl, 1 roedl.de, 1 roefja.com, 1 +roehrbein.de, 1 roelenscitynews.ml, 1 roelfs.org, 1 roelhollander.eu, 1 @@ -127029,11 +125534,11 @@ rollender-trutz.de, 1 rollerderbycollection.ga, 1 rollerderbywines.ga, 1 -rollerskatecity.com, 1 rollerwarehouse.com, 1 rolleyes.org, 1 rollforadventure.com.au, 1 rollinbd.com, 1 +rolling.es, 1 rollingbarge.com, 1 rollingcouchapp.com, 1 rollinghillsestates.gov, 1 @@ -127227,16 +125732,15 @@ root.security, 1 rootbsd.at, 1 rootcamp.net, 1 -rootcommand.com, 1 rootdo.com, 1 rootdo.org, 1 rootear.com, 1 rootedlifemontessori.com, 1 +rootedtolast.org, 1 rootedwellnessot.com, 1 rooter.group, 1 rootergroupinc.ca, 1 rootfor.me, 1 -rootgsm.com, 1 rootie.de, 1 rootingpalace.tk, 1 rootlair.com, 1 @@ -127412,7 +125916,6 @@ rotate4u.eu, 1 rotaville.com, 1 rotavize.com, 1 -rotayazilim.net, 1 roteam.tk, 1 rotek.at, 0 roten.email, 1 @@ -127472,11 +125975,11 @@ rout0r.org, 1 route-wird-berechnet.de, 1 route66smiles.com, 1 +routeassess.com.au, 1 routechoices.com, 1 routedlogic.net, 1 routemates.tk, 1 router24.info, 1 -routerchart.com, 1 routerclub.ru, 1 routeto.com, 1 routevanverzoening.nl, 1 @@ -127517,7 +126020,6 @@ roxiesbouncycastlehire.co.uk, 1 roxswinery.com, 1 roxville.tk, 1 -roxyfroxy.com, 1 roy-buehring.de, 1 roy-space.com, 1 roy.wang, 1 @@ -127573,7 +126075,6 @@ royalehosting.net, 1 royalfamily.org, 1 royalfitnesschennai.in, 1 -royalfloraholland.com, 1 royalfoundation.com, 1 royalgardens.no, 1 royalgdeluxe.al, 1 @@ -127645,7 +126146,6 @@ rpgchan.cf, 1 rpgfactory.tk, 1 rpgfan.com, 1 -rpgmaker.es, 1 rpgmakers.tk, 1 rpgresearch.com, 1 rpguru.com, 1 @@ -127657,7 +126157,6 @@ rpmdrivingschool.com.au, 1 rpmglobal.com, 1 rpmrecords.dk, 0 -rpnewspaper.com, 1 rpora.co, 1 rpower.com, 1 rpowerpos.com, 1 @@ -127707,6 +126206,7 @@ rsap.ca, 1 rsauget.fr, 1 rsb.net, 1 +rsbl.or.id, 1 rsblake.com, 1 rsblake.net, 1 rsc-cronenberg.de, 1 @@ -127741,6 +126241,7 @@ rsquare.nl, 1 rsridentassist.com, 1 rsrnd.org, 1 +rsruralrevendas.com.br, 1 rsrv.fr, 1 rss-reader.net, 1 rss-reader.org, 1 @@ -127760,7 +126261,6 @@ rssreaderone.com, 1 rssready.eu, 1 rstadler.com, 1 -rstforums.com, 1 rstsecuritygroup.co.uk, 1 rsttraining.co.uk, 1 rsudlimpung.com, 1 @@ -127844,6 +126344,7 @@ ru-rocker.com, 1 ru-sale.tk, 1 ru-sprachstudio.ch, 1 +ru.nl, 1 ru.search.yahoo.com, 0 ru251.tk, 1 ruageek.com, 1 @@ -127902,7 +126403,6 @@ rubooks.gq, 1 rubreklama.tk, 1 ruby-auf-schienen.de, 1 -rubycarts.us, 1 rubyfactory.io, 1 rubyhornet.com, 1 rubykon.com, 1 @@ -127941,6 +126441,7 @@ ruebli-kurier.ch, 1 rueckert-gymnasium-blog.de, 1 rueckgr.at, 1 +ruecklinger.net, 1 ruecommune.fr, 1 ruediger-voigt.eu, 1 ruedigervoigt.de, 1 @@ -127948,6 +126449,8 @@ ruedumas.freeboxos.fr, 1 rueduparticulier.tk, 0 rueg.eu, 1 +rueger-net.de, 1 +rueger.info, 1 ruempelbutler.de, 1 ruero.com, 1 ruerte.net, 1 @@ -127970,6 +126473,8 @@ rugbyrama.fr, 1 rugeley-vets.co.uk, 1 rugged-cctv.com, 0 +ruggedbytes.ae, 1 +ruggedbytes.com, 1 rugk.dedyn.io, 1 rugspa.ie, 1 rugugu.jp, 1 @@ -128000,6 +126505,7 @@ ruixin.org, 1 rujbin.ddns.net, 1 rukhaiyar.com, 1 +rukhsaar.com, 1 ruknguk.tk, 1 rukouye.cf, 1 rukouye.ml, 1 @@ -128089,18 +126595,17 @@ runninglab.fr, 1 runningrabb.it, 1 runningshows.tk, 1 +runosklep.pl, 1 runpartner.com, 1 runrun.es, 1 runrun.sk, 0 runschrauger.com, 1 runteller.com, 1 runvs.io, 1 -runyonit.com, 1 ruobiyi.com, 0 ruobr.ru, 1 ruonavaara.fi, 1 ruoskachile.tk, 1 -ruoungoaihaigiacat.com, 1 rupeek.com, 1 rupeespeaks.tk, 1 rupeevest.com, 1 @@ -128142,7 +126647,7 @@ rushcountykansas.gov, 1 rushfordvillagemn.gov, 1 rushhour.nl, 0 -rushmix.com, 0 +rushmix.com, 1 rushmore.ee, 1 rushmyessay.gq, 1 rushpoppershop.co.uk, 1 @@ -128173,7 +126678,6 @@ russell-ar.gov, 1 russell-tech.co.uk, 1 russellcountyky.gov, 1 -russellenvy.com, 1 russelljohn.net, 1 russellmeek.net, 1 russellreynolds.com, 1 @@ -128199,7 +126703,7 @@ russiancrimes.in.ua, 1 russianews.cf, 1 russianews.ga, 1 -russianflora.ru, 1 +russianflora.com, 1 russianpostcalc.ru, 1 russianpunkrock.tk, 1 russianrandom.ru, 1 @@ -128272,7 +126776,6 @@ ruwhof.com, 1 ruwhof.net, 1 ruxit.com, 0 -ruxleyglobal.com, 1 ruya.com, 1 ruyana.tk, 1 ruyatabirleri.com, 1 @@ -128301,7 +126804,6 @@ rw19.de, 1 rw2.de, 1 rwalch.at, 1 -rwandalicious.com, 1 rway.pro, 1 rwb.charity, 1 rwbstuff.com, 1 @@ -128378,6 +126880,7 @@ rydermais.tk, 1 ryderstatus.com, 1 rydges.com, 1 +rydoo.com, 1 ryejuice.sytes.net, 1 ryenews.org.uk, 1 ryerson.com, 1 @@ -128440,7 +126943,6 @@ s-n-unso.com, 1 s-on.li, 1 s-ppc.com, 1 -s-pro.io, 1 s-s-paint.com, 1 s-si.com, 1 s-sisters.ru, 1 @@ -128489,7 +126991,6 @@ s402.de, 1 s404.de, 1 s4c.cymru, 0 -s4db.net, 1 s4hosting.in, 1 s4it.com.mx, 1 s4media.org, 1 @@ -128573,7 +127074,6 @@ sabiniambientes.com.br, 1 sabinov.sk, 1 sabiote.com, 1 -sabiru-develop.web.id, 1 sabisandsgamereserve.com, 1 sablanout.com, 1 sable.gq, 1 @@ -128607,6 +127107,7 @@ sacharidovejednotky.eu, 1 sachasmets.be, 1 sachi.lk, 1 +sachiepvien.net, 1 sachinchauhan.ml, 1 sachk.com, 0 sachse.info, 0 @@ -128617,7 +127118,6 @@ sacians.tk, 1 sacibo.ga, 1 sackmesser.ch, 1 -saclier.at, 1 saco.tech, 1 sacodealegria.com, 1 sacprincesse.com, 1 @@ -128684,6 +127184,7 @@ safar.sk, 1 safarilaw.com, 0 safaris-uganda.com, 1 +safarisbonafricatours.com, 1 safarisop.com, 0 safataviationgroup.com, 1 safatech.me, 1 @@ -128705,7 +127206,6 @@ safebits.eu, 1 safebits.fr, 1 safebits.it, 1 -safeblackout.com, 1 safeboard.ml, 1 safeboxx.id, 1 safebus.io, 1 @@ -128744,6 +127244,7 @@ safensoundstoragegroton.com, 1 safeo.fr, 1 safeocs.gov, 1 +safepassvpn.com, 1 safeplay.co, 1 safeplayground.net, 1 safer-software.tk, 1 @@ -128764,6 +127265,7 @@ safesmartvent.com, 1 safesoundcounselingllc.com, 1 safespaceresearch.com, 1 +safespaces.azurewebsites.net, 1 safestayok.gov, 1 safestreets.cf, 1 safetables.ga, 1 @@ -128860,6 +127362,7 @@ sahb.dk, 1 sahealthsecure.com, 1 sahibinden.com, 1 +sahih.nl, 1 sahilbahl.com, 1 sahilten.com, 1 sahinozgenhukuk.com, 1 @@ -128873,7 +127376,6 @@ saiber.com, 1 saibotk.de, 0 said.id, 1 -said.it, 1 said.my.id, 1 said.web.id, 1 saidpurtechnical.tk, 1 @@ -128905,7 +127407,6 @@ sailormoonlibrary.org, 1 sailors.org, 1 sailum.tk, 1 -sailwiz.com, 1 saily.pl, 1 sailyun.cc, 1 saimedia.net, 0 @@ -128971,6 +127472,7 @@ sainzderozas.com, 1 saipariwar.com, 1 saipeople.net, 1 +saiphhub.com.br, 1 saiputra.com, 1 saiputra.net, 1 sairadio.net, 1 @@ -129031,6 +127533,7 @@ sakuradental-harinakano.org, 1 sakuradental.org, 1 sakuramassagenj.com, 1 +sakuramomoco.com, 1 sakurapalace.tk, 1 sakurapink.top, 0 sakuraspanj.com, 1 @@ -129063,7 +127566,6 @@ sale4ru.ru, 1 salea-anwendung.ch, 1 saleaks.org, 1 -salebaba.com, 1 saleduck.at, 1 saleduck.ch, 1 saleduck.co.id, 1 @@ -129079,7 +127581,7 @@ saleem.cf, 1 salegor.tk, 1 salekaz.ru, 1 -salemcountynj.gov, 0 +salemcountynj.gov, 1 salemma.gov, 1 salempress.com, 1 salensmotors-usedcars.be, 1 @@ -129204,7 +127706,7 @@ saltedfish.network, 1 saltedfishes.com, 1 saltedge.com, 1 -saltedpasta.com, 1 +saltedpasta.com, 0 saltercane.com, 0 saltlakecounty.gov, 1 saltlakehealth.gov, 1 @@ -129228,7 +127730,6 @@ saludakeuring.nl, 1 saludcarbajal.com, 1 saludcolima.gob.mx, 1 -saludmaspro.com, 1 saludnutrivida.com, 1 saluels.servemp3.com, 1 salukinet.tk, 1 @@ -129277,7 +127778,6 @@ samara-hosting.tk, 1 samara-news.net, 1 samaraleaders.ru, 1 -samaraugol.ru, 1 samarhotel.com, 1 samaritainsmeyrin.ch, 0 samarthtyagi.tk, 1 @@ -129333,6 +127833,7 @@ samina.com, 1 samir-software.tk, 1 samiratv.tk, 1 +samisallinen.fi, 1 samishnation.gov, 1 samisoft.ir, 1 samiysok.cf, 1 @@ -129376,7 +127877,6 @@ samsara.nl, 1 samsat.info, 1 samsatcorner.com, 1 -samscollection.in, 1 samsebe.ml, 1 samsebe.tk, 1 samsepi0l.ovh, 1 @@ -129401,8 +127901,6 @@ samuelphotos.com, 1 samuels-graphics.tk, 1 samuelsmithsbrewery.co.uk, 1 -samuelsuiri.info, 1 -samuidiving.net, 1 samuiluxuryboats.com, 1 samuirehabcenter.com, 1 samurai-marumori.com, 1 @@ -129627,7 +128125,6 @@ sanliurfahaberi.tk, 1 sanlorenzoruiz.net, 1 sanluisdequillota.tk, 1 -sanmanueltarlac.gov.ph, 1 sanmarcovecchio.tk, 1 sanmigueldeabona.es, 1 sanmonjiya-kimono.com, 1 @@ -129650,9 +128147,7 @@ sanpablo.go.cr, 1 sanpablo.tk, 1 sanpancrazio.tk, 1 -sanpatigroup-beautysalon.jp, 1 sanpatigroup-recruit.jp, 1 -sanpatigroup.jp, 1 sanpatriciocountytx.gov, 1 sanpham-balea.org, 1 sanqinyinshi.com.cn, 1 @@ -129682,7 +128177,6 @@ santabarbarainn.com, 1 santabarbarapix.com, 1 santabarbaravote.gov, 1 -santacasamarilia.com.br, 1 santackergaard.nl, 1 santaclaracounty.gov, 1 santaclaratx.gov, 1 @@ -129693,7 +128187,6 @@ santacruzgalapagoscruise.com, 1 santafetx.gov, 1 santaluciatirajana.com, 1 -santamarcelina.edu.br, 1 santamargarita.tk, 1 santamariadelaisla.tk, 1 santamariaretreats.co.uk, 1 @@ -129722,7 +128215,6 @@ santehnikaplus.by, 1 santenatureetcie.com, 0 santeriabeliefs.com, 1 -santeriasanjorge.com.ar, 1 santhatela.com.br, 1 santhoshveer.com, 1 santiagogarza.co, 1 @@ -129742,13 +128234,13 @@ santodelgiorno.it, 1 santong.tk, 1 santons-fouque.fr, 1 -santorinidress.com, 1 santoscarmelitas.tk, 1 santosdecordoba.tk, 1 santoshpandit.com, 1 +santoskhoury.com, 1 santral.org.tr, 1 santsadurni.cat, 1 -santswebdesign.com, 1 +santswebdesign.com, 0 santugon.tk, 1 santv.cc, 0 sanukarlos.tk, 1 @@ -129756,7 +128248,6 @@ sanweb.info, 1 sanyangwood.shop, 1 saochang.com, 1 -saojudastadeu.edu.br, 1 saolucasimagem.com.br, 1 saoneth.pl, 1 saopaulofc.com.br, 1 @@ -129799,6 +128290,7 @@ sapphireblue.me, 1 sapphirecleaningwa.com.au, 0 sapphireservicesga.com, 1 +sapporet.es, 1 sapporo-asaichi.com, 1 sapporo.coop, 1 sapporo.ga, 1 @@ -129850,7 +128342,6 @@ saranamayyappa.tk, 1 sarand.ch, 0 saransk-news.net, 1 -saraogitextiles.com, 1 sararoylance.com, 1 saraskins.space, 1 sarasotadentistry.com, 1 @@ -129877,7 +128368,6 @@ sardegnachiama.it, 1 sardegnarifiuti.it, 1 sardegnatirocini.it, 1 -sardenha.com, 1 sardine.tk, 1 sardinhagarcia.pt, 1 sardinianvillas.co.uk, 1 @@ -129925,7 +128415,6 @@ sarosegrupp.ee, 1 sarpsb.org, 1 sarrala.fi, 1 -sars-cov-2.com, 1 sarto.roma.it, 1 sartori.tk, 1 sartoria.milano.it, 1 @@ -129970,7 +128459,7 @@ sastamalandemarit.fi, 1 sastd.com, 1 sasthyaseba.com, 1 -sasuhina.com, 1 +sasugadesign.com, 1 sasusaku.com, 1 sasyabapi.com, 1 sat-p.tk, 1 @@ -130060,6 +128549,7 @@ saugatuckcabin.com, 1 saugatucktownshipmi.gov, 1 saugatuckvacationhomerental.com, 1 +saulbal.dedyn.io, 1 saulchristie.com, 1 saulsplace.com, 0 saulsplacewebdesign.com, 1 @@ -130094,7 +128584,6 @@ savant-dagen.nl, 1 savantcare.com, 0 savart.blog, 1 -savart.pro, 1 savatha.tk, 1 savbus.com, 1 savbus.net, 1 @@ -130150,7 +128639,6 @@ savingsbondwizard.gov, 1 savingsoftheyear.com, 1 savingtails.org, 1 -savitar.guide, 1 savne-svetelj.si, 1 savoir.ga, 1 savoirfairelinux.com, 1 @@ -130328,7 +128816,6 @@ scale.milano.it, 1 scale.roma.it, 1 scalecalculation.ml, 1 -scaledge.com, 1 scalemodeling.tk, 1 scalesbiolab.com, 1 scalextric.com, 1 @@ -130364,7 +128851,6 @@ scandocs.ai, 1 scaner.ga, 1 scanform.ai, 1 -scangeo.net, 1 scanii.com, 1 scanmailx.com, 1 scanmy.email, 1 @@ -130409,7 +128895,6 @@ scavalentenx.duckdns.org, 1 scavenged.ga, 1 scayle.com, 1 -scbcameroun.net, 1 scbdh.org, 1 scbfireworks.com, 1 scbodner.com, 1 @@ -130438,14 +128923,12 @@ scenic.camera, 1 scenic.gallery, 1 scenicbyways.info, 1 -scentiche.com, 1 scentlab.md, 1 scentlab.space, 1 scently.nl, 1 scepticism.com, 1 scers.gov, 1 scesc.uk, 1 -scfpensante.ca, 1 scfssp.it, 1 scgsustainability.com, 1 sch44r0n.de, 1 @@ -130476,7 +128959,6 @@ schaumburgil.gov, 1 schauraum.tk, 1 schauspiel-leipzig.de, 1 -schauspiel.koeln, 1 schauspielbuehnen.de, 1 schauspielfrankfurt.de, 1 schausteller.de, 1 @@ -130510,13 +128992,11 @@ schellenberg.ac, 1 schellevis.net, 0 schenectadycountyny.gov, 1 -schenkel.eti.br, 1 schenkel.tk, 1 schenkes.de, 0 schepman.org, 1 scherfke.de, 1 schermen-en.nl, 1 -schermkapot.nl, 1 schertztx.gov, 1 scheuchenstuel.at, 1 schiau.co, 1 @@ -130525,9 +129005,7 @@ schibsted.com, 1 schibsted.dk, 1 schibsted.fi, 1 -schibsted.no, 1 schibsted.nz, 1 -schibsted.se, 1 schickert.org, 1 schicksal.com, 1 schiedelkonfigurator.hu, 1 @@ -130611,7 +129089,6 @@ schmucker.it, 1 schmunzelgeist.de, 1 schnalstal.info, 1 -schnalz.de, 1 schnapke.name, 1 schnapsverein.ddns.net, 1 schnaube.de, 1 @@ -130631,6 +129108,7 @@ schnuckenhof-wesseloh.de, 1 schnucks.com, 1 schnyder-werbung.ch, 0 +schody-rozycki.pl, 1 schoenstatt-fathers.link, 1 schoenstatt.link, 1 schoental.de, 1 @@ -130693,9 +129171,9 @@ schoolcrafttownshipmi.gov, 1 schooldatasquad.com, 1 schooldismissalmanager.com, 1 +schooldistrictopioidrecoverygrants.com, 1 schooleducationharyana.gov.in, 1 schoolheads.ph, 1 -schoolhouse.world, 1 schoolroom.ga, 1 schoolrumble.tk, 1 schoolsafety.gov, 1 @@ -130769,7 +129247,7 @@ schulung-eup.de, 1 schulz-partner-rechtsanwaelte.de, 1 schulze-gunst.de, 1 -schulzentrum.com, 1 +schulze.network, 1 schuman.tk, 1 schumanandmonnet.eu, 1 schumannji.de, 1 @@ -130778,7 +129256,6 @@ schutte.tk, 1 schutterij-sintsebastianus-eys.tk, 1 schutz-vor-schmutz.de, 1 -schutzhuelle.com, 1 schutzkoffer-profilampen.at, 1 schutznetze24.de, 1 schutzwerk.com, 1 @@ -130851,7 +129328,6 @@ sciencetoymaker.org, 1 sciencetram.tk, 1 scienceupfirst.com, 1 -scienceway.com, 1 scienceweb.tk, 1 sciencex.com, 1 sciencexpo.org.za, 1 @@ -130908,7 +129384,6 @@ scolacdn.com, 1 scoliosisinstitute.com, 1 scom.org.uk, 1 -scommessalegale.com, 1 scommessenonaams.com, 1 sconecloud.com, 1 scontiamolo.com, 1 @@ -130930,7 +129405,6 @@ scootersrolloffs.com, 1 scootertechnofrance.tk, 1 scope.studio, 1 -scopechart.com, 1 scopeglass.com.au, 1 scopethree.org, 1 scopus.tk, 1 @@ -130976,7 +129450,6 @@ scottgalvin.com, 1 scotthelme.co.uk, 1 scotthelmesucks.com, 1 -scottholmesmusic.com, 1 scottipc.com, 1 scottish-paranormal.tk, 1 scottishambulance.com, 1 @@ -131116,7 +129589,6 @@ scsp.ai, 1 scsprotect.com, 1 scstg.net, 1 -sctbus.org, 1 sctfpa.gov, 1 sctiger.me, 1 sctiger.men, 1 @@ -131234,11 +129706,11 @@ sea.zapto.org, 1 seabooking.com, 1 seaborn.top, 0 -seacowtech.com, 1 seadrive.cc, 1 seadus.ee, 1 seaemporium.com, 1 seagrace.com, 1 +seagrass-salcombe.com, 1 seagull-seafarer.org, 1 seahaweb.org, 1 seaif.org, 1 @@ -131284,7 +129756,6 @@ search-net.tk, 1 search.gov, 1 search.yahoo.com, 0 -search4btc.com, 1 search4stores.com, 1 searchable.ml, 1 searchbin.ca, 1 @@ -131294,6 +129765,7 @@ searchdatalogy.com, 1 searchdogs.ch, 1 searchenginelinks.co.uk, 1 +searchenginemagazine.com, 1 searchforbeer.com, 1 searchforjohn.com, 1 searchfox.org, 1 @@ -131458,7 +129930,6 @@ secpatrol.de, 1 secpoc.online, 1 secre.cy, 1 -secrecion.com, 1 secret-bases.co.uk, 1 secret-garden.it, 1 secret-queen.ga, 1 @@ -131485,7 +129956,6 @@ secretsbynature.nl, 1 secretsdujeu.com, 1 secretservercloud.ca, 1 -secretsofuniverse.in, 1 secretstomartialarts.tk, 1 secretworld.ml, 1 secretzone.bg, 1 @@ -131524,7 +129994,6 @@ secure-automotive-cloud.org, 1 secure-client-area.com, 1 secure-computing.net, 1 -secure-consult.com, 1 secure-graphic.de, 1 secure-gw.de, 1 secure-server-hosting.com, 1 @@ -131539,7 +130008,6 @@ securebot.ga, 1 securebuildingaccess.com, 1 securecheck360.com, 1 -securecrypto.ai, 1 secured-login.net, 1 secured.vote, 1 securedrop.org, 1 @@ -131580,10 +130048,12 @@ securist.nl, 1 securite.jp, 1 securiteincendie.fr, 1 +securitelandry.com, 1 securiti.ai, 1 securitum.pl, 1 security-24-7.com, 1 security-brokers.com, 1 +security-command.org, 1 security-xanthi.gr, 1 security.de, 1 security.gives, 1 @@ -131643,10 +130113,11 @@ secweb.org, 1 seda.wa.edu.au, 1 sedaliastpauls.org, 1 +sedattahir.com, 1 +sedefshipyard.com, 1 sedetc.gob.pe, 1 sedico.mx, 1 sedicomm.com, 0 -sedigit.com, 1 sedirector.net, 1 sedkisghairi.com, 0 sedky.net, 1 @@ -131689,6 +130160,7 @@ seemomclick.com, 1 seemorehere.tk, 1 seemyreality.tk, 1 +seenearme.com, 1 seenrooftopbangkok.com, 1 seeonce.co, 1 seerainer.com, 1 @@ -131714,7 +130186,7 @@ sef.co.za, 1 sefan.ru, 1 sefaratvisa.com, 1 -sefareshpardeh.com, 1 +sefareshpardeh.com, 0 seferleri.net, 1 sefinek.net, 1 sefirot.jp, 1 @@ -131753,7 +130225,6 @@ seguridadsistem.tech, 1 seguridadsistemtienda.tech, 1 seguro360.pt, 1 -seguroauto.com.br, 1 seguroestastu.com, 1 seguromail.com.br, 1 segurosbantrab.com.gt, 1 @@ -131768,7 +130239,6 @@ segv.fi, 1 sehat-solusi-makmur.com, 1 sehati.cafe, 1 -sehatpoin.com, 1 sehatyab.com, 0 sehbasarwar.com, 1 seheyah.me, 1 @@ -131809,7 +130279,6 @@ seisthewaytobe.com, 1 seistolzaufdich.de, 1 seistrup.dk, 1 -seitai-nabejun.jp, 1 seitai-taiyou.com, 1 seitanic-cookbook.de, 1 seitensieger.at, 1 @@ -131818,7 +130287,6 @@ seitenvergleich.at, 1 seitenvergleich.ch, 1 seitenvergleich.de, 1 -seitenwaelzer.de, 1 seitokai.jp, 1 seiulocal300.org, 1 seized.gov, 1 @@ -131857,7 +130325,7 @@ selayar.vacations, 1 selber-coden.de, 1 selbst-schmiede.de, 1 -selbst-schreinern.de, 1 +selbst-schreinern.de, 0 selbstverteidigung-catmove.de, 1 selco-himejiminami.com, 1 selcusters.nl, 1 @@ -131879,7 +130347,6 @@ selenegames.com, 1 seleondar.ru, 1 selesnafes.com, 0 -selexgalileo.com, 1 selezionebarbrboguaccero.cf, 1 selezionebarbrboguaccero.ga, 1 selezionebarbrboguaccero.tk, 1 @@ -131897,7 +130364,6 @@ selfdefinition.tk, 1 selfelec.be, 1 selfemployed.ga, 1 -selfguidedholiday.com, 1 selfici.com, 1 selfici.cz, 1 selfiehome.cz, 1 @@ -131934,7 +130400,6 @@ sellerssignals.com, 1 sellerstats.ru, 1 sellerteam.tk, 1 -sellerwiz.io, 1 sellguard.pl, 1 sellingsherpa.com, 0 sellitnow.me, 1 @@ -131984,7 +130449,6 @@ semantics.ga, 1 semaphore-studios.com, 1 sembosihosting.tk, 1 -semboyan35.com, 1 sembska.de, 1 sembyotic.com, 1 semcensurabrag.com.br, 1 @@ -132028,13 +130492,13 @@ semplicementelight.com, 1 sempoctet.ca, 1 sempreg.com, 1 -sempremelhoroficial.com, 1 sempreupdate.com.br, 1 semps-2fa.de, 1 semps-threema.de, 1 semps.de, 1 semrecc.gov, 1 semrush.com, 1 +sems-cnm.net, 1 semsec.net, 1 semtinde.com, 1 semver.ca, 1 @@ -132074,16 +130538,13 @@ sendaiouji.com, 1 sendbird.com, 1 sendbox.cz, 1 -sende.site, 1 sendengo.com, 1 sender.net, 1 sender.party, 1 sender.services, 1 senderdb.com, 1 senderismoinfantil.tk, 1 -senderosdelavida.com, 0 sendex.top, 1 -sendflowers.pk, 1 sendgb.com, 1 sendigperu.com, 1 sendingbee.com, 1 @@ -132138,7 +130599,6 @@ sense.eu.com, 1 sense.finance, 1 sense.hamburg, 1 -sensearly.ai, 1 sensebank.ua, 1 senseful-online.de, 1 senseful-online.eu, 0 @@ -132193,7 +130653,6 @@ sentralegal.com, 1 sentry.io, 1 sentrysoftware.com, 1 -sentrytwo.com, 1 sentworks.com, 0 senzaparole.de, 1 senzei.tk, 1 @@ -132258,7 +130717,6 @@ seoinc.com, 1 seojaguar.tk, 1 seokatka.tk, 1 -seolabuitest.azurewebsites.net, 1 seoline.cf, 1 seolister.cf, 1 seolisting.cf, 1 @@ -132287,7 +130745,6 @@ seoprnews.cf, 1 seopromotion.tk, 1 seoproof.tk, 1 -seoptimizan.com, 1 seoptimize.fr, 1 seoquero.com, 1 seoranker.tk, 1 @@ -132321,7 +130778,6 @@ seotipster.com, 1 seotoolset.tk, 1 seotrainingcamp.com, 1 -seotrend.hu, 1 seoturkey.tk, 1 seotutorials32.tk, 1 seoulartcollective.tk, 1 @@ -132337,7 +130793,7 @@ seozen.top, 1 sep-online.com.pl, 1 sep.cc, 1 -sepadental.com.my, 1 +sepadental.com.my, 0 separacioniglesiaestado.tk, 1 separate.ly, 1 sepehrmahan.com, 1 @@ -132386,7 +130842,6 @@ sercanazizoglu.com, 1 sercasindustry.tk, 1 sercoapprenticeships.uk, 1 -serdarakyildiz.com, 1 serdarwork.com, 1 serdengolpinar.tk, 1 serecoponsillo.it, 1 @@ -132435,7 +130890,6 @@ sergiomur.tk, 1 sergioogarciaa.es, 1 sergiopereiracouto.tk, 1 -sergiozygcunt.com, 1 sergiozygmunt.com, 1 sergiozygmunt.net, 1 sergiozygmunt.org, 1 @@ -132545,14 +130999,13 @@ serverlein.com, 1 serverlog.net, 1 serverlounge.eu, 1 -servermacher.de, 1 serverninja.tk, 1 serveroffline.net, 1 serverpedia.de, 1 servers.vg, 1 serverscan.com, 1 serversify.host, 1 -serversify.net, 1 +serversify.net, 0 serverstatus.tk, 1 serverstuff.info, 1 servertastic.com, 1 @@ -132576,8 +131029,8 @@ service.gov.scot, 1 service.gov.uk, 1 service.vic.gov.au, 0 -service220.ar, 1 service360group.com, 1 +serviceagahi.com, 1 serviceair.com.ar, 1 serviceautobaneasa.com, 1 serviceautobaneasa.ro, 1 @@ -132599,6 +131052,7 @@ serviceslotenmaker.nl, 0 servicesnetpro.com, 1 servicespot.ca, 1 +servicestechnologiquesam.ca, 1 servicestelle-jba.de, 1 servicevie.com, 0 servicewash.it, 1 @@ -132621,7 +131075,6 @@ serviettes-et-plus.com, 1 servilletas-de-papel.es, 1 servilletas-de-papel.mx, 1 -servinco.cl, 1 servingdumplings.com, 1 servingroddick.tk, 1 servingseniors.org, 1 @@ -132657,7 +131110,6 @@ servus.ca, 1 servx.org, 1 serwetki-papierowe.pl, 1 -serwis-militarny.net, 1 serwis-telewizorow.pl, 1 serwispv.eu, 1 serwistomy.pl, 1 @@ -132713,7 +131165,6 @@ seti-germany.de, 0 setin.srl, 1 setis.com.br, 1 -setit.co.za, 1 setkit.net, 1 setmore.com, 1 setof88.com, 1 @@ -132809,7 +131260,6 @@ sexlipetsk.club, 1 sexminister.tk, 1 sexmobil.de, 1 -sexocheb.com, 1 sexoclicker.com, 1 sexoclicker.net, 1 sexoclicker.org, 1 @@ -132825,7 +131275,6 @@ sexolipetsk.com, 1 sexologist.cf, 1 sexolviv.com, 1 -sexonr.com, 1 sexonsight.com, 1 sexonwax.com, 0 sexopolis.gr, 1 @@ -132874,7 +131323,6 @@ sexystine.net, 1 sexyteens.net, 1 sexyvenushuegel.org, 1 -seychely.com, 1 seyfarth.de, 1 seyirmuzik.com, 1 seykapuertasautomaticas.com, 1 @@ -133009,14 +131457,13 @@ sght.gallery, 1 sgitc.de, 1 sgj0.net, 1 -sgkoduyormu.com, 1 sglazov.ru, 1 sglcpa.com, 1 sglibellen.de, 1 sgm-eng.ru, 1 sgn0018.com, 1 sgnation.dk, 1 -sgnl.ai, 1 +sgnl.ai, 0 sgo-overbetuwe.nl, 1 sgomberafacile.it, 1 sgomberi.liguria.it, 1 @@ -133088,6 +131535,7 @@ shadowmorph.info, 1 shadowping.com, 1 shadowplus.net, 0 +shadowranks.com, 1 shadowsing.com, 1 shadowsocks.ac, 1 shadowsocks.au, 1 @@ -133138,7 +131586,6 @@ shahzaibm.com, 1 shaicoleman.com, 1 shaiden-porn.com, 1 -shaik.pl, 1 shailendra.in, 1 shailendra.org, 1 shailendramishra.com, 1 @@ -133221,9 +131668,7 @@ shanxiapark.com, 1 shanxiu.com, 1 shaofu.cf, 1 -shaoguang.com, 1 shaolin-kungfu.tk, 1 -shaoneng.com, 1 shaoning.com, 1 shaori.com, 1 shaoxia.xyz, 0 @@ -133292,7 +131737,6 @@ sharik-msk.ga, 1 sharik.ml, 1 sharine.nl, 1 -sharingbipolar.com, 1 sharingcolombia.com, 1 sharingphotos.co, 0 sharisharpe.com, 1 @@ -133342,7 +131786,6 @@ shavedpussypics.com, 1 shavingks.com, 1 shavit.space, 1 -shavitech.com, 1 shawangunkjournal.com, 1 shawanocountywi.gov, 1 shawarmapressfranchise.com, 1 @@ -133466,7 +131909,6 @@ shenandoahrealestate.org, 1 shenandoahwoodwork.com, 1 shenannigans.tk, 1 -shenbibi.com, 0 shenderman.ml, 1 sheng-wai.com, 1 shenghaiautoparts.com, 1 @@ -133474,7 +131916,6 @@ shenghuang.tk, 1 shengrenyu.com, 1 shengxinfu.com, 1 -shenshi.com, 1 shentengtu.idv.tw, 1 sheo-tech.fr, 1 shepherdsfriendly.co.uk, 1 @@ -133509,7 +131950,7 @@ shervinbeauty.com, 1 shervinsafineh.com, 1 shesherownceo.com, 1 -shespeakssport.co.za, 1 +shespeakssport.co.za, 0 shethbox.com, 1 shevans.com, 1 shevet-achim.tk, 1 @@ -133538,6 +131979,7 @@ shichidadoma.ru, 0 shico.org, 1 shidai88.cc, 1 +shidianguji.com, 1 shielder.com, 1 shielder.it, 1 shieldnet.tk, 1 @@ -133582,7 +132024,6 @@ shilled.tk, 1 shilohtownshipil.gov, 1 shilpaonline.tk, 1 -shilpent.com, 1 shilvister.net, 1 shimi.blog, 1 shimi.guru, 1 @@ -133605,7 +132046,6 @@ shinetsu-elec.sg, 1 shinglereplacementlv.com, 1 shinice.net, 1 -shiningservices.ie, 1 shiningstarlogistics.com, 1 shinju.moe, 0 shinkamigoto.tv, 1 @@ -133628,10 +132068,9 @@ shinyupai.com, 1 shiomiya.com, 1 shiovawn.net, 1 -ship-safely.com, 1 ship-technology.com, 1 shipaik.com, 1 -shipamax.com, 0 +shipamax.com, 1 shipard.com, 1 shipard.cz, 1 shipard.org, 1 @@ -133706,7 +132145,6 @@ shitposts.se, 1 shitproductions.org, 1 shittywok.tk, 1 -shitu.com, 1 shiva-temple.tk, 1 shivalikbank.com, 1 shivamber.com, 1 @@ -133806,7 +132244,6 @@ shop4d.com, 1 shop4im.com, 1 shop4you.de, 1 -shopacer.co.za, 1 shopadvies.nl, 1 shopapi.cz, 1 shopatkei.com, 1 @@ -133858,12 +132295,10 @@ shoplyft.co.za, 1 shopmalinka.cf, 1 shopmaxilife.com.ph, 1 -shopmenu.com, 1 shopmlr.com, 1 shopmontrose.com, 1 shopnemp.com, 1 shopnguyenlieumypham.com, 1 -shopnpr.org, 1 shopofturkey.com, 1 shoponlinedeals.tk, 1 shopopop.com, 1 @@ -134028,7 +132463,7 @@ shoppingyankee.ga, 1 shoppsb.com, 1 shoppyad.com, 1 -shopreme.com, 1 +shopreme.com, 0 shopshap.ru, 1 shopsici.com, 1 shopsmarter.com, 1 @@ -134040,6 +132475,7 @@ shopunderwear.tk, 1 shopunilever.com, 1 shopupnorth.com, 1 +shopx.co.il, 1 shopzona.biz, 1 shorakagroup.com, 1 shore.co.il, 1 @@ -134107,7 +132543,6 @@ shouldtest.net, 1 shouldtest.org, 1 shouohkai-dental.com, 1 -shoushui.com, 1 shoveltoss.com, 0 shovonhasan.com, 0 show.ad.jp, 1 @@ -134118,6 +132553,7 @@ showboathotelac.com, 1 showcats.tk, 1 showconfig.org, 1 +showdns.com, 1 showerdoorco.com, 1 showersnet.com, 1 showf.om, 1 @@ -134141,6 +132577,7 @@ showslot.com, 1 showsonar.com, 1 shoyuf.top, 1 +shp.is, 1 shpfy-manager.com, 1 shpil.by, 1 shpilevsky.name, 1 @@ -134207,7 +132644,6 @@ shuishou.com, 1 shuiyu.com, 1 shuizilan.com, 1 -shuizu.com, 1 shukatsu-ichiba.com, 1 shulan.moe, 1 shuletime.ml, 1 @@ -134286,7 +132722,6 @@ sibalogtv.com.mx, 1 sibanyestillwater.com, 1 sibasiach.ch, 1 -sibauto.club, 1 sibekohirescaffolding.co.za, 1 siberas.de, 1 siberia.gq, 1 @@ -134305,7 +132740,6 @@ sibifood.ru, 1 sibintek.ru, 1 sibirium-red.ga, 1 -sibiuindependent.ro, 0 sibleycounty.gov, 1 sibleycountyattorney.gov, 1 sibleyla.gov, 1 @@ -134334,6 +132768,7 @@ sicksadworld.space, 1 sicomasp.com, 1 sicurezza24.info, 1 +sicurezzalavoro24.com, 1 sicurezzasud.it, 1 sicvisuals.com, 1 sid500.com, 1 @@ -134342,13 +132777,11 @@ sidaways.co.uk, 1 siddhalepa.com, 1 siddhamehta.tk, 1 -siddigsami.com, 1 sidechannel.blog, 1 sidechannel.media, 1 sidecredit.ga, 1 sidedoorapp.com, 1 sidefx.com, 0 -sideleau.com, 1 sidemount-tauchen.com, 1 sideofburritos.com, 1 sideofburritos.social, 1 @@ -134363,7 +132796,6 @@ sidianbank.co.ke, 1 sidik.web.id, 1 sidingsmedia.com, 1 -sidingvault.com, 1 sidiprojects.us, 1 sidirokastro.ga, 1 sidium.de, 1 @@ -134383,6 +132815,7 @@ siecon-it.com, 1 siega.pl, 1 siegemund-frankfurt.de, 1 +siegfried.com.pe, 1 sieglercars.ch, 1 siegprod.tk, 1 sieh.es, 0 @@ -134445,7 +132878,7 @@ sightful.eu, 1 sightful.nl, 1 sightglasspartners.com, 1 -sightmachine.com, 1 +sightmachine.com, 0 sightseeing.news, 1 sighup.nz, 1 sigi.tk, 1 @@ -134481,6 +132914,7 @@ signaldc.com, 1 signaldp.com, 0 signalmaps.co.uk, 1 +signalo.fr, 1 signalsblog.ca, 1 signalstart.com, 1 signalstuff.com, 1 @@ -134517,11 +132951,10 @@ signmore.com, 1 signmycode.com, 1 signora.gr, 1 -signpath.io, 1 +signpath.io, 0 signrequest.com, 1 signrightsigns.co.uk, 1 signs4vehicles.co.uk, 1 -signsatelier.com, 1 signsdance.uk, 1 signsforhope.org, 1 signtul.com, 0 @@ -134533,6 +132966,7 @@ signwriting.co.nz, 1 sigparser.com, 0 sigptr.me, 1 +sigrid-mair.at, 1 sigromid-construct.ro, 1 sigsync.com, 1 sigterm.no, 1 @@ -134543,6 +132977,7 @@ sihy.uk, 1 siika.solutions, 1 siikaflix.tv, 1 +siikli.fi, 1 siimonreynolds.com, 1 siimustilak.edu.ee, 1 sijem.si, 1 @@ -134571,6 +133006,7 @@ silbox.ch, 1 sildenafilcitrate.cf, 1 sildenafilcitrate100mg.ga, 1 +sile.edu.sg, 1 silent-clean.de, 1 silent.se, 1 silentartifact.org, 1 @@ -134588,14 +133024,11 @@ silhak-automation.de, 1 silhouette-api.com, 1 silicateillusion.org, 1 -silicon-north.com, 1 -silicon-vision.com, 1 siliconheartlandohio.gov, 1 siliconlightworks.com, 1 siliconlowcode.com, 1 siliconvalley.center, 1 silina.tk, 1 -siliton.pl, 1 silk, 1 silk.com, 1 silkdnb.com.au, 1 @@ -134724,7 +133157,6 @@ silvertoncolorado.com, 1 silvertorrents.cf, 1 silverwaregames.io, 1 -silverwhale.com, 1 silverwind.io, 1 silverwolf.cn, 1 silvestar.codes, 1 @@ -134770,7 +133202,6 @@ simeam.cloud, 1 simeam.de, 1 simelek.com, 1 -simeonoff.ninja, 1 simeononsecurity.ch, 1 simeononsecurity.com, 1 simetal.ch, 0 @@ -134799,7 +133230,6 @@ simon-mueller.de, 1 simon.butcher.name, 1 simon.gr, 1 -simon.lc, 1 simon3k.moe, 1 simonastallone.com, 1 simonbondo.dk, 1 @@ -134845,7 +133275,6 @@ simpelkoken.org, 1 simpelkredit.dk, 1 simpeo.org, 1 -simpex.ch, 1 simphony.cz, 1 simple-perfect.tk, 1 simple-test-to-demonstrate-the-maximum-length-of-a-domain-name.com, 1 @@ -134896,7 +133325,6 @@ simpleshow.com, 1 simplesite.hu, 1 simplespy.tk, 1 -simplesummerreading.com, 1 simpletiger.com, 1 simpletools.tk, 1 simpletrace.nz, 1 @@ -134913,7 +133341,6 @@ simplifiedlaws.com, 1 simplifixed.com, 1 simplifyem.com, 1 -simplifyhousechores.com, 1 simplifyingcollege.com, 1 simplifylivelove.com, 1 simplifyvms.com, 1 @@ -134938,13 +133365,11 @@ simplydonot.com, 1 simplydonut.com, 1 simplydrivennapasonoma.com, 1 -simplyeducate.me, 0 simplyfitapp.com, 1 simplyfitperth.com.au, 1 simplyfixit.co.uk, 1 simplyfranciscan.org, 0 simplyfuture.net, 1 -simplyhealthyfamily.org, 1 simplyhelen.de, 0 simplyirfan.com, 1 simplyjet.tk, 1 @@ -134966,7 +133391,7 @@ simpson.edu, 1 simpsoncountyky.gov, 1 simpsonizeme.co, 1 -simpul.nl, 1 +simpul.nl, 0 simpvp.net, 1 simrail.cn, 1 simrail.nl, 1 @@ -134976,7 +133401,6 @@ simsapras.my.id, 1 simscale.com, 1 simsek.biz.tr, 1 -simsid-dev-adpapi.azurewebsites.net, 1 simsid-dev-applnchrapi.azurewebsites.net, 1 simsid-dev-audit.azurewebsites.net, 1 simsid-dev-datamanager.azurewebsites.net, 1 @@ -135062,9 +133486,6 @@ singaporebrand.com.sg, 1 singaporeccc.org.sg, 1 singaporeconventionweek.sg, 1 -singaporecriminaldefencelawyer.com, 1 -singaporedivorcelawyer.com, 1 -singaporefamilylawyer.com, 1 singaporepsa.com, 1 singaporetoptentravel.com, 1 singaporewebdesign.tk, 1 @@ -135100,7 +133521,6 @@ sinisazec.com, 1 sinistragiovanile.tk, 1 sinkaray.com, 1 -sinkhole-florida.com, 1 sinkholerepairsflorida.com, 1 sinkip.com, 1 sinklaw.com, 1 @@ -135148,7 +133568,6 @@ sinterama.biz, 1 sinterklaas-spelletjes.nl, 1 sinterklaasnet.tk, 1 -sintomasdocancer.com, 1 sintsationeel.nl, 1 sinuate.gq, 1 sinuel.ai, 1 @@ -135271,6 +133690,7 @@ sistem-maklumat.com.my, 1 sistema-trenirovok.ml, 1 sistema20k.tk, 1 +sistemair.at, 1 sistemair.be, 1 sistemair.it, 1 sistemano.ru, 1 @@ -135324,6 +133744,7 @@ sitedynamix.co.uk, 1 siteforce.com, 1 sitehizlandir.com, 1 +siteinlight.com, 1 siteintelstage.com, 1 siteinteressant.net, 1 sitejustice.com, 1 @@ -135337,7 +133758,6 @@ sitemaxiphilippe.ch, 1 sitemydesk.fr, 1 sitenv.org, 1 -sitepentruprofesori.com, 0 sitepex.com, 1 siteplug.com, 1 sitepokupok.ru, 1 @@ -135469,12 +133889,14 @@ skagen-feriebolig.dk, 1 skaiman.ga, 1 skaitliukas.tk, 1 +skakun.io, 1 skalec.org, 1 skalniak.pl, 1 skamper.tk, 1 skandia.se, 1 skankofamerica.com, 1 skanray.com, 1 +skara.se, 1 skarke.se, 1 skarox.com, 1 skarox.ee, 1 @@ -135626,7 +134048,6 @@ skinrejuvenate.com.au, 1 skinrender.ga, 1 skinscollection.com, 1 -skinsell.com, 1 skinseries.cf, 1 skinsolution.ga, 1 skinsolutionclinic.com, 1 @@ -135716,7 +134137,6 @@ skovik.com, 1 skpark.cf, 1 skpk.de, 1 -skpracta.info, 1 skpracta.tk, 1 skprhome.i234.me, 1 skram.de, 1 @@ -135746,7 +134166,7 @@ sktst.dk, 1 skubala.cz, 1 skuizy.ddns.net, 1 -skulblaka.ch, 1 +skulblaka.ch, 0 skuldwyrm.no, 1 skullcrusher.tk, 1 skullowner.nl, 1 @@ -135770,7 +134190,6 @@ sky-coach.com, 1 sky-coach.nl, 1 sky-dogs.com, 1 -sky-driver.ch, 1 sky-live.fr, 1 sky-motion.de, 1 sky-music.tk, 1 @@ -135800,7 +134219,6 @@ skycert.nz, 1 skychan.org, 1 skyclinic.ua, 0 -skycmd.net, 1 skyder.com.mx, 0 skyder.mx, 0 skydivegeronimo.com.au, 1 @@ -135874,7 +134292,6 @@ skypech.com, 1 skypicker.com, 1 skypicshd.com, 1 -skypioneer.com, 1 skyportcloud.com, 1 skyqueen.cc, 1 skyquid.co.uk, 1 @@ -135966,12 +134383,10 @@ slashnroses.com, 1 slashnroses.nl, 1 slashorg.net, 1 -slashrepeat.com, 1 slashtonic.com, 1 slaskie.pl, 1 slate.fr, 1 slate.to, 1 -slatechart.com, 1 slated.ie, 0 slatemc.com, 1 slatemc.fun, 1 @@ -136169,6 +134584,7 @@ slovenskycestovatel.sk, 1 slow.social, 1 slow.zone, 0 +slowakei.international, 1 slowandsimple.co, 1 slowapi.com, 1 slowblinkmainecoons.com, 1 @@ -136200,6 +134616,7 @@ slunecnice.cz, 1 slunyavchik.tk, 1 sluo.org, 1 +slushat-tekst-pesni.ru, 1 slushe.com, 1 slushpool.com, 1 sluto.co.jp, 1 @@ -136228,7 +134645,6 @@ sma-gift.com, 1 sma.org.pl, 1 sma.org.rs, 1 -smaakvolnh.nl, 1 smackhappy.com, 0 smadav.ml, 1 smahelova.cz, 1 @@ -136326,7 +134742,6 @@ smartblock.cloud, 1 smartboardesl.com, 1 smartbooqing.com, 1 -smartbuytrends.com, 1 smartcard.tools, 1 smartcentres.com, 1 smartcents.gold, 1 @@ -136345,7 +134760,6 @@ smartdigital.ga, 1 smarteco.tk, 1 smartedukasi.co.id, 1 -smartem.com, 1 smartenspaces.com, 1 smarters-protv.com, 1 smarterskies.gov, 1 @@ -136394,7 +134808,6 @@ smartlogstock.com, 0 smartlogtower.com, 1 smartlooks.es, 1 -smartmail.io, 1 smartmail24.de, 1 smartme.pl, 1 smartmeal.ru, 1 @@ -136421,6 +134834,7 @@ smartphonepliable.co, 1 smartphonesecretary.com, 1 smartphonesolution.tk, 1 +smartpiggy.co.uk, 1 smartplus.ae, 1 smartpolicingplatform.com, 1 smartpos.net.br, 1 @@ -136432,6 +134846,7 @@ smartrecruiters.com, 1 smartrentacar.ro, 1 smartrequest.com, 1 +smartrobbie.com.au, 1 smartroutes.ie, 1 smartroutes.io, 1 smartsecurity.com.ua, 1 @@ -136557,7 +134972,7 @@ smime.io, 1 smipty.cn, 1 smipty.com, 1 -smirkhat.org, 1 +smirkhat.org, 0 smirniopoulos.gr, 1 smishnik.tk, 1 smit.com.ua, 1 @@ -136629,7 +135044,7 @@ smoking-robot.com, 1 smokinghunks.com, 1 smokingtapes.ga, 1 -smokonz.com, 1 +smokonz.com, 0 smokybay.is, 1 smokymountaingames.org, 1 smokyshores.radio, 0 @@ -136661,6 +135076,7 @@ smotret.tv, 1 smotrowrelated.com, 1 smousebros.com, 1 +smpelec.fr, 0 smphysio.com.au, 1 smplace.com, 1 smplr.uk, 1 @@ -136733,14 +135149,11 @@ snackbyincome.sg, 1 snackmindful.com, 1 snacktakos.gr, 1 -snackworks.ca, 1 snackworks.com, 1 snacky.nl, 1 snad.org.sa, 1 -snafarms.com, 1 snafu.cz, 1 snagator.com, 1 -snail.observer, 1 snaildos.tk, 1 snajdr.online, 1 snajdrova.eu, 1 @@ -136752,6 +135165,7 @@ snap-ci.com, 1 snapaffiliate.net, 1 snapappointments.com, 1 +snapbuy.shop, 1 snapbuzz.tk, 1 snapewife.com, 1 snapfairs.com, 1 @@ -136763,6 +135177,7 @@ snapshades.com, 1 snapware.tk, 1 snapworks.net, 1 +snapzfs.com, 1 snarf.in, 1 snatch-note.tk, 1 snatertlc.it, 1 @@ -136838,6 +135253,7 @@ snippet.ml, 1 snippet.wiki, 0 snippetpress.com, 1 +snit.tn, 1 snitch.rocks, 1 snitchnet.tk, 1 snitko.pro, 1 @@ -136860,10 +135276,12 @@ snoupon.com, 1 snovinky.cz, 1 snow-companies.com, 1 +snow-flowers.com, 1 snow-service.it, 1 snowalerts.nl, 1 snowapparel.us, 1 snowatka.com, 1 +snowballeffect.co.nz, 1 snowboard-break.tk, 1 snowboardforum.tk, 1 snowcat.tk, 1 @@ -136953,7 +135371,6 @@ socal-babes.com, 1 socalaccessandvideo.com, 1 socalcoda.org, 1 -soccerconnect.org, 1 soccerking-store.com, 1 soccerquarters.tk, 1 soccers.fr, 1 @@ -137027,7 +135444,6 @@ socials.gq, 1 socialsafe.net, 1 socialsecurity.gov, 0 -socialsecurityalerts.news, 1 socialstandards.com, 1 socialstrata.com, 1 socialstyrelsen.gl, 1 @@ -137154,6 +135570,7 @@ soft-search-system.tk, 1 soft.taipei, 1 soft41.ru, 1 +softaim.io, 1 softambulance.com, 1 softandbouncy.co.uk, 1 softanka.com, 1 @@ -137163,13 +135580,11 @@ softchin.ir, 1 softcleanr.shop, 0 softcloudone.com, 1 -softcom.net, 1 softcompany.tk, 1 softcomplex.com, 1 softconcept.pt, 1 softcreatr.com, 1 softcreatr.de, 1 -softekgames.com, 1 softekontrack.com, 1 softelectronet.tk, 1 softenger.com, 1 @@ -137229,7 +135644,8 @@ softwing.de, 1 softwsabri.be, 1 softx.tk, 1 -sofyad.com, 0 +sofy.rs, 1 +sofyad.com, 1 sog-gilde.tk, 1 sogec-digital.fr, 1 sogesel.es, 1 @@ -137242,7 +135658,6 @@ sogravatas.com.br, 1 sogravatas.net.br, 1 sogut.bel.tr, 1 -sogutma.com.tr, 1 sohamroy.me, 1 sohanakhan.tk, 1 soherco.cl, 1 @@ -137277,7 +135692,6 @@ sol.de, 1 sol24.net, 1 sol4.ch, 1 -solaland.co.uk, 1 solalnathan.com, 1 solalt.com, 1 solana-active.tk, 1 @@ -137318,6 +135732,7 @@ solarpanels.tk, 1 solarpanelscentralcoast.com, 1 solarplan-berlin.de, 1 +solarpoolheatingsa.co.za, 1 solarscan.com, 1 solarseason.ga, 1 solarstrom.net, 1 @@ -137386,7 +135801,6 @@ solihulllionsclub.org.uk, 1 solihullpcrepairs.co.uk, 1 solikreis-stuttgart.tk, 1 -solimex.cl, 1 solinger-bestatterverband.de, 1 solipsists.tk, 1 solisrey.es, 1 @@ -137407,7 +135821,7 @@ sollahlibrary.com, 1 sollea.co, 1 sollet.ac, 1 -sollishealth.com, 1 +sollishealth.com, 0 solmek.co.uk, 1 solnascentepapelaria.com.br, 1 solntsezaschitnye-ochki.tk, 1 @@ -137467,6 +135881,7 @@ solutiontutorials.com, 1 solutys-btp-logistic.com, 1 solutysmultiservices.com, 1 +soluxia.ca, 1 soluxia.co, 1 soluzionefightlist.altervista.org, 1 soluzionifightlist.cf, 1 @@ -137523,7 +135938,6 @@ sommefeldt.com, 1 sommeil.cl, 1 sommeilsante.com, 1 -sommer-reitmajer.de, 1 sommercamp.wien, 0 sommerhusudlejning.com, 1 sommerkult.de, 1 @@ -137533,9 +135947,9 @@ somni.one, 1 somnus.com, 1 somogyivar.hu, 1 +somosanna.hu, 1 somosfin-app.com, 1 somosgesath.com, 1 -somosgratitude.com.br, 1 somoslaarmenia.com, 1 somosmasa.com, 1 somosweb.cf, 1 @@ -137596,7 +136010,6 @@ songi.net, 1 songlab.ai, 1 songlifty.com, 1 -songshu.com, 1 songsigrewupsinging.com, 1 songslaura.tk, 1 songsonline.tk, 1 @@ -137604,7 +136017,6 @@ songsthatsavedyourlife.com, 1 songtianyi.com, 1 songun.ml, 1 -songyan.com, 1 songyang.cn, 1 songzhuolun.com, 1 sonia.ai, 1 @@ -137632,7 +136044,6 @@ sonlapc.vn, 1 sonmark.ru, 1 sonneimgepaeck.at, 1 -sonnenbergharrison.law, 1 sonnendeal.ml, 1 sonnendeal.tk, 1 sonnenta.de, 1 @@ -137700,7 +136111,6 @@ sopilov.tk, 1 sopira.ru, 1 sopitootsipargid.ee, 1 -soply.com, 1 soportelatino.ml, 1 sopr.cz, 1 sopra.tk, 1 @@ -137801,7 +136211,6 @@ sossinistres.ca, 1 sostacancun.com, 1 soste.fi, 0 -sosteric.si, 1 sosyalevin.com, 1 sosyalitya.com, 1 sosysadmin.com, 1 @@ -137839,7 +136248,6 @@ soukka-seura.fi, 1 soukodou.jp, 1 soul-of-style.com, 1 -soul-source.co.uk, 1 soul2path.com, 1 soulc.ml, 1 soulcasa.com.br, 1 @@ -137882,7 +136290,7 @@ soundcamp.org, 1 soundcharts.com, 0 soundclick.com, 1 -soundcloud-to-mp3.com, 1 +soundcloud-to-mp3.com, 0 soundcloud.com, 1 soundcloudcommunity.com, 1 soundee.com, 1 @@ -137916,7 +136324,6 @@ soundtrace.com, 1 soundtrash.tk, 1 soundtube.tk, 1 -soundviewcaterers.com, 1 soundwavefestival.tk, 1 soundzimega.tk, 1 soungui.cm, 1 @@ -137962,7 +136369,6 @@ southbaycu.com, 1 southbaylatherapy.com, 1 southboroughma.gov, 1 -southbranchinn.com, 1 southbridge-ma.gov, 1 southcarolinacertifiedcourtreporters.com, 1 southcarolinacourtreporters.com, 1 @@ -137986,6 +136392,7 @@ southelginumc.org, 1 southerncross.tk, 1 southerncrosscables.com, 1 +southernexportterminals.com.au, 1 southernfashiondecorbd.com, 1 southernfirst.com, 1 southernforge.com, 1 @@ -137995,7 +136402,6 @@ southernlights.club, 1 southernlights.gq, 1 southernlights.ml, 1 -southernlights.xyz, 1 southernmost.us, 1 southernoregon.org, 1 southernsecurity.org, 1 @@ -138004,7 +136410,6 @@ southessexstatus.co.uk, 1 southfieldtownshipmi.gov, 1 southfloridaopenhousesearch.com, 1 -southforkamericanriver.net, 1 southgatemi.gov, 1 southjacksonville-il.gov, 1 southjerseyhomes.info, 1 @@ -138012,7 +136417,6 @@ southlakenissanparts.com, 1 southlaketx.gov, 1 southlandcasino.com, 0 -southlandssallc.com, 1 southmarengo.com, 1 southmarengoal.gov, 1 southmelbourne.apartments, 1 @@ -138024,6 +136428,7 @@ southphoenixair.tk, 1 southportland.gov, 1 southridgeservices.com, 1 +southrock.com, 1 southsands.com, 1 southshoreautowash.com, 1 southside-crew.com, 1 @@ -138040,6 +136445,7 @@ southwestportraits.com, 1 southwestpremierurology.com, 1 southwestwildlife.org, 1 +southwickgrouprealestate.com, 1 southwickma.gov, 1 southwindsor-ct.gov, 1 southyorkshire-pcc.gov.uk, 1 @@ -138093,7 +136499,6 @@ sowhatresearch.com.au, 1 sowlocaloh.com, 1 sowncloud.de, 1 -sowndfinancial.com, 1 sowsmallgarden.com, 1 sowtarabiya.com, 1 soxfirst.com, 1 @@ -138185,7 +136590,6 @@ spacelandpark.ga, 1 spacelift.io, 1 spacenation.online, 1 -spacenerd.it, 1 spaceon.tk, 1 spacepirates.tk, 1 spacepixel.ml, 1 @@ -138264,7 +136668,6 @@ spanyolul.hu, 1 spar-dich-frei.com, 1 spar-ics.com, 1 -spar-ni.co.uk, 1 spar.at, 1 spar.hr, 1 spar.hu, 1 @@ -138291,6 +136694,7 @@ sparkeddigital.ca, 1 sparkedge.eu, 1 sparkforautism.org, 1 +sparkhaven.net, 1 sparki.be, 1 sparkingscala.com, 1 sparkl.fm, 1 @@ -138334,7 +136738,6 @@ spasem-park.tk, 1 spassamgeraet.top, 1 spasskellner-comedykellner.ch, 1 -spatialflunky.one, 1 spatialnom.com, 1 spatiugratis.tk, 1 spatter.cf, 1 @@ -138342,7 +136745,6 @@ spatzenwerkstatt.de, 1 spawn.cz, 1 spaworldhouston.com, 1 -spazioasperger.it, 1 spaziobenedetti.com.br, 1 spaziotennis.com, 1 spazturtle.co.uk, 1 @@ -138385,7 +136787,6 @@ speaklanguages.com, 1 speakol.com, 1 spear.ga, 1 -spearbearer.net, 1 speargames.net, 1 spec-antikor.by, 1 spec-ranking.pl, 1 @@ -138502,14 +136903,13 @@ spellcheck24.net, 1 spellchecksquatting.com, 1 spellic.com, 1 -spelling.ml, 1 -spellslinger.space, 1 spencerfane.com, 1 spencernc.gov, 1 -spencerpauly.com, 1 +spencerpauly.com, 0 spend.cloud, 1 spendable.money, 1 spendd.co, 1 +spendebt.com, 1 spendedge.com, 1 spenderservice.net, 1 spendesk.com, 1 @@ -138531,8 +136931,10 @@ spettacolocame.ga, 1 speventos.es, 1 speww.com, 1 +speycaster.net, 1 speztech.ru, 1 spheraes-amc.it, 1 +spheraes.com, 1 sphereblur.com, 1 spherefluidics.com, 1 spherejoias.com.br, 1 @@ -138543,7 +136945,6 @@ sphynx.cat, 1 sphynxboyz.com.au, 1 spi-ind.com, 1 -spicandspanroofrestoration.com.au, 1 spice-club.tk, 1 spicegirlschart.tk, 1 spiceislandhome.com, 1 @@ -138673,6 +137074,7 @@ splconsulenza.it, 1 spleis.no, 1 splendadent.it, 1 +splendidaccounts.pk, 1 splendorservizi.it, 1 spletna.net, 1 splex.com, 1 @@ -138779,6 +137181,7 @@ sportihome.com, 1 sportiiz.fr, 1 sportinfon.cf, 1 +sporting.rocks, 1 sportingclubdacruz.pt, 1 sportity.com, 1 sportivo.cf, 1 @@ -138805,7 +137208,6 @@ sportposch.com, 1 sportprint.hr, 1 sportraucher.tk, 1 -sportrent.it, 1 sports-colleges.com, 1 sports-equipmen.tk, 1 sports-news-today.ml, 1 @@ -138816,7 +137218,6 @@ sportsandnews.tk, 1 sportscanada.tk, 1 sportscentreuk.co.uk, 1 -sportscpg.bi, 1 sportsdans.tk, 1 sportsdeck.tk, 1 sportsdestinations.com, 1 @@ -138850,7 +137251,6 @@ sportwars.net, 1 sportwettenbonus.de, 1 sportwettenschweiz.net, 1 -sportwins.ru, 1 sportygirlsjewels.ga, 1 sportztalk.com, 1 spot-cleaner.tk, 1 @@ -138894,7 +137294,6 @@ spravka-internet.tk, 1 spravka.tk, 1 spravki.cf, 1 -spravochnick.ru, 1 sprawdz-nip.pl, 1 sprawdzanie-pozycji.pl, 1 sprawnymarketing.pl, 1 @@ -138950,7 +137349,6 @@ springgrillhouse.com, 1 springgrovepa.gov, 1 springharveststore.com, 1 -springhilldumpsterrental.com, 1 springhillmaine.com, 1 springhow.com, 1 springinklee.com, 1 @@ -138962,7 +137360,6 @@ springspeedshop.com, 1 springtxcarpetcleaning.com, 1 springwellclinic.co.uk, 1 -sprintgrad.com, 1 sprintkitchen.com, 1 sprintlee.com, 1 sprintswac.tk, 1 @@ -139008,7 +137405,6 @@ sputnik1net.org, 1 sputnikvaccine.com, 1 spweb.cz, 1 -spworlds.wiki, 1 spx.com, 1 spy-net.tk, 1 spychala-it.de, 1 @@ -139076,6 +137472,7 @@ square.ly, 1 square.mx, 1 square.site, 1 +square1.de, 1 squarecdn.com, 1 squaredancedance.tk, 1 squaredaway.co.nz, 1 @@ -139093,7 +137490,6 @@ squareinvite.com, 1 squareinvoices.com, 1 squarelab.it, 1 -squaremeter24.com, 1 squaremetres.ng, 1 squaremktg.com, 1 squareoffer.com, 1 @@ -139121,6 +137517,7 @@ squids.space, 1 squiresinsurance.net, 1 squirex2.com, 1 +squirrelventures.vc, 1 squirted.com, 1 squirtingpussygirl.com, 1 squirtqueen.org, 1 @@ -139144,6 +137541,7 @@ srb.help, 1 srbc.gov, 1 srblaw.co.nz, 1 +src.cm, 1 src.fedoraproject.org, 1 srcbolt.com, 1 srchicmodas.com.br, 1 @@ -139314,7 +137712,6 @@ sslsurvey.de, 1 ssltrus.com.cn, 1 ssm-techmarketing.tk, 1 -ssma.it, 1 ssmato.me, 1 ssmd.tk, 1 ssmhumanesociety.ca, 1 @@ -139346,7 +137743,6 @@ sst.ru, 1 sstaging.com, 1 sstarnation.com, 1 -ssu.edu.ph, 1 ssuiteoffice.com, 1 ssuitesoft.com, 1 st-annen-museum.de, 1 @@ -139495,6 +137891,7 @@ stahlzart.at, 1 stahlzart.de, 1 stail.eu, 1 +stainfilm.com, 0 stainhaufen.de, 1 stainless-steel-cookware.tk, 1 stainlessgames.com, 1 @@ -139623,6 +138020,7 @@ stansberryresearch.com, 1 stansweather.net, 1 stantabler.com, 0 +stanthestuccoman.com, 1 stanthony-hightstown.net, 1 stantonca.gov, 1 stantoncountyne.gov, 1 @@ -139649,7 +138047,6 @@ starburns.audio, 1 starbusiness.ml, 1 starbyte.co.uk, 1 -starchild.uk, 1 starcitizen-kantine.de, 1 starcitizen.tools, 1 starcity.bg, 1 @@ -139691,6 +138088,7 @@ staring.tk, 1 staringer.net, 1 starinup.com, 1 +starinvestama.co.id, 1 starka.st, 1 starken.com, 1 starking.net.cn, 1 @@ -139735,11 +138133,11 @@ starsam80.net, 1 starsbattle.net, 1 starsessions.cc, 1 +starsevengames.com, 1 starsguru.com, 1 starship.xyz, 1 starsing.bid, 1 starskim.cn, 1 -starslabor.com, 1 starsoft.io, 1 starspie.com, 1 starsplay.com, 1 @@ -139782,7 +138180,7 @@ startplaying.games, 1 startpoint.tk, 1 starts.sh, 1 -startspacehq.com, 1 +startspacehq.com, 0 startup-stack.com, 1 startup-stack.tech, 1 startupbros.com, 1 @@ -139805,7 +138203,6 @@ startupstories.gr, 1 startupswitzerland.com, 1 startupum.ru, 1 -startupweb.io, 1 startw.cf, 1 startwithcompassion.com, 1 startwithpieter.com, 1 @@ -139893,7 +138290,6 @@ statsrun.com, 1 statueofliberty.org, 1 status.events, 1 -status.law, 1 status.vg, 1 statusbadges.me, 1 statusboard.eu, 1 @@ -139916,7 +138312,7 @@ stay-curious.at, 1 stay.at, 1 stay4all.nl, 1 -stayaka.com, 1 +stayatgatewayinn.com, 1 stayby.me, 1 staycurrent.eu, 1 staycurrent.nl, 1 @@ -139974,6 +138370,7 @@ stdssr.com, 1 ste2.de, 1 steacy.tech, 1 +steadfastcontent.com, 1 steak-kojiro.com, 1 steakovercooked.com, 1 stealingheather.com, 1 @@ -140029,7 +138426,6 @@ steelesmemorialchapel.com, 1 steelfirm.ga, 1 steelframejourney.com, 0 -steelfxpatinas.com, 1 steelmounta.in, 1 steelnavi.jp, 1 steelpoint.com.pl, 1 @@ -140051,6 +138447,7 @@ stefamedia.com, 1 stefan-bayer.eu, 1 stefan-henning.de, 1 +stefan-joachim.de, 1 stefan-karstens.de, 1 stefan-rothe.ch, 1 stefan-schlueter.de, 1 @@ -140074,12 +138471,10 @@ stefanrusie.ro, 1 stefanvd.net, 1 stefany.cloud, 1 -stefany.eu, 1 stefchapman.tk, 1 stefcraps.tk, 1 steffenmeister.com, 1 steffi-in-australien.com, 1 -steffi-knorn.de, 1 steffko.net, 1 stefpastoor.nl, 0 stegenevieve.gov, 1 @@ -140117,7 +138512,6 @@ stelfox.net, 1 steliosmanousakis.gr, 1 stella-base.com, 0 -stella-shop.eu, 1 stellacinderella.net, 1 stellaconnect.net, 1 stellamccartney.com, 1 @@ -140167,7 +138561,6 @@ stemoplinks.nl, 1 stempelfarben.de, 1 stemps.pl, 1 -stemsure.ro, 0 stena.cf, 1 stenaro.ch, 1 stencilsaustralia.com.au, 0 @@ -140260,7 +138653,7 @@ sterling.com, 1 sterlingbuilt.design, 1 sterlingcomputers.com, 1 -sterlingcustomsheetmetal.com, 1 +sterlingcustomsheetmetal.com, 0 sterlingheights.gov, 1 sterlinginsurance.com.au, 0 sterlingpropertiesmi.com, 1 @@ -140326,7 +138719,6 @@ stevengrech.com, 1 stevenjacobs.be, 1 stevenjacobs.eu, 1 -stevenkendypierre.com, 1 stevenkobes.com, 1 stevenmdriving.co.uk, 1 stevenroddis.com, 1 @@ -140335,7 +138727,6 @@ stevenshame.com, 1 stevenski.com, 0 stevensonal.gov, 1 -stevensontaxservices.com, 1 stevensonvillager.com, 1 stevenspoint.gov, 1 steventress.com, 1 @@ -140356,6 +138747,7 @@ stevezheng.tk, 1 steviate.com, 1 steviate.de, 1 +steviesafespaces.com, 1 stevin.com, 1 stevinson.org, 1 stewards.tk, 1 @@ -140368,14 +138760,12 @@ stfox.com, 1 stfrancisnaugatuck.org, 1 stg-0-con.com, 1 -stg-cjsm.net, 1 stg-investing.ru, 1 stg-logistic.com, 1 stg-tideplatform.uk, 1 stgabrielstowepa.org, 1 stgb.org, 1 stgeorgegolfing.com, 1 -stgeorgehub.com, 1 stgeorgeks.gov, 1 stgeorgesbank.com.pa, 0 stgermainwi.gov, 1 @@ -140608,7 +138998,6 @@ stockway.tk, 1 stockx.com, 1 stockx.io, 1 -stockyards.com, 1 stocp.org, 1 stoddardcountyclerk.gov, 1 stoddardwi.gov, 1 @@ -140651,6 +139040,7 @@ stomatolog-czestochowa.gq, 1 stomatolog.cf, 1 stomatolog.ga, 1 +stomatologia-narkoza.pl, 1 stomatologiya.gq, 1 stomatologiya.ml, 1 stompai.com, 1 @@ -140687,8 +139077,6 @@ stoneydsp.com, 1 stoningtonboroughct.gov, 1 stonkslab.com, 1 -stonnaltd.com, 1 -stonnastructures.co.uk, 1 stonsil.com, 1 stonystratford.org, 1 stoom-stichting.nl, 1 @@ -140839,7 +139227,6 @@ storyliebe.de, 1 storylingoo.com, 1 storymalayalam.com, 1 -storyoneforty.com, 1 storysift.news, 1 storytea.top, 1 storytel.ae, 1 @@ -140892,6 +139279,7 @@ stpip.com, 1 stpip.net, 1 stps.dk, 0 +str470s.duckdns.org, 1 str8hd.com, 1 str92.com, 1 straalatelier.com, 1 @@ -140900,7 +139288,6 @@ stradsolutions.ga, 1 strafe-muss-sein.at, 1 strafensau.de, 1 -straffordpub.com, 1 strahlende-augen.info, 1 strahlkennel.com, 1 strahovanienet.tk, 1 @@ -140979,8 +139366,8 @@ strategy66.com, 1 strategybusiness.ga, 1 strategysystems.com, 1 -stratejm.com, 1 stratekispiel.at, 1 +stratexonline.com, 1 stratford.ac.uk, 1 stratfordct.gov, 1 stratfordnh.gov, 1 @@ -141066,7 +139453,6 @@ streamlinedprocesses.com, 1 streamliner.fr, 1 streamlineverify.com, 1 -streammasterpro.com, 1 streammusic.cz, 1 streamnetlibrary.org, 1 streamnetwork.cz, 1 @@ -141090,7 +139476,8 @@ streck-transport.de, 1 streekproducten.tk, 1 streekwinkelkatlijk.nl, 1 -streem.com.au, 0 +streem.co.nz, 1 +streem.com.au, 1 streemprn.xyz, 1 streengis.tk, 1 streepjescodelezer.nl, 1 @@ -141293,8 +139680,7 @@ stubbmail.de, 1 stubentiga.de, 1 stuc-groep.nl, 1 -stuccokingsfl.com, 1 -stuccorepairrenonv.com, 1 +stuckateur-weber.de, 1 stucki-bagger.ch, 1 stucki-sanitaer.ch, 1 stuckwithme.tk, 1 @@ -141327,6 +139713,7 @@ studentproject.be, 1 studentquickpay.com, 1 studentrobotics.org, 1 +students4sports.org, 1 studentscodecamp.com, 1 studentse.fr, 1 studentsfirstnb.com, 1 @@ -141335,7 +139722,7 @@ studenttracker.org, 1 studi-luar-negeri.tk, 1 studiedeals.dk, 1 -studiekort.se, 1 +studiekort.se, 0 studiekortet.com, 1 studiekortet.eu, 1 studiekortet.net, 1 @@ -141624,7 +140011,7 @@ subsitude.tk, 1 subsoft.tk, 1 subspace.institute, 0 -substanceandprogram.info, 1 +substanceandprogram.info, 0 substancelaw.com, 1 substances.be, 1 substitutealert.com, 1 @@ -141672,7 +140059,6 @@ suchmaschinen-werkstatt.de, 1 suckerpunch.com, 0 suckmyan.us, 0 -sucks.rip, 1 sucolab.jp, 1 sucomado.jp, 1 sucomaga.jp, 1 @@ -141724,11 +140110,11 @@ suenotek.com, 1 sueperclean.com, 1 suerteloteria.com, 1 +suesse-kunst.de, 1 suessenbecker.de, 1 suessundbitter.de, 1 suevia-ka.de, 1 suffix.ru, 1 -suffolkcountyny.gov, 1 sufix.cz, 1 sufleu.ro, 1 sufleuri.ro, 1 @@ -141767,7 +140153,6 @@ sugos.gq, 1 sugos.ml, 1 suguo.vip, 1 -suhaildawood.com, 1 suhost.com.br, 1 suhost.site, 1 sui2yoyaku.com, 1 @@ -141963,6 +140348,7 @@ sundaydesigner.com, 1 sundayfundayjapan.com, 1 sundaysky.com, 1 +sundaytansa.com, 1 sunderland.ac.uk, 1 sunderlandmoneyman.com, 1 sundeskole.no, 0 @@ -141981,7 +140367,6 @@ sunflowerportraits.com, 1 sunflyer.cn, 1 sunfox.cz, 1 -sunfulong.me, 1 sungalsses.ml, 1 sungem.nl, 1 sunglassstyle.co.nz, 1 @@ -142057,7 +140442,6 @@ sunsong.org, 1 sunsparksolar.co.uk, 1 sunsquare.cz, 1 -sunstar.bg, 1 sunstyl.fr, 1 sunsun-jewelry.com, 1 sunsun.co, 1 @@ -142242,7 +140626,6 @@ supermustang.tk, 1 supern0va.net, 0 supernatural-fans.tk, 1 -supernaturalbrand.com, 0 supernaturalchronicles.com, 1 supernaut.info, 1 supernogi.ga, 1 @@ -142299,7 +140682,6 @@ supplementpolice.tk, 1 supplementwarehouseonline.com, 1 supplhi.com, 1 -supplierlinkup.com, 1 suppliersession2021.com, 1 supplies24.at, 1 supplies24.es, 1 @@ -142336,10 +140718,7 @@ supremacrypt.com, 1 supreme-council.me, 1 supreme-court.tk, 1 -supremearvadafencing.com, 1 supremecarnage.de, 1 -supremeconcreteco.com, 1 -supremefencinglakewood.com, 1 suprememale.tk, 1 suprintbot.xyz, 0 supriville.com.br, 1 @@ -142380,7 +140759,6 @@ surflessonslisbon.com, 1 surfly.com, 1 surfnetkids.com, 1 -surfnetparents.com, 1 surfocal.com, 0 surfocal.net, 1 surfoleon.tk, 1 @@ -142472,7 +140850,6 @@ susosudon.com, 1 suspect.id, 1 suspectpahctd.com, 1 -suspensebox.com, 1 suspiciousdarknet.xyz, 1 suss.be, 1 sussexsecurityinstallations.co.uk, 0 @@ -142564,7 +140941,6 @@ sv-turm-hohenlimburg.de, 1 sv.search.yahoo.com, 0 sv1862ruesselsheim.de, 0 -sv1880-lichtenau.de, 0 sv443.net, 1 svager.cz, 1 svak-gutachter.de, 0 @@ -142578,7 +140954,6 @@ svarmax.com.ua, 1 svarnainstitute.com, 1 svarovani.tk, 1 -svarusdarbas.lt, 1 svasse.nl, 1 svatba.cf, 1 svatba.ml, 1 @@ -142675,7 +141050,6 @@ svorcikova.cz, 1 svorkmofotball.tk, 1 svoya-energy.com.ua, 1 -svoystart.ru, 1 svportalframe.com, 1 svrtech.com.tr, 1 svrx.one, 1 @@ -142683,7 +141057,6 @@ svseglobal.com, 1 svsewerut.gov, 1 svswebmarketing.com, 1 -svtemplemn.org, 1 svtl.ch, 1 svtr.de, 1 svtv.org, 1 @@ -142700,7 +141073,6 @@ swac.org, 1 swacash.com, 1 swacu.org, 1 -swag.live, 1 swag.pw, 1 swagat.tk, 1 swagger.io, 1 @@ -142731,7 +141103,7 @@ swappa.com, 1 swappie.com, 1 swapspace.co, 1 -swarfarm.com, 1 +swarfarm.com, 0 swarganga.org, 1 swargvibha.tk, 1 swarlys-server.de, 1 @@ -142743,6 +141115,7 @@ swavlambancard.gov.in, 1 sway-cdn.com, 1 sway.com, 1 +swbeats.com, 1 swbruce.co.uk, 1 swc-cfc.gc.ca, 1 swc-the.exchange, 1 @@ -142787,7 +141160,6 @@ sweetcalculus.ru, 1 sweetcoraline.eu.org, 1 sweetcorner.tk, 1 -sweetdevilswares.com, 1 sweeteleven.tk, 1 sweetgood.de, 1 sweetgracemarket.com, 1 @@ -142810,6 +141182,7 @@ sweetsinner.com, 1 sweetsusinrw.org, 1 sweetvanilla.jp, 1 +sweetville.org, 1 sweetwatercountywy.gov, 1 sweetwatertn.gov, 1 sweetwatertx.gov, 1 @@ -142840,6 +141213,7 @@ swiftcourt.com, 1 swiftcrypto.com, 1 swifteh.net, 1 +swifteq.com, 1 swiftfactory.io, 1 swiftgram.ml, 1 swiftirc.net, 1 @@ -142949,6 +141323,7 @@ swoop-qa.cloud, 1 swoop-support.com, 1 swoop.cloud, 1 +swoop.ro, 1 swoopitupinc.com, 1 swopre-appgallop.azurewebsites.net, 1 swordfeng.xyz, 1 @@ -142989,8 +141364,7 @@ sxilm.com, 1 sxistolithos.gr, 1 sxls.com, 1 -sxqxmx.com, 1 -sxyql.de, 1 +sxyql.de, 0 sy-anduril.de, 1 sy24.ru, 1 syaeful12ips.tk, 1 @@ -143013,10 +141387,12 @@ sydneyhelicopters.com.au, 1 sydneylawnandturf.com.au, 0 sydneylounge.ga, 1 +sydneysconnectedcommunity.com.au, 1 sydneyshisha.com.au, 1 sydneyshopfitters.au, 1 sydneysteinger.com, 1 sydneyvangelder.com, 0 +sydneyvapeshub.com, 1 sydnik.com, 1 syds.xyz, 1 syedmuhdadasgardezi.tk, 1 @@ -143122,6 +141498,7 @@ synecek11.cz, 1 synedat.com, 1 synel.co.il, 1 +synergia.website, 1 synergiamedicalcare.es, 1 synergiedenken.de, 1 synergisticsoccer.com, 1 @@ -143135,7 +141512,6 @@ synetiq.co.uk, 1 synfrait.com, 1 synitsa.tk, 1 -synlab.es, 1 synony.me, 1 synonym24.at, 1 synoptek.com, 1 @@ -143273,9 +141649,8 @@ systemsinblue.tk, 1 systemsoftwareleader.com, 1 systemtoto.ml, 1 -systemysportowe.pl, 1 systemzeit.info, 1 -systime.dk, 1 +systime.dk, 0 systoolbox.net, 1 systronlabs.com, 1 syswap.fr, 1 @@ -143322,6 +141697,8 @@ szepsegbennedrejlik.hu, 1 szerbnyelvkonyv.hu, 1 szerelem.love, 1 +szerver.com, 1 +szerver.hu, 1 szgfeds.com, 1 szhighsun.com, 1 szih.org.pl, 1 @@ -143363,7 +141740,6 @@ szyszkowitz.at, 1 szzsivf.com, 0 t-1.org, 0 -t-10.in, 1 t-cophony.com, 1 t-dent.com, 1 t-fischer.net, 1 @@ -143384,7 +141760,6 @@ t-shirty.tk, 1 t-shock.eu, 1 t-so.de, 1 -t-unit.ru, 1 t-wirth.de, 1 t-zrenia.ru, 1 t.ee, 1 @@ -143509,7 +141884,6 @@ tabira.tk, 1 tabisuta.com, 1 tabiteollisuus.tk, 1 -tabkhetk.com, 1 tablamatica.tk, 1 tablascreek.com, 1 tableandhearth.com, 1 @@ -143546,7 +141920,6 @@ tac-performance.net, 1 tac-sys.net, 1 tacay.co, 1 -tache.cc, 1 tachikawa-saisyuusyou.com, 1 tachonetbg.com, 1 tachoplus.pl, 1 @@ -143790,7 +142163,7 @@ taladphapim.com, 1 talakacaruli.tk, 1 talalaok.gov, 1 -talbottimber.co.uk, 1 +talarislog.com, 1 talcualdigital.com, 1 taldia.es, 1 taleatherworks.com, 1 @@ -143809,10 +142182,10 @@ talenthope.com, 1 talenthope.com.cn, 1 talenthubmpi.com, 1 -talentideal.com, 1 talentimpuls.de, 1 talentio.com, 1 talentis.net, 1 +talentlint.com, 1 talentlms.com, 1 talentmill.co, 1 talento.dev.br, 1 @@ -143858,6 +142231,7 @@ talkscope.cf, 1 talkscope.ml, 1 talksileby.tk, 1 +talksport.com, 1 talktime.ae, 1 talktobabes.com, 1 talktobot.com, 1 @@ -143869,6 +142243,7 @@ tallcraft.net, 1 tallercommercial.com, 1 tallercs.tk, 1 +talleresgonzalezyparis.com, 1 talleresluse.com, 1 tallertales.net, 1 tallest.nl, 1 @@ -143876,6 +142251,7 @@ tallinnsec.ee, 1 tallinnsex.ee, 1 tallship.cz, 1 +talltree.tech, 1 tallulahbernard.com, 1 tallwoodmedical.com, 1 tallyfy.com, 1 @@ -143906,8 +142282,6 @@ tambayology.com, 1 tambo.es, 1 tamboa.com, 1 -tambola.live, 1 -tambosi-odeonsplatz.de, 1 tambourdegille.be, 1 tambov-news.net, 1 tambov.cf, 1 @@ -143924,6 +142298,7 @@ tamerx.com, 1 tamgaturk.com, 1 tami.ai, 1 +tami.co.uk, 1 tamilentertainment.tk, 1 tamilfunda.com, 1 tamilglitz.in, 1 @@ -144036,7 +142411,7 @@ tannenhof-moelln.de, 1 tanner.sh, 1 tanneradvisorysolutions.com.au, 1 -tannercorporation.com, 1 +tannercorporation.com, 0 tannerdewitt.com, 1 tannerryan.ca, 1 tannerwilliamson.com, 1 @@ -144155,7 +142530,6 @@ targetsportsworld.com, 1 targettrend.com, 1 targeturl.ru, 1 -targetx.pl, 1 targimieszkaniowe.net, 1 targoncavasarlas.hu, 1 targray.com, 1 @@ -144201,7 +142575,6 @@ tarriso.com, 1 tarrytownny.gov, 1 tarsan.cz, 1 -tarsusdistribution.co.za, 0 tarsusrx.com, 0 tartablu.it, 1 tartanhamedshop.com.br, 1 @@ -144213,7 +142586,6 @@ tarvoo.com, 1 tarzanka.ml, 1 tas.best, 1 -tasalogistic.com, 1 tasarimgazetesi.com, 1 tasarimrehberi.com, 1 tasawehala.com, 1 @@ -144293,6 +142665,7 @@ tatooine.club, 1 tatort-fanpage.de, 1 tatra.ca, 1 +tatra.nl, 1 tatsidou.gr, 1 tatsoi.net, 1 tatsumi-air.com, 1 @@ -144377,7 +142750,6 @@ taxassist.co.uk, 1 taxationweb.co.uk, 1 taxboard.gov.au, 1 -taxborn.com, 1 taxcertificationform.com, 1 taxcertificationportal.com, 1 taxcure.com, 1 @@ -144386,6 +142758,7 @@ taxfunder.uk, 1 taxglobalizers.com, 1 taxhawk.com, 1 +taxi-andy-app.at, 1 taxi-christian.de, 1 taxi-collectif.ch, 0 taxi-domzale.tk, 1 @@ -144406,7 +142779,6 @@ taxibudapest.com, 1 taxibudapest.de, 1 taxibudapest.fr, 1 -taxibudapest.it, 1 taxibudapest.nl, 1 taxicollectif.ch, 0 taxid-k.be, 1 @@ -144420,7 +142792,6 @@ taxis-collectifs.ch, 0 taxis-villefontaine.com, 1 taxisafmatosinhos.pt, 1 -taxisantapolagranalacant.com, 1 taxiscollectifs.ch, 0 taxiseek.ga, 1 taxisilledasanchezbrea.com, 1 @@ -144432,13 +142803,13 @@ taxo.fi, 1 taxobservatory.eu, 1 taxpackagesupport.com, 1 +taxprocpa.com, 1 taxstorestalbans.com.au, 1 taxuni.com, 1 taybee.net, 1 tayebbayri.com, 1 tayho24h.com, 1 taylorandfrancis.com, 1 -taylorashford.com, 1 tayloraz.gov, 1 taylorburton-porn.com, 1 taylorcountyhdwv.gov, 1 @@ -144453,6 +142824,7 @@ taylorfry.com, 1 taylorfry.com.au, 1 taylorfry.nz, 1 +taylormadesoft.com, 1 taylorruhland.com, 1 taylors-castles.co.uk, 1 taylorshillsamoan.org, 1 @@ -144474,6 +142846,7 @@ tb-itf.de, 1 tb.org.tw, 1 tbahn.de, 1 +tbassistant.xyz, 1 tbatr.tk, 1 tbbank.gov.tm, 1 tbcinteriorismo.com, 1 @@ -144527,7 +142900,6 @@ tcdn.tech, 1 tcdww.cn, 1 tcec-chess.com, 1 -tcepc.com, 1 tcf.org, 1 tcg.cards, 1 tcgbridge.com, 1 @@ -144566,7 +142938,6 @@ tcr-ees.com, 1 tcrecord.org, 1 tcrid.com, 1 -tcsemotion.com, 1 tcspartner.eu, 1 tcspartner.net, 1 tcttire.com, 1 @@ -144648,7 +143019,6 @@ teachingmama.org, 1 teachingtoday.education, 1 teachingwithjen.com, 1 -teachjam.org, 1 teachking.tk, 1 teachnowprogram.com, 1 teachonmars.com, 1 @@ -144661,7 +143031,6 @@ teahawaii.ga, 1 teahouse.gq, 1 teahut.net, 1 -teaine.com, 1 teainside.ga, 1 teaks.nl, 1 teale.io, 1 @@ -144809,6 +143178,7 @@ teamshirts.no, 1 teamshirts.se, 1 teamsignia.com, 1 +teamskillevolution.com, 1 teamsomeday.tk, 1 teamstarbugs.de, 1 teamsudan.cf, 1 @@ -144878,7 +143248,6 @@ tece.de, 1 tece.se, 1 tecfidera.com, 0 -tecfix.com, 1 tecfleet.com, 1 tech-box.fr, 1 tech-clips.com, 0 @@ -144904,7 +143273,6 @@ tech4founders.co, 1 tech4greece.gr, 1 tech506.com, 1 -tech86.com.br, 1 techaachen.de, 1 techangel.tk, 1 techanit.de, 1 @@ -144945,7 +143313,6 @@ techday.in, 1 techdayca.com, 1 techdirt.com, 1 -techdocscove.xyz, 1 techdoms.tk, 1 techdracula.com, 1 techeasyblog.com, 1 @@ -144993,8 +143360,8 @@ techkeep.tk, 1 techkentucky.tk, 1 techkilla.tk, 1 +techlab.com.my, 1 techland.net, 1 -techlandgg.com, 1 techlearningcollective.com, 1 techlevel.org, 1 techlit.pk, 1 @@ -145002,7 +143369,7 @@ techlovers.com, 1 techlr.de, 1 techmagazine.tk, 1 -techmagick.com, 0 +techmagick.com, 1 techmahindrafoundation.org, 1 techmaish.com, 1 techmammal.de, 1 @@ -145104,7 +143471,6 @@ technolution.tk, 1 technomagia.tk, 1 technomix.tk, 1 -technomotiv.dz, 1 technopedia.gq, 1 technorthdakota.tk, 1 technosafebg.com, 1 @@ -145164,6 +143530,7 @@ techprom.tk, 1 techrad.ar, 1 techraptor.net, 1 +techrbun.com, 1 techreportforall.tk, 1 techrevolution.lt, 1 techrules.com, 1 @@ -145227,6 +143594,7 @@ tecmax.inf.br, 1 tecmestre.com.br, 1 tecnalia.com, 1 +tecncr.com, 1 tecne.ws, 1 tecnicainnovacion.com.mx, 1 tecnicapotiguar.com.br, 1 @@ -145307,7 +143675,6 @@ tee-suche.de, 1 teechu.com, 1 teecketing.com, 1 -teedinsiam.com, 1 teefashionstar.com, 1 teehany.com, 1 teehar.com, 1 @@ -145367,7 +143734,6 @@ teganlaw.com, 1 tege-elektronik.hu, 1 tegel-schoonmaken.nl, 1 -teggium.com, 1 tegut.com, 1 tegv.org, 1 teh1xbet.com, 1 @@ -145376,11 +143742,9 @@ tehnai-mahshevim.co.il, 1 tehnicari-za-racunalstvo.tk, 1 tehniss.rs, 1 -tehno-kip.ru, 0 tehno-trust.tk, 1 tehno3d.ru, 1 tehnoklubi.ee, 1 -tehnolavka.com, 1 tehnomagija.tk, 1 tehplace.club, 1 tehpod.com.ua, 1 @@ -145407,7 +143771,6 @@ tekila.cf, 1 tekila.ga, 1 tekila.tk, 1 -tekinfo.co.id, 1 tekingb.com, 0 tekirdagemlak.tk, 1 tekittak.com, 1 @@ -145428,6 +143791,7 @@ teknokanguru.com.tr, 1 teknoleet.com, 1 teknologipendidikan.id, 1 +teknologipendidikan.or.id, 1 teknomarko.com, 0 teknon.tk, 1 teknoparkistanbul.com.tr, 1 @@ -145489,7 +143853,6 @@ telechnics.com.au, 1 telecinesound.it, 1 teleclaro.com, 1 -teleclases.com, 1 telecom-sudparis.eu, 1 telecomarmenia.am, 1 telecommande-express.com, 1 @@ -145506,7 +143869,6 @@ telefonino.blog, 1 telefonkort.tk, 1 telefonni-ustredna.cz, 1 -telefonseelsorge-paderborn.de, 1 telefoon.nl, 1 telefoonabonnement.nl, 1 telefunk.tk, 1 @@ -145583,7 +143945,6 @@ telework.gov, 1 teleworkouts.com, 1 telexit.de, 1 -telexpo.com, 1 telexsus.com, 1 teleyal.blog, 1 telezon.ru, 1 @@ -145592,7 +143953,6 @@ telford.codes, 1 telhai.ac.il, 1 telhatelite.com.br, 1 -telit.com.br, 1 telk.kr, 1 telka-online.tk, 1 telking.com, 1 @@ -145624,13 +143984,11 @@ telpotas.xyz, 1 telsu.fi, 1 telugudesam.org, 1 -tely360.com, 1 tema-q.com, 1 temaflex.tk, 1 temaju.com, 1 temakel.com, 1 temariosoposiciones.tk, 1 -tembisa.com, 1 tembusulaw.com, 1 temertysimcentre.com, 1 temirgaliev.tk, 1 @@ -145657,7 +144015,6 @@ template-help.fr, 1 templated.ga, 1 templatetrip.com, 1 -temple-eikando.fr, 1 templeandalucia.tk, 1 templelawreview.org, 1 templenh.gov, 1 @@ -145716,7 +144073,6 @@ tendo.com, 1 tendomag.com, 1 tendure.tk, 1 -tenebra.com, 1 tenens.ru, 1 tenenz.com, 1 tenerife-taxi.com, 1 @@ -145733,7 +144089,6 @@ tenismare.si, 1 tenispopular.com, 1 tenisservis.eu, 1 -tenjav.com, 1 tenjou-tenge.tk, 1 tenken1010.org, 1 tenkuru.moe, 1 @@ -145792,7 +144147,7 @@ teoletextsq.tk, 1 teologia.promo, 0 teomahk.de, 1 -teoria.com, 1 +teoria.com, 0 teoriespiknuti.cz, 1 teoskanta.fi, 1 tep.com, 1 @@ -145852,6 +144207,7 @@ teriva.ua, 1 term-master.ru, 1 terma.ml, 1 +termacolog.com.br, 1 termator.com, 1 termbackti.me, 1 terme.milano.it, 1 @@ -145938,7 +144294,6 @@ terratruehq.com, 0 terraweb.net, 1 terrax.net, 1 -terrazzahg.com, 1 terrelltx.gov, 1 terremoto.com.br, 1 terrenal.tk, 1 @@ -145982,9 +144337,9 @@ tesdrole.tk, 1 teselta.com, 1 teseo.kz, 1 -tesharp.com, 1 teshuzi.com, 1 tesil.am, 1 +tesisatvizyon.com, 1 teskalabs.com, 1 tesla-fire.com, 1 tesla-tula.tk, 1 @@ -146004,6 +144359,7 @@ test-online.tk, 1 test-privacyportal-ui.azurewebsites.net, 1 test-ravkavonline.co, 1 +test-regressplattform.ch, 1 test-school.ml, 1 test-textbooks.com, 1 test-verz.online, 1 @@ -146066,10 +144422,12 @@ testmx.eu, 1 testmx.org, 1 testmy.tk, 1 +testmybrain.org, 1 testmyconnection.net, 1 testomato.com, 0 testone.com.tr, 1 testosteronedetective.com, 1 +testosteronehormonehealth.com, 1 testovaci.ml, 1 testpctpoc.ca, 1 testplant.com, 1 @@ -146130,13 +144488,12 @@ teufel-cloud.ddns.net, 1 teufel.de, 1 teufelaudio.nl, 1 -teufelswerk.net, 1 +teufelswerk.net, 0 teulon.eu, 1 teungedj.de, 1 teunmulder.tk, 1 teunstuinposters.nl, 1 teusink.eu, 1 -teuto.com.br, 1 teuton.io, 1 teutonia-grossenlueder.de, 1 teutonia08.de, 1 @@ -146162,7 +144519,6 @@ texasgynecomastia.com, 1 texashealthtrace.gov, 1 texasintegratedservices.com, 1 -texasjacks.com, 1 texasnewsusa.tk, 1 texasonesource.com, 1 texasonlinedivorce.com, 0 @@ -146172,6 +144528,7 @@ texaspaversoutdoorliving.com, 1 texasprosgaragedoors.com, 1 texasready.gov, 1 +texasschools.us, 1 texasteam.tk, 1 texastitlesearch.com, 1 texasultraspirit.com, 1 @@ -146187,7 +144544,6 @@ texier.mx, 1 texkey.com, 1 texkings.com, 1 -texlan.lk, 1 texnogu.ru, 1 texnoguru.tk, 1 texnolog.tk, 1 @@ -146322,7 +144678,6 @@ thaibizsingapore.com, 0 thaiblanket.com, 1 thaiboystory.ga, 1 -thaibrokersfx.com, 1 thaicurry.net, 1 thaiforexfamily.com, 1 thaigirls.cf, 1 @@ -146387,6 +144742,7 @@ thatchhealth.com, 1 thatchickkrys.com, 1 thatdaria.com, 1 +thatferret.blog, 1 thatmy.com, 1 thatshayini-sivananthan.fr, 1 thatssodee.com, 1 @@ -146430,6 +144786,7 @@ the-ear.net, 1 the-earth-yui.net, 0 the-egotronic.tk, 1 +the-ensemblist.uk, 1 the-farm.tk, 1 the-finance-blog.com, 1 the-forgotten.net, 1 @@ -146562,7 +144919,6 @@ thebabelog.cf, 1 thebabelog.ga, 1 thebabelog.gq, 1 -thebabiest.com, 1 thebabypassport.com, 1 thebacksplashcompany.com, 1 thebackstage.tk, 1 @@ -146577,7 +144933,6 @@ thebannekerfoundation.org, 1 thebannerstore.com, 1 thebanquethub.com, 1 -thebarclay.org, 1 thebasementdefender.com, 1 thebasementdefender.net, 1 thebasicstudio.com, 1 @@ -146608,7 +144963,6 @@ thebestporn.com, 1 thebestshopping.tk, 1 thebetterfit.com, 1 -thebetterindia.com, 0 thebettermagazine.com, 1 thebhc.org, 1 thebigbigworld.tk, 1 @@ -146647,7 +145001,6 @@ theblondeabroad.com, 0 theblue.tk, 1 thebluebanner.net, 1 -theblueprint.global, 1 thebluered.net, 0 theblueroofcottage.ca, 1 thebluewindowdesigns.com, 1 @@ -146781,7 +145134,6 @@ thecollegequiz.com, 1 thecolorbarph.com, 1 thecolorrun.hu, 1 -thecomedystore.co.uk, 1 thecommoner.org, 1 thecommonmen.tk, 1 thecommunityguide.org, 1 @@ -146923,7 +145275,6 @@ theender.net, 1 theendpoem.com, 1 theepankar.com, 1 -theepicsponge.co.uk, 1 theepicstorm.com, 1 theerneshot.com, 1 theescapegame.com, 0 @@ -147021,11 +145372,9 @@ thegamestracker.com, 1 thegantars.tk, 1 thegardensmall.com.my, 1 -thegarvisgroup.com, 1 thegasshop.co.uk, 1 thegatewaydigital.com, 1 thegatewaytoanewworld.com, 1 -thegeekdiary.com, 1 thegeeklab.de, 0 thegemriverside.com.vn, 1 thegeniusdz.tk, 1 @@ -147055,7 +145404,6 @@ thegooddeal.shop, 1 thegoodegg.ie, 1 thegoodinside.com, 1 -thegoodplace.ma, 1 thegoodplugin.com, 1 thegoodveggie.com, 1 thegoodvybe.ml, 1 @@ -147171,13 +145519,11 @@ theinstitute.cf, 1 theinsurancealliance.com.au, 1 theinsurgence.org, 1 -theintentmedia.com, 1 theinteracial.com, 1 theintercept.com, 0 theinternationalgeekconspiracy.eu, 1 theinvisibleman.tk, 1 theislandtime.com, 1 -theislandwellness.com, 1 theisopurecompany.com, 1 theissen.io, 1 theisthelpline.com, 1 @@ -147200,7 +145546,6 @@ thejunkfiles.com, 1 thekalakriti.tk, 1 thekenyatimes.com, 1 -thekeralastore.co.uk, 1 thekev.in, 1 thekickassvirtualassistant.nl, 1 thekidszone.in, 1 @@ -147218,7 +145563,6 @@ theknowitguy.com, 1 thekochampionship.com, 1 thekodaichronicle.com, 1 -thekolye.com, 1 thekonsulthub.tk, 1 thekuwayama.net, 1 thelakedistrict.tk, 1 @@ -147239,7 +145583,6 @@ thelaurelchiropractor.com, 1 thelawyermag.com, 1 thelazyfox.xyz, 1 -thelazysre.com, 1 theleaksbay.com, 1 thelearninggardener.com, 1 theleaves.tk, 1 @@ -147259,6 +145602,7 @@ thelinfieldreview.com, 1 thelinknews.net, 1 thelinuxspace.com, 1 +thelionworksop.co.uk, 1 thelittlepeartree.eu, 1 thelocals.ru, 1 thelockerroom.ie, 1 @@ -147281,7 +145625,7 @@ theloveequation.com, 1 theloves.com, 1 thelowell.org, 1 -theluxurytraintravelcompany.com, 1 +theluxurytraintravelcompany.com, 0 thelwallrangers.tk, 1 themacateam.com, 1 themacollection.com, 1 @@ -147395,7 +145739,6 @@ thenews-chronicle.com, 1 thenewsmill.com, 1 thenewtoy.net, 1 -thenexablack.com, 1 thenexwork.com, 1 theneymarcbrothers.com, 1 thenftlawyer.ca, 1 @@ -147443,16 +145786,15 @@ theoldmill.tk, 1 theoldnews.net, 1 theoldposthousebnb.co.uk, 1 +theoldschoolgamevault.com, 1 theolodewijk.nl, 1 theologique.ch, 1 theome.ga, 1 -theonegroup.co.uk, 1 theonethaimassage.de, 1 theonikage.tk, 1 theonlineclarion.com, 1 theonyxzone.com, 1 theoosmetalart.nl, 1 -theopaczek.com, 1 theopentrade.com, 1 theopera.tk, 1 theoperators.tk, 1 @@ -147465,6 +145807,7 @@ theoriginalassistant.com, 1 theoriginalcandid.com, 1 theoriginalmarkz.com, 1 +theoriginalworkshop.com, 1 theorion.com, 1 theorioncorrelation.com, 1 theorlandocriminaldefense.com, 0 @@ -147494,7 +145837,6 @@ theparklane-sukhumvitbearing.com, 1 theparkwoodmanor.com, 1 theparoxetine.gq, 1 -theparthub.com, 1 theparticipants.tk, 1 thepartner.co.uk, 1 thepartydoctors.co.uk, 1 @@ -147517,12 +145859,12 @@ thepeoplesvoice.org, 1 theperformanceblog.com, 1 theperfumespot.com, 1 +theperfumestore.bg, 1 thepetgal.com, 0 thepharm.co.nz, 1 thephoenixdg.com, 1 thephoenixsociety.org, 1 thephp.cc, 1 -thephwa.com, 1 thepiabo.ovh, 0 thepieslicer.com, 1 thepigwrestlers.com, 1 @@ -147559,6 +145901,7 @@ thepowerboys.tk, 1 theprairienews.com, 1 thepreachersportal.org, 1 +thepressroom.com, 1 thepressurewashingdirectory.com, 1 thepriceisright.tk, 1 thepridefunding.com, 1 @@ -147703,15 +146046,14 @@ therworth.eu, 1 therworth.net, 1 therworth.org, 1 -thesacreds.com, 1 thesafetymag.com, 1 thesage.cf, 1 thesage.ga, 1 thesagresapartments.com, 1 thesaltpacketguy.com, 1 -thesaltsanctuaryfl.com, 1 thesandb.com, 1 thesarogroup.com, 0 +thesashcompany.com.au, 1 thesatriantoshow.tk, 1 thesaturdaypaper.com.au, 1 thesaunalife.com, 1 @@ -147746,7 +146088,6 @@ theshahnameh.com, 1 theshaker.com.au, 1 thesharedbrain.ch, 0 -thesheryar.com, 1 theshesuite.com, 1 theshopally.com, 1 theshots.cz, 1 @@ -147762,7 +146103,6 @@ thesimplewebcompany.com, 1 thesimpsonian.com, 1 thesimsbrasil.tk, 1 -thesingaporelawyer.com, 1 thesingular.com, 1 thesinhalanews.lk, 1 thesipher.tk, 1 @@ -147772,7 +146112,7 @@ thesissurvey.gq, 1 thesistraffic.com, 1 thesiterank.com, 1 -theskingym.co.uk, 1 +theskincourse.com, 1 thesleepdoctor.com, 0 theslotz.com, 1 theslotz1.co, 1 @@ -147798,7 +146138,6 @@ thesportsroom.tv, 1 thestandards.tk, 1 thestatementjewelry.com, 1 -thestationatwillowgrove.com, 1 thesteins.org, 0 thestellahouse.com, 1 thestockoasis.com, 1 @@ -147810,13 +146149,13 @@ thestral.pro, 1 thestralbot.com, 1 thestrangenessofthings.tk, 1 +thestrategycenter.org, 1 thestreet.cz, 1 thestudio.hopto.org, 1 thestudioflasscottage.co.uk, 1 thestudioslucan.com, 1 thestudylink.com, 1 thestylebouquet.com, 1 -thesubsequent.com, 1 thesubstitute.nl, 1 thesuffolkjournal.com, 1 thesugargirls.com, 1 @@ -147852,6 +146191,7 @@ thethreepercent.marketing, 1 thethymevortex.zapto.org, 1 theticker.org, 1 +thetimdowling.co, 1 thetimehotels.com, 1 thetinylife.com, 1 thetipo.eu, 1 @@ -147886,7 +146226,6 @@ thetubecopenhagen.com, 1 thetuxkeeper.de, 0 thetvtraveler.com, 1 -thetwelvethirtyclub.com, 0 theuhlesteam.com, 1 theultimateshave.net, 1 theultraviolet.com, 1 @@ -147894,7 +146233,7 @@ theunconventionalconventionists.tk, 1 theundefeated.com, 1 theunderzone.tk, 1 -theuneundtheune.de, 1 +theuneundtheune.de, 0 theunfolder.com, 1 theuniqueform.com, 1 theunitedstates.tk, 1 @@ -147953,6 +146292,7 @@ theweakandthestrong.tk, 1 thewebbogan.com.au, 1 thewebcully.com, 1 +thewebdexter.com, 1 thewebguru.net, 1 thewebmasters.tk, 1 thewebsitemarketingagency.com, 1 @@ -147987,14 +146327,13 @@ thewomen.tk, 1 thewomensbusinesscenter.com, 0 thewoodkid.com.au, 1 -thewoodlandsviplimousine.com, 1 +thewoodlandsviplimousine.com, 0 thewoodnorton.com, 1 thewoods.earth, 1 thewoolroom.com.au, 1 theworkingeye.nl, 1 theworksboulder.com, 1 theworkshop.tk, 1 -theworkswide.com, 1 theworld.org, 1 theworld.tk, 1 theworldexchange.com, 1 @@ -148002,13 +146341,14 @@ theworldexchange.org, 1 theworldoftailor.com, 1 theworldreimagined.org, 1 -theworldsend.eu, 1 +theworldsend.eu, 0 theworldtakes.tk, 1 theworser.tk, 1 thewraithmovie.tk, 1 thewrenchmonkey.ca, 1 thewrightflyer.com, 1 thewritegrl.com, 1 +thewww.top, 1 thexalla.tk, 1 thexme.de, 1 thexpert.ml, 1 @@ -148027,7 +146367,6 @@ theysocial.tk, 1 thezillersathenshotel.com, 1 thezimbabwean.co, 1 -thezone.bg, 1 thghosting.com, 1 thhomes.vn, 1 thhost.tk, 1 @@ -148049,13 +146388,13 @@ thiel-events.de, 1 thieme-it.de, 1 thienduongthoitrang.vn, 1 -thiepcuoidep.com, 1 thiepxinh.net, 1 thierryhayoz.ch, 1 thierrymazue.com, 1 thierrymazue.fr, 0 thiesketelsen.de, 0 thietbiankhanh.com, 1 +thietbiquayphim.com, 1 thietkegianhangtttm.com, 1 thijmen.xyz, 1 thijmendevalk.nl, 1 @@ -148152,7 +146491,6 @@ thisismit.ch, 1 thisisrapt.com.au, 0 thisisreno.com, 1 -thisisrye.com, 1 thisistechtoday.com, 1 thisistina.de, 1 thisistina.nl, 1 @@ -148165,7 +146503,6 @@ thispageisup.net, 1 thisquarterly.sg, 1 thisserver.dontexist.net, 1 -thistle.group, 1 thisuniverse.tk, 1 thisyear.jp, 1 thitat.net, 1 @@ -148298,7 +146635,6 @@ threatcon.live, 1 threatcon.media, 1 threatcon.network, 1 -threatcon.online, 1 threatcon.org, 1 threatcon.shop, 1 threatcon.tv, 1 @@ -148414,6 +146750,7 @@ thumbnail-download.com, 1 thumbnails.jp, 1 thumbsupcandy.com, 1 +thumbtack.com, 1 thumbzilla.com, 1 thummer.net, 1 thunderbase.tk, 1 @@ -148425,7 +146762,6 @@ thunderheadjtc.tk, 1 thunderkeys.net, 1 thunderlotusgames.com, 1 -thunderstruckfestival.nl, 1 thunderwolves.ca, 1 thundr.com, 1 thunktank.org, 1 @@ -148480,7 +146816,6 @@ tianbo1998.com, 1 tiandixing.org, 1 tianeptine.com, 1 -tianherun.com, 0 tianibeeming.com, 1 tianibeeming.com.au, 1 tianjiaxi.com, 1 @@ -148530,7 +146865,6 @@ ticket-9.de, 1 ticket-time.es, 1 ticketassist.nl, 1 -ticketbahia.com, 1 ticketbande.at, 1 ticketbande.ch, 1 ticketbande.co.uk, 1 @@ -148644,7 +146978,6 @@ tierschutz-niederrhein.de, 1 tiersigma.com, 1 tiertreff24.de, 1 -tiestech.net, 1 tiestofan.tk, 1 tiete.be, 1 tietew.jp, 1 @@ -148689,7 +147022,6 @@ tigerupload.tk, 1 tigerzplace.tk, 1 tiggeriffic.com, 1 -tiggertracks.com, 1 tiggi.pw, 1 tightassanal.com, 1 tightasspics.com, 1 @@ -148880,7 +147212,6 @@ timewasters.nl, 1 timewasters.tk, 1 timeway.com, 1 -timewornlit.com, 1 timgame.tk, 1 timi-matik.hu, 1 timich.ga, 1 @@ -148895,7 +147226,7 @@ timmistudio.com, 1 timmyrs.de, 1 timnash.co.uk, 1 -timnegocia.com.br, 1 +timnegocia.com.br, 0 timnextgen.com.ph, 1 timniclasdemisch.de, 1 timniclasdemisch.eu, 1 @@ -148964,7 +147295,7 @@ tinka.nl, 1 tinka.tk, 1 tinker.career, 1 -tinkeratlas.com, 0 +tinkeratlas.com, 1 tinkerbeast.com, 1 tinkerbell.space, 1 tinkerboard.org, 1 @@ -149007,7 +147338,6 @@ tinyemily.com, 1 tinyfont.cf, 1 tinyfont.ml, 1 -tinygo.net, 1 tinyguitars.tk, 1 tinyhomeworld.com, 1 tinyhousebarat.com, 1 @@ -149032,6 +147362,7 @@ tipiakers.club, 1 tiplanet.org, 1 tipmast.nl, 1 +tipmeqatar.com, 1 tipmexico.com, 1 tipnews.tk, 1 tipo01.tk, 1 @@ -149050,7 +147381,6 @@ tipsmake.com, 1 tipsoftech.tk, 1 tipsplants.com, 1 -tipstersweb.com, 1 tipsypresent.com, 1 tiptoes.cz, 1 tiptop.cloud, 1 @@ -149063,14 +147393,12 @@ tiqets.com, 0 tir-mauperthuis.fr, 1 tiraloche.com, 1 -tiramisucake.com, 1 tirana-chat.tk, 1 tirandoalplato.tk, 1 tirapan.top, 1 tiraspol-news.ru, 1 tiraspol.tk, 1 tiraspolnews.ru, 1 -tircentrale.net, 0 tirebichon.eu, 1 tiredsleepy.net, 1 tiremart.com, 1 @@ -149084,11 +147412,11 @@ tirkomplekt.com, 1 tirlins.com, 1 tiroler-kupferschmiede.com, 1 +tiros.church, 1 tirteafuera.tk, 1 tis-expo-dev.com, 1 tis.rs, 1 tischlerei-klettke.de, 1 -tisec.com.br, 1 tisec.info, 0 tishomingo.news, 1 tisiclidisepta.cz, 1 @@ -149096,7 +147424,6 @@ tiski-shop.ru, 1 tisknunahadry.cz, 1 tism.in, 1 -tisparking.com, 1 tispayments.com, 1 tissueimmunecellatlas.org, 1 tissuestabilitycellatlas.org, 1 @@ -149174,6 +147501,7 @@ tju.me, 1 tjupt.org, 1 tjurun.ga, 0 +tjxcanada.ca, 1 tjxxzy.com, 1 tjzzz.com, 1 tk-its.net, 1 @@ -149181,7 +147509,6 @@ tk2net.com, 1 tk8813.com, 1 tk88at.net, 1 -tk88ll.com, 1 tkach.in.ua, 1 tkacz.pro, 1 tkafinearts.net, 1 @@ -149195,7 +147522,6 @@ tkddn.com, 1 tkhirianov.tk, 1 tkhsurgery.com, 1 -tki.jp, 1 tkic.com.au, 1 tkiely.net, 0 tkirch.de, 1 @@ -149243,7 +147569,6 @@ tlsrobot.se, 1 tlumaczenie.com, 1 tlv77.net, 1 -tlvgraffiti.co.il, 1 tlyphed.net, 1 tlys.de, 1 tm-its.com, 1 @@ -149335,6 +147660,7 @@ tnt-21.com, 1 tnt.construction, 0 tnt2k.de, 1 +tntbooks.ca, 1 tntmobi.com, 1 tntware.com, 1 tnurocancer.com, 1 @@ -149351,6 +147677,7 @@ toabaja.com, 1 toabr.de, 1 toad.ga, 1 +toadcreekmusic.com, 1 toade.com, 1 toadox.com, 1 toagroup.com, 1 @@ -149562,6 +147889,7 @@ tokonindy.com, 1 tokopedia.ga, 1 tokosehatselalu.com, 1 +tokoserbadiskon.my.id, 1 tokoteknologi.com, 1 tokoupis.cz, 1 tokozoeker.be, 1 @@ -149584,14 +147912,12 @@ tolboe.com, 1 toldos-en-stock.es, 1 toldos-lagavia.com, 1 -toldoscaldense.com.br, 1 toldosdemais.com.br, 1 toldosecoberturasbh.com.br, 1 toldosecoberturasembh.com, 1 toldoslima.es, 1 toldst.dk, 1 toledo.tk, 1 -toledoappraiser.com, 1 toledoclassifieds.net, 1 toledoescorts.net, 1 toledohydraulic.com, 1 @@ -149611,7 +147937,6 @@ tollerunterricht.com, 1 tollfreeproxy.com, 1 tollmanz.com, 0 -tolls.eu, 1 tollywood.ga, 1 tolmaidis.com, 1 tolnavar.hu, 1 @@ -149778,7 +148103,6 @@ tonazo.tk, 1 tonburi.jp, 0 toncusters.nl, 1 -tondescontos.com.br, 1 tondles.com, 1 tonecircuit.com, 1 toneelaccent.tk, 1 @@ -149803,7 +148127,6 @@ tonex.de, 1 tonex.nl, 1 tongdaiviettel.com.vn, 1 -tongkhothanhly.com, 1 tongli.eu.org, 1 tonguetechnology.com, 1 tongyi.cn, 1 @@ -149825,7 +148148,6 @@ tonmo.com, 1 tonnycat.com, 1 tono.us, 1 -tonomoshia.com, 1 tonorosario.tk, 1 tonshaiza.tk, 1 tonsil-stone.com, 1 @@ -149883,7 +148205,6 @@ tools-services.com.co, 1 tools.pro, 1 tools4free.in, 1 -tools4me.win, 0 toolsa.bg, 1 toolscompetition.org, 1 toolsense.io, 1 @@ -149924,7 +148245,6 @@ toot.community, 1 toot.haus, 1 tootbitco.ml, 1 -toothimplantsydney.com.au, 1 toothless.tk, 1 toothpique.tk, 1 toothsearch.tk, 1 @@ -149997,14 +148317,12 @@ topagrar.com, 1 topaigirlfriend.com, 1 topan.tk, 1 -topangiangaz.com, 1 topanimecharacters.com, 1 topanlage.de, 1 toparkinfo.hu, 1 topas.tk, 1 topaxi.codes, 0 topazium.site, 1 -topbacgiangaz.com, 1 topbargains.com.au, 1 topbloc.com, 1 topbookmarking.cf, 1 @@ -150042,7 +148360,6 @@ topekafoundationpros.com, 1 topendcamphire.com.au, 1 toperadigital.com, 1 -topescort.nl, 1 topesdegama.com, 1 topeyechang.com.tw, 1 topfd.net, 1 @@ -150056,12 +148373,9 @@ topfx.com.sc, 1 topgallant.gq, 1 topgevelbekleding.nl, 1 -topgod.com, 1 +topgoogle.com, 1 topgshop.ru, 1 toph.co, 1 -tophaiduongaz.com, 1 -tophaiphongaz.com, 1 -tophanoiaz.com, 1 tophat.studio, 1 tophatpuffin.com, 0 tophighnorldiet.gq, 1 @@ -150136,7 +148450,6 @@ topreit.ru, 1 topresumetemplate.com, 1 topsailbeachnc.gov, 1 -topsas.com, 1 topseo.gq, 1 topservercccam.tv, 1 topservers.ga, 1 @@ -150161,7 +148474,7 @@ topsuper60.net, 1 topsuper60.org, 1 toptapety.cz, 1 -toptapparelle.it, 1 +toptapparelle.it, 0 toptec.net.br, 1 toptechnews.cf, 1 toptechnews.tk, 1 @@ -150188,16 +148501,12 @@ topvpn.pl, 1 topwatch.com, 1 topwin.la, 1 -topwindows-eg.com, 1 topwipers.com, 1 topwonders.tk, 1 topworkplaces.com, 1 topwowamazing.com, 1 -topwowdesign.com, 1 topyachts-shop.com.ua, 1 topyachts.com.ua, 1 -topyenbaiaz.com, 1 -topyouth.com, 1 topzamestnavatele.cz, 1 topzarabotok.ml, 1 tor.guide, 1 @@ -150205,7 +148514,6 @@ torahanytime.com, 0 torako-sendai.com, 1 toranjchap.com, 1 -toranm.me, 1 torax.pt, 1 torb.com, 1 torba.tk, 1 @@ -150240,7 +148548,6 @@ torlock2.com, 1 tormentedradio.com, 0 tormentgame.com, 1 -tormer.com, 1 tormox.ml, 1 tornada-cz.cz, 1 tornadica.by, 1 @@ -150334,7 +148641,6 @@ tosbourn.com, 1 toscanaeconomy.it, 1 toschool.com.br, 1 -toshen.com, 1 toshicar.com, 1 toshigolog.com, 1 toshik.tk, 1 @@ -150420,6 +148726,7 @@ tottoya.com, 1 totuus.sk, 1 totvs.com, 1 +toubkalexperience.com, 1 toucan-informatique.fr, 1 touch-up-net.com, 1 touch.facebook.com, 0 @@ -150446,7 +148753,6 @@ touchweb.fr, 1 tough-construction.com, 1 toughcodes.com, 1 -toughcoding.net, 1 touhidur.ru.com, 1 touhidur.sa.com, 1 touhidur.studio, 1 @@ -150493,6 +148799,7 @@ tourmaster.com, 1 tournamentmgr.com, 1 tournaments.tk, 1 +tournation.info, 1 tourney.now, 1 tourniquets.org, 1 touroogle.com, 1 @@ -150501,6 +148808,7 @@ toursaindia.com, 1 toursandtransfers.it, 0 tourshopfresno.com, 1 +toursmile.in, 1 toursvieuxquebec.com, 1 tourteller.com, 1 tourtransferitaly.it, 1 @@ -150826,12 +149134,14 @@ toycu.de, 1 toyduck.ga, 1 toyfight.co, 0 +toylum.pe, 1 toymania.de, 1 toymarket.tk, 1 toyonaka-bungei.com, 1 toyonut.co.jp, 0 toyopac.com, 1 toyota-kinenkan.com, 1 +toyota.com.mk, 1 toyota.com.sg, 1 toyotaconnected.co.th, 1 toyotaconnected.eu, 0 @@ -150840,8 +149150,10 @@ toyotasp.ru, 1 toyouiv.org, 1 toys-robots.cf, 1 +toysandstuff.uk, 1 toyscenter.it, 1 toyschina.cf, 1 +toysdrive.ru, 1 toysearcher.ml, 1 toyshowthemusical.co.uk, 1 toyshowthemusical.com, 1 @@ -150901,7 +149213,6 @@ tpu-ltd.co.uk, 1 tpue.de, 1 tpx.com, 1 -tqaclark.com, 1 tqdev.com, 0 tqdn.cn, 1 tql.plus, 1 @@ -150915,7 +149226,6 @@ trabaja.xyz, 1 trabajadormigrante.gov, 1 trabajaenvitamina.cl, 1 -trabajoen.com, 1 trabajoreal.com, 1 trabajouniversitario.tk, 1 trabbel.org, 1 @@ -150940,6 +149250,7 @@ traceur-france.fr, 1 traceurdirect.com, 1 traceurlocation.com, 1 +traceuroccas.com, 1 tracinsurance.com, 1 track.plus, 1 trackablemap.com, 1 @@ -151040,7 +149351,6 @@ tradexpress.ch, 1 tradezlist.tk, 1 tradgardsmart.se, 1 -tradie.com, 1 tradik.com, 1 tradinews.com, 1 tradinews.fr, 1 @@ -151094,7 +149404,6 @@ traficmusik.net, 1 trafik.tk, 1 trafiken.nu, 1 -trafomex.com.mx, 1 trafplus.tk, 1 tragamin.ca, 1 tragamonedas-gratis.biz, 1 @@ -151123,13 +149432,13 @@ trainable.cf, 1 trainbusferry.com, 1 traineeshipplaza.nl, 1 +trainercentral.com, 1 trainertech.com.br, 1 trainex.org, 1 trainhornforums.com, 0 trainiac.com.au, 1 trainingassetsgateway.com, 1 trainingcentral.cf, 1 -trainingchannel.com, 1 trainingcourt.com, 1 trainingflow.com, 1 trainingleadersinternational.org, 1 @@ -151220,7 +149529,6 @@ transactpaymentsltd.com, 0 transamer.com, 1 transamerica.com, 1 -transaminasas.com, 1 transangels.com, 1 transangelsnetwork.com, 1 transangelspremium.com, 1 @@ -151375,6 +149683,7 @@ tranvia.info, 1 tranzact.net, 1 tranzron.ga, 1 +tranzvix.com, 1 trapay.net, 1 trapezegroup.de, 1 trapiantionline.com, 1 @@ -151414,6 +149723,7 @@ trasportatore.it, 1 trasportatori.it, 1 trasportoambulanzaprivata.it, 1 +trasteralia.com, 1 trastornoevitacion.com, 0 trastornolimite.com, 0 tratt.net, 1 @@ -151512,7 +149822,6 @@ travelhusky.ga, 1 traveling-thailand.info, 1 travelingagency.tk, 1 -travelingsavvyseniors.com, 1 travelinspirationmag.com, 1 travelinsurance.co.nz, 1 travelinsurance.ga, 1 @@ -151630,7 +149939,6 @@ trazs.com, 1 trbanka.com, 1 trblwlf.net, 1 -trcont.com, 1 trctaborda.com.br, 1 trdepoist.net, 1 treadmillrepair.co.nz, 0 @@ -151648,6 +149956,7 @@ treasurydirect.gov, 1 treasuryhunt.gov, 0 treasuryscams.gov, 1 +treatynsw.info, 1 treatyoakdental.com, 1 treatyoself.com.au, 1 trebilfoundationsystems.com, 1 @@ -151686,7 +149995,6 @@ treinonerd.com, 1 treinonline.tk, 1 treintijden.com, 1 -trek.haus, 1 trekamdienstag.de, 1 trekbible.com, 1 trekfanfiction.net, 1 @@ -151740,6 +150048,7 @@ trends-news.tk, 1 trendsinhr.nl, 1 trendtesettur.com, 0 +trendwala.online, 1 trendware.de, 1 trendycrowds.com, 1 trendydips.com, 1 @@ -151885,7 +150194,6 @@ trifiro.it, 1 trigate.io, 1 triggeredpaintz.com, 1 -triggerskills.com, 1 triggertraders.com, 1 trigirlpainting.com, 1 triglia.com, 1 @@ -151917,7 +150225,7 @@ trimental.de, 1 trimill.xyz, 1 trimjoinerycentralcoast.com.au, 1 -trimn.net, 1 +trimn.net, 0 trimsalon.tk, 1 trimsalonelst.nl, 1 trimuzivofsajdu.cz, 1 @@ -151942,11 +150250,11 @@ trinitycore.org, 1 trinitycv.com, 1 trinityguardion.com, 1 -trinityhealth.com, 1 trinitylex.org, 1 trinityradioandvideo.org, 1 trinitystclairvip.com, 1 trinitysurfaces.com, 1 +trinitytx.org, 1 trinitywernersville.org, 1 trink-und-partyspiele.de, 1 trinnes.net, 1 @@ -151995,7 +150303,6 @@ trippati.com, 1 tripperoo.nl, 1 trippers.info, 1 -trippinktattoos.com, 1 trips4foodies.com, 1 tripsfromarrakech.com, 1 tripstorome.com, 1 @@ -152017,9 +150324,9 @@ tristanhall.com, 1 tristansommer.de, 1 tritansoft.com, 1 -tritinity.com, 1 tritium.cf, 1 -tritoncc.com, 1 +tritoncc.com, 0 +tritonsensors.com, 1 triumc.org, 1 triumph-duesseldorf.com, 1 triumph-gera.de, 1 @@ -152052,6 +150359,7 @@ trochoi.net, 1 trockendock.ch, 1 trockner-fehler.site, 1 +trodat-samara.ru, 1 trodat.cf, 1 trodniescis.gq, 1 troedel-trolle.de, 1 @@ -152081,7 +150389,6 @@ trollhanttan.tk, 1 trolliet.fr, 1 trolling.gq, 1 -trollingeffects.org, 1 trollitc.com, 1 trollmoa.se, 0 trollolo.tk, 1 @@ -152102,12 +150409,16 @@ tronika.no, 1 tronlaserarena.cz, 1 tronmeo.com, 1 +tronnews.co, 1 +tronnews.life, 1 +tronnews.me, 1 +tronnews.news, 1 +tronnews.xyz, 1 tronox.com, 1 troomcafe.com, 1 troonnorthgolf.com, 0 troopaid.info, 1 troopers.de, 1 -troovo.ch, 1 trophcomplewin.ml, 1 trophies.de, 1 trophykoi.tk, 1 @@ -152135,7 +150446,6 @@ troppotogo.it, 1 troqueladoras.online, 1 trosell.net, 1 -trosinenko.com, 1 tross.tk, 1 trotter.cf, 1 trouble-clic.com, 1 @@ -152291,6 +150601,7 @@ truepartnertechnology.com, 1 truepartnertechnology.nl, 1 truepartnertechnology.sg, 1 +truepointdigital.com.au, 1 trueprogresstherapy.com, 1 truereligionjeanstore.tk, 1 truerizm.ru, 1 @@ -152337,7 +150648,6 @@ truong.fi, 1 truonganhdecor.com, 1 truongnguyen.live, 1 -truopio.com, 1 truqu.com, 1 trureg.uk, 1 truromusicteacher.co.uk, 1 @@ -152365,7 +150675,6 @@ trustedclothes.com, 1 trustedhost.site, 1 trustednetworks.nl, 1 -trustedpropertymanagement.net, 1 trustedstack.com, 1 trustedtoolbox.com, 1 trustee.deals, 1 @@ -152373,6 +150682,7 @@ trusthook.tk, 1 trusthub.com, 1 trustnet.co.il, 0 +trustnxt.com, 1 trustology.io, 1 trustpoint.one, 0 trustradi.us, 1 @@ -152390,6 +150700,7 @@ truth.com, 1 truth.tk, 1 truthenforcers.com, 1 +truthfound.me, 1 truthmessages.pw, 1 truthsayer.tk, 1 truthsocial.com, 1 @@ -152410,7 +150721,6 @@ trxnews.today, 1 try-upguard.com, 1 try2hack.it, 1 -try2services.de, 1 trybabyschoice.com, 1 trycaviar.com, 1 trychameleon.com, 1 @@ -152442,15 +150752,14 @@ tryptamine.tk, 1 tryramp.com, 1 tryreason.com, 1 -tryrebooting.tech, 1 tryrfsfirst.co.uk, 1 +tryriot.com, 1 tryroyalcanin.com, 1 trystagency.com, 1 tryterracotta.com, 1 tryti.me, 1 trytivi.com, 1 trytn.com, 1 -tryupdates.com, 1 trywesayyes.com, 1 trz.cz, 1 ts-farm.ru, 1 @@ -152494,8 +150803,9 @@ tsgbit.net, 1 tshirai.work, 1 tshirtatlowprice.com, 1 +tshirtbea.com, 1 tshirtgenerator.ga, 1 -tshirtmemoryquilts.com, 1 +tshirtmemoryquilts.com, 0 tshirts.durban, 1 tshirtsangola.co.za, 1 tshirtsbotswana.co.za, 1 @@ -152511,7 +150821,6 @@ tsiakoulia.gr, 1 tsiakoulias.eu, 1 tsiakoulias.gr, 1 -tsico.com, 1 tsiconnections.com, 1 tsicons.com, 1 tsig.nl, 1 @@ -152529,6 +150838,7 @@ tsna.cc, 1 tsncommunications.com, 0 tso-europe.de, 1 +tsoansw.org.au, 1 tsoto.net, 1 tsp.gov, 1 tspdrits.xyz, 1 @@ -152547,6 +150857,7 @@ tstrom.net, 1 tsu.re, 1 tsuda-dental-ortho.info, 1 +tsudakahama.tech, 1 tsueri.cloud, 1 tsugedental-kids.tokyo, 1 tsukasa-gallery.com, 1 @@ -152601,7 +150912,6 @@ ttdt.org, 1 ttfin.ch, 1 ttfscu.com, 1 -tthomes.vn, 1 ttill.de, 1 ttjnextgenjewels.com, 1 ttkia.com, 1 @@ -152632,6 +150942,7 @@ ttwtrader.com, 1 tty.space, 1 tty1.net, 1 +tty12.org, 1 ttyystudio.com, 1 tu-muenchen.de, 1 tu6.pm, 1 @@ -152667,7 +150978,6 @@ tucidi.net, 1 tuck2000.com, 1 tuckerman.com.au, 1 -tuckhayward.art, 1 tuckmeintebo.com, 1 tucny.com, 1 tucson.com, 1 @@ -152675,7 +150985,6 @@ tucsonpcrepair.com, 1 tucsonsewerscopes.com, 1 tucuatro.com, 1 -tucuxi.org, 1 tudinerito.tk, 1 tudinhoparasuacasa.com.br, 1 tudodebompresentes.com.br, 1 @@ -152693,7 +151002,6 @@ tuestilo.nl, 1 tuev-hessen.de, 1 tufelicitacion.info, 1 -tuffclassified.com, 1 tuffdall.as, 1 tuffmail.net, 1 tuffsruffs.se, 1 @@ -152706,9 +151014,9 @@ tugether.at, 1 tugi.cz, 1 tugnut.tk, 1 -tuica.com, 1 tuimpulso.eu, 1 tuinaportugal.com, 1 +tuincentrumhardenberg.com, 1 tuinenhullebroek.be, 1 tuinenvermeiren.be, 1 tuingereedschappen.net, 0 @@ -152719,6 +151027,7 @@ tuja.hu, 1 tujardin.casa, 1 tuk-tam.bg, 1 +tukan.fr, 1 tukangroup.com, 1 tuketicihaklari.net, 1 tukiart.tk, 1 @@ -152758,13 +151067,13 @@ tulosleep.com, 1 tulpawiki.org, 1 tulsa.tech, 1 +tulsaextendedstays.com, 1 tulsafathers.com, 1 tulsameetingroom.com, 1 tulsaworld.com, 1 tulumcosmeticos.com.br, 1 tulup.io, 1 tum.de, 1 -tumanishvili.com, 1 tumarcafe.com, 1 tumblenet.tk, 1 tumblr.com, 1 @@ -152788,7 +151097,6 @@ tune-web.de, 1 tunenet.ml, 1 tuner.cloud, 1 -tunescoot.site, 0 tuneserver.tk, 0 tuniclick.net, 0 tuning-parts24.de, 1 @@ -152819,6 +151127,7 @@ tunochebuena.com, 1 tunombre.tk, 1 tunster.net, 1 +tunywear.com, 1 tuol-sleng.tk, 1 tuomiset.com, 1 tuoni.ga, 1 @@ -152827,7 +151136,6 @@ tuou.xyz, 0 tupass.pw, 1 tupatane.gq, 1 -tupeng.com, 1 tuperiodico.soy, 1 tupeuxpastest.ch, 0 tupi.fm, 1 @@ -152858,7 +151166,6 @@ turbo.az, 1 turbo24.com, 1 turboconcept.com, 1 -turbocore.com.br, 1 turbodata.no, 1 turbodata.org, 1 turbohitlerxxx.in, 1 @@ -152902,7 +151209,6 @@ turkceingilizce.gen.tr, 1 turkceyama.com, 1 turkcoder.tk, 1 -turkdevs.net, 1 turkey-portal.tk, 1 turkeyfiles.tk, 1 turkeymistress.tk, 1 @@ -152916,7 +151222,6 @@ turkhalkmuzigi.tk, 1 turkiet.guide, 1 turkishhackers.tk, 1 -turkishtranslation.net, 1 turkishyatirim.com, 1 turkist.tk, 1 turkistan-rap.tk, 1 @@ -152943,7 +151248,6 @@ turksiteleri.tk, 1 turkteam.tk, 1 turktelekomarenagolleri.tk, 1 -turktree.com, 0 turkup.ml, 1 turkuradyo.tk, 1 turkutitans.tk, 1 @@ -152978,9 +151282,9 @@ turquoise.health, 1 turquoisetassel.com, 1 turretlabs.io, 1 -tursiae.org, 1 turtle.ai, 0 turtleduckstudios.com, 1 +turtlefiresystems.com, 1 turtlehead.tk, 1 turtleinfra.net, 1 turtles.ga, 1 @@ -153072,6 +151376,7 @@ tuxflow.de, 0 tuxforums.com, 1 tuxhound.org, 1 +tuxiaodui.com, 1 tuxito.tk, 1 tuxlife.net, 1 tuxlinux.tk, 1 @@ -153097,7 +151402,6 @@ tv-mainzlar.de, 1 tv-online.ml, 1 tv-pes.cz, 1 -tv-programme.com, 1 tv-seznam-cz.cz, 1 tv-seznamcz.cz, 1 tv-sports.fr, 1 @@ -153148,7 +151452,6 @@ tvkaren.tk, 1 tvlanguedoc.com, 1 tvleader.one, 1 -tvleader.uk, 1 tvleaks.se, 1 tvlplus.net, 1 tvm.events, 1 @@ -153161,16 +151464,18 @@ tvoia-dietka.tk, 1 tvoistatusy.tk, 1 tvoistili.ml, 1 -tvojelajky.cz, 1 +tvojelajky.cz, 0 tvojeucetnictvi.cz, 1 tvorog.dedyn.io, 1 tvos.eu, 1 tvoyaknighka.ga, 1 tvpes.cz, 1 +tvpn.co.za, 1 tvquot.es, 1 tvregion.com, 1 tvrestyler.eu, 1 tvreviewer.tk, 1 +tvs-autoserv.de, 1 tvs-virtual.cz, 1 tvseasons.tk, 1 tvseries.info, 1 @@ -153226,10 +151531,10 @@ twem.ddns.net, 1 twentyrising.com, 1 twentyrising.de, 1 +twentytwogroup.com.au, 1 twerk.tk, 1 twerking.porn, 1 twfier.com, 1 -twfund.com, 1 twfwd.email, 1 twhc.org.au, 1 twidy.jp, 0 @@ -153297,7 +151602,6 @@ twobitbusker.com, 1 twobridges.co.uk, 1 twobrothersbbq.com, 0 -twobrothersinn.com, 1 twoconnect.com, 0 twocornertiming.com, 1 twodadsgames.com, 1 @@ -153340,6 +151644,7 @@ txhb.gov, 1 txlocksmiththewoodlands.com, 1 txlrs.org, 1 +txmdhealth.com, 1 txokachat.cc, 1 txryan.com, 1 txsgmemorial.org, 1 @@ -153355,7 +151660,6 @@ txtdirect.org, 1 txtentertainment.ga, 1 txtfile.eu, 0 -txwm.com, 1 txwriterstudio.com, 1 ty0m.com, 1 ty529.com, 1 @@ -153488,7 +151792,6 @@ tytocare.com, 1 tytod.com, 1 tyu.sh, 1 -tyukanyo.hu, 1 tyumen-news.net, 1 tyumen.ga, 1 tyuning-avto.tk, 1 @@ -153543,7 +151846,6 @@ u15p7.com, 1 u15p8.com, 1 u15x.com, 1 -u175.com, 1 u29dc.com, 1 u2b.eu, 1 u2co.de, 1 @@ -153669,7 +151971,6 @@ ubzoo.tk, 1 uc4h.com, 1 ucac.nz, 0 -ucandles.ru, 1 ucangiller.com, 1 ucaskernel.com, 1 ucayim.com, 1 @@ -153690,16 +151991,15 @@ ucheba.gq, 1 ucheba.tk, 1 uchicagomedicine.org, 0 -uchwytyozdobne.pl, 1 ucibt.com, 1 -ucinvest.com.au, 1 uck.i.ng, 1 uckg.org, 0 -uckunlaboratuvari.com, 1 +uckunlaboratuvari.com, 0 uclan.sk, 1 uclf.de, 1 uclip.club, 1 ucmatedeveloper.gq, 1 +ucmcomponents.com, 1 ucmjlawyers.com, 1 ucmultrasonics.com, 1 ucngame.com, 1 @@ -153722,7 +152022,13 @@ uddate-linthdcp-567app.com, 1 uddi.ng, 1 uddin.io, 1 +udeca.es, 1 +udeca.eu, 1 +udeca.net, 1 +udeca.nom.es, 1 udeca.org, 1 +udeca.org.es, 1 +udeca.xyz, 1 udemons.be, 1 udenit.de, 0 udenlandske-casinoer.dk, 1 @@ -153773,7 +152079,7 @@ ufa-soft.tk, 1 ufacesign.in, 1 ufanet.id, 1 -ufanisi.mx, 1 +ufanisi.mx, 0 ufar-ntds.org, 1 ufcw175.com, 1 uffo.cz, 1 @@ -153830,7 +152136,6 @@ uhcuhcas.gq, 1 uhcuhcas.ml, 1 uhcuhcas.tk, 1 -uhes.com.sg, 1 uhhospitals.org, 1 uhighmidway.com, 1 uhingaro.com, 0 @@ -153870,7 +152175,6 @@ ujat.mx, 1 ujeb.link, 1 ujiyasu.com, 1 -ujjivansfb.in, 1 ujob.com.cn, 1 ujotthon.hu, 1 ujvary.eu, 1 @@ -153889,7 +152193,6 @@ ukdefencejournal.org.uk, 1 ukdri.ac.uk, 1 ukem.co.uk, 1 -ukfinancialplanning.co.uk, 1 ukforum.net, 1 ukhas.net, 1 ukimmigration.law, 1 @@ -154035,9 +152338,9 @@ ultravip.com.br, 1 ultreya.tk, 1 ultrixus.rocks, 1 +ultsociety.com, 1 uludag16.com.tr, 1 ulupono.com, 1 -ulusar.com.tr, 1 ulyanovsk-73.tk, 1 ulyanovsk-news.net, 1 ulyanovsk73.tk, 1 @@ -154058,7 +152361,6 @@ umarysi.fun, 1 umas.tk, 1 umasc.org, 1 -umasoda-tohoku.com, 1 umassfive.coop, 1 umasstransit.org, 1 umatilla.gov, 1 @@ -154106,6 +152408,7 @@ umwandeln-online.de, 1 umweltgalerie.de, 1 umweltnetz-schweiz.ch, 1 +umww.com, 1 umzuege-hannover.net, 1 umzugschecker.de, 1 umzugsunternehmen.berlin, 1 @@ -154116,7 +152419,6 @@ unacasitadepapel.com, 1 unaffectedsound.tk, 1 unai-yus.tk, 1 -unaidesarrolladorweb.com, 1 unalma.com, 1 unanaciounaseleccio.tk, 1 unangelturbio.tk, 1 @@ -154155,7 +152457,6 @@ unchile.com, 1 uncinema.cf, 1 uncivserver.xyz, 1 -unclaimedretirementbenefits.com, 1 unclaimedtreasure.com, 1 unclebens-specials.gr, 1 uncontrollablegas.com, 1 @@ -154232,7 +152533,6 @@ unexplored-moscow.tk, 1 unf.dk, 1 unfabulous.tk, 1 -unfall24.com, 1 unfallrechtler.de, 1 unfamousrecords.tk, 1 unfathomable.blue, 1 @@ -154256,7 +152556,6 @@ ungrafakta.tk, 1 unhabitat.org, 1 unhappy.tk, 1 -unheated.com, 1 unhub.ru, 1 uni-arts.com, 1 uni-chem.rs, 1 @@ -154265,9 +152564,6 @@ uni2share.com, 1 unia.es, 1 unian.info, 1 -uniaofraternalraulcury.com.br, 1 -unibaby.com, 1 -unibank.am, 1 unibet.bz, 1 unibet.ltd, 1 unibev.net, 1 @@ -154320,6 +152616,7 @@ unicycle.ga, 1 unicycle.show, 1 unicz.it, 1 +unidadvictimas.gov.co, 1 unidadvirtual.com, 1 unidata.ca, 1 unideb.hu, 1 @@ -154330,7 +152627,6 @@ unifestal.com, 1 unifiednetwork.me, 1 unifiedwellness.ca, 1 -unifiedworld.co.uk, 1 unifimf.com, 1 uniflow360.com, 1 uniforcele.com, 1 @@ -154347,7 +152643,6 @@ unikon.su, 1 unikos.tk, 1 unikrn.com, 1 -unikrn.space, 1 unikrn.tech, 1 unikrnb2b.com, 1 unilab.com.ph, 1 @@ -154365,7 +152660,6 @@ uninatural.com.br, 1 unine.fun, 1 uninets.com, 1 -uniodontopocos.com.br, 1 union.tech, 1 unionalcoyana.biz, 1 unionalcoyana.com, 1 @@ -154403,8 +152697,6 @@ unique-urls.tk, 1 uniquedollz.tk, 1 uniqueexpression-coaching.de, 1 -uniquehardware.ca, 1 -uniquehardware.net, 1 uniquepress.biz, 1 uniquest.com.au, 1 uniquestlye.ga, 1 @@ -154505,7 +152797,7 @@ universalmusic.nl, 1 universalmusic.pl, 1 universalpaymentgateway.com, 1 -universalplant.com, 1 +universalplant.com, 0 universalspf.org, 1 universalstars.com.au, 1 universalstoragecontainers.nl, 1 @@ -154516,7 +152808,6 @@ universe.wtf, 1 universehistory.net, 1 universehk.tk, 1 -universeinform.com, 1 universellafredsdanser.se, 1 universellesleben.tk, 1 universemasterplan.com, 1 @@ -154545,6 +152836,7 @@ universodelasaludanimal.com, 1 universrumbacongolaise.com, 1 universus.tk, 1 +univezn.nl, 1 univision.net, 1 univitale.fr, 0 uniwor.com, 1 @@ -154577,7 +152869,6 @@ unko.cz, 1 unkrn.com, 1 unleashfido.com, 1 -unli.xyz, 1 unlimit.com, 1 unlimitedconference.id, 1 unlimiteddata.digital, 1 @@ -154604,6 +152895,7 @@ unminutomami.com, 1 unmo.com, 1 unmoneye.com, 1 +unnamed.games, 1 unnamed.tk, 1 unnas.ca, 1 uno-express.de, 1 @@ -154620,7 +152912,6 @@ unope.ru, 1 unope.tk, 1 unoptional.tk, 1 -unoptix.com, 1 unoriginal.tk, 1 unos.fr, 1 unosconotros.com, 1 @@ -154636,7 +152927,6 @@ unplugstore.it, 1 unply.com, 1 unpoditalia.se, 1 -unpossible.xyz, 1 unpost.net, 1 unpr.dk, 1 unpuzzled.net, 1 @@ -154708,7 +152998,6 @@ unyouth.nz, 1 unyouth.org.nz, 1 uoflhealth.org, 1 -uonly.ai, 1 uoui.de, 1 up-date-app.com, 1 up-obmen.ml, 1 @@ -154721,7 +153010,6 @@ up2mark.com, 0 up2staff.com, 1 up2tech.fr, 1 -up2university.eu, 1 upaaquila.org, 1 upahminimum.com, 1 upaisa.com, 1 @@ -154754,8 +153042,6 @@ updata.com, 1 update-linthdcp-567app1.com, 1 updatecli.io, 1 -updatedrecipes.com, 1 -updating.social, 1 updefense.io, 1 updoze.com, 1 upengo.com, 1 @@ -154770,9 +153056,9 @@ upgamerengine.com, 1 upgamerengine.com.br, 1 upgamerengine.net, 1 +upgeradores.com.br, 1 upgintl.com, 1 upgrade.com, 1 -upgradeguru.de, 1 upgradeit.dk, 1 upgradeloans.com, 1 upgrades-and-options.com, 1 @@ -154799,7 +153085,6 @@ upleveled.io, 0 uplexis.com.br, 1 upliftingappalachia.org, 1 -upliftweb.com.au, 1 uplinkgame.tk, 1 uplinklabs.net, 1 upload.facebook.com, 0 @@ -154868,7 +153153,6 @@ upskirtmania.tk, 1 upsocial.ga, 1 upsocial.pp.ua, 1 -upsook.com, 1 upstaff.com, 1 upstairs.one, 1 upstart.com, 1 @@ -154879,6 +153163,7 @@ uptech.biz.id, 1 uptechbrasil.com.br, 1 uptic.net, 0 +uptime-alert.com, 1 uptimed.com, 1 uptimeradar.com, 1 uptimeuno.com, 1 @@ -154893,7 +153178,6 @@ upwardflourish.com, 1 upwardtraining.co.uk, 1 upwork.com, 1 -upyourbusiness.nl, 1 uq1k.com, 1 uqr.me, 1 uqschool.com, 1 @@ -155003,6 +153287,7 @@ urdumediamonitor.com, 1 ureed.com, 1 urenaphoto.com, 1 +ureve.paris, 1 urfreecon.tk, 1 urge55.com, 1 urgences-valais.ch, 1 @@ -155041,7 +153326,6 @@ urljournal.tk, 1 urlparse.com, 1 urlr.me, 1 -urlrating.com, 1 urlrewriting.net, 1 urlscan.io, 1 urlsimple.tk, 1 @@ -155150,7 +153434,6 @@ usbevents.co.uk, 1 usbmakers.com, 1 usbr.gov, 1 -uscarjunker.com, 1 uscc.org.ua, 1 uscdn.xyz, 0 uscis.gov, 1 @@ -155181,6 +153464,7 @@ usefulinsight.com, 1 usefultravelsite.com, 1 useguestlist.com, 1 +usehalo.com, 1 useinsider.com, 1 useloom.com, 1 usemergencyservices.com, 1 @@ -155284,6 +153568,7 @@ ustaywell.com, 1 ustc.fun, 1 ustc.run, 1 +ustg.net, 1 ustoy.com, 1 ustr.gov, 1 ustreasuryetf.com, 1 @@ -155331,7 +153616,6 @@ utcle.org, 1 utduc.com, 1 utec.edu.pe, 1 -utepecem.com, 1 utevai.tk, 1 uti.edu, 0 utiao.net, 1 @@ -155493,6 +153777,7 @@ uzparimatch.com, 1 uzsvm.cz, 1 uztop.ml, 1 +uzvod.com, 1 uzzamari.com, 1 uzzamari.com.br, 1 v-cn.net, 1 @@ -155544,7 +153829,6 @@ v6729.co, 1 v6752.com, 0 v6957.co, 1 -v6ss.com, 1 v700a.com, 1 v700bb.com, 1 v700cc.com, 1 @@ -155552,6 +153836,7 @@ v700ee.com, 1 v700w.com, 1 v81365.com, 1 +v83.digital, 1 v88158.com, 0 v8abc.com.br, 1 v8builder.com, 1 @@ -155588,7 +153873,7 @@ vaccine.gov, 1 vaccines.gov, 1 vaccinestats.net, 1 -vacek.llc, 1 +vacek.llc, 0 vacine.gov, 1 vacines.gov, 1 vackor.tk, 1 @@ -155657,7 +153942,6 @@ vakantiehuisverzekeringen.nl, 1 vakantieinfo.tk, 1 vakantieverblijfalgarve.nl, 1 -vakat.eu, 1 vakifuniver.ru, 1 vakrebella.no, 1 vakuutuskanava.fi, 1 @@ -155667,7 +153951,6 @@ valach.cz, 1 valais.ch, 1 valant.io, 1 -valaphee.com, 1 valariejenkins.com, 1 valasskyregion.cz, 1 valberg.com, 1 @@ -155806,6 +154089,7 @@ valordotrabalho.com.br, 1 valoriashard.tk, 1 valorizofficial.com, 1 +valorpaytech.com, 1 valos.ai, 1 valparaiso.tk, 1 valparaisoin.gov, 1 @@ -155843,7 +154127,6 @@ valueresearchonline.com, 1 values.com, 1 valueseed.net, 1 -valuetree.in, 1 valunet.co.za, 1 valuoo-legal.com, 1 valuskills.co.za, 1 @@ -155917,6 +154200,7 @@ vanderstraeten.dynv6.net, 1 vanderzwet.net, 1 vandi.tk, 1 +vandidaz.com, 1 vandiepen.com, 1 vandommelenart.com, 0 vandor.sx, 1 @@ -155947,6 +154231,7 @@ vanier.gc.ca, 1 vanilla-official.jp, 1 vanillacoder.co.za, 1 +vanillaicetechnologies.com, 1 vaninsure247.co.uk, 1 vaniola.com, 1 vanished.tk, 1 @@ -155979,6 +154264,7 @@ vanvanlines.com, 1 vanwa.ch, 1 vanwertcountyohio.gov, 1 +vanwijngaardentegelzetters.nl, 1 vanwoensei.xyz, 1 vanwoensel.directory, 1 vanwort.de, 1 @@ -155995,7 +154281,9 @@ vanyavpn.cx, 1 vanyavpn.cz, 1 vanyavpn.ec, 1 +vanyavpn.gd, 1 vanyavpn.gg, 1 +vanyavpn.gl, 1 vanyavpn.gs, 1 vanyavpn.hn, 1 vanyavpn.im, 1 @@ -156039,6 +154327,7 @@ vapteke.ru, 1 vaptkidsight.azurewebsites.net, 1 var.cc, 1 +vara.se, 1 varaani.tk, 1 varalaval.com, 1 varalwamp.com, 1 @@ -156052,7 +154341,6 @@ varghese.de, 1 variable.dk, 1 variablyconstant.com, 1 -variance.pl, 1 varianteespiritual.gal, 1 variatesonline.tk, 1 variatkowo.pl, 1 @@ -156111,7 +154399,6 @@ vasilevo.tk, 1 vasilijeojdanic.ml, 1 vasilijeojdanic.tk, 1 -vasilikieleftheriou.com, 1 vasilisa-volodina.cf, 1 vasilisa-volodina.ga, 1 vasilisa-volodina.gq, 1 @@ -156173,7 +154460,6 @@ vayaprecio.es, 1 vayavotarcolorado.gov, 1 vaygren.com, 1 -vazdemelloconsultoria.com.br, 1 vazon.pp.ua, 1 vb-barbara-beck.de, 1 vb.com.br, 1 @@ -156188,6 +154474,7 @@ vburyatii.ml, 1 vbwinery.com, 1 vc-dealer.jp, 1 +vc.enf.br, 1 vc123.xyz, 1 vcachurch.com, 1 vcacursus.nl, 1 @@ -156290,13 +154577,13 @@ vectrum.cf, 1 vedantalimited.com, 1 vedantatoronto.ca, 1 +vedaspa.bg, 1 vedat.mx, 1 vedeneev.tk, 1 vedettesdeparis.fr, 1 vedev.io, 1 vedma-praktik.com, 1 vedom.ru, 1 -vedran-zulin.from.hr, 1 veeam.com, 1 veebill.com, 1 veebiveski.ee, 1 @@ -156315,6 +154602,7 @@ vegaforeducation.com, 0 vegalanguageacademy.ca, 1 vegan-essen.tk, 1 +vegan-hamburg.com, 1 vegan-kochen.tk, 1 vegan-pratique.fr, 1 vegane-proteine.com, 1 @@ -156354,7 +154642,6 @@ vehiclehistory.gov, 1 vehicleinforcheck.com, 1 vehicleinfozone.com, 1 -vehiclemanuals.shop, 1 vehiclematsuk.com, 0 vehicletax.service.gov.uk, 1 vehimmo.com, 1 @@ -156420,11 +154707,9 @@ velostudio.com.ua, 1 velotours.ga, 1 velovelo.gq, 1 -veloztaxi.com, 1 velpak21.com, 1 velpay.io, 1 velthuysemulder.nl, 1 -veluno.co, 1 velutina.ovh, 1 veluwegroenonderhoud.nl, 1 veluwerally2002.tk, 1 @@ -156437,12 +154722,10 @@ velvpay.com, 1 velyn.my.id, 1 vema-bg.com, 1 -vemm-reunion.org, 1 vemtambem.com, 1 vemviajar.pt, 1 venacifuentes.tk, 1 venali.tk, 1 -venalo.de, 1 venangocountypa.gov, 1 venatorinc.tk, 1 venbot.tk, 1 @@ -156457,7 +154740,6 @@ vendela.tk, 1 vendermicasarapido.com.mx, 1 vendi.it, 1 -vendigital.com, 1 vendingmachines.tk, 1 vendingsierra.com, 1 vendingwebs.com, 1 @@ -156535,7 +154817,6 @@ vennet.fr, 1 vennprime.com, 1 venomxsecurity.com, 1 -venostech.com, 1 venotion.net, 1 venstar.com, 1 ventajasdesventajas.com, 1 @@ -156595,6 +154876,7 @@ verafin.com, 1 verakoubova.net, 1 veraltis.ro, 1 +veralytix.com, 1 veramagazine.jp, 0 veramark.cl, 1 verandering-berlin.de, 1 @@ -156645,7 +154927,6 @@ vereinswahl.online, 1 veren-group.ua, 1 verena.gallery, 1 -verenpaine.com, 1 vereshagino.tk, 1 verfassungsklage.at, 1 verge-solutions.com, 1 @@ -156654,6 +154935,7 @@ vergesense.com, 1 vergessen.cn, 1 vergezogt.nl, 1 +vergihesaplayici.com, 1 vergilevhasi.com.tr, 1 vergraal.tk, 1 verhalenwerf.nl, 1 @@ -156721,6 +155003,7 @@ verkeersschoolvanhouten.nl, 1 verkkovalmentajat.fi, 1 verkossa.tk, 1 +verksampsykologi.com, 1 verlag-lq.at, 1 verlag-lq.ch, 1 verlag-lq.com, 1 @@ -156728,7 +155011,6 @@ verlag-lq.net, 1 verlagdrkovac.de, 0 verlaglq.com, 1 -verlete.com, 1 verliebt-in-bw.de, 1 verliebt-in-niedersachsen.de, 1 verliefde-jongens.nl, 1 @@ -156751,6 +155033,7 @@ vern.cc, 0 vernal.gov, 1 verndale.com, 1 +vernicolor.ro, 1 vernis-marins.com, 1 vernoncosheriff.org, 1 vernonfigureskatingclub.com, 1 @@ -156845,6 +155128,7 @@ vertrouwenspiegel.nl, 1 vertx.cc, 1 verumwomen.com, 1 +verusmedya.com, 1 verustracking.com, 1 veruvis.com, 1 verve.com, 1 @@ -156893,7 +155177,6 @@ vestalny.gov, 1 vestberry.com, 1 vestd.com, 0 -vestia.com.tr, 1 vestia.nl, 1 vestibtech.com, 1 vestibulaire.ch, 1 @@ -156915,7 +155198,7 @@ vetchek.au, 1 vetchek.com.au, 1 vetclick.com, 1 -vetcoretech.com, 1 +vetcoretech.com, 0 veteranarmy.com, 1 veteranpcs.com, 0 veterans-railcard.co.uk, 1 @@ -156995,7 +155278,6 @@ vfnm.de, 1 vfree.org, 0 vfu.cz, 1 -vfwpost1.org, 1 vfxstudy.com, 1 vg-resource.com, 1 vg43.pt, 1 @@ -157030,7 +155312,6 @@ via-labs.com, 1 via-tygo.com, 1 viabill.com, 1 -viacar.com, 1 viacdn.org, 1 viacon.io, 1 viaconecta.co, 1 @@ -157086,7 +155367,6 @@ vicampo.de, 1 vicarious.cf, 1 vicdolphy.com, 1 -vicellishoes.com, 1 vicenez.agency, 1 vicentaburon.tk, 1 vicenterodriguez81.tk, 1 @@ -157277,6 +155557,7 @@ vidrasec.com, 1 vids.cz, 1 vidulo.com, 1 +vidyalayalms.com, 1 vidyamonk.com, 1 viedecelibataire.fr, 1 viega.at, 1 @@ -157343,7 +155624,6 @@ vietnam-melbet.mobi, 1 vietnam-tours.tk, 1 vietnameselove.com, 1 -vietnamhairs.com, 1 vietnamhost.vn, 0 vietnammonpaysnatal.fr, 1 vietnamphotoblog.com, 0 @@ -157372,6 +155652,7 @@ viez.vn, 1 vifranco.cl, 1 vifsoft.com, 1 +viggio.com.br, 1 vigiaviesaitaly.com, 1 vigilance.ca, 1 vigilanciaysalud.com, 1 @@ -157447,7 +155728,6 @@ vikweb.hu, 1 vikyho.cz, 1 vila-senov.cz, 1 -vila11.com.br, 1 vilaanimalpetshop.com, 1 vilabiamodas.com.br, 1 viladecansjove.cat, 1 @@ -157460,7 +155740,6 @@ vilans.nl, 1 vilantice.cz, 1 vilaonze.com.br, 1 -vilasantina.com.br, 1 vilavilma.si, 1 vilavyhlidka.cz, 1 vilawatt.cat, 1 @@ -157597,7 +155876,6 @@ villasupport.it, 1 villaumbrales.tk, 1 villavaltava.fi, 1 -villaville.com, 1 villawirz.it, 1 ville-gennevilliers.fr, 1 ville-ideale.fr, 1 @@ -157725,6 +156003,7 @@ vinopan.de, 1 vinorossoconero.com, 1 vinoshipper.com, 1 +vinovia.sk, 1 vinovum.net, 1 vinsation.com, 1 vinsonfinancials.tk, 1 @@ -157746,7 +156025,6 @@ vintom.com, 1 vintonia.gov, 1 vinumenu.com, 1 -vinyl-digital.com, 1 vinylbasement.tk, 1 vinylfencestlouis.com, 1 vinylplus.eu, 1 @@ -157799,6 +156077,7 @@ viplc98.net, 1 viplive.tk, 1 vipllcnj.com, 1 +vipm.institute, 1 vipmdh.com.ua, 1 vipmercedes.by, 1 viporiflame.tk, 1 @@ -157821,6 +156100,7 @@ viradadrums.com, 1 virajtharinda.tk, 1 viral-labs.com, 1 +viral-loops.com, 1 viral32111.com, 1 virala.tk, 1 viralboombox.xyz, 1 @@ -157829,7 +156109,6 @@ viraljobs.ga, 1 viraloffer.ga, 1 viralpagi.com, 1 -viralrakyat.com, 1 viralsv.com, 1 viraltech.cf, 1 viralted.ml, 1 @@ -157870,6 +156149,7 @@ virimatech.com, 1 viris.si, 1 virkhost.com, 1 +virnuls.co.uk, 1 virot.eu, 1 virt.dedyn.io, 1 virtbaza.cf, 1 @@ -157905,7 +156185,6 @@ virtuallife.tv, 1 virtualmachine.tk, 1 virtualmemento.tk, 1 -virtualmt2.pl, 1 virtualnet.ec, 1 virtualpavilion.co, 1 virtualprom.tk, 1 @@ -157924,14 +156203,13 @@ virtubox.xyz, 1 virtubroker.com.mx, 1 virtueturkey.ga, 1 -virtuology.com, 1 +virtuosae.com, 1 virturl.de, 1 virtus-group.com, 1 virtussecuritysac.com.pe, 1 virty.cz, 1 virus.pm, 1 virusah1n1.com, 1 -virusdelebola.com, 1 virusmousepads.tk, 1 virusprotect.ro, 1 virusquery.com, 1 @@ -157959,7 +156237,6 @@ visatitans.ca, 1 visatitans.co.uk, 1 visatitans.com, 1 -visaxplorer.com, 1 visaya.com.co, 1 visaynou.com, 1 visceralsound.ca, 1 @@ -157973,6 +156250,7 @@ visforvaccinated.gov, 1 vishenka.tk, 1 vishnujyothi.co.uk, 1 +vishumin.pl, 1 vishwashantiyoga.com, 1 visibilitygurus.com, 1 visiblethoughts.co.uk, 1 @@ -157994,6 +156272,7 @@ visiondigitalsog.com, 1 visioned.net, 1 visioneducation.tk, 1 +visionelevators.africa, 1 visionexpress.com, 1 visionexpress.ie, 1 visiongamestudios.com, 1 @@ -158008,6 +156287,7 @@ visionthroughknowledge.com, 1 visiontree-beta.eu, 1 visionunit.ch, 1 +visionwow.ai, 1 visionxcreative.gq, 1 visionzerocfl.gov, 1 visionzeroreporting.com, 1 @@ -158024,6 +156304,7 @@ visitationbvm.net, 1 visitazores.com, 1 visitbangkoktravel.com, 1 +visitbelfast.com, 0 visitbinghamton.org, 1 visitcambridgeshirefens.org, 1 visitcentralnewyork.com, 1 @@ -158040,7 +156321,7 @@ visitmo.com, 1 visitmontgomerycountyny.com, 1 visitmorelos.mx, 1 -visitmurrumbidgee.com, 1 +visitmurrumbidgee.com, 0 visitnamibia.net, 1 visitnewcastle.com.au, 1 visitorsguide.is, 1 @@ -158085,7 +156366,7 @@ visual-cockpit.com, 1 visual-conversion.com, 0 visual-design.cf, 1 -visual-dreams.de, 1 +visual-dreams.de, 0 visualcontracts.com, 1 visualdrone.co, 1 visualetiquetas.art.br, 1 @@ -158124,7 +156405,6 @@ vitaline.uz, 0 vitalis.nu, 1 vitaliteseniors.fr, 1 -vitalitymedcenters.com, 0 vitalityscience.com, 0 vitaliyshepotkov.tk, 1 vitaliysmagic.com, 1 @@ -158144,6 +156424,8 @@ vitalshop.tk, 1 vitalsolutions.ro, 1 vitalthrills.com, 1 +vitalveda.com.au, 1 +vitaly.es, 1 vitam.de, 1 vitamedgroup.com, 1 vitamina.cl, 1 @@ -158162,7 +156444,6 @@ vitavista.io, 1 vitay.pl, 1 vitechteam.com, 1 -vitekvirtualsolutions.com, 1 viteleaf.com, 1 viteoscrm.ch, 0 viteragro.com.br, 0 @@ -158173,7 +156454,6 @@ vithor.io, 1 vitikit.com, 1 vitkausk.as, 1 -vitkutny.cz, 1 vitman.tk, 1 vitoye.com, 1 vitra-showrooms.co.uk, 1 @@ -158181,7 +156461,6 @@ vitraartemayedekparca.com, 1 vitrade.de, 1 vitralart.es, 1 -vitrerieagathoise.com, 1 vitrinachasov.cf, 1 vitromex.tk, 1 vitsearch.link, 1 @@ -158195,7 +156474,6 @@ vittoriorestaurant.cz, 1 vitucho.tk, 1 vitus-meppen.de, 1 -viunge.dk, 1 viv.fi, 1 viva-family.ch, 1 viva2000.com, 1 @@ -158254,7 +156532,6 @@ viveportal.com, 1 viveremediglia.tk, 1 viverse.com, 1 -viverstp.net, 0 vivesaludableconomnilife.com, 1 vivezlaromate.com, 1 vivi.fyi, 0 @@ -158275,6 +156552,7 @@ viviennevandenbos.nl, 1 vivimasverde.com.ar, 1 vivirenelmundo.com, 1 +vivirenelpoblado.com, 1 vivirenflorida.com, 1 vivmoris.com, 1 vivo.cam, 1 @@ -158291,7 +156569,6 @@ vizantia.tk, 1 vizedia.ga, 1 vizeenergetiky.cz, 1 -vizela.pt, 1 vizierdata.ca, 1 vizion.com, 1 vizional.com, 0 @@ -158354,7 +156631,6 @@ vkfish.ga, 1 vkflac.tk, 1 vkg.nl, 0 -vkgroup.az, 1 vkikaku.com, 0 vkino.com, 0 vkino.ml, 1 @@ -158375,6 +156651,7 @@ vkusnyashka.tk, 1 vkustradicii.com.ua, 1 vkusvill.ru, 1 +vkut.me, 1 vl.cloudns.cc, 1 vl9.de, 1 vlaamsegemeenschap.tk, 1 @@ -158413,6 +156690,7 @@ vlarp.nl, 1 vlasov.ml, 1 vlasova-sova.ml, 1 +vlastimilburian.cz, 1 vldkn.net, 1 vldz.co, 1 vleacademy.com, 1 @@ -158508,7 +156786,6 @@ vns68722.com, 1 vns6969.com, 0 vnsc.org, 1 -vntdp.com, 1 vntyper.org, 1 vnumngr.com, 1 vnxf.vn, 1 @@ -158516,6 +156793,7 @@ voanaboa.pt, 1 voapt.by, 1 voatz.com, 1 +voboxcore.com, 1 vocably.de, 1 vocalcoach.com, 1 vocaloid.my, 1 @@ -158528,7 +156806,6 @@ vocus.aero, 1 vocustest.aero, 1 vod.uk.com, 0 -voda-nadom.ru, 1 vodadombay.cf, 1 vodafone.com.gh, 1 vodavoda.tk, 1 @@ -158589,10 +156866,10 @@ voiceofserbia.tk, 1 voicesforanimals.ru, 1 voicesoflabor.com, 1 -voicesofspirit.at, 1 voicesuk.co.uk, 0 voicu.ch, 0 voicure.com, 1 +void-zero.com, 1 void.rehab, 1 voidancerecords.com, 1 voidbbs.com, 1 @@ -158608,7 +156885,6 @@ voidpay.org, 1 voidscrawl.com, 1 voidwalkerproductions.com, 1 -voidx.top, 1 voigt-analytics.de, 1 voigt-it.solutions, 0 voileux.org, 1 @@ -158636,7 +156912,6 @@ volantinaggioaroma.it, 1 volantinando.net, 1 volaresoftware.com, 1 -volarikcapital.eu, 1 volatile.ovh, 1 volatile.pw, 1 volatilesystems.org, 1 @@ -158722,6 +156997,7 @@ volta.io, 1 voltacircuit.com, 1 voltageelectricity.tk, 1 +voltagevb.com, 1 voltainsite.com, 1 voltarengelprice.tk, 1 voltarengeneric.tk, 1 @@ -158747,6 +157023,7 @@ volusiavotes.gov, 1 volvo-klub.cz, 1 volvo1800es.tk, 1 +volvoconnect.com, 1 volvoklub.cz, 1 volyn-news.ru, 1 vomitoxin.ga, 1 @@ -158805,7 +157082,6 @@ voronezh-news.net, 1 voronezh-news.ru, 1 vorota.com.ua, 1 -vorotasam55.ru, 1 vort-x.com.my, 1 vortari.tk, 1 vorte.ga, 1 @@ -158814,7 +157090,6 @@ vortexhosting.ga, 1 vortexplumbinginc.com, 1 vortix.tk, 1 -vorxdigital.com, 1 vos-consultancy.org, 1 vos-fleurs.ch, 1 vos-fleurs.com, 1 @@ -159118,6 +157393,7 @@ vrallart.com, 1 vramoni.ru, 1 vran.ga, 1 +vranckaertsitsolutions.be, 1 vrandopulo.ru, 1 vratix.com, 0 vravi.tech, 1 @@ -159126,7 +157402,6 @@ vrbl.pt, 1 vrbq.qld.gov.au, 1 vrbr.ch, 0 -vrcentrum.cz, 1 vrchat.community, 1 vrconk.com, 1 vrcosplayx.com, 1 @@ -159193,7 +157468,7 @@ vroad.org, 1 vroedvrouwella.be, 1 vron.house, 1 -vroomvroomvroom.co.nz, 1 +vroomvroomvroom.co.nz, 0 vros.co.id, 1 vrostove.tk, 1 vrp.moe, 1 @@ -159283,11 +157558,11 @@ vshop.ir, 1 vsl-defi.ch, 0 vsl.de, 1 -vsmcomunicacao.com.br, 1 vsnfoto.com, 1 vsoflavors.com, 1 vsource-rsdv.azurewebsites.net, 1 vsoy.co.th, 1 +vsparkel.com, 1 vspin.cz, 1 vsportage.com, 1 vsports.pt, 1 @@ -159326,7 +157601,6 @@ vtpeuphoria.in, 1 vtpskylights.com, 1 vtpworldofwow.in, 1 -vts-solutions.de, 1 vttnordisere.fr, 1 vtuber-schedule.info, 1 vtubes.tokyo, 1 @@ -159336,7 +157610,6 @@ vtwonen.be, 1 vtwonen.nl, 1 vubgenerali.sk, 1 -vubu-medical.de, 1 vue-sur-mer.com, 1 vuefactory.io, 1 vuelacaruru.com, 1 @@ -159345,6 +157618,7 @@ vugt.me, 1 vuitimig.com, 1 vukhoidecor.com, 1 +vulcan-residence.ro, 1 vulcan-russia.today, 1 vulcancycling.ga, 1 vulcannow.ru, 1 @@ -159367,7 +157641,6 @@ vulnerability.ch, 1 vulnerabilityscans.nl, 1 vulnerable.af, 1 -vulners.com, 1 vulns.sexy, 1 vulns.xyz, 1 vulnscan.org, 1 @@ -159375,7 +157648,6 @@ vulpix.uk, 1 vultrhxl.com, 1 vulva.observer, 1 -vulva.photos, 1 vumea.top, 1 vumerity.com, 0 vunn.com, 1 @@ -159388,7 +157660,7 @@ vusdigital.com, 0 vuse.com, 1 vutrox.com, 1 -vutruso.com, 1 +vutruso.com, 0 vux.li, 1 vuzi.fr, 1 vuzopedia.ru, 1 @@ -159424,7 +157696,6 @@ vvzero.cf, 1 vvzero.com, 1 vw-touranclub.cz, 1 -vw0.ru, 1 vw22.com, 1 vwcredit.com, 0 vwforum.ro, 1 @@ -159433,6 +157704,7 @@ vwfsrentacar.co.uk, 1 vwh-kunden.de, 1 vwittich.de, 1 +vwo.com, 1 vwoensel.net, 1 vwoforangeparts.com, 1 vwp.su, 1 @@ -159445,7 +157717,6 @@ vx.hn, 1 vx4.net, 1 vxapps.com, 1 -vxlabs.de, 1 vxm.se, 1 vxv.by, 1 vxz.me, 1 @@ -159457,9 +157728,7 @@ vyberodhadce.cz, 1 vybihal.cz, 1 vycius.lt, 1 -vygeja.lt, 1 vygo.network, 1 -vygo.one, 1 vyjimecnystav.cz, 1 vypecenereklamy.cz, 1 vypij.cz, 1 @@ -159504,6 +157773,7 @@ w-permission.com, 1 w-solutionshk.xyz, 1 w-spotlight.appspot.com, 1 +w-surgeryhospital.com, 1 w-w-auto.de, 1 w-ws.ga, 1 w.st, 1 @@ -159518,6 +157788,7 @@ w2ang.cn, 1 w2ang.com, 1 w2n.me, 1 +w2sz.org, 1 w2w.com, 1 w33b.in, 1 w365.vip, 0 @@ -159536,7 +157807,6 @@ w3n14izy.ml, 1 w3n14izy.tk, 1 w3scan.nl, 1 -w3squad.com, 1 w3web.com.br, 1 w3y.cc, 1 w3z.org, 1 @@ -159683,7 +157953,6 @@ waixingrenfuli.vip, 1 wajtc.com, 1 wak.io, 1 -waka-mono.com, 1 wakastream.cc, 1 wakatime.com, 1 wakaya.ma, 1 @@ -159709,12 +157978,15 @@ wakuwakustudyworld.co.jp, 0 walaamohamed.com, 1 walax.com, 1 +waldenglobalservices.com, 1 waldenvt.gov, 1 waldenwritingcenter.ml, 1 +waldfescht.de, 1 waldo.tk, 1 waldorf-augsburg.de, 1 waldorf-harduf.org, 1 waldorfdiary.com, 1 +waldorfschule-neustadt.de, 1 waldparkerwoelfe.tk, 1 waldportoregon.gov, 1 waldur.nl, 1 @@ -159817,6 +158089,7 @@ walter-mooij-jazztrio.tk, 1 walter.lc, 1 waltergrouprealestate.com, 1 +waltermart.com.ph, 1 waltermart.ph, 1 waltermartmalls.com, 1 waltermartsupermarket.com, 1 @@ -159913,7 +158186,6 @@ wapkarma.tk, 1 wapkat.tk, 1 waplumber.com.au, 1 -wapmafija.eu, 1 wapmaster.cf, 1 wapmaster.ga, 1 wapnazir.tk, 1 @@ -160034,7 +158306,7 @@ warszawa-pranie-dywanow.pl, 1 warszawa19115.pl, 0 warszawska285.pl, 1 -wartalika.id, 0 +wartalika.id, 1 warteg.com, 1 warteg.net, 1 wartegseberangsana.com, 1 @@ -160105,7 +158377,6 @@ wasilewskicourtreporting.net, 1 wasilewskicourtreporting.org, 1 wasistderunterschied.com, 1 -wasp.host, 1 waspanimation.com, 1 waspstudio.com, 1 waspvfx.com, 1 @@ -160166,12 +158437,13 @@ waterauthority.ky, 1 waterbassoon.eu.org, 1 waterborefiji.com, 1 +waterborne-env.com, 1 waterboromaine.gov, 1 watercold.cool, 1 watercoolergames.org, 1 waterdogsmokehouse.com, 1 waterdownmedia.co.uk, 1 -waterdrop.tk, 1 +waterdrop.tk, 0 waterdropcultureproject.com, 1 waterest.tk, 1 waterfedpole.com, 1 @@ -160180,6 +158452,7 @@ waterfordvt.gov, 1 waterfordwi.gov, 1 waterforlife.be, 1 +waterfrontapp.com, 1 watergate.info, 1 waterheaterleaguecity.com, 1 waterhouse.tk, 1 @@ -160197,6 +158470,7 @@ waterloo1815.be, 1 waterloofaucets.com, 1 waterlootwpmi.gov, 1 +watermanaspen.co.uk, 1 watermarkktp.com, 1 watermarkly.com, 0 watermonitor.gov, 1 @@ -160289,7 +158563,6 @@ way2tech.de, 1 wayaberolodge.com, 1 wayakcomm.com, 1 -waybinary.com, 1 waycoolmail.tk, 1 waycraze.com, 1 waycrossga.gov, 1 @@ -160357,7 +158630,6 @@ wbpgroup.com.au, 1 wbphed.gov.in, 1 wbs-gruppe.de, 1 -wbsentinel.com, 1 wbsogids.nl, 1 wbss.it, 1 wbstraining.de, 1 @@ -160422,7 +158694,7 @@ wdo.org, 1 wdodelta.nl, 0 wdol.gov, 1 -wdophoto.com, 0 +wdophoto.com, 1 wdpapi.io, 1 wdpui.io, 1 wdrl.info, 0 @@ -160456,7 +158728,6 @@ wear1015.ml, 1 wearandcare.net, 1 weare.ie, 1 -weare1inspirit.com, 1 wearebase.com, 1 wearebfi.co.uk, 1 wearecreator.uk, 0 @@ -160480,6 +158751,7 @@ wearepoo.com, 1 wearereasonablepeople.com, 0 wearereasonablepeople.nl, 0 +wearesilverbullet.com, 1 wearesolomon.com, 1 wearesuma.com, 1 wearethecultureclub.co.uk, 1 @@ -160504,7 +158776,6 @@ weatherproduct.ga, 1 weatherstylist.co.uk, 1 weavabel.com, 0 -weavedreams.com, 1 weaveral.gov, 1 weavers.space, 1 weaversbazaar.com, 1 @@ -160613,7 +158884,6 @@ webart-factory.de, 1 webartex.ru, 1 webasto-moscow.ru, 1 -webastra.fr, 1 webauthnlogin.com, 1 webautohelper.com, 1 webawere.com, 1 @@ -160692,7 +158962,6 @@ webdesignelftal.eu, 1 webdesignersinchennai.tk, 1 webdesignfenua.tk, 1 -webdesignlabor.ch, 1 webdesignplay.com, 1 webdesignplayground.io, 1 webdesignrodgau.de, 1 @@ -160763,7 +159032,6 @@ webharvest.gov, 1 webhelyesarcu.hu, 1 webhero.it, 1 -webhoffmann.de, 0 webhooks.stream, 1 webhopp.com, 1 webhosting-erfahrungen.de, 1 @@ -160785,6 +159053,7 @@ webi-design.jp, 1 webi.ms, 1 webi.sh, 1 +webia.in.th, 1 webimagina.tk, 1 webinarcentral.co.za, 1 webinarlist.ro, 1 @@ -160803,7 +159072,6 @@ webitentwicklung.de, 1 webiz.ro, 1 webizer.fr, 1 -webjobposting.com, 1 webkam-sex.com, 1 webkaroindia.com, 1 webkato.ru, 1 @@ -160825,7 +159093,6 @@ webline.ch, 1 webline.co, 1 weblinkcity.tk, 1 -weblistposting.com, 1 weblocus.tk, 1 weblogia.tk, 1 weblogic.tk, 1 @@ -160892,7 +159159,6 @@ webpkgcache.com, 1 webplace4u.nl, 0 webportail.tk, 1 -webpostingmart.com, 1 webpostingpro.com, 1 webpostingreviews.com, 1 webpot.hu, 1 @@ -160927,7 +159193,6 @@ webschool21.ml, 1 webscp.ru, 1 webscraper.io, 1 -websdesignpro.com, 1 websec.nl, 1 websec.nu, 1 websectools.com, 1 @@ -161100,7 +159365,6 @@ weddingplanner.tk, 1 weddingpro.com, 1 weddingsbynoon.co.uk, 1 -weddingsinbloom.com, 1 weddingtailor.com.au, 1 weddingtrunks.tk, 1 weddingwire.ca, 1 @@ -161134,6 +159398,7 @@ weefriendskids.com, 1 week-numbers.org, 1 weekdone.com, 1 +weekend.london, 1 weekend4two.ch, 1 weekendbus.pl, 1 weekendcraft.com, 0 @@ -161145,7 +159410,6 @@ weekly-residence.com, 1 weeklyads2.com, 0 weeklydcoupgen.com, 1 -weelam.ca, 1 weelzbahamas.com, 1 weemakers.fr, 0 weepycat.com, 1 @@ -161214,7 +159478,6 @@ wein.cc, 1 weinbergerlawgroup.com, 1 weinboxbuilders.co.nz, 1 -weinco.at, 1 weinfuse.com, 1 weingut-bernd-klein.de, 1 weinundsein.com, 1 @@ -161248,7 +159511,6 @@ weitsolutions.nl, 1 weitz-porzellan.de, 0 weitzmangroup.com, 1 -weixinjiefengla.com, 0 weizenke.im, 1 wejv.eu, 1 wekan.hopto.org, 1 @@ -161257,7 +159519,7 @@ weknowhowtodoit.com, 1 welby.cat, 1 welcare.co.kr, 1 -welcaremall.com, 1 +welcaremall.com, 0 welchmanhallgullybarbados.com, 0 welchmorris.com, 1 welcome-tahiti.com, 0 @@ -161280,6 +159542,7 @@ wellbeing360.com.au, 1 wellbutrinxlgeneric.cf, 1 wellcarehealthsurvey.com, 1 +wellcom.co.il, 1 wellcomemdhealth.com, 1 welldeals.store, 1 welldoc.com, 1 @@ -161299,7 +159562,7 @@ wellness-alto-adige.net, 1 wellness-bonbon.de, 0 wellness-gutschein.de, 1 -wellness-kobata-dc.com, 1 +wellness-kobata-dc.com, 0 wellness-spa-suedtirol.com, 1 wellnessandco.com.au, 1 wellnesscheck.net, 1 @@ -161333,7 +159596,6 @@ welshccf.org.uk, 1 welshterrier.tk, 1 welshyak.tk, 1 -welspunindia.com, 1 welstrim.de, 1 welsum.com, 1 welt-flaggen.de, 1 @@ -161388,6 +159650,7 @@ wenzsecurity.com.br, 1 wenzthewanderer.gq, 1 weomucat.com, 1 +weosx.com, 0 wep.pw, 1 wepa.pe, 1 wepaempowercenter.org, 1 @@ -161425,6 +159688,7 @@ werkannwas.org, 1 werken-bij-inwork.nl, 1 werken-in-de-techniek.nl, 1 +werkenbijbakkerbedrijfswagens.nl, 1 werkenbijblokker.nl, 1 werkenbijbrabantsedelta.nl, 1 werkenbijbuvo.nl, 1 @@ -161435,7 +159699,6 @@ werkenbijintertoys.nl, 1 werkenbijjunis.nl, 1 werkenbijmagentazorg.nl, 1 -werkenbijoegema.nl, 1 werkenbijpelsrijcken.nl, 1 werkenbijpromovendum.nl, 1 werkenbijrexel.nl, 1 @@ -161483,10 +159746,10 @@ wesleywarnell.com, 1 wesoco.de, 1 wespeakgeek.co.za, 1 -wespeakk9.com, 1 wespringforward.com, 1 wesreportportal.com, 1 wessafety.net, 1 +wesseldijk.eu, 1 wesseling.de, 1 wesselius.tk, 1 wessner.co, 0 @@ -161527,7 +159790,6 @@ westendwifi.net, 1 westerdraai.tk, 1 westeremden.com, 1 -westergas.nl, 1 westernaerospacemuseum.org, 1 westernenergy.co.nz, 1 westernguarantyfundservices.org, 1 @@ -161668,6 +159930,7 @@ wfgukasha.club, 1 wfh.ovh, 1 wfh.se, 1 +wfigueiredo.com.br, 1 wforum.nl, 1 wfuogb.com, 1 wfxs.com.tw, 1 @@ -161689,7 +159952,6 @@ wgfs.org, 1 wgi.fi, 1 wgnet.ch, 1 -wgnr.ai, 1 wgnr.me, 1 wgom.org, 0 wgrfoods.co.uk, 0 @@ -161750,7 +160012,6 @@ whatisinternetsecurity.net, 1 whatisipfix.com, 1 whatisl.ovh, 1 -whatismesothelioma.top, 1 whatismycountry.com, 1 whatismyip.help, 1 whatismypublicip.com, 1 @@ -161758,6 +160019,7 @@ whatissflow.com, 1 whatisthe.cloud, 1 whatisthisapp.com, 1 +whatmylocation.com, 1 whatsapp.com, 1 whatsapp.net, 1 whatsatienda.com, 1 @@ -161778,7 +160040,6 @@ whatwedo.ch, 1 whatwg.org, 1 whatzelink.com, 1 -whawtheme.fr, 1 whd-guide.de, 1 whdpc.gov, 1 wheatfieldtwpmi.gov, 1 @@ -161855,7 +160116,6 @@ whiskeytech.org, 1 whisky.com.my, 1 whisky.money, 1 -whisky.my, 1 whiskydb.de, 1 whiskydrivers.tk, 1 whiskymy.com, 1 @@ -161865,6 +160125,7 @@ whispeer.de, 1 whisper-net.de, 1 whisperlab.org, 1 +whistic.com, 1 whistle.mobi, 1 whistleblower.gov, 1 whistleblower.pl, 1 @@ -161896,6 +160157,7 @@ whitebirdclinic.org, 1 whitebox.ga, 1 whitechristmas.com.au, 1 +whitecollar.net, 1 whitecollarfraud.com, 1 whitecreekny.gov, 1 whitedragonmartialarts.org, 1 @@ -162047,7 +160309,6 @@ why-brexit.uk, 1 why918.com, 0 whychoosebob.id.au, 1 -whyescort.com, 1 whyinsurance.me, 1 whyleavetown.com, 1 whynohttps.com, 1 @@ -162065,7 +160326,6 @@ wi-wi.co.jp, 1 wi.ki, 1 wia.org, 1 -wiadomosci-lodz.pl, 0 wiai.eu.org, 1 wiapply.com, 1 wiazarymt.pl, 1 @@ -162082,11 +160342,11 @@ wichm.de, 1 wichtel-lager.de, 1 wichtel-umzuege.de, 1 -wickedgov.org, 1 wickedsick.tk, 1 wickedvibes.tk, 1 wickersmith.com, 1 wickerwoman.com, 0 +wicklowcountycricket.com, 1 wickrath.com, 1 wickrath.net, 1 wicstunvetgroup.co.uk, 1 @@ -162147,6 +160407,7 @@ wifi.id, 1 wificafehosting.com, 1 wificonnect.cc, 1 +wifidjelfa.com, 1 wifimb.cz, 1 wifipineapple.com, 1 wifishing.tk, 1 @@ -162355,19 +160616,15 @@ wildbluepress.com, 1 wildcatdiesel.com.au, 1 wildcatprotection.org, 1 -wildcaves.co.za, 1 wildchain.io, 1 wildcove.ca, 1 wildcraft.com, 0 wildcruisers.tk, 1 wilddragon.in, 1 -wilder.pt, 1 wilderky.gov, 1 wildern.org, 1 wildernessdestinations.com, 1 wildernpartnership.co.uk, 1 -wilderoben.com, 1 -wildeshausen272.de, 1 wildfilm.tv, 1 wildfire.gov, 1 wildfirechain.xyz, 1 @@ -162442,7 +160699,6 @@ willerei.de, 1 willfarrell.ca, 1 willflies.com, 1 -willhackett.com, 1 willi-graf-os.de, 1 willi-roth-holzbau.ch, 1 williamarias.tk, 1 @@ -162473,6 +160729,7 @@ willkie.com, 1 willlewis.co.uk, 0 willmage.com, 1 +willnorris.com, 1 willocks.nl, 1 willoughbyhillsohio.gov, 1 willow.technology, 1 @@ -162480,7 +160737,6 @@ willowchild.de, 1 willowcundy.com, 1 willowdalechurch.ca, 1 -willowmanorgroup.com, 1 willowparktx.gov, 1 willowpassdentalcare.com, 1 willowpf.com, 1 @@ -162492,7 +160748,6 @@ willspointtx.gov, 1 willstamper.name, 1 willsthebest.co.uk, 0 -willstocks.co.uk, 1 willtaylorbooks.com, 0 willtc.co.uk, 1 willtc.uk, 1 @@ -162567,7 +160822,6 @@ wind-lindewitt.de, 1 wind-riders.cf, 1 wind.com.do, 1 -windaero.com, 1 windandweather.com, 1 windata.de, 1 windforme.com, 1 @@ -162609,7 +160863,7 @@ windsorite.ca, 1 windsornc.gov, 1 windsorrslsubbranch.com.au, 1 -windstreamhosting.com, 0 +windstreamhosting.com, 1 windsurfercrs.com, 1 windturbine.tk, 1 windwell.cn, 1 @@ -162651,11 +160905,9 @@ wingover.su, 1 wingpictures.nl, 1 wings.com.pk, 1 -wings.tours, 1 wingsclub.org, 1 wingspatagonia.com, 1 wingstop.fr, 1 -wingsung.com, 1 winhelp21.tk, 1 winhistory-forum.net, 1 winit.ie, 1 @@ -162680,6 +160932,7 @@ winner.ua, 1 winnersaffiliate.com, 1 winnery.tk, 1 +winnicadzika.pl, 1 winning.gq, 1 winningattitudeawards.org, 1 winnipegcomputerguy.tk, 1 @@ -162728,7 +160981,6 @@ winull.de, 1 winup.org, 1 winvio.com, 1 -winwares.com, 1 winwitharval.co.uk, 1 winwiz1.com, 1 winxpclub.tk, 1 @@ -162904,6 +161156,7 @@ withinsecurity.com, 1 withinwp.com, 1 withjoy.com, 1 +withkarann.com, 1 withoutessence.io, 1 withoutlovenotcount.ru, 1 withpersona.com, 1 @@ -162920,13 +161173,6 @@ wittgen-kfz-technik.de, 1 witting.co, 0 wittingtonventures.com, 1 -wittke-group.ch, 1 -wittke-group.cn, 1 -wittke-group.com, 1 -wittke-group.de, 1 -wittke.ch, 1 -wittke.cn, 1 -wittke.li, 1 wittu.fi, 1 wittur-edrives.de, 1 wittur.com, 1 @@ -162965,7 +161211,6 @@ wjcainc.com, 0 wjci.com, 1 wjdetailers.com, 1 -wje-online.de, 1 wjg.ca, 1 wjg.dk, 1 wjg.se, 1 @@ -162976,6 +161221,7 @@ wk.pl, 1 wk577.com, 1 wkberg.nl, 1 +wkbrowser.com, 1 wkbw.com, 1 wkd.one, 1 wkennington.com, 1 @@ -163024,7 +161270,7 @@ wmcurrency.online, 1 wmcurrency.uk, 1 wmda.info, 1 -wme.cn, 1 +wme.cn, 0 wmeagency.com, 1 wmfusercontent.org, 1 wmg.bg, 1 @@ -163066,7 +161312,6 @@ wo2forum.nl, 1 woadzs.com, 1 woah.how, 1 -woahwoman.com, 1 woai.cf, 1 woaiuhd.com, 1 woba.cf, 1 @@ -163075,7 +161320,6 @@ wobble.ninja, 1 wobblywotnotz.co.uk, 1 wobker.co, 1 -wobler.com, 1 woblex.cz, 1 woc.ao, 1 wochennummern.de, 1 @@ -163126,11 +161370,11 @@ wojciechowka.pl, 1 wojciechteichert.pl, 1 wojtekmaj.pl, 1 -wojtekogrodnik.pl, 1 wokfilms.pt, 1 wokinghammotorhomes.com, 1 wokkamokka.be, 1 wolf-haven.tk, 1 +wolf-hunter.pl, 1 wolf333.com, 1 wolf404.top, 1 wolfachtal-alpaka.de, 1 @@ -163188,7 +161432,7 @@ wolvex.nl, 1 wolvox.com, 1 wom.de, 1 -womanpub.com, 1 +womansong.net, 1 womb.city, 1 wombatnet.com, 1 wombatpass.com, 1 @@ -163202,6 +161446,7 @@ womenbrace.tk, 1 womenfashionshirt.tk, 1 womeninmigration.org, 1 +womeninnephrology.org, 1 womenleadingwomen.com.au, 1 womenofficersofindia.com, 1 womenonboardskenya.co.ke, 1 @@ -163290,7 +161535,6 @@ woodlandwindows.com, 0 woodlawnky.gov, 1 woodlawnsyracuse.org, 1 -woodlineds.com, 1 woodminstermanagement.tk, 1 woodminsterrealty.com, 1 woodomat.com, 1 @@ -163327,7 +161571,6 @@ wooeffi.at, 1 woof.blue, 1 woof.gq, 1 -woofngoof.com, 1 woofsbakery.com, 1 woohoo.in, 1 woohooyeah.nl, 1 @@ -163351,7 +161594,6 @@ woordvanvandaag.nl, 1 woorkup.com, 1 woorocket.com, 1 -woosh5.com, 1 woosk.de, 1 woothemesplugins.net, 1 wootkit.tk, 1 @@ -163375,9 +161617,7 @@ worddunk.com, 1 wordfast.com, 1 wordforword.info, 1 -wordher.com, 1 wordindonesia.com, 1 -wordki.com, 1 wordmon.site, 1 wordnietvindbaar.nl, 1 wordops.io, 1 @@ -163398,7 +161638,6 @@ wordunscrambler.com, 1 wordwidessl.net, 1 wordxtra.net, 1 -worf.win, 0 wori.cf, 1 wori.ga, 1 wori.gq, 1 @@ -163430,7 +161669,6 @@ workelo.eu, 1 worker.gov, 1 workermess.tk, 1 -workerscompensationattorneysandiego.net, 1 workerscomplawyerhelp.com, 1 workerselforganisation.cf, 1 workerselforganisation.ga, 1 @@ -163500,12 +161738,12 @@ worksmile.com, 1 workspace-bibb.de, 1 workspace.pt, 1 +workspacecleaners.com.au, 1 worksthatwork.com, 1 workstride.org, 1 worktefa.tk, 1 workthings.de, 1 workvision.net, 1 -workwides.com, 1 workwithdata.com, 1 workwithusaid.gov, 1 worky.ph, 1 @@ -163633,7 +161871,6 @@ worldtrandingnews.ml, 1 worldtravelmagazine.tk, 1 worldturkmans.tk, 1 -worldupdatereviews.com, 1 worldviews-debattieren.de, 1 worldvisa.tk, 1 worldwallstreet.tk, 1 @@ -163642,6 +161879,7 @@ worldwideradiosummit.com, 1 worldwidescience.org, 1 worldwinesweb.be, 1 +worldwitness.org, 1 worldywca.org, 1 worlich.tk, 1 wormate.io, 1 @@ -163711,7 +161949,6 @@ wowcinema.tk, 1 wowclassicdatabase.com, 1 wowdrive.ga, 1 -wowecuador.uk, 1 wowhaha.work, 1 wowhampers.ie, 1 wowhediyelik.com, 1 @@ -163724,6 +161961,7 @@ wowlifedesignandco.jp, 1 wowlove.tk, 1 wownskportal.tk, 1 +wowowow.com, 1 wowpilates.com, 1 wowra.net.pl, 1 wows-mods.tk, 1 @@ -163746,6 +161984,7 @@ wp-blog.co.kr, 1 wp-bundle.co, 0 wp-cloud.fi, 0 +wp-creativ.de, 1 wp-fastsearch.de, 1 wp-fotoblog.de, 1 wp-hasty.com, 1 @@ -163792,8 +162031,6 @@ wpg-verwaltungen.de, 1 wpginvest.com, 1 wpglossy.com, 1 -wpgplplug.com, 1 -wpguvenlik.com, 1 wphelpwithhomework.tk, 1 wphost.nl, 0 wphosting.ovh, 1 @@ -163840,7 +162077,6 @@ wpsharks.com, 1 wpshop.io, 1 wpsite.dk, 1 -wpsitemovers.com, 1 wpsitesuccess.com, 1 wpslimseo.com, 1 wpsmackdown.com, 1 @@ -163870,7 +162106,6 @@ wrap.org.uk, 1 wrapit.hu, 1 wrapitup.co.uk, 1 -wrapmaster.in, 1 wrara.org, 1 wrathofdungeons.net, 1 wrathofgeek.com, 1 @@ -163889,11 +162124,9 @@ wrentham.gov, 1 wrenthamfire.gov, 1 wrenthampolice.gov, 1 -wrestlefanent.com, 1 wresttmb.tk, 1 wrfalimentos.com.br, 1 wrglzd.com, 1 -wrhomedecor.com.br, 1 wrightbrand.com, 1 wrightcountymo911.gov, 1 wrighthassall.co.uk, 1 @@ -164015,7 +162248,6 @@ wuchipc.com, 1 wuchoamoveis.com.br, 1 wucke13.de, 1 -wudangkungfu.com, 1 wuellenweber.net, 1 wuerfel.wf, 1 wuerfelmail.de, 1 @@ -164024,13 +162256,11 @@ wuerttemberg-historic.de, 1 wuestenbergs.tk, 1 wuevahosting.com, 1 -wufenzhong.com, 1 wuff.gay, 1 wuff.store, 1 wug.fun, 1 wug.jp, 1 wug.news, 1 -wuhua.com, 1 wui.fan, 1 wuifan.com, 1 wuifan.net, 1 @@ -164072,11 +162302,9 @@ wurzelchaos.de, 1 wurzelkanal.de, 1 wushka.com.au, 1 -wustirr.works, 1 wusu.tk, 1 wuw.moe, 1 wuxian.ml, 0 -wuya.eu.org, 1 wuyifan.ga, 1 wuyuan.io, 1 wuzhishan.com, 1 @@ -164343,7 +162571,6 @@ x-electronica.com, 1 x-embed.com, 1 x-files.tk, 1 -x-guard.ca, 1 x-iweb.ru, 1 x-kamera.de, 1 x-lan.be, 1 @@ -164403,6 +162630,7 @@ x98v.com, 1 x98y.com, 1 xa.search.yahoo.com, 0 +xaasid.com, 1 xab199.com, 1 xaba.tk, 1 xabifk.com, 1 @@ -164416,7 +162644,6 @@ xakep-slon.tk, 1 xakepctbo.tk, 1 xakiatech.com, 1 -xali.com, 1 xalima.gq, 1 xampusolid.cat, 1 xanadu.ai, 1 @@ -164568,10 +162795,10 @@ xcdd.sh, 1 xce.pl, 1 xcelit.io, 1 +xcelvations.com, 1 xchangehoster.de, 1 xcharge.uk, 1 xchimera.com, 1 -xchoco.com, 1 xchuan.cn, 1 xcler8.com, 1 xclirion-support.de, 1 @@ -164606,9 +162833,7 @@ xduce.com, 1 xedapdiencuvietcuong.com, 1 xeditpro.com, 1 -xeerpa.com, 1 xeforce.com, 1 -xeggex.com, 1 xehopdongmuine.vn, 1 xehost.com, 1 xeiropraktiki.gr, 1 @@ -164705,7 +162930,6 @@ xiamenshipbuilding.com, 1 xiamuzi.com, 1 xiangblog.com, 1 -xiangdan.com, 1 xianguocy.com, 1 xiangweiqing.co.uk, 1 xianjianruishiyouyiyuan.com, 1 @@ -164716,7 +162940,6 @@ xiaobude.cn, 1 xiaocg.xyz, 1 xiaoda.fun, 1 -xiaodaoxiaoxi.com, 1 xiaode.com, 1 xiaodingyi.cn, 1 xiaoguanliandong.com, 1 @@ -164735,16 +162958,14 @@ xiaoneimao.cn, 0 xiaoniaoyou.com, 0 xiaoping.com, 1 -xiaose.com, 1 +xiaoseai.com, 1 xiaoshijt.com, 1 xiaoshou.com, 1 xiaotong.com, 1 xiaowangshen.com, 1 xiaoxia.li, 1 -xiaoyima.com, 1 xiarain.com, 1 xiaxuejin.cn, 1 -xiayimiao.com, 1 xiazhanjian.com, 0 xice.cf, 1 xice.wang, 1 @@ -164888,8 +163109,9 @@ xinfinity.com.tw, 1 xing.ml, 1 xingai.ml, 1 +xinghan-textile.com, 1 +xingtu.cn, 1 xingyu1993.cn, 1 -xingzuozixun.com, 1 xinlandm.com, 1 xinmeiti168.cn, 1 xinmeiti365.cn, 1 @@ -164911,7 +163133,6 @@ xiphwork.de, 1 xiqonline.com, 1 xishiduliu.com, 1 -xisu.com, 1 xitin.tk, 1 xiufeng.de, 1 xiufeng.net, 1 @@ -164925,7 +163146,6 @@ xiuxiu.ml, 1 xiuxiumh01.cc, 0 xixi.com, 1 -xiyu.com, 1 xjd.vision, 1 xjf6.com, 1 xjjeeps.com, 1 @@ -164934,7 +163154,6 @@ xjpvictor.info, 1 xjtu.love, 1 xjtu.men, 1 -xjtv.com, 1 xkblog.xyz, 1 xkcd.pw, 1 xkq.ch, 1 @@ -164948,6 +163167,7 @@ xlan.be, 1 xlange.com, 1 xlaw.com.br, 1 +xlblinds.nl, 1 xldl.ml, 1 xleech.to, 1 xlem.cn, 1 @@ -164955,7 +163175,6 @@ xlink.com.pl, 1 xlnaudio.com, 1 xloud.cf, 1 -xloveit.com, 1 xlr8.shop, 1 xlribbon.ml, 1 xlrsecurity.com, 1 @@ -164967,7 +163186,6 @@ xmanshow.tk, 1 xmanyz.tk, 1 xmdhs.com, 1 -xmdhs.top, 1 xmediabigz.tk, 1 xmediazxy.tk, 1 xmenrevolution.com, 1 @@ -165000,6 +163218,7 @@ xn----7sbagi4akcjwfceu2aoi5e0eh.xn--p1ai, 1 xn----7sbapu0ambajdfyf5k.xn--p1ai, 1 xn----7sbarcdvrtr1be.org, 1 +xn----7sbbaat3dlrhhge.xn--p1ai, 1 xn----7sbbagp2bcfwdeee1afm.xn--p1ai, 1 xn----7sbbak4cyaoedjf3m.xn--p1ai, 1 xn----7sbbf7a2ahrkgo6c.xn--p1ai, 1 @@ -165027,6 +163246,7 @@ xn----etbqa2alia5i.tk, 1 xn----htbhdmyci.xn--p1ai, 1 xn----itbanmp3ae.xn--p1ai, 1 +xn----jtbednzh3d.xn--p1ai, 1 xn----jtbiihtkil8b4e.xn--p1ai, 1 xn----mtbckubhv.xn--p1ai, 1 xn----ncfb.ws, 1 @@ -165037,9 +163257,8 @@ xn---71-6cdxtphfkkfrgnoc.xn--p1ai, 1 xn--061az77a.xn--fiqs8s, 1 xn--061az77a.xn--fiqz9s, 1 -xn--0ci.je, 0 +xn--0ci.je, 1 xn--0kq33cbsi8bk6d417b.com, 1 -xn--0kq33cz5c8wmwrqqw1d.com, 1 xn--1-9u7ey2dtz3c.com, 0 xn--12c3bpr6bsv7c.com, 1 xn--12carbp3gycugf9k9a.xn--o3cw4h, 1 @@ -165053,6 +163272,7 @@ xn--24-6kc5agehpdf5a.xn--p1ai, 1 xn--24-6kch4bfqee.xn--p1ai, 1 xn--24-glcia8dc.xn--p1ai, 1 +xn--2i0bt7p4fy71g.com, 1 xn--2o2b11i93dh3r.com, 1 xn--2sxs9ol7o.com, 1 xn--36-dlcdun7abo4a.xn--p1ai, 1 @@ -165098,7 +163318,6 @@ xn--7tqp36c113a.xn--fiqz9s, 1 xn--7xa.google.com, 1 xn--80a1a8b.tk, 1 -xn--80a5ai3dd.xn--d1at.xn--90a3ac, 1 xn--80a6a1b.tk, 1 xn--80a6aq.tk, 1 xn--80aaa3bgsbbm.tk, 1 @@ -165142,6 +163361,7 @@ xn--80akjfhoqm2h2a.xn--p1ai, 1 xn--80aknjgrv.tk, 1 xn--80aleen8i.site, 1 +xn--80aleen8i.xn--c1avg, 1 xn--80ancacgircb8q.xn--p1ai, 1 xn--80anogxed.xn--p1ai, 1 xn--80aocgsfei.xn--p1ai, 1 @@ -165229,6 +163449,7 @@ xn--c5wy5c025b.xn--fiqs8s, 1 xn--c5wy5c025b.xn--fiqz9s, 1 xn--carlshamnsvxtrike-0qb.se, 1 +xn--cartofidelidade-nkb.online, 1 xn--cck4ax91r.com, 1 xn--cck7f515h.com, 1 xn--cckdrt0kwb4g3cnh.com, 1 @@ -165244,6 +163465,7 @@ xn--cm-portimo-n5a.pt, 1 xn--cmc-grn-s2a.de, 1 xn--contrasea-s6a.cl, 1 +xn--creatuasociacin-8rb.es, 1 xn--crystal-9e7ua.icu, 1 xn--d1aca2a5al.tk, 1 xn--d1acfdr6h.com.ua, 1 @@ -165278,6 +163500,7 @@ xn--e1aahuqbk6f.tk, 1 xn--e1aajhbc0amdp4byf.xn--p1ai, 1 xn--e1aajkmzd.xn--p1ai, 1 +xn--e1adckvg5c.xn--p1ai, 1 xn--e1adlfhcdo7h.xn--p1ai, 1 xn--e1afggpjhk3b1e.xn--p1ai, 1 xn--e1agokg6a9a.tk, 1 @@ -165328,7 +163551,6 @@ xn--grnderlehrstuhl-0vb.de, 1 xn--grnstrm-r1ae.nu, 1 xn--gs8h.eu.org, 1 -xn--gtv031d.com, 1 xn--h-1ga.net, 1 xn--h1aaahdlb4aki4h.xn--p1ai, 1 xn--h1aaakmzd.xn--p1ai, 1 @@ -165363,7 +163585,6 @@ xn--j1aoca.xn--p1ai, 1 xn--j4h.cf, 1 xn--j8se.com, 1 -xn--jensypiatas-7db.com, 1 xn--jkaappi-5waa.fi, 1 xn--jlq480n2rg, 1 xn--jp8hx8f.ws, 1 @@ -165567,6 +163788,7 @@ xn--wcs69oyudj44b.xyz, 1 xn--whakamtt-m7a57hba.org.nz, 1 xn--wiateko-rjb3t.eu, 1 +xn--wl2bi7gm5t.com, 1 xn--woffi-kua.at, 1 xn--woistdermlleimer-rzb.de, 1 xn--wp9ha.ws, 1 @@ -165585,8 +163807,6 @@ xn--xwqa8512b.eu.org, 1 xn--xz1a.jp, 1 xn--y3cac7d1d.xn--o3cw4h, 1 -xn--y3cri.com, 1 -xn--y8j0b0a9exb.jp, 1 xn--y8j148r.xn--q9jyb4c, 0 xn--y8j2eb5631a4qf5n0h.com, 1 xn--y8ja6lb.xn--q9jyb4c, 1 @@ -165628,6 +163848,7 @@ xobotun.com, 1 xoda.pw, 1 xoddiel.net, 1 +xode.net, 1 xolotto.com, 1 xolphin.nl, 1 xombitgames.com, 1 @@ -165639,7 +163860,6 @@ xopero.com, 1 xor.ai, 0 xor.cat, 1 -xord.io, 1 xorion.pl, 1 xorm.io, 1 xormatic.com, 1 @@ -165691,7 +163911,6 @@ xpsautomation.com, 1 xpsfactory.com, 1 xpsinnovation.com, 1 -xpsnow.net, 1 xpsrobotics.com, 1 xptrack.com, 1 xptrackstaging.com, 1 @@ -165746,10 +163965,10 @@ xt71uc.top, 1 xtaboo3d.com, 1 xtarget.ru, 1 -xtdsteel.com, 1 xtec.eu.org, 1 xtechtecnologia.tec.br, 1 xtendafin.com, 1 +xtexx.eu.org, 1 xtianhe.com, 0 xtime.com, 1 xtips.us, 1 @@ -165822,8 +164041,6 @@ xtom.us, 1 xtom.wiki, 1 xtom.xyz, 1 -xtopic.com, 1 -xtopics.com, 1 xtorm.ro, 1 xtournois.com, 1 xtra.net, 1 @@ -165844,7 +164061,6 @@ xts.bike, 1 xts3636.net, 1 xtscloud.net, 1 -xtsna.com, 1 xtu2.com, 1 xtxmarkets.com, 1 xtzone.be, 1 @@ -165861,6 +164077,7 @@ xuecheng.com, 1 xuedianshang.com, 1 xuehuang666.cn, 1 +xuelangapp.com, 1 xuesoska.ga, 1 xuewen.ink, 1 xuewen.me, 1 @@ -165875,7 +164092,6 @@ xurl.ltd, 1 xushuai.org, 1 xusqui.com, 1 -xutv.com, 1 xuwei.de, 1 xuxiao.click, 1 xuyh0120.win, 1 @@ -165910,9 +164126,8 @@ xxl.tax, 1 xxll.eu.org, 1 xxlpen.eu, 1 -xxlsports.at, 1 -xxmzt.com, 1 xxvv.loan, 1 +xxx-cam.stream, 1 xxx-fiction.com, 0 xxx-gays.com, 1 xxxarabgirls.com, 1 @@ -166022,7 +164237,6 @@ y6729.co, 1 y68oo.com, 1 y6957.co, 1 -y6bet.com, 0 y70102.com, 1 y70301.com, 1 y70302.com, 1 @@ -166167,7 +164381,6 @@ yakutsk.ml, 1 yalb.tech, 1 yalecleaners.com, 1 -yalla-kora.tv, 1 yalla-shootx.com, 1 yallamotor.com, 1 yalook.com, 1 @@ -166194,7 +164407,6 @@ yamei8866.com, 1 yamei98.com, 1 yamei9955.com, 1 -yameng.com, 1 yamhillcounty.gov, 1 yamobila.tk, 1 yamunaexpresswayplot.com, 1 @@ -166278,7 +164490,6 @@ yapmaz.com, 1 yapper.fr, 1 yappledapple.net, 1 -yappy.com, 1 yappy.media, 1 yar.gay, 1 yarayfidancilik.com, 1 @@ -166323,7 +164534,6 @@ yasic.net, 1 yasikish.com, 1 yasking.org, 1 -yaslihastabakici.com, 1 yasmeencreative.com, 1 yasmin-apartments.cz, 1 yasmin.ml, 1 @@ -166423,7 +164633,6 @@ yebkw.com, 1 yebshotel.de, 1 yecdn.com, 1 -yedekparcatedarik.com.tr, 1 yedeksubay.tk, 1 yeditepehastaneleri.com, 1 yeechie.nl, 1 @@ -166487,6 +164696,7 @@ yeltzland.net, 1 yelvington.com, 1 yemalu.com, 1 +yemama.co.il, 1 yemekbaz.az, 1 yemekfirmalari.tk, 1 yemekfirmasi.tk, 1 @@ -166527,13 +164737,11 @@ yesjobs.ga, 1 yesleaks.com, 1 yesmirov.ga, 1 -yesmsp.com, 1 yesod.in, 1 yesogovinpetcare.com, 1 yesolo.tk, 1 yespornfree.com, 1 yespornplease.com, 1 -yesport.com, 1 yessirgear.com, 0 yeste.tk, 1 yestees.com, 1 @@ -166560,6 +164768,7 @@ yezi.ga, 1 yezishurb.site, 1 yf128.cc, 0 +yfh.me, 1 yg-crew.eu, 1 yggdar.ga, 1 yggdrasildice.com, 1 @@ -166589,7 +164798,6 @@ yiai.tk, 1 yiannopoulos.edu.gr, 1 yibaoweilong.top, 1 -yibei-original.com, 1 yibin0831.com, 0 yicc.net, 1 yichen.me, 1 @@ -166658,6 +164866,7 @@ ykkim.com, 1 yksolutions.ma, 1 yl-invest.co.il, 1 +yl8.com, 1 ylanan.tk, 1 ylde.de, 1 yler.us, 1 @@ -166737,7 +164946,6 @@ yogaworld.tk, 1 yogesh.com.au, 1 yogibear.tk, 1 -yogmoney.com, 1 yogonet.com, 1 yogstation.net, 1 yogularm.de, 1 @@ -166782,7 +164990,6 @@ yoneda-paint.com, 1 yongbin.org, 1 yongkang-clinic.com.tw, 1 -yongnuo.fr, 1 yongnuorumors.com, 1 yongseovn.net, 1 yonistap.com, 1 @@ -166849,7 +165056,6 @@ yoticonnections.com, 1 yotilabs.com, 1 yoto.at, 0 -yotpinx.com, 1 yotta-zetta.com, 1 yottahash.net, 1 yotubaiotona.net, 1 @@ -166980,6 +165186,7 @@ yourbusiness.ml, 1 yourbusinessblueprint.com, 1 yourcareerhost.com, 1 +yourcause.digital, 1 yourcfo.co.in, 0 yourcheshiremerseyside.wedding, 1 yourchoicematters.ca, 1 @@ -166998,11 +165205,11 @@ yourdigitalworkplace.au, 1 yourdigitalworkplace.com.au, 1 yourdnayoursay.org, 1 +yourdomain.com, 1 yourdost.com, 1 yourdrive.tk, 1 youreastanglian.wedding, 1 youreastmidlands.wedding, 1 -yourecipess.com, 1 youreitbranding.com, 1 youremailexpert.com, 1 youren.com.tw, 1 @@ -167048,11 +165255,9 @@ yourmaki.com, 1 yourmobility.ga, 1 yourmodel.fr, 1 -yourmonaco.com, 1 yourmoneyproject.com, 1 yourmothers.meme, 1 yourms.com, 1 -yourname.xyz, 1 yournashvilleplasticsurgeon.com, 1 yournextagency.com, 1 yournortheast.wedding, 1 @@ -167114,7 +165319,6 @@ youssfitpro.com, 1 youston.agency, 1 youstyleski.it, 1 -yousufahmad.ca, 1 yousuforg.ga, 1 youth-for-life.tk, 1 youth-sport.net, 1 @@ -167180,7 +165384,6 @@ yryz.net, 1 ys.edu.gr, 1 ys.gr, 1 -ys96.org, 1 yscc.cc, 1 ysearc.tk, 1 ysfridge.com, 1 @@ -167282,11 +165485,11 @@ yukoslibrary.ga, 1 yula.cf, 1 yulaiz.com, 1 -yulamerola.com.br, 1 yule.hk, 1 yuleyule88game.com, 1 yuliana-hotel.com, 1 yulsn.io, 1 +yulvqu.com, 1 yum0.cn, 1 yumacountyazvotes.gov, 1 yumacountyco.gov, 1 @@ -167312,7 +165515,7 @@ yuna.tw, 1 yuna0x0.com, 1 yunasecurity.com, 1 -yuncaioo.com, 1 +yuncaioo.com, 0 yunguard.com, 1 yunhao.io, 1 yunicorn19.com, 1 @@ -167320,7 +165523,6 @@ yunjishou.pro, 1 yunloc.com, 1 yunqueradehenares.tk, 1 -yunxinfoods.com, 1 yunzhu.li, 1 yuplay.com, 1 yupulse.be, 1 @@ -167332,10 +165534,6 @@ yuriland.xyz, 1 yurimoens.be, 1 yurinet.org, 1 -yurissimo.ch, 1 -yurissimo.cn, 1 -yurissimo.com, 1 -yurissimo.de, 1 yurist-vopros.gq, 1 yuriylysyuk.ru, 1 yurp.nl, 1 @@ -167362,6 +165560,7 @@ yuweiji.com, 1 yuweiyang.xyz, 1 yux.fr, 1 +yuxiaoyu.me, 1 yuxuan.org, 1 yuyantang.club, 1 yuyu-support.com, 1 @@ -167380,11 +165579,10 @@ yvonne-stingel.de, 1 yvonnethomet.ch, 1 yvonnewilhelmi.com, 1 -yw.com, 1 -ywambutuan.org, 1 ywamcebu.org, 1 ywamphilippines.org, 1 ywamtonga.org, 1 +ywor.it, 1 ywutrust.com, 1 ywyway.com, 1 yx-express.cn, 0 @@ -167414,7 +165612,7 @@ yya.men, 1 yyc.city, 1 yycbike.info, 1 -yydjtc.top, 1 +yydjtc.top, 0 yyr.im, 1 yyrss.com, 0 yyy116.com, 1 @@ -167438,7 +165636,6 @@ z-g-v.nl, 1 z-kasino.ru, 1 z-konzept-nutrition.ru, 1 -z-lib.pp.ua, 1 z-pc.net, 1 z-rejstejna.cz, 1 z-vector.com, 0 @@ -167481,7 +165678,6 @@ z8017.com, 0 z8026.com, 0 z8038.com, 0 -z8051.com, 1 z8052.com, 0 z8053.com, 0 z8057.com, 0 @@ -167491,7 +165687,6 @@ z8079.com, 1 z8087.com, 0 z8089.com, 0 -z8106.com, 1 z8113.com, 0 z8125.com, 0 z8130.com, 0 @@ -167508,12 +165703,10 @@ z8195.com, 0 z8206.com, 0 z8207.com, 0 -z8209.com, 1 z8210.com, 0 z8218.com, 0 z8219.com, 0 z8226.com, 0 -z8231.com, 1 z8232.com, 0 z82365.com, 1 z8817.com, 0 @@ -167672,7 +165865,6 @@ zakpex.com, 1 zakr.es, 1 zakratheme.com, 1 -zakreconysloik.com.pl, 1 zakrentus-ostrus.space, 1 zakspartiesandevents.com, 1 zakutka.com, 0 @@ -167681,6 +165873,7 @@ zalan.do, 1 zalaxx.ddns.net, 1 zalef.tk, 1 +zalex.ca, 1 zalgos.xyz, 1 zalihvoch.ga, 1 zaloghaz.ro, 1 @@ -167710,6 +165903,8 @@ zandersgroup.com, 1 zandmhomes.com, 1 zandra.cf, 1 +zandro.fit, 1 +zandro.nl, 1 zanellidesigns.co.uk, 1 zaneslaw.com, 1 zangerfreddy.tk, 1 @@ -167743,7 +165938,6 @@ zap-map.com, 1 zap51.in, 1 zapamini.ml, 1 -zaparoh.com, 1 zapaska.tk, 1 zapcat.com.au, 1 zapic.moe, 1 @@ -167759,7 +165953,6 @@ zappi.io, 1 zappingarahal.tk, 1 zappingcuraduria.tk, 1 -zappo-entertainment.de, 1 zappos, 1 zapproved.com, 1 zapreaders.cf, 1 @@ -167925,6 +166118,7 @@ zdenekpasek.cz, 1 zdenekspacek.cz, 1 zdenekvecera.cz, 1 +zdev.me, 0 zdg.md, 1 zdomu.eu, 1 zdomu.sk, 1 @@ -168091,6 +166285,7 @@ zenlogic.com, 1 zenmail.ga, 1 zenmassageusa.com, 1 +zenmod.in.rs, 1 zenneo.com, 1 zenniereport.com, 1 zeno-dev.com, 1 @@ -168136,9 +166331,7 @@ zercutie.com, 1 zerevia.com, 1 zerg.uk, 1 -zergpool.com, 1 zergy.net, 1 -zerifa.com, 1 zerium.ml, 1 zerm.eu, 1 zerm.link, 1 @@ -168205,6 +166398,7 @@ zeta.hk, 1 zetadisseny.es, 1 zetamode.com, 1 +zetapp.in, 1 zetasystem.jp, 1 zeteomail.com, 1 zetflix.pro, 1 @@ -168285,7 +166479,6 @@ zhaso.com, 0 zhattyt.com, 0 zhbot.org, 1 -zhbulbul.com, 1 zhceres.com, 1 zhcexo.com, 1 zhcxws.com, 1 @@ -168330,7 +166523,6 @@ zhodani.space, 1 zhodino.cf, 1 zhodino.ga, 1 -zhongai.com, 1 zhonghongshunlian.com, 1 zhongqiao.com, 1 zhongxia.me, 1 @@ -168363,7 +166555,6 @@ zhuktrans.msk.ru, 1 zhumadilov.kz, 1 zhunlink.com, 1 -zhuqiang.com, 1 zhurnalyu.ga, 1 zhuweiwei.cn, 1 zhylon.de, 1 @@ -168385,7 +166576,6 @@ ziemlichzackig.de, 1 zifoapptest.com, 1 ziftone.com, 1 -ziftsolutions.com, 1 zigao.info, 1 zigarn.com, 1 ziggi.tk, 1 @@ -168413,6 +166603,7 @@ zilla-sushi.tk, 1 zillertaleralpen.net, 1 zillionparts.com, 1 +zillum.com, 1 zilon.com.co, 1 zilore.com, 1 zilpay.io, 1 @@ -168600,14 +166791,13 @@ zmprjg.ml, 1 zms-qs.de, 1 zmuda.tk, 1 +zmuir.com, 1 zmy.im, 0 znachenie-sna.cf, 1 znachenie-sna.ga, 1 znachenie-sna.ml, 1 znachenie-sna.tk, 1 znaj.ua, 1 -znajdz.info, 1 -znajdz.lgbt, 1 znajdzprzodka.pl, 1 znakomim.cf, 1 znakomstva-2013.tk, 1 @@ -168645,6 +166835,7 @@ zode.co, 1 zodee.com.au, 1 zodgame.fun, 0 +zodgame.xyz, 1 zodiacohouses.com, 1 zodiaconline.com, 1 zodiak.tk, 1 @@ -168660,7 +166851,6 @@ zoeyvid.de, 1 zof.kh.ua, 1 zoflora.co.uk, 1 -zofoke.com, 1 zofran-medication.cf, 1 zofran.ga, 1 zofran.gq, 1 @@ -168677,6 +166867,7 @@ zoho.eu, 1 zoho.in, 1 zoho.sa, 1 +zoho.uk, 1 zohoanalytics.com, 1 zohobookings.com, 1 zohobooks.com, 1 @@ -168684,6 +166875,7 @@ zohocatalyst.com, 1 zohocheckout.com, 1 zohocliq.com, 1 +zohocloud.ca, 1 zohocommerce.com, 1 zohoconnect.com, 1 zohocontracts.com, 1 @@ -168696,6 +166888,7 @@ zohoexpense.com, 1 zohoflow.com, 1 zohoforms.com, 1 +zohohost.com, 1 zohoinventory.com, 1 zohoinvoice.com, 1 zoholearn.com, 1 @@ -168751,7 +166944,6 @@ zombie-40th.com, 1 zombie.cam, 1 zombieclown.com, 1 -zombiecomponents.com, 1 zombiecrowinc.tk, 1 zombielandkf.tk, 1 zombiemix.tk, 1 @@ -168771,6 +166963,7 @@ zonagioco.it, 1 zonagratisan.ga, 1 zonainuyasha.tk, 1 +zonaishare.com, 1 zonajogo.br.com, 1 zonanews.tk, 1 zonaperu.tk, 1 @@ -168800,6 +166993,7 @@ zones.com, 1 zonesec.org, 1 zonesons.com, 1 +zoneusercontent.eu, 1 zonewatcher.com, 1 zonfa.com, 1 zonfair.com, 1 @@ -168810,6 +167004,7 @@ zonky.de, 1 zonneglossis.tk, 1 zonnenberg.de, 1 +zonnestudiosundreams.nl, 1 zonnigduiven.nl, 1 zontractors.com, 1 zoo-tver.ru, 1 @@ -168837,7 +167032,6 @@ zoones.net, 1 zoones.org, 1 zooom.azurewebsites.net, 1 -zooom2.azurewebsites.net, 1 zooopt.net, 1 zoop.ml, 0 zooparadies.eu, 1 @@ -168922,7 +167116,6 @@ zqcollection.com, 1 zqwqz.org, 1 zr.si, 1 -zrali.com, 1 zrampage.com, 1 zravyobrazky.cz, 1 zravypapir.cz, 1 @@ -168933,7 +167126,6 @@ zrkr.de, 1 zrniecka-pre-sny.sk, 1 zrnieckapresny.sk, 1 -zrobysama.com.ua, 1 zrodla.org, 1 zrozenipriserek.cz, 1 zrs-meissen.de, 1 @@ -168980,7 +167172,6 @@ zudomc.me, 1 zuefle.net, 1 zuehlcke.de, 1 -zuffel.com, 1 zufuribita.tk, 1 zug-anwalt.de, 0 zugarkovi.cz, 1 @@ -168990,7 +167181,6 @@ zuiai.tv, 1 zuiderlokaal.nl, 1 zuiderzeemuseum.nl, 1 -zuijia.com, 1 zuim.de, 1 zuitaotu.com, 1 zuivelonline.nl, 1 @@ -169085,7 +167275,6 @@ zx1168.com, 0 zxavier.com, 1 zxdsj1.com, 1 -zxe.com.br, 1 zxfiles.tk, 1 zxity.co.uk, 1 zxity.ltd, 1 diff -Nru firefox-esr-140.3.1esr/security/manager/ssl/osclientcerts/src/backend_macos.rs firefox-esr-140.4.0esr/security/manager/ssl/osclientcerts/src/backend_macos.rs --- firefox-esr-140.3.1esr/security/manager/ssl/osclientcerts/src/backend_macos.rs 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/manager/ssl/osclientcerts/src/backend_macos.rs 2025-10-09 15:35:37.000000000 +0000 @@ -226,6 +226,9 @@ ) }; if signature.is_null() { + if error.is_null() { + return Err(error_here!(ErrorType::ExternalError)); + } let error = unsafe { CFError::wrap_under_create_rule(error) }; return Err(error_here!( ErrorType::ExternalError, @@ -235,8 +238,12 @@ Ok(unsafe { CFData::wrap_under_create_rule(signature) }) } -fn sec_key_copy_attributes(key: &SecKey) -> CFDictionary { - unsafe { CFDictionary::wrap_under_create_rule(SecKeyCopyAttributes(key.as_concrete_TypeRef())) } +fn sec_key_copy_attributes(key: &SecKey) -> Result, Error> { + let attributes = unsafe { SecKeyCopyAttributes(key.as_concrete_TypeRef()) }; + if attributes.is_null() { + return Err(error_here!(ErrorType::ExternalError)); + } + Ok(unsafe { CFDictionary::wrap_under_create_rule(attributes) }) } fn sec_key_copy_external_representation(key: &SecKey) -> Result { @@ -244,6 +251,9 @@ let representation = unsafe { SecKeyCopyExternalRepresentation(key.as_concrete_TypeRef(), &mut error) }; if representation.is_null() { + if error.is_null() { + return Err(error_here!(ErrorType::ExternalError)); + } let error = unsafe { CFError::wrap_under_create_rule(error) }; return Err(error_here!( ErrorType::ExternalError, @@ -814,7 +824,7 @@ } fn get_key_attribute(key: &SecKey, attr: CFStringRef) -> Result { - let attributes: CFDictionary = sec_key_copy_attributes(key); + let attributes: CFDictionary = sec_key_copy_attributes(key)?; match attributes.find(attr as *const _) { Some(value) => Ok((*value).clone()), None => Err(error_here!(ErrorType::ExternalError)), diff -Nru firefox-esr-140.3.1esr/security/manager/tools/log_list.json firefox-esr-140.4.0esr/security/manager/tools/log_list.json --- firefox-esr-140.3.1esr/security/manager/tools/log_list.json 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/manager/tools/log_list.json 2025-10-09 15:35:37.000000000 +0000 @@ -1,6 +1,6 @@ { - "version": "66.3", - "log_list_timestamp": "2025-09-07T12:54:02Z", + "version": "69.18", + "log_list_timestamp": "2025-10-05T12:53:40Z", "operators": [ { "name": "Google", @@ -314,8 +314,12 @@ "url": "https://sabre2025h2.ct.sectigo.com/", "mmd": 86400, "state": { - "usable": { - "timestamp": "2023-11-26T12:00:00Z" + "readonly": { + "timestamp": "2025-09-18T17:20:00Z", + "final_tree_head": { + "sha256_root_hash": "eJj4IHvdYpljVsW/YCery+QsSRHbuYBME7H912a5P2Y=", + "tree_size": 1213760846 + } } }, "temporal_interval": { @@ -350,8 +354,12 @@ "url": "https://mammoth2026h1.ct.sectigo.com/", "mmd": 86400, "state": { - "usable": { - "timestamp": "2024-10-14T17:00:00Z" + "readonly": { + "timestamp": "2025-09-18T17:20:00Z", + "final_tree_head": { + "sha256_root_hash": "N7bqzTXnPktVFG8/h3gi5pcuxCo+mfWyv+XlIIS4cEU=", + "tree_size": 65240567 + } } }, "temporal_interval": { @@ -366,8 +374,12 @@ "url": "https://mammoth2026h2.ct.sectigo.com/", "mmd": 86400, "state": { - "usable": { - "timestamp": "2024-10-14T17:00:00Z" + "readonly": { + "timestamp": "2025-09-18T17:20:00Z", + "final_tree_head": { + "sha256_root_hash": "vJHecZC18lG3qp9lV2jZoi+7nkPHQx2SmM4VWglNsIk=", + "tree_size": 57634084 + } } }, "temporal_interval": { @@ -382,8 +394,12 @@ "url": "https://sabre2026h1.ct.sectigo.com/", "mmd": 86400, "state": { - "usable": { - "timestamp": "2024-10-14T17:00:00Z" + "readonly": { + "timestamp": "2025-09-18T17:20:00Z", + "final_tree_head": { + "sha256_root_hash": "ONxslVVBTXcSuBVlFOVDuNQoTCdDNLCRVHoHfNLMZfo=", + "tree_size": 88744201 + } } }, "temporal_interval": { @@ -398,8 +414,12 @@ "url": "https://sabre2026h2.ct.sectigo.com/", "mmd": 86400, "state": { - "usable": { - "timestamp": "2024-10-14T17:00:00Z" + "readonly": { + "timestamp": "2025-09-18T17:20:00Z", + "final_tree_head": { + "sha256_root_hash": "HWG3vP/FX6JRs5yyXDfrNoUA7D6TZAib9ZE2Llno0II=", + "tree_size": 68732791 + } } }, "temporal_interval": { @@ -494,8 +514,8 @@ "url": "https://tiger2025h2.ct.sectigo.com/", "mmd": 86400, "state": { - "qualified": { - "timestamp": "2025-07-09T13:00:00Z" + "usable": { + "timestamp": "2025-09-18T23:00:00Z" } }, "temporal_interval": { @@ -510,8 +530,8 @@ "url": "https://tiger2026h1.ct.sectigo.com/", "mmd": 86400, "state": { - "qualified": { - "timestamp": "2025-07-09T13:00:00Z" + "usable": { + "timestamp": "2025-09-18T23:00:00Z" } }, "temporal_interval": { @@ -526,8 +546,8 @@ "url": "https://tiger2026h2.ct.sectigo.com/", "mmd": 86400, "state": { - "qualified": { - "timestamp": "2025-07-09T13:00:00Z" + "usable": { + "timestamp": "2025-09-18T23:00:00Z" } }, "temporal_interval": { @@ -542,8 +562,8 @@ "url": "https://tiger2027h1.ct.sectigo.com/", "mmd": 86400, "state": { - "qualified": { - "timestamp": "2025-07-09T13:00:00Z" + "usable": { + "timestamp": "2025-09-18T23:00:00Z" } }, "temporal_interval": { @@ -558,8 +578,8 @@ "url": "https://tiger2027h2.ct.sectigo.com/", "mmd": 86400, "state": { - "qualified": { - "timestamp": "2025-07-09T13:00:00Z" + "usable": { + "timestamp": "2025-09-18T23:00:00Z" } }, "temporal_interval": { @@ -625,7 +645,178 @@ } } ], - "tiled_logs": [] + "tiled_logs": [ + { + "description": "Let's Encrypt 'Sycamore2025h2d'", + "log_id": "W/beU/H7+sSaGFl0aUWhpqconV5wpg9IRQ5Ya7mucrg=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERI8grd3rsuE95/3Rk/Jn9rGBrpcvDqD6Y5Ooz1E+xABGl3w6JLdFHfzSFZvEFX/Goar6nbzQHtV75ud4R0Iafg==", + "submission_url": "https://log.sycamore.ct.letsencrypt.org/2025h2d/", + "monitoring_url": "https://mon.sycamore.ct.letsencrypt.org/2025h2d/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2025-06-19T00:00:00Z", + "end_exclusive": "2025-12-18T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Sycamore2026h1'", + "log_id": "pcl4kl1XRheChw3YiWYLXFVki30AQPLsB2hR0YhpGfc=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfEEe0JZknA91/c6eNl1aexgeKzuGQUMvRCXPXg9L227O5I4Pi++Abcpq6qxlVUKPYafAJelAnMfGzv3lHCc8gA==", + "submission_url": "https://log.sycamore.ct.letsencrypt.org/2026h1/", + "monitoring_url": "https://mon.sycamore.ct.letsencrypt.org/2026h1/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2025-12-18T00:00:00Z", + "end_exclusive": "2026-06-18T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Sycamore2026h2'", + "log_id": "bP5QGUOoXqkWvFLRM+TcyR7xQRx9JYQg0XOAnhgY6zo=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwR1FtiiMbpvxR+sIeiZ5JSCIDIdTAPh7OrpdchcrCcyNVDvNUq358pqJx2qdyrOI+EjGxZ7UiPcN3bL3Q99FqA==", + "submission_url": "https://log.sycamore.ct.letsencrypt.org/2026h2/", + "monitoring_url": "https://mon.sycamore.ct.letsencrypt.org/2026h2/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-06-18T00:00:00Z", + "end_exclusive": "2026-12-17T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Sycamore2027h1'", + "log_id": "jspHC6zeavOiBrCkeoS3Rv4fxr+VPiXmm07kAkjzxug=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWrGdYyZYB7teCS4K/oKIsbV0yVBSgjlOwO22OOCoA6Y252QhFzC8Wg7oVXVKqfkWaSaM/n+3pfCBf4BAkpdx8g==", + "submission_url": "https://log.sycamore.ct.letsencrypt.org/2027h1/", + "monitoring_url": "https://mon.sycamore.ct.letsencrypt.org/2027h1/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-12-17T00:00:00Z", + "end_exclusive": "2027-06-18T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Sycamore2027h2'", + "log_id": "5eNiR9ku9K2jhYO1NZHbcp/C8ArktnRRdNPd/GqiU4g=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEK+2zy2UWRMIyC2jU46+rj8UsyMjLsQIr1Y/6ClbdpWGthUb8y3Maf4zfAZTWW+AH9wAWPLRL5vmtz7Zkh2f2nA==", + "submission_url": "https://log.sycamore.ct.letsencrypt.org/2027h2/", + "monitoring_url": "https://mon.sycamore.ct.letsencrypt.org/2027h2/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2027-06-18T00:00:00Z", + "end_exclusive": "2027-12-16T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Willow2025h2d'", + "log_id": "5NAXdhyRORG+9HOWrNjSRljCT7WTtRvqxVknYuiFPBU=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElX78WOZsrDp7/LDFvsGytclanWhJ2oEwdgytKo21ZrCzbJ6raFAmZ1bMFh4B/0+e1aWtfhG2wgCM2ex/aDgZuA==", + "submission_url": "https://log.willow.ct.letsencrypt.org/2025h2d/", + "monitoring_url": "https://mon.willow.ct.letsencrypt.org/2025h2d/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2025-06-18T00:00:00Z", + "end_exclusive": "2025-12-17T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Willow2026h1'", + "log_id": "4yON8o2iiOCq4Kzw+pDJhfC2v/XSpSewAfwcRFjEtug=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtpFyulwgy1+u+wYQ37lbV+HsPFNYoi4sy6dZP662N/Z/usdNi4+Q3RLES1RY2PNk7zL/7VPSn3JERMPu/s4e4A==", + "submission_url": "https://log.willow.ct.letsencrypt.org/2026h1/", + "monitoring_url": "https://mon.willow.ct.letsencrypt.org/2026h1/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2025-12-17T00:00:00Z", + "end_exclusive": "2026-06-17T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Willow2026h2'", + "log_id": "qCbL4wrGNRJGUz/gZfFPGdluGQgTxB3ZbXkAsxI8VSc=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp8wH8R6zfM+UhsQq5un+lPdNTDkzcgkWLi1DwyqU6T00mtP5/CuGjvpw4mIz89I6KV5ZvhRHt5ZTF6qe24pqiA==", + "submission_url": "https://log.willow.ct.letsencrypt.org/2026h2/", + "monitoring_url": "https://mon.willow.ct.letsencrypt.org/2026h2/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-06-17T00:00:00Z", + "end_exclusive": "2026-12-16T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Willow2027h1'", + "log_id": "ooEAGHNOF24dR+CVQPOBulRml81jqENQcW64CU7a8Q0=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzsMKtojO0BVB4t59lVyAhxtqObVA+wId5BpJGA8pZrw5GTjzuhpvLu/heQGi0hHCeislkDe34N/2D0SwEUBE0w==", + "submission_url": "https://log.willow.ct.letsencrypt.org/2027h1/", + "monitoring_url": "https://mon.willow.ct.letsencrypt.org/2027h1/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-12-16T00:00:00Z", + "end_exclusive": "2027-06-17T00:00:00Z" + } + }, + { + "description": "Let's Encrypt 'Willow2027h2'", + "log_id": "ppWirZJtb5lujvxJAUJX2LvwRqfWJYm4jcLXh2x45S8=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYbMDg0qQEEYjsTttdDlouTKhg3fRiMJYNE+Epr/2bXyeQdQOHKQNKv5sbIKxjtE/5Vqo9YjQbnaOeH4Wm4PhdQ==", + "submission_url": "https://log.willow.ct.letsencrypt.org/2027h2/", + "monitoring_url": "https://mon.willow.ct.letsencrypt.org/2027h2/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2027-06-17T00:00:00Z", + "end_exclusive": "2027-12-15T00:00:00Z" + } + } + ] }, { "name": "TrustAsia", @@ -834,7 +1025,93 @@ } } ], - "tiled_logs": [] + "tiled_logs": [ + { + "description": "IPng Networks 'Gouda2025h2'", + "log_id": "GoudanQ8ze1gH3O9MJcIHbyuxKYTnJKwtUDDE3sg7AU=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpHiP24MNo8pgt5RNoawsvGIwSaVEKNqdzYCUXtMu0MM15t63d26eDUDz+nkQjACuRo4LRJcyia7I0anEdNH9wA==", + "submission_url": "https://gouda2025h2.log.ct.ipng.ch/", + "monitoring_url": "https://gouda2025h2.mon.ct.ipng.ch/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2025-07-01T00:00:00Z", + "end_exclusive": "2026-01-01T00:00:00Z" + } + }, + { + "description": "IPng Networks 'Gouda2026h1'", + "log_id": "GoudaUpXmMiZoMqIvfSPwLRWYMzDYA0fcfRp/8fRrKM=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER6wvqVwhf5isuCtwSfNjTOrqwZg0vZuIMP7xk8fPmJfaFZCte1ptQiqNhRMCtqIgJvDcJyjkGVI8i44vxL877A==", + "submission_url": "https://gouda2026h1.log.ct.ipng.ch/", + "monitoring_url": "https://gouda2026h1.mon.ct.ipng.ch/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-01-01T00:00:00Z", + "end_exclusive": "2026-07-01T00:00:00Z" + } + }, + { + "description": "IPng Networks 'Gouda2026h2'", + "log_id": "Goudaw/+v4G0eTnG0jEKhtbRAtTwRuIYLJ3jX14mJe8=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjayczmhUMNftWy6VjvYXcTUEpvL8LIAKcYcxrxx5xxQGZEVvhnZeCnXVlsMWhq1h9J55eZfQWM/dqIr6GmoN9Q==", + "submission_url": "https://gouda2026h2.log.ct.ipng.ch/", + "monitoring_url": "https://gouda2026h2.mon.ct.ipng.ch/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-07-01T00:00:00Z", + "end_exclusive": "2027-01-01T00:00:00Z" + } + }, + { + "description": "IPng Networks 'Gouda2027h1'", + "log_id": "Gouda43XkdHNBUnttgNV1ga2T60w23H+eI8Px8j7xLE=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOh11B2aRT9BiTqo+6kvQ7cSGf819Ait+jGc6AuHlGUXxWCX1YCQ9OFNnr6MUKStyw4sVin5FCvtbke1mctl3gQ==", + "submission_url": "https://gouda2027h1.log.ct.ipng.ch/", + "monitoring_url": "https://gouda2027h1.mon.ct.ipng.ch/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2027-01-01T00:00:00Z", + "end_exclusive": "2027-07-01T00:00:00Z" + } + }, + { + "description": "IPng Networks 'Gouda2027h2'", + "log_id": "GoudaVNi2GSSp7niI2BuNOzp4xC6NPuTBXhdKc5XV+s=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPuxPH20sSqUzHGllZceceFvyoSffwBWgX4LKd8wk3A3ayZuwwh2pDuEOsimMxLXFh0IUYz73a9I7kxkUqM+N8w==", + "submission_url": "https://gouda2027h2.log.ct.ipng.ch/", + "monitoring_url": "https://gouda2027h2.mon.ct.ipng.ch/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-09-17T03:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2027-07-01T00:00:00Z", + "end_exclusive": "2028-01-01T00:00:00Z" + } + } + ] } ] } diff -Nru firefox-esr-140.3.1esr/security/nss/doc/rst/releases/index.rst firefox-esr-140.4.0esr/security/nss/doc/rst/releases/index.rst --- firefox-esr-140.3.1esr/security/nss/doc/rst/releases/index.rst 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/doc/rst/releases/index.rst 2025-10-09 15:35:37.000000000 +0000 @@ -1,19 +1,20 @@ .. _mozilla_projects_nss_releases: -Releases -======== +Release Notes +============= .. toctree:: :maxdepth: 0 :glob: :hidden: + nss_3_112_2.rst + nss_3_112_1.rst nss_3_112.rst nss_3_111.rst nss_3_110.rst nss_3_109.rst nss_3_108.rst - nss_3_101_3.rst nss_3_107.rst nss_3_106.rst nss_3_105.rst @@ -21,6 +22,8 @@ nss_3_103.rst nss_3_102_1.rst nss_3_102.rst + nss_3_101_4.rst + nss_3_101_3.rst nss_3_101_2.rst nss_3_101_1.rst nss_3_101.rst @@ -88,27 +91,6 @@ **NSS 3.112** is the latest version of NSS. Complete release notes are available here: :ref:`mozilla_projects_nss_nss_3_112_release_notes` - **NSS 3.101.3 (ESR)** is the latest ESR version of NSS. - Complete release notes are available here: :ref:`mozilla_projects_nss_nss_3_101_3_release_notes` - -.. container:: - - Changes in 3.112 included in this release: + **NSS 3.112.2 (ESR)** is the latest ESR version of NSS. + Complete release notes are available here: :ref:`mozilla_projects_nss_nss_3_112_2_release_notes` - - Bug 1963792 - Fix alias for mac workers on try. - - Bug 1966786 - ensure all options can be configured with SSL_OptionSet and SSL_OptionSetDefault. - - Bug 1931930 - ABI/API break in ssl certificate processing - - Bug 1955971 - remove unnecessary assertion in sec_asn1d_init_state_based_on_template. - - Bug 1965754 - update taskgraph to v14.2.1. - - Bug 1964358 - Workflow for automation of the release on GitHub when pushing a tag - - Bug 1952860 - fix faulty assertions in SEC_ASN1DecoderUpdate - - Bug 1934877 - Renegotiations should use a fresh ECH GREASE buffer. - - Bug 1951396 - update taskgraph to v14.1.1 - - Bug 1962503 - Partial fix for ACVP build CI job - - Bug 1961827 - Initialize find in sftk_searchDatabase. - - Bug 1963121 - Add clang-18 to extra builds. - - Bug 1963044 - Fault tolerant git fetch for fuzzing. - - Bug 1962556 - Tolerate intermittent failures in ssl_policy_pkix_ocsp. - - Bug 1962770 - fix compiler warnings when DEBUG_ASN1D_STATES or CMSDEBUG are set. - - Bug 1961835 - fix content type tag check in NSS_CMSMessage_ContainsCertsOrCrls. - - Bug 1963102 - Remove Cryptofuzz CI version check diff -Nru firefox-esr-140.3.1esr/security/nss/doc/rst/releases/nss_3_112_2.rst firefox-esr-140.4.0esr/security/nss/doc/rst/releases/nss_3_112_2.rst --- firefox-esr-140.3.1esr/security/nss/doc/rst/releases/nss_3_112_2.rst 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/doc/rst/releases/nss_3_112_2.rst 2025-10-09 15:35:37.000000000 +0000 @@ -0,0 +1,72 @@ +.. _mozilla_projects_nss_nss_3_112_2_release_notes: + +NSS 3.112.2 release notes +======================== + +`Introduction <#introduction>`__ +-------------------------------- + +.. container:: + + Network Security Services (NSS) 3.112.2 was released on *3 October 2025**. + +`Distribution Information <#distribution_information>`__ +-------------------------------------------------------- + +.. container:: + + The HG tag is NSS_3_112_2_RTM. NSS 3.112.2 requires NSPR 4.36 or newer. + + NSS 3.112.2 source distributions are available on ftp.mozilla.org for secure HTTPS download: + + - Source tarballs: + https://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_112_2_RTM/src/ + + Other releases are available :ref:`mozilla_projects_nss_releases`. + +.. _changes_in_nss_3.112.2: + +`Changes in NSS 3.112.2 <#changes_in_nss_3.112.2>`__ +------------------------------------------------------------------ + +.. container:: + + - Bug 1970079 - Prevent leaks during pkcs12 decoding. + - Bug 1988046 - SEC_ASN1Decode* should ensure it has read as many bytes as each length field indicates. + - Bug 1992218 - fix memory leak in secasn1decode_unittest.cc. + - Bug 1988913 - Add OISTE roots. + - Bug 1976051 - Add runbook for certdata.txt changes. + - Bug 1991666 - dbtool: close databases before shutdown. + - Bug 1956754 - don't flush base64 when buffer is null. + - Bug 1989541 - Set `use_pkcs5_pbkd2_params2_only=1` for fuzzing builds. + - Bug 1989480 - mozilla::pkix: recognize the qcStatements extension for QWACs. + - Bug 1980465 - Fix a big-endian-problematic cast in zlib calls. + - Bug 1962321 - Revert removing out/ directory after ossfuzz build. + - Bug 1988524 - Add Cryptofuzz to OSS-Fuzz build. + - Bug 1984704 - Add PKCS#11 trust tests. + - Bug 1983308 - final disable dsa patch cert.sh. + - Bug 1983320 - ml-dsa: move tls 1.3 to use streaming signatures. + - Bug 1983320 - ml-dsa: Prep Create a FindOidTagByString function. + - Bug 1983320 - ml-dsa: softoken changes. + - Bug 1983320 - ml-dsa: der key decode. + - Bug 1983320 - ml-dsa: Prep colapse the overuse of keyType outside of pk11wrap and cryptohi. + - Bug 1983320 - ml-dsa: Prep Create a CreateSignatureAlgorithmID function. + - Bug 1983308 - disable DSA in NSS script tests. + - Bug 1983308 - Disabling of some algorithms: generic cert.sh. + - Bug 1981046 - Need to update to new mechanisms. + - Bug 1983320 - Add ML-DSA public key printing support in NSS command-line utilities. + - Bug 1986802 - note embedded scts before revocation checks are performed. + - Bug 1983320 - Add support for ML-DSA keys and mechanisms in PKCS#11 interface. + - Bug 1983320 - Add support for ML-DSA key type and public key structure. + - Bug 1983320 - Enable ML-DSA integration via OIDs support and SECMOD flag. + - Bug 1983308 - disable kyber. + - Bug 1965329 - Implement PKCS #11 v3.2 PQ functions (use verify signature). + - Bug 1983308 - Disable dsa - gtests. + - Bug 1983313 - make group and scheme support in test tools generic. + - Bug 1983770 - Create GH workflow to automatically close PRs. + - Bug 1983308 - Disable dsa - base code. + - Bug 1983308 - Disabling of some algorithms: remove dsa from pk11_mode. + - Bug 1983308 - Disable seed and RC2 bug fixes. + - Bug 1982742 - restore support for finding certificates by decoded serial number. + - Bug 1984165 - avoid CKR_BUFFER_TO_SMALL error in trust lookups. + diff -Nru firefox-esr-140.3.1esr/security/nss/gtests/der_gtest/der_gtest.gyp firefox-esr-140.4.0esr/security/nss/gtests/der_gtest/der_gtest.gyp --- firefox-esr-140.3.1esr/security/nss/gtests/der_gtest/der_gtest.gyp 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/gtests/der_gtest/der_gtest.gyp 2025-10-09 15:35:37.000000000 +0000 @@ -14,6 +14,7 @@ 'der_getint_unittest.cc', 'der_quickder_unittest.cc', 'p12_import_unittest.cc', + 'secasn1decode_unittest.cc', '<(DEPTH)/gtests/common/gtests.cc' ], 'dependencies': [ diff -Nru firefox-esr-140.3.1esr/security/nss/gtests/der_gtest/secasn1decode_unittest.cc firefox-esr-140.4.0esr/security/nss/gtests/der_gtest/secasn1decode_unittest.cc --- firefox-esr-140.3.1esr/security/nss/gtests/der_gtest/secasn1decode_unittest.cc 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/gtests/der_gtest/secasn1decode_unittest.cc 2025-10-09 15:35:37.000000000 +0000 @@ -0,0 +1,86 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gtest/gtest.h" +#include "scoped_ptrs_util.h" + +#include "nss.h" +#include "prerror.h" +#include "secasn1.h" +#include "secasn1t.h" +#include "secerr.h" +#include "secport.h" + +class SECASN1DecodeTest : public ::testing::Test {}; + +struct Item { + SECItem value; +}; + +const SEC_ASN1Template ItemTemplate[] = { + {SEC_ASN1_SEQUENCE, 0, NULL, sizeof(struct Item)}, {0}}; + +static const SEC_ASN1Template ItemsTemplate[] = { + {SEC_ASN1_SEQUENCE_OF, 0, ItemTemplate}, {0}}; + +struct Container { + struct Item** items; +}; + +const SEC_ASN1Template ContainerTemplate[] = { + {SEC_ASN1_SEQUENCE, 0, NULL, sizeof(struct Container)}, + {SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_EXPLICIT | 0, + offsetof(struct Container, items), ItemsTemplate}, + {0}}; + +// clang-format off +const unsigned char kEndOfContentsInDefiniteLengthContext[] = { + 0x30, 0x06, + 0xa0, 0x04, + 0x30, 0x00, + 0x00, 0x00, // EOC in definite length context +}; +// clang-format on + +TEST_F(SECASN1DecodeTest, EndOfContentsInDefiniteLengthContext) { + ScopedPLArenaPool pool(PORT_NewArena(1024)); + struct Container* decoded = reinterpret_cast( + PORT_ArenaZAlloc(pool.get(), sizeof(struct Container))); + SEC_ASN1DecoderContext* ctx = + SEC_ASN1DecoderStart(pool.get(), decoded, ContainerTemplate); + ASSERT_TRUE(ctx); + ASSERT_EQ( + SEC_ASN1DecoderUpdate( + ctx, + reinterpret_cast(kEndOfContentsInDefiniteLengthContext), + sizeof(kEndOfContentsInDefiniteLengthContext)), + SECFailure); + ASSERT_EQ(PR_GetError(), SEC_ERROR_BAD_DER); +} + +// clang-format off +const unsigned char kContentsTooShort[] = { + 0x30, 0x06, + 0xa0, 0x04, + 0x30, 0x00, // There should be two more bytes after this +}; +// clang-format on + +TEST_F(SECASN1DecodeTest, ContentsTooShort) { + ScopedPLArenaPool pool(PORT_NewArena(1024)); + struct Container* decoded = reinterpret_cast( + PORT_ArenaZAlloc(pool.get(), sizeof(struct Container))); + SEC_ASN1DecoderContext* ctx = + SEC_ASN1DecoderStart(pool.get(), decoded, ContainerTemplate); + ASSERT_TRUE(ctx); + ASSERT_EQ( + SEC_ASN1DecoderUpdate( + ctx, + reinterpret_cast(kContentsTooShort), + sizeof(kContentsTooShort)), + SECFailure); + ASSERT_EQ(PR_GetError(), SEC_ERROR_BAD_DER); +} diff -Nru firefox-esr-140.3.1esr/security/nss/lib/nss/nss.h firefox-esr-140.4.0esr/security/nss/lib/nss/nss.h --- firefox-esr-140.3.1esr/security/nss/lib/nss/nss.h 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/lib/nss/nss.h 2025-10-09 15:35:37.000000000 +0000 @@ -22,10 +22,10 @@ * The format of the version string should be * ".[.[.]][ ][ ]" */ -#define NSS_VERSION "3.112.1" _NSS_CUSTOMIZED +#define NSS_VERSION "3.112.2" _NSS_CUSTOMIZED #define NSS_VMAJOR 3 #define NSS_VMINOR 112 -#define NSS_VPATCH 1 +#define NSS_VPATCH 2 #define NSS_VBUILD 0 #define NSS_BETA PR_FALSE diff -Nru firefox-esr-140.3.1esr/security/nss/lib/pkcs12/p12d.c firefox-esr-140.4.0esr/security/nss/lib/pkcs12/p12d.c --- firefox-esr-140.3.1esr/security/nss/lib/pkcs12/p12d.c 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/lib/pkcs12/p12d.c 2025-10-09 15:35:37.000000000 +0000 @@ -826,6 +826,7 @@ safeContentsCtx->safeContentsA1Dcx = NULL; } cinfo = SEC_PKCS7DecoderFinish(p12dcx->currentASafeP7Dcx); + SEC_ASN1DecoderClearFilterProc(p12dcx->aSafeA1Dcx); p12dcx->currentASafeP7Dcx = NULL; if (!cinfo) { p12dcx->errorValue = PORT_GetError(); diff -Nru firefox-esr-140.3.1esr/security/nss/lib/softoken/softkver.h firefox-esr-140.4.0esr/security/nss/lib/softoken/softkver.h --- firefox-esr-140.3.1esr/security/nss/lib/softoken/softkver.h 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/lib/softoken/softkver.h 2025-10-09 15:35:38.000000000 +0000 @@ -17,10 +17,10 @@ * The format of the version string should be * ".[.[.]][ ][ ]" */ -#define SOFTOKEN_VERSION "3.112.1" SOFTOKEN_ECC_STRING +#define SOFTOKEN_VERSION "3.112.2" SOFTOKEN_ECC_STRING #define SOFTOKEN_VMAJOR 3 #define SOFTOKEN_VMINOR 112 -#define SOFTOKEN_VPATCH 1 +#define SOFTOKEN_VPATCH 2 #define SOFTOKEN_VBUILD 0 #define SOFTOKEN_BETA PR_FALSE diff -Nru firefox-esr-140.3.1esr/security/nss/lib/util/nssutil.h firefox-esr-140.4.0esr/security/nss/lib/util/nssutil.h --- firefox-esr-140.3.1esr/security/nss/lib/util/nssutil.h 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/lib/util/nssutil.h 2025-10-09 15:35:38.000000000 +0000 @@ -19,10 +19,10 @@ * The format of the version string should be * ".[.[.]][ ]" */ -#define NSSUTIL_VERSION "3.112.1" +#define NSSUTIL_VERSION "3.112.2" #define NSSUTIL_VMAJOR 3 #define NSSUTIL_VMINOR 112 -#define NSSUTIL_VPATCH 1 +#define NSSUTIL_VPATCH 2 #define NSSUTIL_VBUILD 0 #define NSSUTIL_BETA PR_FALSE diff -Nru firefox-esr-140.3.1esr/security/nss/lib/util/secasn1d.c firefox-esr-140.4.0esr/security/nss/lib/util/secasn1d.c --- firefox-esr-140.3.1esr/security/nss/lib/util/secasn1d.c 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/lib/util/secasn1d.c 2025-10-09 15:35:38.000000000 +0000 @@ -2398,24 +2398,9 @@ * consumed should be what was left pending. */ if (state->pending != state->child->consumed) { - if (state->pending < state->child->consumed) { - PORT_SetError(SEC_ERROR_BAD_DER); - state->top->status = decodeError; - return; - } - /* - * Okay, this is a hack. It *should* be an error whether - * pending is too big or too small, but it turns out that - * we had a bug in our *old* DER encoder that ended up - * counting an explicit header twice in the case where - * the underlying type was an ANY. So, because we cannot - * prevent receiving these (our own certificate server can - * send them to us), we need to be lenient and accept them. - * To do so, we need to pretend as if we read all of the - * bytes that the header said we would find, even though - * we actually came up short. - */ - state->consumed += (state->pending - state->child->consumed); + PORT_SetError(SEC_ERROR_BAD_DER); + state->top->status = decodeError; + return; } state->pending = 0; } diff -Nru firefox-esr-140.3.1esr/security/nss/moz.yaml firefox-esr-140.4.0esr/security/nss/moz.yaml --- firefox-esr-140.3.1esr/security/nss/moz.yaml 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/nss/moz.yaml 2025-10-09 15:35:37.000000000 +0000 @@ -9,8 +9,8 @@ description: nss url: https://hg-edge.mozilla.org/projects/nss - release: 808e051ea9ce632e910c449a5b60d152e3017572 (2025-08-22T02:48:54Z). - revision: 808e051ea9ce632e910c449a5b60d152e3017572 + release: ea8a7bf26efdf7cb8b5fc8a02f0c779404509277 (2025-10-03T12:46:03Z). + revision: ea8a7bf26efdf7cb8b5fc8a02f0c779404509277 license: MPL-2.0 license-file: COPYING diff -Nru firefox-esr-140.3.1esr/security/sandbox/linux/SandboxFilter.cpp firefox-esr-140.4.0esr/security/sandbox/linux/SandboxFilter.cpp --- firefox-esr-140.3.1esr/security/sandbox/linux/SandboxFilter.cpp 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/security/sandbox/linux/SandboxFilter.cpp 2025-10-09 15:35:37.000000000 +0000 @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,8 @@ #include #include #include +// This has to go after for annoying reasons +#include #include #include @@ -2231,16 +2234,21 @@ auto shifted_type = request & kIoctlTypeMask; // Rust's stdlib seems to use FIOCLEX instead of equivalent fcntls. - return If(request == FIOCLEX, Allow()) + return Switch(request) + .Case(FIOCLEX, Allow()) // Rust's stdlib also uses FIONBIO instead of equivalent fcntls. - .ElseIf(request == FIONBIO, Allow()) + .Case(FIONBIO, Allow()) // This is used by PR_Available in nsSocketInputStream::Available. - .ElseIf(request == FIONREAD, Allow()) - // Allow anything that isn't a tty ioctl (if level < 2) - .ElseIf( - BelowLevel(2) ? shifted_type != kTtyIoctls : BoolConst(false), - Allow()) - .Else(SandboxPolicyCommon::EvaluateSyscall(sysno)); + .Case(FIONREAD, Allow()) + // WebRTC needs interface information (bug 1975576) + .CASES((SIOCGIFNAME, SIOCGIFFLAGS, SIOCETHTOOL, SIOCGIWRATE), + Allow()) + .Default( + // Allow anything that isn't a tty ioctl (if level < 2) + If(BelowLevel(2) ? shifted_type != kTtyIoctls + : BoolConst(false), + Allow()) + .Else(SandboxPolicyCommon::EvaluateSyscall(sysno))); } CASES_FOR_fcntl: { diff -Nru firefox-esr-140.3.1esr/services/settings/dumps/blocklists/addons-bloomfilters.json firefox-esr-140.4.0esr/services/settings/dumps/blocklists/addons-bloomfilters.json --- firefox-esr-140.3.1esr/services/settings/dumps/blocklists/addons-bloomfilters.json 2025-09-22 21:16:17.000000000 +0000 +++ firefox-esr-140.4.0esr/services/settings/dumps/blocklists/addons-bloomfilters.json 2025-10-09 15:35:37.000000000 +0000 @@ -5,6 +5,3612 @@ "blocked": [], "unblocked": [], "softblocked": [ + "of-quick-replies@example.com:2.0.0", + "{0313cb0b-28d8-4548-bd3a-90b015728344}:1.0", + "{0313cb0b-28d8-4548-bd3a-90b015728344}:1.1", + "{0313cb0b-28d8-4548-bd3a-90b015728344}:1.2", + "{2ed44e8a-9988-4e65-a1d1-69511d2609fa}:1.0", + "yt-timedtext-srt@example:0.1.0", + "{239a28dc-2f14-4da4-ace3-d41641d0c62e}:0.0.2", + "{e65db9ad-d948-436f-aaea-0eed3daac7c3}:2.0.14", + "{e65db9ad-d948-436f-aaea-0eed3daac7c3}:2.0.15" + ] + }, + "schema": 1759716950630, + "key_format": "{guid}:{version}", + "stash_time": 1759732506646, + "id": "32a61cd6-2adf-4bb4-817e-70481f91c46b", + "last_modified": 1759732597526 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{05052d2c-64e6-4f4b-a10a-253aded2e2e4}:1.0.0", + "media-collector@yrrah.com:9.0.2", + "media-collector@yrrah.com:9.0.1", + "usertoihsoyct@airborne-commando:1.0", + "scsclient@sentido-labs.com:0.0.28", + "scsclient@sentido-labs.com:0.0.29", + "scsclient@sentido-labs.com:0.0.30", + "scsclient@sentido-labs.com:0.1.0", + "scsclient@sentido-labs.com:0.1.1", + "scsclient@sentido-labs.com:0.1.2", + "{bb94893c-175b-4ee7-a01a-f0a0724bc01b}:1.0" + ] + }, + "schema": 1759689388415, + "key_format": "{guid}:{version}", + "stash_time": 1759710905701, + "id": "132b49ce-2302-4a7c-a8cf-25bc7750e017", + "last_modified": 1759710988818 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "rawlinks@rawbot.zone:0.1", + "rawlinks@rawbot.zone:0.2", + "rawlinks@rawbot.zone:0.3", + "rawlinks@rawbot.zone:0.4", + "rawlinks@rawbot.zone:0.5", + "{ee1c1548-6d54-4a6f-8efe-4b6e26919a87}:1.0", + "{ee1c1548-6d54-4a6f-8efe-4b6e26919a87}:1.1", + "voiranimeHistoriqueBlack@zeno:2.0.0", + "voiranimeHistoriqueBlack@zeno:2.1.0", + "voiranimeHistoriqueBlack@zeno:2.2.0", + "voiranimeHistoriqueBlack@zeno:4.0.0", + "voiranimeHistoriqueBlack@zeno:4.1.0", + "snap-my-tabs@example.com:0.3.0", + "canva-cleaner@simo.com:1.0", + "amoled-pure-black-theme@local:1.0.0", + "{43af7a6c-bb4e-4dd6-b95b-87ecbe2f1708}:1.0.2", + "snap-my-tabs@example.com:0.1.0", + "dualtranslate@example.com:1.4.0", + "dualtranslate@example.com:1.5.0" + ] + }, + "schema": 1759667790126, + "key_format": "{guid}:{version}", + "stash_time": 1759689305852, + "id": "5569370b-f938-4d31-bc2a-815ca4e7cea7", + "last_modified": 1759689388241 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.0", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.1", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.2", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.4", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.5", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.6", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.7", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.0", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.1", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.2", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.3", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.4", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.5", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.6", + "25964b13-b5e3-434c-ba0a-b812076947ee@walkme.com:4.0.275.7", + "78896be05a7911f0af9113fb460463d7@walkme.com:4.0.263.0", + "{ff011dc5-9749-40cc-a240-0884945e225d}:1.0", + "{39e081a4-f76d-46ed-a6a4-30ebda549940}:1.0", + "{173c437d-6350-420c-9b26-bd218659f478}:1.0", + "{173c437d-6350-420c-9b26-bd218659f478}:2.0", + "{173c437d-6350-420c-9b26-bd218659f478}:3.0" + ] + }, + "schema": 1759646189761, + "key_format": "{guid}:{version}", + "stash_time": 1759667706371, + "id": "ab922047-cea5-4e50-98c2-cddbb93fc298", + "last_modified": 1759667789851 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "pdf-coretax-hanim@local:2.6", + "{d61dcb37-bb12-430a-a85b-caff74299a60}:1.0", + "{4ebb9fe7-1231-4a62-8d1e-d66f0b4eadc1}:1.0", + "{9767a3a5-e43c-4b12-a142-f7be3f22f9ca}:1.1", + "{697fea19-9d66-4e8f-8987-b99cad8f6fcc}:1.3.5", + "{0de7c60a-11ff-4fa3-854e-4e042fb4e705}:1.3.7", + "{f43c7041-55a2-4092-a71a-8a492f222ead}:1.3.7", + "{703fda67-9bdb-4bc8-bf79-adc017d9cc4e}:1.3.6", + "{c8466ef7-22d2-4119-8055-aa5a7f2e8445}:1.3.7", + "{e987e183-8a06-4d2f-a06c-9325e79a7236}:1.3.7", + "{761e0a90-f55b-4271-9602-31cd4a5cc9b0}:1.3.7", + "{3fc92218-3f28-4360-b2d1-61c1619c6536}:1.3.7", + "{95f3eb4f-58f0-4615-bed4-5bc2dcf0851e}:1.3.7", + "{55071552-9e8e-4cfa-83ff-2f9d24632b42}:1.3.7", + "{1f106ed3-ea3c-4507-896a-3b4c5f6fe035}:1.3.7", + "{e7f3c401-6d3d-494f-8a5a-0730106abbcb}:1.3.8" + ] + }, + "schema": 1759630550294, + "key_format": "{guid}:{version}", + "stash_time": 1759646105623, + "id": "5ed50621-09da-4ecf-8cf5-dd3d712976f0", + "last_modified": 1759646189609 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "kl3sk@gmx.net:1.0", + "{135c3428-66bc-4b5b-9503-282dc00802e8}:1.0", + "{135c3428-66bc-4b5b-9503-282dc00802e8}:1.1", + "bear-blocker@example.com:1.0", + "bear-blocker@example.com:1.0.1", + "{90f95a17-8d05-4a98-8ce6-8283decf2780}:1.88", + "stevesajeev123@gmail.com:1.0" + ] + }, + "schema": 1759602993827, + "key_format": "{guid}:{version}", + "stash_time": 1759624505768, + "id": "7e069dc8-2865-48e6-a158-433d479863df", + "last_modified": 1759624590137 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{d13f35d4-460a-4ae7-b0fe-78f4a886bf45}:1.0", + "{d13f35d4-460a-4ae7-b0fe-78f4a886bf45}:2.0", + "{eb569665-7463-4ff6-aea6-67a52c0c86bf}:0.1.0", + "{a0166e4a-64ef-441c-8b0e-7297381aba11}:1.0.3", + "{a0166e4a-64ef-441c-8b0e-7297381aba11}:1.0.5", + "{05b2f23f-05bd-4688-bc5a-70393b6d6b37}:1.0.1", + "{05b2f23f-05bd-4688-bc5a-70393b6d6b37}:1.0.2", + "{05b2f23f-05bd-4688-bc5a-70393b6d6b37}:1.0.3", + "{05b2f23f-05bd-4688-bc5a-70393b6d6b37}:1.0.4", + "{4e6788b2-56ed-4f43-b789-70aa1ed30b92}:1.4.7", + "{4e6788b2-56ed-4f43-b789-70aa1ed30b92}:1.4.8", + "{0f6af791-55ec-4dbc-b35a-2f18384855df}:1.0" + ] + }, + "schema": 1759581392286, + "key_format": "{guid}:{version}", + "stash_time": 1759602905745, + "id": "c17cd190-8328-4df0-b232-339d8de42f46", + "last_modified": 1759602993620 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "jp-en-translator@example.com:1.0", + "imagetranslator@example.com:1.0", + "tiklama-efekti@senin-kullanici-adin.com:1.0", + "{96f93b98-086f-405e-af88-4a36e7e8becb}:1.0", + "{96f93b98-086f-405e-af88-4a36e7e8becb}:1.5", + "{91807c12-65e5-43ad-b873-f31f88e795db}:0.0.7.6", + "{ac87cfd8-47b1-4401-b32e-f033af5ed96b}:0.7.0" + ] + }, + "schema": 1759559795266, + "key_format": "{guid}:{version}", + "stash_time": 1759581305897, + "id": "967d5d91-845a-4b9c-9eeb-794daa7cab6e", + "last_modified": 1759581392142 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{9c66dec2-cacf-4e52-843c-69032582b51a}:12.8.1", + "whois.gweb@gmail.com:1.3.4", + "roblox-friends-manager-unique-2025@example.com:1.0.6", + "job-capture-demo@example.com:1.2.0", + "url-word-blocker@jamesnellis.dev:1.0", + "odysseus@example.com:1.0", + "odysseus@example.com:1.1", + "{1a289379-8ec5-449c-ba99-9df793d0ad23}:2.0", + "k0mm.du@gmail.com:3.0.3" + ] + }, + "schema": 1759544152137, + "key_format": "{guid}:{version}", + "stash_time": 1759559705950, + "id": "405a335e-8cb4-4b78-8c57-a1e5502b79ff", + "last_modified": 1759559795111 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "IPFire_LegendFilter@example.com:0.0.14", + "astrea-addons-v2@astrea.net.br:25.10.21", + "astrea-addons-v2@astrea.net.br:25.10.22", + "astrea-addons-v2@astrea.net.br:25.10.23", + "astrea-addons-v2@astrea.net.br:25.10.3.1", + "astrea-addons-v2@astrea.net.br:25.10.3.2", + "{9867712d-5808-4d00-9a4b-d1fa0d3149c7}:1.0", + "{9867712d-5808-4d00-9a4b-d1fa0d3149c7}:1.0.1", + "{9867712d-5808-4d00-9a4b-d1fa0d3149c7}:2.0", + "{9867712d-5808-4d00-9a4b-d1fa0d3149c7}:2.1", + "{9867712d-5808-4d00-9a4b-d1fa0d3149c7}:2.2", + "astrea-addons-v2@astrea.net.br:25.10.3.3", + "astrea-addons-v2@astrea.net.br:25.10.3.4", + "iitm-netaccess-autologin@netaccess.com:1.0", + "iitm@netaccess.com:5.0.2", + "spotme@yourdomain.com:1.1", + "{8c224bab-b634-47a7-90ad-e1bf3a340665}:2.0", + "{8c224bab-b634-47a7-90ad-e1bf3a340665}:1.0", + "pdf-coretax-hanim@local:2.1", + "{8c224bab-b634-47a7-90ad-e1bf3a340665}:2.2" + ] + }, + "schema": 1759516592878, + "key_format": "{guid}:{version}", + "stash_time": 1759538106413, + "id": "c74fdf25-020a-4325-9c35-774009f11e79", + "last_modified": 1759538193466 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{aca071f4-2414-40ff-8d38-d1b811039504}:1.0.0", + "{aca071f4-2414-40ff-8d38-d1b811039504}:1.0.1", + "proxy-auth@dvhtrung.local:1.0.3", + "greenleaf@pollutioncenter:1.0", + "{ed894b8b-1be4-4c44-8821-30b874e7e4fa}:1.0.0", + "{0806ec68-9579-48df-a0fb-29eb8d289cc9}:1.0.0", + "turbozver@nure-ext:1.0.2", + "{1492abee-593d-4fb2-bc38-b2cbd1b56353}:1.0", + "{f50d7ee9-5aa3-4b93-b83b-0ab643d97c62}:1.0", + "{f50d7ee9-5aa3-4b93-b83b-0ab643d97c62}:3.0", + "{6b88683c-1596-4245-8c4e-2ab83918db3a}:1.3", + "{6b88683c-1596-4245-8c4e-2ab83918db3a}:1.4", + "{3cea4ea5-a2b1-4fb7-8b67-b7a6f2045cfb}:1.0", + "IPFire_LegendFilter@example.com:0.0.10", + "IPFire_LegendFilter@example.com:0.0.7", + "IPFire_LegendFilter@example.com:0.0.6", + "IPFire_LegendFilter@example.com:0.0.5", + "IPFire_LegendFilter@example.com:0.0.8", + "IPFire_LegendFilter@example.com:0.0.4", + "IPFire_LegendFilter@example.com:0.0.3", + "IPFire_LegendFilter@example.com:0.0.2", + "IPFire_LegendFilter@example.com:0.0.1", + "{d4f438f9-cb90-4f04-8982-8871bc0c10e7}:1.0", + "{3af8f70b-8eaf-4e79-b650-ac455d916a10}:1.0", + "{ce975a4f-4f91-42ef-aa5a-fd0b908e7741}:1.0", + "IPFire_LegendFilter@example.com:0.0.13", + "IPFire_LegendFilter@example.com:0.0.11", + "IPFire_LegendFilter@example.com:0.0.12" + ] + }, + "schema": 1759494990977, + "key_format": "{guid}:{version}", + "stash_time": 1759516506139, + "id": "6a5fad9e-81d1-4309-ba5c-e0b8886b4dba", + "last_modified": 1759516592654 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "seiva-inkopsknapp@example.com:2.3.3", + "twitter-helper@example.com:1.0", + "overrider@overrider.com:2.0", + "overrider@overrider.com:1.8", + "{702e81ad-7869-4724-a751-a454e16f98ee}:1.0", + "{bdb16cda-b9af-41f9-ae48-490836743e58}:1.0", + "{b2852ffd-e208-4a7b-bfab-ae6407ab0ed0}:1.0.0" + ] + }, + "schema": 1759473394300, + "key_format": "{guid}:{version}", + "stash_time": 1759494905876, + "id": "ebf7bd23-442a-4e99-95e1-b146f8aa9fdf", + "last_modified": 1759494990765 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "chinese-novel-translator@example.com:1.0.0", + "{d02de1d8-ff5b-43f2-94c9-c806a364d93a}:3.0", + "{d02de1d8-ff5b-43f2-94c9-c806a364d93a}:1.0", + "{8a3104a2-02c2-464c-b069-82344e5ed4ec}:2.15.0", + "{7a3104a2-02c2-464c-b069-82344e5ed4ec}:2.15.0", + "youtube-timestamp@nasyue.github.io:1.0.0", + "{e59fe69b-59d4-478d-aa04-b2b9cf234d05}:2024.2.0.0", + "{e59fe69b-59d4-478d-aa04-b2b9cf234d05}:2024.3.0.0", + "alwaysplain@el10.cc:1.3.0", + "alwaysplain@el10.cc:1.3.1", + "msteamsprejoinhelper@el10.cc:1.1", + "{6318a1f1-b856-4b98-bd81-07b5cefcdc43}:2.6.0", + "{6318a1f1-b856-4b98-bd81-07b5cefcdc43}:2.6.1", + "{6318a1f1-b856-4b98-bd81-07b5cefcdc43}:2.6.2", + "{f590f5ab-10a7-4773-b10c-35145a19c99f}:1.0" + ] + }, + "schema": 1759457751854, + "key_format": "{guid}:{version}", + "stash_time": 1759473305614, + "id": "d225207f-6354-47c5-9520-9651b4ea725b", + "last_modified": 1759473394065 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{765c4611-9013-456d-9bdb-ba0fc59a6591}:1.0", + "{d2619eee-4474-4100-852d-faa741d9a22b}:1.0", + "{d2619eee-4474-4100-852d-faa741d9a22b}:2.4", + "{4590d8b8-3569-46e3-a571-cabfbaeab2c1}:3.1.3", + "{8b17a0de-b6f1-4c3f-aabf-b15dfe1ff6fa}:1.0", + "{454f4dc0-be7c-48e2-bc93-96cb4eedcc9d}:1.0", + "{454f4dc0-be7c-48e2-bc93-96cb4eedcc9d}:1.3", + "{454f4dc0-be7c-48e2-bc93-96cb4eedcc9d}:1.5", + "{87b89b93-2914-45d5-af79-919d2d9b9bd6}:1.0.4", + "{cfb08567-fb60-47ac-8e49-b428526e743d}:1.0.4", + "newtab@ghostery.com:1.0.4", + "{654c2d66-9e27-4d39-91ff-b4a868decad0}:1.0", + "{65d166e0-52ba-4847-bd3d-dc05496dda1a}:1.0" + ] + }, + "schema": 1759430196468, + "key_format": "{guid}:{version}", + "stash_time": 1759451706104, + "id": "8fde1f5e-3abe-4417-ae06-2736c04c6c48", + "last_modified": 1759451794470 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{29bc2bd7-ff2c-4dd0-bdd9-aed6dde09aa0}:1.0", + "{29bc2bd7-ff2c-4dd0-bdd9-aed6dde09aa0}:1.1", + "{29bc2bd7-ff2c-4dd0-bdd9-aed6dde09aa0}:1.3", + "removepaywall@salvatorenoschese.it:1.0.0", + "addon@mexashare_srv:0.0.0.12", + "{84b24c34-8d97-43f6-9533-335a0b683469}:0.4.0", + "{96cb1061-0399-40fe-aff1-7d6b905fc836}:1.6.0", + "{21dec1b6-8f2c-4a91-b552-3a1b2e97b983}:2.0.0", + "{21dec1b6-8f2c-4a91-b552-3a1b2e97b983}:2.0.13", + "{21dec1b6-8f2c-4a91-b552-3a1b2e97b983}:2.0.14" + ] + }, + "schema": 1759408592006, + "key_format": "{guid}:{version}", + "stash_time": 1759430105560, + "id": "7f632396-b0c8-465f-89c1-b7d01013235a", + "last_modified": 1759430196327 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "myStocksQ@przemek.com:0.3", + "myStocksQ@przemek.com:0.31", + "myStocksQ@przemek.com:0.32", + "hide-shorts-stories-reels-video@iamibrahimriaz.com:1.1", + "{aba2c6e0-b547-4053-8622-6d44ae8b4a66}:0.0.1", + "wallet@ambire.com:5.7.1", + "wallet@ambire.com:5.10.2", + "wallet@ambire.com:5.11.2", + "wallet@ambire.com:5.12", + "wallet@ambire.com:5.13.0", + "wallet@ambire.com:5.14.1", + "wallet@ambire.com:5.15.0", + "wallet@ambire.com:5.16.0", + "wallet@ambire.com:5.16.1", + "wallet@ambire.com:5.18.0", + "wallet@ambire.com:5.18.1", + "wallet@ambire.com:5.20.0", + "wallet@ambire.com:5.23.2", + "{0e0d1430-663a-49ec-95a4-db17e16cb334}:1.8", + "{e936bb98-a8d3-4778-9c7f-005923bc50b9}:1.0", + "{11cfeafc-b41e-4161-8afb-a318f76e7706}:1.0.18", + "{8d7c45b6-f7cf-4dfb-b4c9-e6bdbebafd8f}:1.0.18" + ] + }, + "schema": 1759386980683, + "key_format": "{guid}:{version}", + "stash_time": 1759408505683, + "id": "022ee89e-3c3d-4469-b7d7-0767bbc28cc1", + "last_modified": 1759408591847 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "anti-phishing@example.com:1.0.0", + "anti-phishing@example.com:1.0.1", + "anti-phishing@example.com:1.0.2", + "{007bf4f0-789e-43f1-bc62-c0524d8c1dbd}:1.0", + "astrea-addons-v2@astrea.net.br:25.920.1", + "astrea-addons-v2@astrea.net.br:25.10.25", + "astrea-addons-v2@astrea.net.br:25.10.24", + "astrea-addons-v2@astrea.net.br:25.10.3", + "astrea-addons-v2@astrea.net.br:25.10.2", + "astrea-addons-v2@astrea.net.br:25.1001.3", + "astrea-addons-v2@astrea.net.br:25.1001.2", + "astrea-addons-v2@astrea.net.br:25.1001.1", + "astrea-addons-v2@astrea.net.br:25.930.1", + "astrea-addons-v2@astrea.net.br:25.924.1", + "astrea-addons-v2@astrea.net.br:25.922.3", + "astrea-addons-v2@astrea.net.br:25.922.4", + "astrea-addons-v2@astrea.net.br:25.922.2", + "astrea-addons-v2@astrea.net.br:25.922.1", + "astrea-addons-v2@astrea.net.br:25.921.3", + "astrea-addons-v2@astrea.net.br:25.921.2", + "astrea-addons-v2@astrea.net.br:25.921.1", + "astrea-addons-v2@astrea.net.br:25.920.2", + "astrea-addons-v2@astrea.net.br:26.0.4", + "astrea-addons-v2@astrea.net.br:26.0.3", + "astrea-addons-v2@astrea.net.br:26.0.2", + "astrea-addons-v2@astrea.net.br:26.0.1", + "astrea-addons-v2@astrea.net.br:26.0.0", + "astrea-addons-v2@astrea.net.br:25.9.26", + "astrea-addons-v2@astrea.net.br:25.9.22", + "astrea-addons-v2@astrea.net.br:25.9.21" + ] + }, + "schema": 1759371352562, + "key_format": "{guid}:{version}", + "stash_time": 1759386904918, + "id": "15da0dcf-137a-41e4-a7e6-2102e7f9d0e9", + "last_modified": 1759386980445 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "copilot-injector@example.com:1.0", + "{5a4bd797-e796-4918-9e02-8e19e1b44d56}:1.0", + "{5a4bd797-e796-4918-9e02-8e19e1b44d56}:1.1", + "textolay@wyltre.com:1.0", + "{806abef4-5b76-4a82-945c-77d9d501f124}:28.0.0", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.1", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.2", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.3", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.4", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.5", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.6", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.7", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.8", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.9", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.1.10", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.2.0", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.2.1", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.2.2", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.2.3", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.2.4", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.3.0", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.3.1", + "{bea31321-7d20-4dc1-a53f-5affb7b85a24}:0.3.2" + ] + }, + "schema": 1759343794745, + "key_format": "{guid}:{version}", + "stash_time": 1759365305808, + "id": "e6efb0ab-29ee-409a-8e3f-e6d72bf03ec4", + "last_modified": 1759365390675 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "nudge-security-extension-internal@nudge.security:0.9.931", + "nudge-security-extension-internal@nudge.security:0.9.93", + "nudge-security-extension-internal@nudge.security:0.9.92", + "TaskScriberFirefox@wisc.edu:1.2.5", + "TaskScriberFirefox@wisc.edu:1.2.6", + "TaskScriberFirefox@wisc.edu:1.3.0", + "TaskScriberFirefox@wisc.edu:1.3.2", + "{b73e1539-5437-4c01-a48c-017943054227}:1.0.0" + ] + }, + "schema": 1759322193878, + "key_format": "{guid}:{version}", + "stash_time": 1759343706165, + "id": "9931407c-e6df-4e0c-bfa7-b465b0b979d5", + "last_modified": 1759343794497 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{6620a205-8539-400b-a371-bdf4897eede9}:1.0", + "{5888365f-4949-4529-8580-a80bbec4fd7a}:1.0", + "{56f260e5-12c3-45b1-a0b1-98f904352f9d}:1.1", + "{277fef10-46df-4bd9-b126-91988ec51a90}:1.9.0", + "totp@mo:1.2.8", + "{277fef10-46df-4bd9-b126-91988ec51a90}:1.10.0", + "totp@mo:1.2.9", + "session-creator@advisor360.com:1.0.3", + "@paris-fr-toolbox-extension.dicom.paris:1.0", + "butterknife@example.com:1.0" + ] + }, + "schema": 1759300593824, + "key_format": "{guid}:{version}", + "stash_time": 1759322105624, + "id": "6230f2f9-5c3b-42bd-9251-ae9d38745253", + "last_modified": 1759322193675 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "vocab-highlighter@example.com:1.0", + "{11b6bd81-c812-4f3d-8d49-1979222de482}:1.0", + "quotes-app@example.com:1.0.0" + ] + }, + "schema": 1759284938824, + "key_format": "{guid}:{version}", + "stash_time": 1759300506316, + "id": "b6938853-d4cb-4299-b01e-3e94e11616c8", + "last_modified": 1759300593681 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "theme_switcher@moreka.org:1.1", + "Android@bravenhancer.com:17.1.7", + "enhancer@goldenfox.com:17.1.7", + "ghcpblock@shad.moe:1.0", + "r6-liquipedia-delete-falcons@example.com:1.0", + "r6-liquipedia-delete-falcons@example.com:1.0.1", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.0.3", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.0.4", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.0.5", + "{7d37f4c3-c6cf-4b18-a748-ed4a6e7eb281}:1.46.0", + "{7d37f4c3-c6cf-4b18-a748-ed4a6e7eb281}:1.42.2", + "{7d37f4c3-c6cf-4b18-a748-ed4a6e7eb281}:1.42.1", + "{7d37f4c3-c6cf-4b18-a748-ed4a6e7eb281}:1.42.0", + "clifford-rym@example.com:1.0", + "clifford-rym@example.com:1.1", + "clifford-rym@example.com:1.2", + "clifford-rym@example.com:1.2.0", + "clifford-rym@example.com:1.2.2", + "{a32e3f62-1743-4afd-bb1b-1d8c0c80dceb}:0.0.1", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.0.6", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.0.7", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.0.9", + "{26e93e52-973c-4453-9919-69ebc0717214}:1.0", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.1.1", + "{38c4a320-2e37-4465-a0d2-690689ae3efa}:1.2.0" + ] + }, + "schema": 1759257397513, + "key_format": "{guid}:{version}", + "stash_time": 1759278905124, + "id": "b077db42-ddd7-4674-9f54-40b3bafd4c36", + "last_modified": 1759278984786 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{0b3afebf-c4d9-4222-b6a4-76697374a90d}:1.0", + "kinozalhelper@elektrikis.id.lv:2.22.2", + "warmy-email-checker@warmy.io:1.1.25" + ] + }, + "schema": 1759235783403, + "key_format": "{guid}:{version}", + "stash_time": 1759257306246, + "id": "1caa62e0-330c-46d0-b5e1-a5ecc563b9dc", + "last_modified": 1759257397312 + }, + { + "stash": { + "blocked": [ + "{a9d3c7f1-2e4b-45c8-9f6d-3b7e1c5d8f2a}:112.9.1", + "{e7b3f9c2-4d1a-45f8-9a6c-2b1d7f4c3a5e}:88.67.8", + "{e7b3f9c2-4d1a-45f8-9a6c-2b1d7f4c3a5e}:88.67.9", + "{2e6fa3c1-e4fb-4015-9c18-1c635c19643d}:77.10.2", + "{4dcfc926-c602-46f7-9ae2-0a9a4f70ba12}:1", + "{7e01863a-cfa7-4493-a6b8-be2992a5a649}:1", + "{6072fc1c-8fae-4f8c-911c-c9b068bda7c2}:1", + "simplecolorchanger-9876@addon.com:1.0", + "{1f3a6c0d-4206-446f-bce9-4bf8965af4a5}:19.1", + "{b2c3f2f1-1a4d-4b8a-8df5-b0b6c8b2a1e8}:12.23.1", + "{b2c3f2f1-1a4d-4b8a-8df5-b0b6c8b2a1e6}:12.23.1" + ], + "unblocked": [], + "softblocked": [ + "autologinarun@example.com:1.0", + "{252024b6-4cac-454f-9a5c-50c44df9eb6e}:1.0", + "autologinarun2@example.com:1.0", + "{d5cdc3c0-d059-47df-a0bf-6317995d4a5b}:1.0.0", + "{d5cdc3c0-d059-47df-a0bf-6317995d4a5b}:1.0.1", + "{b90850de-53fb-4b4a-8ecb-c0995b530e29}:1.0.0", + "{99c3a10f-4d88-4d26-9332-1b3411b3d536}:0.2.7", + "{c6cec315-7273-46a0-830a-cb369ce2b535}:0.0.0", + "sin.amru.gao.kerena@gmail.com:1.4", + "clicker10_3@gmail.com:1.0", + "clicker10_3@gmail.com:1.8.4", + "omga-ai-explainer@pouriahosseini.news:0.5.0" + ] + }, + "schema": 1759198541643, + "key_format": "{guid}:{version}", + "stash_time": 1759235705853, + "id": "32a03f4f-f553-4080-a2d5-e5eb9b28817d", + "last_modified": 1759235783183 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{f51d9f61-0836-4a3c-bdac-56c5672c625f}:1.0", + "bookmarks@tools.zek:0.0.1", + "mycustomaddon@example.com:1.1.0", + "{57ac8695-8fc0-4df1-ab07-3ac768ec471d}:1.0.1" + ] + }, + "schema": 1759170985551, + "key_format": "{guid}:{version}", + "stash_time": 1759192506102, + "id": "c78f671a-7fcf-4606-b631-9f14a48d2687", + "last_modified": 1759192590975 + }, + { + "stash": { + "blocked": [ + "jrab@jbrlog.jrab:0.1.0", + "jrab@jbrlog.jrab:0.1.1", + "jrab@jbrlog.jrab:0.1.2", + "jrab@jbrlog.jrab:0.1.3", + "jrab@jbrlog.jrab:0.1.4", + "jrab@jbrlog.jrab:0.1.5", + "zhimx@loko.dev:0.8.2", + "zhimx@loko.dev:0.8.3", + "zhimx@loko.dev:0.8.4", + "zhimx@loko.dev:0.8.5", + "zhimx@loko.dev:0.8.5.4", + "zhimx@loko.dev:0.8.6", + "zhimx@loko.dev:0.8.6.1", + "zhimx@loko.dev:0.8.6.2", + "zhimx@loko.dev:0.8.6.5", + "zhimx@loko.dev:0.8.6.6", + "zhimx@loko.dev:0.8.6.7", + "zhimx@loko.dev:0.8.6.8", + "zhimx@loko.dev:0.8.6.9", + "zhimx@loko.dev:0.8.7", + "zhimx@loko.dev:0.8.7.1", + "zhimx@loko.dev:0.8.7.2", + "zhimx@loko.dev:0.8.7.3", + "zhimx@loko.dev:0.8.7.4", + "zhimx@loko.dev:0.8.8", + "zhimx@loko.dev:0.11.3", + "http-log@loko.dev:1.0", + "http-log@loko.dev:0.1.0", + "http-log@loko.dev:0.1.1", + "http-log@loko.dev:0.1.2", + "http-log@loko.dev:0.1.3", + "http-log@loko.dev:0.1.4", + "http-log@loko.dev:0.1.4.1", + "http-log@loko.dev:0.1.5" + ], + "unblocked": [ + "warmy-email-checker@warmy.io:1.1.25" + ], + "softblocked": [ + "MedBandeau@docplus.fr:1.6.1", + "MedBandeau@docplus.fr:1.6.3", + "{2e0bc24c-ae51-4d0e-b2b0-2d13fe0d4ea6}:2025.9.0", + "{f1736bec-9978-4a8b-8704-6b74e1535aea}:1.0", + "{f1736bec-9978-4a8b-8704-6b74e1535aea}:1.1", + "{f1736bec-9978-4a8b-8704-6b74e1535aea}:1.1.1", + "{933b12b1-c0c0-4e59-997e-2a9b89eebace}:160.10.2", + "wishio.oficial@gmail.com:1.0.0", + "wishio.oficial@gmail.com:1.0.2", + "wishio.oficial@gmail.com:1.0.3", + "wishio.oficial@gmail.com:1.0.4", + "end-date-extension@example.com:1.0" + ] + }, + "schema": 1759149390445, + "key_format": "{guid}:{version}", + "stash_time": 1759170905387, + "id": "13d34305-2eae-449b-91b1-e3f8217ef3b4", + "last_modified": 1759170985272 + }, + { + "stash": { + "blocked": [ + "{413afd40-f9e4-481f-8aac-7ce83550fa85}:12.23.1", + "{b0f38e1d-59d0-4173-b899-6c80f45630b6}:12.8.1", + "{9f6cf7b2-87b1-4779-9912-f3f55a7ff431}:12.8.1" + ], + "unblocked": [ + "tabkraken@furby.industries:0.2", + "tabkraken@furby.industries:0.2.1", + "tabkraken@furby.industries:0.2.3", + "tabkraken@furby.industries:0.2.4", + "tabkraken@furby.industries:0.2.5", + "tabkraken@furby.industries:0.3.0" + ], + "softblocked": [ + "{b2c3f2f1-1a4d-4b8a-8df5-b0b6c8b2a1e4}:12.23.1", + "kot-assistant@example.com:0.10.0", + "{15db47b9-31ff-47c5-b055-f311a866478d}:1.0", + "{07e0d86e-5dd5-4b58-9c27-b65e39f4a3c7}:0.2", + "{07e0d86e-5dd5-4b58-9c27-b65e39f4a3c7}:0.3", + "{07e0d86e-5dd5-4b58-9c27-b65e39f4a3c7}:0.4", + "{07e0d86e-5dd5-4b58-9c27-b65e39f4a3c7}:0.5", + "{07e0d86e-5dd5-4b58-9c27-b65e39f4a3c7}:1.0", + "{07e0d86e-5dd5-4b58-9c27-b65e39f4a3c7}:1.1", + "{0347fa0c-018d-4ee0-8d68-9334e5a0d291}:1.2.0", + "{7bdbaa73-82c4-4c4d-8dde-dde15542a932}:0.0.0.2", + "{8c26d5ff-57be-4aa1-be8e-b190294d0d06}:0.0.0.2", + "unfluencer@example.com:1.0", + "{5dc57577-0e4e-4b97-9d98-6685480f016f}:1.0", + "{b592eaf5-ed73-49d8-a8ac-69f6a2e677a5}:1.4.0" + ] + }, + "schema": 1759127797136, + "key_format": "{guid}:{version}", + "stash_time": 1759149305940, + "id": "c36bb57b-0f08-4da3-bbfd-4fa54a2f9bb3", + "last_modified": 1759149390214 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{5ee4f39c-477d-4c48-9ecc-29a5e782606a}:12.8.1", + "{e9074d69-f9b1-4888-befc-39fc9eff7695}:12.8.1", + "{eaf9d22d-8e06-4847-8cbf-c16631d3fc94}:12.8.1", + "{8c821c2f-8feb-468a-812f-71d31e4d6f9f}:12.8.1", + "{d6558581-1810-4b6d-bc06-a89c8f9f675e}:5.0", + "@switcheroo-custom:0.3.1", + "@switcheroo-custom:0.3.2", + "{28d9123d-2097-4010-8db9-43b95e8b78ab}:6.1", + "addontest6827@testexample.com:0.1.0" + ] + }, + "schema": 1759112150474, + "key_format": "{guid}:{version}", + "stash_time": 1759127705885, + "id": "57b67ffd-5263-4f1c-9449-5949308b5fc5", + "last_modified": 1759127796927 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "addontest6828@testexample.com:0.1.0", + "{62c34077-d7a5-4200-b9bc-6f11543dd1e4}:2.0", + "focus-new-tab@example.com:0.1", + "focus-new-tab@example.com:1.0", + "{bc23ae4e-ead5-4759-8bca-90f4dcc148f2}:1.0", + "{368971c3-1de8-4437-80c4-7185dd5e6b51}:1.9" + ] + }, + "schema": 1759084587486, + "key_format": "{guid}:{version}", + "stash_time": 1759106105620, + "id": "03350d4e-bb2e-4ce9-af8d-8be87eb790b2", + "last_modified": 1759106192673 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:1.0", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.0", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.4", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.5", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.6", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.7", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.8", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:2.9", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:3.0", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:3.1", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:3.2", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:3.3", + "{cab02d7c-0337-49a3-aff4-d40603b307dc}:3.4", + "{ff25a7d5-afa2-4e86-97e1-87e4609f06f9}:1.0", + "support@lxresearch.co:0.1.5", + "support@lxresearch.co:0.1.6", + "support@lxresearch.co:0.1.7", + "{7d140467-30c1-4784-a436-acb7a105949d}:1.1", + "{7d140467-30c1-4784-a436-acb7a105949d}:1.0", + "enhancer@goldenfox.com:17.1.3", + "Android@bravenhancer.com:17.1.4", + "Android@bravenhancer.com:17.1.1", + "enhancer@goldenfox.com:17.1.4", + "download-video-without-sound-addon@example.com:2025.9.15.2", + "addontest6828@testexample.com:0.1", + "Android@bravenhancer.com:17.1.6", + "enhancer@goldenfox.com:17.1.6", + "@shhhtee:1.0" + ] + }, + "schema": 1759062980118, + "key_format": "{guid}:{version}", + "stash_time": 1759084505672, + "id": "361f9a6d-677b-4b65-aec4-ce88526c4398", + "last_modified": 1759084587233 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{d4e05d2a-7034-45a8-b1d5-985bf0e25d15}:1.0", + "{ac224775-f3ad-42ea-8065-7fb3c9668b99}:1.0", + "{ee4daa66-ec24-4d48-b5e8-b88995a8cdfd}:1.0", + "{ee4daa66-ec24-4d48-b5e8-b88995a8cdfd}:2.0", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:1.1.13", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.1", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.3.7", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.4.4", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.5.2", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.5.6", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.5.8", + "{3559f04b-c0f6-45f4-ba31-c6dcfbc7e663}:2.6.2", + "f0710c0b-f8bd-4611-883b-7cdf7c09b167@walkme.com:4.0.275.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:4.7.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.54.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:4.1.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:4.0.7", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.94.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.93.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.91.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.77.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.72.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.69.4", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.69.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.69.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.68.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.65.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.65.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.64.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.64.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.62.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.54.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.54.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.51.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.50.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.48.4", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.48.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.48.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.47.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.46.4", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.45.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.43.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.42.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.42.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.40.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.39.8", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.39.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.39.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.38.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.37.4", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.37.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.37.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.36.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.36.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.35.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.33.6", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.33.5", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.33.3", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.33.2", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.32.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.31.0", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.30.1", + "{a0c6ccfd-26a3-4df4-9729-aa036070ad29}:3.30.0", + "yandex-tracker@ida.com:1.1", + "fc2cookieswitcher@example.com:1.0", + "{c8f1137f-7c71-4536-adef-78a2d4ddd832}:1.0", + "{c8f1137f-7c71-4536-adef-78a2d4ddd832}:2.0" + ] + }, + "schema": 1759041384372, + "key_format": "{guid}:{version}", + "stash_time": 1759062904722, + "id": "39ab1da4-4d53-4f06-982f-ec16410cbd07", + "last_modified": 1759062980002 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{492219a3-2146-498b-9cd0-f5e408046346}:3.5.1", + "{344758f1-4f2c-4cd5-95f5-22ed7e17668e}:1.0", + "hoveractions2@glowing.red:1.0", + "{2c8221b4-305b-4cd9-867e-c39d9300d864}:1.0", + "{2c8221b4-305b-4cd9-867e-c39d9300d864}:2.0", + "{7d37f4c3-c6cf-4b18-a748-ed4a6e7eb281}:1.47.11", + "{6127ac6b-5c21-455e-a06e-cdb2656ce7ea}:3.0", + "{6127ac6b-5c21-455e-a06e-cdb2656ce7ea}:4.0", + "{28d9b223-9dfd-4a0d-9cd0-2b856eb8b9a3}:1.0", + "{28d9b223-9dfd-4a0d-9cd0-2b856eb8b9a3}:2.0", + "{8d41eb56-1df6-483e-82b1-358d0dba62ea}:0.1" + ] + }, + "schema": 1759025738743, + "key_format": "{guid}:{version}", + "stash_time": 1759041305209, + "id": "2d3cf50e-9ca1-447e-83ff-3e56bf743f59", + "last_modified": 1759041384048 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "kinozalhelper@elektrikis.id.lv:2.22.0", + "kinozalhelper@elektrikis.id.lv:2.22.1" + ] + }, + "schema": 1758998201403, + "key_format": "{guid}:{version}", + "stash_time": 1759019705576, + "id": "30ceb608-d89d-462c-802d-9e03b755907b", + "last_modified": 1759019785530 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "media@controllerV4.com:2.0", + "media@controllerV3.com:2.0", + "media@controllerV2.com:2.0", + "media@controllerV1.com:2.0", + "betterassysttjce@example.com:1.0", + "kokmjhkibndhffefnibodijnnemngkpb@chrome-store-foxified-3329370658:1.0.4.16", + "oknpjjbmpnndlpmnhmekjpocelpnlfdi@chrome-store-foxified-3329370658:3.0.15", + "fliplight@abdulohab.com:1.0", + "{f12de8c1-103a-4d5f-abfd-74708f2d66e3}:4.0", + "{de705c1a-2b0e-45b1-99f4-5f2c5e3264b6}:1.0", + "{3b58becc-746e-4c44-b196-2962de63fceb}:1.0" + ] + }, + "schema": 1758976581749, + "key_format": "{guid}:{version}", + "stash_time": 1758998107114, + "id": "2a499a73-8ec6-4ffe-9a27-e5b2df8ee5d0", + "last_modified": 1758998201144 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "kinozalhelper@elektrikis.id.lv:2.20.6", + "kinozalhelper@elektrikis.id.lv:2.20.4", + "kinozalhelper@elektrikis.id.lv:2.21.0" + ] + }, + "schema": 1758954980078, + "key_format": "{guid}:{version}", + "stash_time": 1758976504863, + "id": "8aa98b9a-2fb6-4fd8-bbe8-157258e868ad", + "last_modified": 1758976581638 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "kinozalhelper@elektrikis.id.lv:2.20.3", + "Android@bravenhancer.com:17.0.5", + "Android@bravenhancer.com:17.0.6", + "enhancer@goldenfox.com:17.0.0", + "Android@bravenhancer.com:17.1.0", + "{91ca123c-3416-40fd-8011-3d8faca72d27}:0.0.1", + "enhancer@goldenfox.com:17.1.0", + "enhancer@goldenfox.com:17.1.2", + "enhancer@goldenfox.com:17.1.1", + "new-tab@oodlexaps:1.0" + ] + }, + "schema": 1758939341073, + "key_format": "{guid}:{version}", + "stash_time": 1758954904671, + "id": "614a9e2c-7c36-4d54-8718-77647f2cfd88", + "last_modified": 1758954979876 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "csweet@nav.com:2.4", + "csweet@nav.com:2.5", + "csweet@nav.com:2.6", + "csweet@nav.com:2.7", + "csweet@nav.com:2.8", + "{3ed179fa-1524-40ff-a810-f8f956219289}:0.1.0", + "{3ed179fa-1524-40ff-a810-f8f956219289}:0.2.0", + "kinozalhelper@elektrikis.id.lv:2.20.1", + "kinozalhelper@elektrikis.id.lv:2.20.0", + "kinozalhelper@elektrikis.id.lv:2.17.0", + "kinozalhelper@elektrikis.id.lv:2.14.0", + "MolikoDeveloper@BetterFS:1.0", + "{222ce613-0bc0-4a22-b371-96f803b71e38}:1.0.1", + "{222ce613-0bc0-4a22-b371-96f803b71e38}:1.0.2", + "rcecchini.ds@gmail.com:1.0.4", + "kinozalhelper@elektrikis.id.lv:2.20.2", + "{7f1dca96-13d4-409b-a534-f62aba8f6134}:0.3.8", + "tabkraken@furby.industries:0.2", + "tabkraken@furby.industries:0.2.1", + "tabkraken@furby.industries:0.2.3", + "tabkraken@furby.industries:0.2.4", + "tabkraken@furby.industries:0.2.5", + "tabkraken@furby.industries:0.3.0", + "{60a350c4-8171-470d-bd02-a4bef8f80f65}:1.3", + "{60a350c4-8171-470d-bd02-a4bef8f80f65}:1.4" + ] + }, + "schema": 1758911786866, + "key_format": "{guid}:{version}", + "stash_time": 1758933305882, + "id": "caf41d21-6fd1-4d85-8d6a-97f5a8e127b4", + "last_modified": 1758933388549 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{e7601db9-be46-4368-b4be-c82f2f78fa76}:2.0", + "{0afd8278-1e99-4c54-87b4-8d082020a422}:1.0", + "{2c22fdbc-e4b9-4b5c-a1d2-63f1d2c9a5b6}:4.0.0", + "asura-popup-remover@addon:2.0", + "asura-popup-remover@addon:2.1", + "{19d3ff86-070b-4267-8ec8-6945733bda91}:1.0", + "{1e1f10d1-785d-4a38-b326-d8878554a7fc}:1.0", + "Endpoint_Developer@forcepoint.com:3.2.11.1008", + "Endpoint_Developer@forcepoint.com:3.2.11.1007", + "{e104ef8b-223f-4852-86f6-a255d2c475bb}:1.1", + "Endpoint_Developer@forcepoint.com:3.2.11.1006", + "Endpoint_Developer@forcepoint.com:3.2.11.1005", + "Endpoint_Developer@forcepoint.com:3.2.11.1004", + "Endpoint_Developer@forcepoint.com:3.2.11.1002", + "Endpoint_Developer@forcepoint.com:3.2.11.1001", + "Endpoint_Developer@forcepoint.com:3.2.11.1003", + "Endpoint_Developer@forcepoint.com:3.2.2.1", + "Endpoint_Developer@forcepoint.com:3.2.2.2", + "Endpoint_Developer@forcepoint.com:3.2.2.3", + "Endpoint_Developer@forcepoint.com:3.2.2.4", + "Endpoint_Developer@forcepoint.com:3.2.2.5", + "Endpoint_Developer@forcepoint.com:3.2.2.6", + "Endpoint_Developer@forcepoint.com:3.2.2.7", + "Endpoint_Developer@forcepoint.com:3.2.2.8", + "Endpoint_Developer@forcepoint.com:3.2.2.9", + "Endpoint_Developer@forcepoint.com:3.2.2.10", + "Endpoint_Developer@forcepoint.com:3.2.2", + "zenhub-enterprise-4-3-1@jpl.nasa.gov:4.3.1", + "zenhub-fn-enterprise@jpl.nasa.gov:4.3.1", + "themer@example.com:1.0", + "zenhub-enterprise@jpl.nasa.gov:2.22.2", + "zenhub-enterprise@jpl.nasa.gov:2.24.3", + "zenhub-enterprise@jpl.nasa.gov:2.28.2", + "zenhub-enterprise@jpl.nasa.gov:2.30.2", + "zenhub-enterprise@jpl.nasa.gov:2.32.2", + "zenhub-enterprise@jpl.nasa.gov:2.34.2", + "zenhub-enterprise@jpl.nasa.gov:2.36.2", + "zenhub-enterprise@jpl.nasa.gov:2.39.2", + "zenhub-enterprise@jpl.nasa.gov:2.42.2", + "zenhub-enterprise@jpl.nasa.gov:2.44.2", + "zenhub-enterprise@jpl.nasa.gov:2.44.3", + "zenhub-enterprise@jpl.nasa.gov:2.44.4", + "zenhub-enterprise@jpl.nasa.gov:3.2.1", + "zenhub-enterprise@jpl.nasa.gov:3.3.3", + "zenhub-enterprise@jpl.nasa.gov:3.4.1", + "zenhub-enterprise@jpl.nasa.gov:3.5.3", + "boadgeojelhgndaghljhdicfkmllpafd@chrome-store-foxified-1903381314:15.1120.0.4", + "cgakmbkklpmijhckpolanjijghgfpeoa@chrome-store-foxified-1903381314:0.0.8", + "pjkljhegncpnkpknbcohdijeoejaedia@chrome-store-foxified-1903381314:8.1", + "{de8847b6-5838-420f-99c5-57b5f88f37a6}:1.0", + "cleanLiblink@ententapl:1.0" + ] + }, + "schema": 1758890181226, + "key_format": "{guid}:{version}", + "stash_time": 1758911704619, + "id": "e8c28765-a618-4c4e-b491-e6f9d4d505e7", + "last_modified": 1758911786582 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "hyg@c7c5b3c9-18af-467f-8651-2568ece91e3h:0.1", + "{0194bb95-0a0a-72f5-9eca-3b0bd4a85dde}:0.0.3", + "shift-code-manager@example.com:2.0", + "{92cc2d7d-b049-477c-8f0d-fb9283d8f1a9}:1.0", + "{92cc2d7d-b049-477c-8f0d-fb9283d8f1a9}:1.1", + "{fc9171fd-fede-4eb9-9ef8-4706edd2da5d}:1.0", + "kinozalhelper@elektrikis.id.lv:2.16.1", + "kinozalhelper@elektrikis.id.lv:2.16.0", + "sv@idaproject.com:1.2.1", + "{39d72cfd-fa8b-44d7-9fa0-1d0f02cfd5f3}:1.2", + "magnolia@12.34:4.2.1.1", + "{58dcac1a-0cbb-4981-85d2-750355b6aa31}:1.0" + ] + }, + "schema": 1758868590012, + "key_format": "{guid}:{version}", + "stash_time": 1758890105040, + "id": "448a7020-6652-4fd4-a24a-641130c5e9ac", + "last_modified": 1758890181104 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "hyg@c7c5b3c9-18af-467f-8651-2568ece91e3g:0.1", + "{206ba0cc-2c7e-4e2f-a2c8-89d6442ec4d5}:1.0", + "{3b558855-3646-47b5-893c-c1a2e94e9d82}:1.0", + "{cde0baa7-dc52-4c21-a76f-1b71d4c16f60}:1.6", + "Dans@Zoomer:1.0", + "{6f364c4b-e2e0-4d88-b4bf-205352ddfdc2}:1.0" + ] + }, + "schema": 1758852949282, + "key_format": "{guid}:{version}", + "stash_time": 1758868505827, + "id": "203cf17c-f1e2-4531-bdd6-31851b231c24", + "last_modified": 1758868589891 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{a5995b0c-c443-4f20-b30e-fa0d640bee8d}:1.1", + "{73334fe1-a575-4d0c-aebc-f6818bffb265}:1.0", + "Android@bravenhancer.com:16.3.2", + "Android@bravenhancer.com:17.0.0", + "Android@bravenhancer.com:17.0.1", + "enhancer@goldenfox.com:16.3.2", + "{9beececf-8193-4dd8-a528-9f71c50bea9a}:1.0", + "Android@bravenhancer.com:17.0.2", + "Android@bravenhancer.com:17.0.3", + "{7d87071a-5897-44bf-b8b1-b8616f135bdd}:19.8", + "{86286984-0eb4-419b-af82-6b9a0d861922}:19.8" + ] + }, + "schema": 1758825378655, + "key_format": "{guid}:{version}", + "stash_time": 1758846906036, + "id": "5b97fbb1-be45-4995-80e6-b9e6c0db8cf7", + "last_modified": 1758846993331 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "b248bcf057f911f0a8d423a7089643d3@walkme.com:4.0.263.0", + "b248bcf057f911f0a8d423a7089643d3@walkme.com:4.0.275.0", + "{e2a8d861-623e-4b44-9b98-319ed49ca59d}:2.6.5.1", + "{aa99c369-56ed-4ef8-b3ad-287232f9c32d}:4.0.0", + "autoretryai@piyu:1.0", + "ai-bot-autoretry-piyu-12345@example.com:1.0.0", + "{19fb4fa5-e62a-4749-8c4a-9db58fdc9117}:0.0.3", + "{b10799aa-b416-44ce-8123-fac91d572ac2}:1.0", + "warmy-email-checker@warmy.io:1.1.25", + "{2953e662-6304-4ba6-b2b8-3cae0848cecb}:1.0", + "{573d28d3-4cb0-4660-984b-9fd2e1ecd201}:1.2", + "{643f1fe2-28ee-4ade-b8f7-c691912b1714}:1.0", + "{643f1fe2-28ee-4ade-b8f7-c691912b1714}:2.0", + "robojext_adobe@example.com:2.1.1", + "reuse-tab@YangXilai.com:2.0" + ] + }, + "schema": 1758803780070, + "key_format": "{guid}:{version}", + "stash_time": 1758825304776, + "id": "35232421-3d8a-49c7-bc3e-2382532306eb", + "last_modified": 1758825378444 + }, + { + "stash": { + "blocked": [ + "{d47500b3-6ad6-40f9-9537-87f77fac2f6b}:1.2", + "{b5571d6c-fd1a-5901-8976-6c5582ecc83c}:1.1.10", + "{b5571d6c-fd1a-5901-8976-6c5582ecc83c}:1.1.12", + "{8d83291b-ee1f-4570-b747-ea1e17161e0a}:67.0.0", + "{8d83291b-ee1f-4570-b747-ea1e17161e0a}:67.1.0", + "{8d83291b-ee1f-4570-b747-ea1e17161e0a}:67.2.0", + "{8d83291b-ee1f-4570-b747-ea1e17161e0a}:70.0.1" + ], + "unblocked": [], + "softblocked": [ + "{460d3648-cc78-4acf-815d-1405ca0528b3}:1.0", + "{460d3648-cc78-4acf-815d-1405ca0528b3}:1.1", + "{460d3648-cc78-4acf-815d-1405ca0528b3}:1.2", + "{9c9e6c33-d513-4ab2-975e-e30bde50965b}:1.0", + "firefox@ssnt-1.92:3.3.7", + "firefox@ssnt-1.91:3.3.7", + "@sigma-toolkit.dictu-sigma:1.0", + "{fd408cc2-b2bd-4cc4-b4d9-e7dc34092298}:3.0", + "{f58ec106-e675-4a68-af4a-12b5ceb9ce0c}:4.6.1122255", + "bratishkin-smotrit@bitor.in:1.1.0", + "firefox@ssnt-1.95:3.4.0", + "linkedin@bases.data-design.fr:1.0", + "linkedin@bases.data-design.fr:1.0.1", + "linkedin@bases.data-design.fr:1.0.2", + "linkedin@bases.data-design.fr:1.0.3", + "linkedin@bases.data-design.fr:1.0.4", + "linkedin@bases.data-design.fr:1.0.5", + "linkedin@bases.data-design.fr:1.0.6", + "linkedin@bases.data-design.fr:1.0.7", + "linkedin@bases.data-design.fr:1.0.8", + "linkedin@bases.data-design.fr:1.0.9", + "linkedin@bases.data-design.fr:1.1.0", + "linkedin@bases.data-design.fr:1.1.1", + "linkedin@bases.data-design.fr:1.1.2", + "linkedin@bases.data-design.fr:1.1.3", + "linkedin@bases.data-design.fr:1.1.4", + "linkedin@bases.data-design.fr:1.1.5", + "linkedin@bases.data-design.fr:1.1.6", + "kinozalhelper@elektrikis.id.lv:2.15.0" + ] + }, + "schema": 1758782180526, + "key_format": "{guid}:{version}", + "stash_time": 1758803704980, + "id": "1432ad52-8536-4b42-a5eb-c4c17a746da7", + "last_modified": 1758803779953 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "philosophy-quotes@yourdomain.example:1.0.0", + "caitools-zekozusedit@caitools.local:2.10.6" + ] + }, + "schema": 1758766551973, + "key_format": "{guid}:{version}", + "stash_time": 1758782105429, + "id": "75b3a3dc-4dad-45f4-a3d7-c11f06a3620e", + "last_modified": 1758782180286 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "firefox@ssnt-1.7:3.3.5", + "firefox@ssnt-1.8:3.3.6", + "firefox@ssnt-1.9:3.3.7", + "firefox@ssnt-1.90:3.3.7", + "{b2bb0af4-b38d-4bec-9649-e08f4ef82b59}:1.0", + "{b2bb0af4-b38d-4bec-9649-e08f4ef82b59}:1.0.2", + "gjknjjomckknofjidppipffbpoekiipm@chrome-store-foxified-1858938331:4.1.2" + ] + }, + "schema": 1758738978486, + "key_format": "{guid}:{version}", + "stash_time": 1758760505319, + "id": "27d3a121-fce6-488d-bfb5-4758ba72acc4", + "last_modified": 1758760577987 + }, + { + "stash": { + "blocked": [], + "unblocked": [ + "dfkh-patroller@defikingdoms.com:2.7.0" + ], + "softblocked": [ + "@zettelgarden:1.0.0", + "txt-file-merger@example.com:1.0.0", + "yrl-addon@kamada.local:2.0", + "cookie-switcher@example.com:1.0", + "cookie-switcher@example.com:1.0.1", + "cookie-switcher@example.com:1.0.3", + "cookie-switcher@example.com:1.0.2", + "cookie-switcher@example.com:1.0.4", + "{6d836035-6d49-4d27-8089-09d915654b55}:1.0", + "{6d836035-6d49-4d27-8089-09d915654b55}:2.0", + "auto-mute@kotahv.com:1.0.0", + "i.pro.linux@yandex.ru:1.0" + ] + }, + "schema": 1758717384946, + "key_format": "{guid}:{version}", + "stash_time": 1758738904767, + "id": "ff4205fa-a13f-4041-a00d-653a7c43dbe2", + "last_modified": 1758738978243 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{f58ec106-e675-4a68-af4a-12b5ceb9ce0c}:4.6.110011", + "{f58ec106-e675-4a68-af4a-12b5ceb9ce0c}:4.6.110012", + "{ebac36bb-df43-4828-bfeb-293ec8768caa}:1.0", + "{851b18d1-b62e-4b0d-bf3c-7d55cc3bb301}:1.0", + "{f58ec106-e675-4a68-af4a-12b5ceb9ce0c}:4.6.112225", + "{5b37afc7-d063-4388-b636-98dff7da1b14}:1.0" + ] + }, + "schema": 1758695790651, + "key_format": "{guid}:{version}", + "stash_time": 1758717305696, + "id": "5f42d4a9-5508-4b78-a082-468502b52ced", + "last_modified": 1758717384711 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "request-logger@example.local:1.3.0", + "{0961a93e-163b-4c86-9d14-cfb2cfc5c79a}:1.0", + "rkrb3112@gmail.com:1.0", + "rkrb3112@gmail.com:1.1", + "huobi-market@jsonwu5.github.io:1.6.2" + ] + }, + "schema": 1758680149576, + "key_format": "{guid}:{version}", + "stash_time": 1758695705971, + "id": "b7e2db82-dc24-45fa-8228-48c73d68dcaa", + "last_modified": 1758695790445 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "sinamru.gao.kerena@gmail.com:3.5", + "sinamru.gao.kerena@gmail.com:2.2", + "sinamru.gao.kerena@gmail.com:2.3", + "sinamru.gao.kerena@gmail.com:2.4", + "sinamru.gao.kerena@gmail.com:2.5", + "sinamru.gao.kerena@gmail.com:2.6", + "sinamru.gao.kerena@gmail.com:2.7", + "sinamru.gao.kerena@gmail.com:2.8", + "sinamru.gao.kerena@gmail.com:2.9", + "sinamru.gao.kerena@gmail.com:3.0", + "sinamru.gao.kerena@gmail.com:3.1", + "sinamru.gao.kerena@gmail.com:3.2", + "sinamru.gao.kerena@gmail.com:3.3", + "sinamru.gao.kerena@gmail.com:3.4", + "sinamru.gaokerena@gmail.com:1.0", + "sinamru.gaokerena@gmail.com:1.1" + ] + }, + "schema": 1758652589929, + "key_format": "{guid}:{version}", + "stash_time": 1758674105807, + "id": "e0150df0-875b-47f2-8e8e-b3432c463e4b", + "last_modified": 1758674183553 + }, + { + "stash": { + "blocked": [ + "{bfd1ad6c-df46-5751-8536-55826cecc83c}:2.0.2", + "{bfd1ad6c-df46-5751-8536-55826cecc83c}:2.0.3", + "{c9241784-9c44-4b45-a437-b065ba594462}:2.2.1", + "{98fdad7c-4676-ae51-8d36-826cecc8553c}:2.0.1" + ], + "unblocked": [], + "softblocked": [ + "@extension-for-gmail-basic-html-view:2.0", + "@extension-for-gmail-basic-html-view:2.1resigned1", + "alienor-webhost-extension@alienor.net:1.0.9", + "alienor-webhost-extension@alienor.net:1.0.8", + "{4db45975-b13f-4fa3-b45e-83bafa97c362}:1.0", + "{4db45975-b13f-4fa3-b45e-83bafa97c362}:2.0", + "{789ca8da-77b6-41b4-a600-0f9d180b53c8}:2.0", + "{789ca8da-77b6-41b4-a600-0f9d180b53c8}:3.0", + "{789ca8da-77b6-41b4-a600-0f9d180b53c8}:5.0", + "sinamru.gao.kerena@gmail.com:1.0", + "sinamru.gao.kerena@gmail.com:1.1", + "sinamru.gao.kerena@gmail.com:1.5", + "sinamru.gao.kerena@gmail.com:1.7", + "sinamru.gao.kerena@gmail.com:1.9", + "{789ca8da-77b6-41b4-a600-0f9d180b53c8}:6.0", + "{a535a5ee-fb50-46a1-b8dc-48f958e47ded}:0.0.1", + "{2c825791-c881-468d-9164-904038dc09df}:1.0", + "{5c3597ad-caa7-4044-a5ee-524d8b2e1e6f}:1.0", + "{5c3597ad-caa7-4044-a5ee-524d8b2e1e6f}:2.0", + "sinamru.gao.kerena@gmail.com:2.0", + "sinamru.gao.kerena@gmail.com:2.1", + "{60642337-cea5-48cc-a867-ec8691752150}:1.3.2", + "{60642337-cea5-48cc-a867-ec8691752150}:1.2", + "{60642337-cea5-48cc-a867-ec8691752150}:1.3.3", + "{60642337-cea5-48cc-a867-ec8691752150}:1.3.1", + "chatgpt-sync@example.local:1.0.1" + ] + }, + "schema": 1758630982945, + "key_format": "{guid}:{version}", + "stash_time": 1758652505704, + "id": "063ddb02-e3ec-4313-bace-7ab2d77e2867", + "last_modified": 1758652589697 + }, + { + "stash": { + "blocked": [ + "{6bbf9679-6ce3-4a46-808d-b4738ea677dd}:3.6.6", + "{df83d1f4-89b7-4481-afb6-c94f1507e273}:3.6.1", + "{df83d1f4-89b7-4481-afb6-c94f1507e273}:3.6.2", + "{df83d1f4-89b7-4481-afb6-c94f1507e273}:3.6.3", + "{df83d1f4-89b7-4481-afb6-c94f1507e273}:3.6.4", + "{df83d1f4-89b7-4481-afb6-c94f1507e273}:3.6.7", + "{df83d1f4-89b7-4481-afb6-c94f1507e273}:3.7.0", + "{88e8f06d-9169-41cb-b29a-7b10da193943}:1.5.1", + "{88e8f06d-9169-41cb-b29a-7b10da193943}:1.5.5", + "{88e8f06d-9169-41cb-b29a-7b10da193943}:1.5.6", + "{88e8f06d-9169-41cb-b29a-7b10da193943}:1.5.7", + "{7618de5a-6c71-4ca5-a103-9f725e48d5af}:2.3", + "{7618de5a-6c71-4ca5-a103-9f725e48d5af}:3.3", + "{7618de5a-6c71-4ca5-a103-9f725e48d5af}:4.4", + "{7618de5a-6c71-4ca5-a103-9f725e48d5af}:5.5", + "{d67c96d9-9ec9-4301-8220-7639125e87e5}:2.4.2" + ], + "unblocked": [], + "softblocked": [ + "{407cd373-3539-4993-9a1b-c419093d2b42}:0.0.1", + "a.roth@c10.de:1.1", + "{c60b6805-91d8-488d-b436-0898b69e3e7e}:1.6.1", + "{df7ed13b-81bc-4fef-b537-d03f534bd3a2}:2.6.5", + "{b30133c7-ffcd-4f05-b341-086a7c5bedd0}:1.1", + "{2b9366bc-1198-4c48-94e5-702dca706a7c}:1.0", + "{1efb612d-459d-4cd3-a6f2-57a71532da05}:1.10", + "{1efb612d-459d-4cd3-a6f2-57a71532da05}:1.11", + "{1efb612d-459d-4cd3-a6f2-57a71532da05}:1.12", + "{1efb612d-459d-4cd3-a6f2-57a71532da05}:1.13", + "{1efb612d-459d-4cd3-a6f2-57a71532da05}:1.14", + "sn-monitor-firefox@example.com:2.3.5", + "{7275e387-2f4f-40ca-bd6e-9d2402f30c03}:1.0", + "drag_to_privew@uxer:0.0.58" + ] + }, + "schema": 1758609386542, + "key_format": "{guid}:{version}", + "stash_time": 1758630905290, + "id": "2b668de8-79db-4e73-94f3-083ada9b3c3f", + "last_modified": 1758630982705 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "darrat@gmail.com:1.0.0", + "darrat@gmail.com:2.0.0", + "dfkh-patroller@defikingdoms.com:2.7.0", + "open-tabs-rightmost@local:1.0.0", + "open-tabs-rightmost@local:1.1.0", + "hi@sp4ceMan.xyz:1.7.3", + "{4634f373-abed-4169-9b01-f06c0fb490d2}:0.3", + "{be4c1125-0cf7-47b8-85e2-d3eb3919adb2}:0.4", + "{41036b8e-5778-409f-9f3d-d38ed26da0f6}:1.1", + "{e089b22d-ce24-4b95-8f86-e218982ef23a}:1.1", + "{d400bf21-f1ad-4a94-bd15-a9b2b19e5e71}:1.0", + "{ef0571e9-949c-4718-9acc-110b8963b1f1}:1.0", + "{8979b8ad-9983-4a38-a19c-fac3fa753eb1}:1.0", + "gct-downloader@quadratech:1.1.7", + "future-date@example.com:1.0" + ] + }, + "schema": 1758593752123, + "key_format": "{guid}:{version}", + "stash_time": 1758609305452, + "id": "01ae8b66-c254-4f44-9eb7-f13a8443048a", + "last_modified": 1758609386281 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{c3bf8739-ef57-48c1-ba11-ab66beaa4d4a}:1.4", + "Android@bravenhancer.com:16.3.1", + "enhancer@goldenfox.com:16.3.1", + "jid1-lpXbkGi1kHPDGQ@jetpack:2.1.3", + "toolbar@militarydeals:4.0.0", + "toolbar@militarydeals:4.0.1", + "toolbar@militarydeals:4.0.2", + "toolbar@militarydeals:4.0.3", + "{23f2c25c-c1e2-4924-a80f-ae4e2c1f7858}:1.0.0", + "addon@securemypass:1.5.165", + "{fff8241a-b42d-41d4-865d-085422fbd97e}:1.2" + ] + }, + "schema": 1758566180476, + "key_format": "{guid}:{version}", + "stash_time": 1758587704549, + "id": "92b49a3c-6127-4466-80a4-81238b79a2d9", + "last_modified": 1758587777172 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "clicker7_2@gmail.com:1.0", + "clicker7_3@gmail.com:1.0", + "clicker8_1@gmail.com:1.0", + "clicker8_2@gmail.com:1.0", + "clicker8_3@gmail.com:1.0", + "{e0915777-d399-4ee5-ad5f-d43bf6b256c4}:0.3", + "{99c7ede2-909d-4f86-ac56-c43079e19c74}:1.0", + "{7b6f11b4-0139-46c5-bfb8-1b400dbedde6}:3.0", + "ScratchCookiesSync@allenfoxtc:1.1.0", + "{70e90020-e431-4e29-ba3e-df903812af29}:1.0", + "{89dacfe7-22fd-4274-b63b-0d6111b1e577}:6.0.1" + ] + }, + "schema": 1758544581883, + "key_format": "{guid}:{version}", + "stash_time": 1758566105020, + "id": "8128fa21-9e82-4d32-83fe-4698a3ae4be6", + "last_modified": 1758566180286 + }, + { + "stash": { + "blocked": [ + "{d8a3f6b0-1e2c-4a7f-9b5d-0c3e6a8f2b9d}:12.8.1", + "{b4f7e2a1-3c9d-4e6b-8f0a-5d2c7e9b1a4f}:12.8.1", + "{1ca0915a-8cbd-4c21-962d-8666a652b630}:12.8.1", + "{203caf2e-29b2-49bd-afb4-284751edbc08}:12.8.1", + "{1a841d0a-0ccf-4227-ba5a-56eb86628a54}:12.23.1", + "{21706127-5867-4939-ad58-a53e51eb5ba1}:12.8.1", + "{846d9d27-c9ac-4034-9916-58b38c73d5bf}:12.8.1" + ], + "unblocked": [], + "softblocked": [ + "{9a23a02b-c0c5-4839-8d94-e48d7d97a762}:1.0", + "addon-custom-scheme-opener@example.com:1.3", + "captcha-renamer@example.com:1.3", + "info@chilltools.it:3.7.1", + "{c2b81f06-3ef2-497a-a667-995ca5ca8e69}:3.5", + "clicker6_3@gmail.com:1.0", + "clicker6_3@gmail.com:12.8.4", + "clicker6_1@gmail.com:1.0", + "clicker6_1@gmail.com:12.8.4", + "clicker6_2@gmail.com:1.0", + "clicker6_2@gmail.com:12.8.4", + "clicker7_1@gmail.com:1.0" + ] + }, + "schema": 1758522980646, + "key_format": "{guid}:{version}", + "stash_time": 1758544504863, + "id": "594e5ff4-176a-4f50-bb88-fba96f83b79c", + "last_modified": 1758544581716 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{288b6a6b-5ed2-4573-9093-6c0f8088a534}:1.0", + "topdropbookmark@example.com:1.0.1", + "{d18f89b8-2517-4eaa-8f32-f06a7f45c836}:1.0", + "{a74a6bd0-69d1-4b30-adad-3f7b9c8ce505}:1.13.1", + "les-image-uploader@somik123:1.0", + "les-image-uploader@somik123:1.1", + "les-image-uploader@somik123:1.2", + "les-image-uploader@somik123:1.3", + "les-image-uploader@somik123:1.3.1", + "les-image-uploader@somik123:1.4", + "{d5ba7dfb-8019-4a99-bf87-5864588b5ae9}:1.1" + ] + }, + "schema": 1758507352437, + "key_format": "{guid}:{version}", + "stash_time": 1758522904653, + "id": "c02c77a3-f1c4-4a5a-91a6-67f4579e178a", + "last_modified": 1758522980438 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "jid1-lpXbkGi1kHPDGQ@jetpack:2.1.2", + "jid1-lpXbkGi1kHPDGQ@jetpack:2.1.1", + "{6680d0c7-bebe-4340-962c-d8ad7e004aba}:1.0", + "{1fc76f38-5c29-4cee-9539-5a0bd3403a82}:1.0", + "{4fc01058-abe7-4389-80a2-d5def5b9b832}:1.0", + "{78b85b7a-6f27-457d-88fa-47b4827a81a9}:1.0", + "{c87a49cf-7dc3-4f6b-88fe-6f3e397b6562}:1.0", + "{d3412a61-1a34-4385-941f-ff29fad8ed19}:1.0", + "{bd709849-e4eb-496c-9fb0-f14f79e13af2}:1.0", + "{b3078da1-606d-4a13-b9f5-9a8257147644}:1.0", + "{c37fb8a3-9a97-4156-ac94-8ec26b76e054}:1.0", + "{f397574f-af8f-4f46-91ed-78e7a4bac7d8}:1.0", + "{bffb153c-e031-43f0-93a1-75577a63d07a}:1.0", + "{c0f5fb78-c7dd-48ee-b224-139aeb215964}:1.0", + "{4319f599-7083-4677-854e-cc0336b49c3c}:1.0", + "{d4770d92-af77-4077-8dd4-a79d89d9c7a3}:1.0", + "{f844d850-4855-4475-a0be-2a865f2b560a}:1.0", + "{2a24105e-bfb6-48bf-a1fa-a3ef14a1880c}:1.0", + "native-messaging@suiryc:1.3.7", + "firefox.container-shortcuts2@strategery.io:1.6.1" + ] + }, + "schema": 1758479778296, + "key_format": "{guid}:{version}", + "stash_time": 1758501304760, + "id": "c63d4572-0b1d-4d12-9b47-e95d638054a6", + "last_modified": 1758501378998 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{8d464f72-4c18-4f19-8f07-64e80cfaf2b1}:1.0.38", + "truetokyo@local:1.0", + "{c020ac1e-0251-41ca-91cd-445154c47c7b}:1.0", + "truetokyo-2025@addon:1.0", + "{fbbaa869-22c1-452a-bc1d-6a019aac9de8}:1.0.0", + "{2265468b-3290-456e-9fef-9fe193d16696}:0.2.3", + "{c15c1606-ded9-494d-9bc9-4f0857831c5a}:1.0", + "{a70c3cb7-4b72-4958-bc26-fba74b2b5949}:1.0", + "{4e901b70-3b60-433b-8018-22859ce97dd7}:1.0", + "{220cd8f5-2ced-478c-9bf8-2b183a0156c8}:1.0", + "jid1-lpXbkGi1kHPDGQ@jetpack:2.1.0" + ] + }, + "schema": 1758458178049, + "key_format": "{guid}:{version}", + "stash_time": 1758479705001, + "id": "1ecbb155-980e-4734-b30a-c37acd2ab776", + "last_modified": 1758479778154 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{2265468b-3290-456e-9fef-9fe193d16696}:0.2.1", + "{2265468b-3290-456e-9fef-9fe193d16696}:0.2.2", + "{2265468b-3290-456e-9fef-9fe193d16696}:0.2.0", + "{1bb0ea52-b538-4dd8-84a1-26b2f06c72e0}:1.0.6", + "{7cce7287-c4ee-4c4a-b2cc-ca11f514cf18}:1.2", + "{7cce7287-c4ee-4c4a-b2cc-ca11f514cf18}:1.3", + "{d5aefdfe-c9be-41ca-a3ef-5a760871b5c3}:1.8", + "{d5aefdfe-c9be-41ca-a3ef-5a760871b5c3}:2.1", + "reviewer@dicoding.com:1.0.1", + "{d5aefdfe-c9be-41ca-a3ef-5a760871b5c3}:2.0", + "elite@dicoding.com:1.0.1", + "{febddde8-ff48-4b32-a411-2c5fb9108b49}:1.1" + ] + }, + "schema": 1758436581532, + "key_format": "{guid}:{version}", + "stash_time": 1758458104979, + "id": "b12d3bc8-8ca2-4d11-979e-6cd669f8196a", + "last_modified": 1758458177847 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "elnfhbjabfcepfnaeoehffgmifcfjlha@chrome-store-foxified-2749923039:2.6.4", + "{bb1a508e-4570-4f6a-9646-e363a56da76a}:0.0.1", + "whqd@local:1.0.0", + "{0ba16f31-d36c-4239-96c8-40d7f0f396b6}:1.2", + "{6708da53-a250-43b5-bdef-96eac588b52b}:1.0", + "{3fbd8276-aca1-4494-89b5-bc48974b0558}:1.0", + "kamra_local_links@locomotor.com.au:0.91", + "kamra_local_links@locomotor.com.au:0.9.1", + "new-tab-at-end@yourdomain.local:1.0.5", + "new-tab-at-end@yourdomain.local:1.0.6", + "{d0b3f170-99a6-4fba-aa8e-dd4338917c17}:1.0", + "{2265468b-3290-456e-9fef-9fe193d16696}:0.1.1", + "{2265468b-3290-456e-9fef-9fe193d16696}:0.1.3", + "bijeh24107@noidem.com:1.2.0", + "{8944be1b-338c-402d-a48c-089566e4b30f}:1.0" + ] + }, + "schema": 1758420945421, + "key_format": "{guid}:{version}", + "stash_time": 1758436504503, + "id": "2ee402e7-c2bd-45db-89f3-1e8548f2d250", + "last_modified": 1758436581208 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{299cdd2a-6a38-4fb6-884b-f1ebff917802}:1.0.1", + "{299cdd2a-6a38-4fb6-884b-f1ebff917802}:1.1.1", + "{299cdd2a-6a38-4fb6-884b-f1ebff917802}:1.3.1", + "movetabs@meow.co.uk:1.0", + "movetabs@meow.co.uk:1.1", + "movetabs@meow.co.uk:1.2", + "apba-dispatch-extension-v2@apba.att.com:1.0", + "{d8e72a05-8663-4960-9dae-7c7d896355cb}:1.0", + "new-tab-at-end@yourdomain.local:1.0.4" + ] + }, + "schema": 1758393381120, + "key_format": "{guid}:{version}", + "stash_time": 1758414904662, + "id": "a6e01846-e22b-42cb-b36b-3355fa91798c", + "last_modified": 1758414977870 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "table-time-formatter@example.com:1.0", + "table-time-formatter@example.com:1.1", + "e39forumblocker@20250920:1.0", + "{6b19aa9e-82aa-420d-b970-6d87c93f0960}:3.5.6", + "{5dbc0b80-70d6-4431-b0ff-f0b043af97b3}:1.0", + "{c2b81f06-3ef2-497a-a667-995ca5ca8e69}:2.5", + "{c2b81f06-3ef2-497a-a667-995ca5ca8e69}:3.0", + "multi-search@example.com:1.0", + "{03d66290-59ca-40e9-8741-7f2bf3799163}:1.0" + ] + }, + "schema": 1758371783161, + "key_format": "{guid}:{version}", + "stash_time": 1758393304735, + "id": "9e81b1b6-110f-4488-bf40-3711762ea7da", + "last_modified": 1758393380884 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "my-vissaemailextension@example.com:1.2", + "yt-autonext-mobile@example.com:1.0.1", + "{cec97e78-29fa-4b82-ad1a-dcc664a6035d}:8.115", + "{de957667-a792-4258-9ea5-5fdb80299b08}:1.0", + "{0cb18886-734d-45a6-9057-48503ec3b9b7}:1.0", + "{0cb18886-734d-45a6-9057-48503ec3b9b7}:4.0", + "{1d14615d-3b57-40ab-adfa-6b332c475155}:1.0", + "{1d14615d-3b57-40ab-adfa-6b332c475155}:1.1", + "{1d14615d-3b57-40ab-adfa-6b332c475155}:1.2", + "{a18d8097-a209-4e90-8e10-181357c22fb9}:1.0" + ] + }, + "schema": 1758334544753, + "key_format": "{guid}:{version}", + "stash_time": 1758371704806, + "id": "f54a9006-169c-4d06-9867-dd7be127430a", + "last_modified": 1758371782913 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{55f3c212-7f3a-4c96-b953-c4f5bc94bef2}:1.20.0.362", + "{ff9708d0-eec6-42c6-819b-5cd01e69e9ca}:2.0", + "{ff9708d0-eec6-42c6-819b-5cd01e69e9ca}:3.0", + "@csod-ai-security:1.1", + "ibis-enhancer-addon@example.com:1.0.0", + "{f3d7e1b2-9c4b-4e7a-8f2d-6b1c9e8a7f5c}:7.5.0", + "dungeon-extension@clauds-clauds:2.0.2" + ] + }, + "schema": 1758306980353, + "key_format": "{guid}:{version}", + "stash_time": 1758328504728, + "id": "2e52004b-f63c-4013-9bca-d2d1d485af18", + "last_modified": 1758328578993 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{dfe9f5e4-7959-4675-8810-145b1491a273}:0.3.1", + "{15efa947-940e-4dc3-9869-fb4d5abb8372}:0.3.2", + "{ee710631-e9d4-4bf8-ac6e-4695509a95f7}:0.1.9.3", + "{7db0347f-f272-4f89-93a6-26225764e470}:1.0", + "{2b11ab43-96e0-408a-9d69-cec83cbaafd5}:2.1.5", + "sage-runner@pejuang-sedekah.org:1.2.3", + "{a1b38134-38ce-4720-bd8b-c7605bea889c}:1.0", + "{b1491524-6142-4e6d-86c8-e2c95939476c}:4.6.11201", + "{2da4005b-9c72-46de-8858-9b11392f717b}:1.2", + "{2da4005b-9c72-46de-8858-9b11392f717b}:1.3", + "{2da4005b-9c72-46de-8858-9b11392f717b}:1.4" + ] + }, + "schema": 1758285382034, + "key_format": "{guid}:{version}", + "stash_time": 1758306905421, + "id": "2cf42264-a8e1-48a1-a45a-494fe13cdda1", + "last_modified": 1758306980217 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.41", + "{9c81a572-7b31-4439-bf97-c31715b422b3}:25.8.305", + "{fa3a38cb-1dfd-42f5-bca7-a1fcfb557a85}:2.1.3", + "{ada22dc2-d18e-49bb-9c75-2d0c8395d775}:0.1", + "{5e1d0e19-8534-488e-bc49-8507a9debea9}:0.11", + "{98d1c9cb-a010-42fe-9dbb-bccdfdbe9b40}:1.2.1", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.0", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.1", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.2", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.3", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.4", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.5", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.6", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.7", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.8", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.0.9", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.1.0", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.1.1", + "{9658bd42-717e-471f-a216-0686e48417ac}:1.1.2", + "addon@arttukuikka.fi:0.0.1" + ] + }, + "schema": 1758263789857, + "key_format": "{guid}:{version}", + "stash_time": 1758285304536, + "id": "ceb530a2-bd4d-414e-8211-a209425e8813", + "last_modified": 1758285381770 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{fcb5d585-2e01-4fda-86c5-87df05b2aaeb}:1.0", + "{8c782169-3e68-45f4-9008-e366a1de9c02}:1.0", + "switchyomega@ld.addons.mozilla.org:2.5.10", + "{65feab81-730e-45dd-8930-52a63de5dc18}:1.6.0", + "rx-plus@dicoding.com:1.0.0", + "rx-plus@dicoding.com:1.0.1", + "crunchyroll-pip-extension@firefox.addon:1.0.9", + "kamra-local-links@locomotor.com.au:0.4", + "kamra-local-links@locomotor.com.au:0.5", + "kamra-local-links@locomotor.com.au:0.6", + "kamra-local-links@locomotor.com.au:0.7", + "kamra-local-links@locomotor.com.au:0.8", + "kamra-local-links@locomotor.com.au:0.9", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.40", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.38", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.37", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.36", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.35", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.34", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.32", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.33", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.31", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.29", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.28", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.27", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.30", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.26", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.25", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.24", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.23", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.21", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.22", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.20", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.19", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.17", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.18", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.15", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.14", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.16", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.13", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.12", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.11", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.10", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.4", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.3", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.6", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.8", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.9", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.5", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.7", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.2", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.1", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.9", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.7", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.8", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.5.39", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.5", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.4", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.3", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.2", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.1", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.4.4", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.4.1", + "{ced3ccc4-e42b-4146-95a1-56629c9d71e4}:2.0.3.6" + ] + }, + "schema": 1758248151327, + "key_format": "{guid}:{version}", + "stash_time": 1758263705881, + "id": "903b563b-0f7c-4b75-80b3-1d66b30b23dc", + "last_modified": 1758263789670 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{c1935b05-696f-49c7-aed3-3e7e5f8da0ac}:1.0", + "{c1935b05-696f-49c7-aed3-3e7e5f8da0ac}:1.1", + "{69ae9574-674a-4c84-9e05-a018869fe12f}:1.0.5", + "isp-magnus-balance-checker-mv2@example.com:1.0.6", + "isp-magnus-balance-checker-mv2p@example.com:1.0.6", + "isp-magnus-balance-checker-manifest-v2@example.com:1.0.7", + "admission-export@bengysoft.com:1.1.0", + "admission-export@bengysoft.com:1.0.0" + ] + }, + "schema": 1758220582310, + "key_format": "{guid}:{version}", + "stash_time": 1758242106681, + "id": "dbfef1bb-bf29-45c8-b345-85891a14bf8c", + "last_modified": 1758242185303 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{6f8d7f0c-86e5-44fa-80b1-29cdc7690fc1}:1.0", + "{940e8f86-be1e-4646-858e-033bf4aa34e1}:1.4", + "{940e8f86-be1e-4646-858e-033bf4aa34e1}:1.0", + "martin.neumann@hmmh.de:1.1.0", + "{d471b906-c00f-483f-85d9-f413ad091cb3}:1.0", + "foxyproxy@sdev:7.5.1", + "darkreader@sarthur.dev:4.9.34.1", + "darkreader@sarthur.dev:4.9.34.2", + "jid1-BoFifL9Vbdl2zR@jetpack:2.0.17", + "sic@nhgn.mine.nu:0.1", + "sic@nhgn.mine.nu:0.2", + "sic@nhgn.mine.nu:0.3", + "sic@nhgn.mine.nu:0.5", + "sic@nhgn.mine.nu:0.6", + "sic@nhgn.mine.nu:0.9", + "sic@nhgn.mine.nu:0.10", + "sic@nhgn.mine.nu:0.11", + "twitch5@coolcmd:2025.5.28", + "carter-extension@extensions:1.0", + "sellercheck@sellercheck:1.62", + "sellercheck@sellercheck:1.63", + "startpage@willhord.dev:0.1.1", + "{e8368513-0600-48df-897d-98801b644f1b}:1.0" + ] + }, + "schema": 1758198989470, + "key_format": "{guid}:{version}", + "stash_time": 1758220504806, + "id": "bf916093-0c51-4d43-aded-fcd2b078db89", + "last_modified": 1758220582102 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{5234529d-7710-406d-a74c-6df9a00ee232}:1.3", + "{5234529d-7710-406d-a74c-6df9a00ee232}:1.2", + "{5234529d-7710-406d-a74c-6df9a00ee232}:1.1", + "{5234529d-7710-406d-a74c-6df9a00ee232}:1.0", + "{5234529d-7710-406d-a74c-6df9a00ee232}:1.5", + "{ba0fc46b-cbe8-4ece-91a7-e7ade06c040b}:1.0", + "raconcityextension@example.com:1.0", + "info@seedboxes.cc:2.0.1", + "info@seedboxes.cc:2.0.3", + "info@seedboxes.cc:2.0.4", + "info@seedboxes.cc:2.0.5resigned1", + "@Seedboxes:2.0.0", + "mindfullist@example.com:1.0", + "{357ff7a7-950e-44c8-9f94-2b204a3b36ba}:1.0", + "@flowtabmanager:1.2.8", + "@flowtabmanager:1.2.9", + "MedBandeau@docplus.fr:1.4", + "MedBandeau@docplus.fr:1.5.0" + ] + }, + "schema": 1758177395642, + "key_format": "{guid}:{version}", + "stash_time": 1758198906710, + "id": "ec49d24b-3a66-4d54-abbf-10ccc5ba78f3", + "last_modified": 1758198989219 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "gjieilkfnnjoihjjonajndjldjoagffm@chrome-store-foxified-1510941960:4.8.7.5", + "DesLoader@Mr-milky-way.github.io:0.1.2" + ] + }, + "schema": 1758161752155, + "key_format": "{guid}:{version}", + "stash_time": 1758177306243, + "id": "af258b3e-4006-4f0b-bbf3-f59f2873fa7d", + "last_modified": 1758177395456 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{ecc26a86-599d-4d6f-a8fe-6a56f9230013}:1.0", + "{e365c961-46d0-433a-a195-ca7a6c01c71c}:0.9.1", + "disable-search@dannycolin.com:0.1.0", + "amazon-coupon-price-checker@firefox-addon:3.2.6", + "{4b3ee4b1-5d26-43ad-8bac-2bce3a85edac}:1.0", + "dzplagiarism@example.com:1.0" + ] + }, + "schema": 1758134184068, + "key_format": "{guid}:{version}", + "stash_time": 1758155704922, + "id": "c7053016-32e5-4f1e-b619-3297f8614b2b", + "last_modified": 1758155783680 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "content-farm-terminator@danny0838.addons.mozilla.org:5.16.1", + "MYEXTENTIONIMGSWAPPERjfsdfwvc72dnadjf@anemailformat.com:2.0", + "MYEXTENTIONIMGSWAPPERjfsdfwvc72dnadjf@anemailformat.com:2.1", + "ys@edvpoint.com:1.2", + "adamsschoolblocker@example.com:1.0", + "adamsschoolblocker@example.com:4.0", + "{9f366b46-0af5-4f39-82fa-39b03e68fb28}:1.0", + "{a99f59f8-4890-4cb1-9255-03bd4b7f4c5b}:1.0.0.2", + "{8a73f1b5-2fbb-48ef-8b23-36c24e579a99}:1.0", + "magnolia@12.34:4.2.0.7", + "oioim@watchmarker.com:0.2", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.1.6", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.1.7", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.1.8", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.1.9", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.2.0", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.2.1", + "{51391489-e063-4d0d-9dd5-fb0cfb43bc37}:1.2.2", + "auto-edunext@example.com:1.2.2", + "{224b6849-0363-460c-95ae-11e154ab5331}:1.0", + "auto-edunext@example.com:1.2.1", + "auto-edunext@example.com:1.2.3" + ] + }, + "schema": 1758112579797, + "key_format": "{guid}:{version}", + "stash_time": 1758134105193, + "id": "284c3bcc-5ec1-48fa-8ce8-a1b505350350", + "last_modified": 1758134183914 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "plugin@onpay.co.id:1.1", + "8d@2d9b950d4cae182a5ad178552c96bc78:0.123", + "8d@2d9b950d4cae182a5ad178552c96bc78:0.1234", + "{c6ac3c5d-f4b7-481f-888d-991f186643b1}:1.2.1", + "{2afe7497-32e0-4efd-8209-b3eafbb77d4f}:1.0.4", + "0yz@0xc.eu:1.0.1", + "cgpbifpcllkenfmanapfgngodmpeadak@chrome-store-foxified-3949068473:0.61", + "{4a1856f6-9d79-4137-bdf4-9bf7648dfd7e}:1.0", + "{1930f730-3989-4139-80fd-7c9df9ad98d6}:0.1", + "{1930f730-3989-4139-80fd-7c9df9ad98d6}:0.1234", + "click-read-more@example.com:1.0" + ] + }, + "schema": 1758090988910, + "key_format": "{guid}:{version}", + "stash_time": 1758112505308, + "id": "8d87197e-4859-4238-b75a-fcd8e8c79baa", + "last_modified": 1758112579561 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{4f8d9f1c-7cac-40d1-a039-776e1f553c7f}:1.1", + "{4f8d9f1c-7cac-40d1-a039-776e1f553c7f}:1.0", + "{4f8d9f1c-7cac-40d1-a039-776e1f553c7f}:1.2", + "{39c8243d-be15-40fb-ab15-3b7d303aebdc}:1.1", + "{197102ad-79c6-4c81-84ff-0851149f03b2}:1.0", + "kinozalhelper@elektrikis.id.lv:2.13.0", + "addon@onpay.com:1.0", + "addon@onpay.com:1.1", + "{5e7f2304-fc7b-4871-b917-b7dcad775332}:1.0.3" + ] + }, + "schema": 1758075350938, + "key_format": "{guid}:{version}", + "stash_time": 1758090906148, + "id": "f2423fdc-de90-4537-a3a2-cc7c5cda7fe4", + "last_modified": 1758090988697 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{cde0baa7-dc52-4c21-a76f-1b71d4c16f60}:1.5", + "rryk.ua@gmail.com:0.1", + "rryk.ua@gmail.com:0.2", + "rryk.ua@gmail.com:0.5", + "rryk.ua@gmail.com:0.9", + "{5d7d04d7-44f9-4b5a-97dc-b8348ac4db8d}:1.0" + ] + }, + "schema": 1758047783566, + "key_format": "{guid}:{version}", + "stash_time": 1758069305915, + "id": "243b0c3d-80fa-41d5-90a5-c3cc3e9b34a2", + "last_modified": 1758069393600 + }, + { + "stash": { + "blocked": [], + "unblocked": [ + "{31415926-5358-4793-a384-626433832795}:1.2", + "{31415926-5358-4793-a384-626433832795}:1.3" + ], + "softblocked": [ + "{4590d8b8-3569-46e3-a571-cabfbaeab2c1}:3.1.1", + "{2c1337a0-1240-4804-b6e4-da73bf32762d}:1.4", + "{1d1cc55f-2fd7-42f6-926e-9475810a2856}:1.2", + "{35cf2e10-6745-47e8-b6d3-431d91bb55f3}:1.2", + "{1d6e50d7-5ca1-432e-9582-6fc4a569f8ce}:232.2", + "copy-ticket-info@example.com:1.0.0", + "copy-ticket-info@example.com:1.1.0", + "copy-ticket-info@example.com:1.2.0" + ] + }, + "schema": 1758026189117, + "key_format": "{guid}:{version}", + "stash_time": 1758047704948, + "id": "ac331b03-e916-476a-8282-48a0cd3b0337", + "last_modified": 1758047783393 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "copilot@ocu.web.tr:1.2.3", + "itmdb@ocu.web.tr:1.4", + "itmdb@ocu.web.tr:1.5", + "itmdb@ocu.web.tr:1.6", + "{befee5ea-fc0e-4cab-a6e6-33c03f69d183}:1.0.8", + "gemini-exporter@h.kuro.cat:3.0", + "gemini-exporter@h.kuro.cat:3.1", + "gemini-exporter@h.kuro.cat:3.2", + "1h.kuro.cat@gmail.com:2.0", + "1h.kuro.cat@gmail.com:2.1", + "{67343efd-f1f6-4b6e-8766-f15bf6c32779}:1.0", + "cringe-guard@abhishek-tripathi.com:0.0.6", + "{56355c72-20fb-4dd0-8d79-bf0a3b3432ff}:1.0", + "{32b93db5-8cec-4fdd-9d2a-8949febc7c9d}:1.0", + "{32b93db5-8cec-4fdd-9d2a-8949febc7c9d}:1.1.0", + "enhancer@goldenfox.com:16.2.5", + "enhancer@goldenfox.com:16.3.0", + "Android@bravenhancer.com:16.3.0", + "{d6558581-1810-4b6d-bc06-a89c8f9f675e}:4.0", + "{4590d8b8-3569-46e3-a571-cabfbaeab2c1}:3.1.0", + "{f129d4f2-5015-4f3b-941d-207c6a252b9c}:1.3.3", + "{f129d4f2-5015-4f3b-941d-207c6a252b9c}:1.3.2", + "{f129d4f2-5015-4f3b-941d-207c6a252b9c}:1.3.1" + ] + }, + "schema": 1758004590508, + "key_format": "{guid}:{version}", + "stash_time": 1758026106408, + "id": "0c35ba80-64d3-4418-8307-209040b60649", + "last_modified": 1758026188913 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{8dcaa609-ba69-4dc2-9d0d-1b61040dcf6c}:0.1.1", + "{5fd9e6e8-f3ce-4f3c-a558-faa4f4d7819b}:0.1.1", + "gn00678465@gmail.com:0.1.1", + "{05f4ff5e-bd0a-4f36-88b2-e565d908164e}:0.1.2", + "{57660c31-8ef6-47b2-8c0c-011e197b7d27}:0.1.1", + "gct-downloader@quadratech:1.0", + "extension@abc.com:2.0", + "extensionv3@abc.com:2.0" + ] + }, + "schema": 1757988950954, + "key_format": "{guid}:{version}", + "stash_time": 1758004506222, + "id": "77d64a5e-c534-44c9-8d2d-ec469d6c19c5", + "last_modified": 1758004590375 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{297c3c58-2934-47de-823d-66cb74c72a9f}:1.0", + "alureImageSizer@test.com:0.1", + "alureImageSizer@test.com:0.2", + "alureImageSizer@test.com:0.3", + "alureImageSizer@test.com:0.4", + "{40ad44ec-5c84-4582-93f4-2054a3c39bc3}:1.0.7", + "{bcd8432c-5afb-44f1-96c4-78b5c66f1be1}:1.0", + "{d378628d-7297-48ed-a2aa-0b78431909a1}:1.0" + ] + }, + "schema": 1757961380897, + "key_format": "{guid}:{version}", + "stash_time": 1757982904569, + "id": "7d80096c-a4a2-4f57-bd02-3482e3530d23", + "last_modified": 1757982981790 + }, + { + "stash": { + "blocked": [], + "unblocked": [ + "imagedownloaderpro@extensiohub.com:1.0.0" + ], + "softblocked": [ + "{90daeff0-fdcd-4bdf-94ce-40118c080dbb}:1.6.1.2595", + "{90daeff0-fdcd-4bdf-94ce-40118c080dbb}:1.6.1.2815", + "{b6cbf335-4eaf-4d7a-ba7b-3a7f504c7d00}:1.0", + "{b6cbf335-4eaf-4d7a-ba7b-3a7f504c7d00}:1.0.1", + "{ef82b8b1-660d-4054-841d-e5b72bca9d81}:1.0", + "my-extension@company.com:1.0", + "{b8464626-26ab-459f-a980-7bf30a109cde}:1.0", + "shared-storage-bridge@test:1.2" + ] + }, + "schema": 1757939790924, + "key_format": "{guid}:{version}", + "stash_time": 1757961305345, + "id": "e5fab5e6-811e-40b3-aa2a-2170cff9d0c7", + "last_modified": 1757961380670 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "manav.m-grohs@github.com:0.1.0", + "nmcffcaebiikdmiklndccpkagmllckkh@chrome-store-foxified--982831081:2.3.7", + "{0eca3d53-93cc-4a39-9428-dd8d4442c9ec}:1.0", + "{7c3690ef-671e-4c62-bc62-fd6654a8c81a}:1.0", + "{de1256af-c6ea-4d78-8742-fcfa2a80572e}:1.0", + "test@webext.com:0.0.0.1", + "test@webext.com:0.0.0.2", + "test@webext.com:0.0.0.3", + "test@webext.com:0.0.0.4", + "test@webext.com:0.0.0.5", + "test@webext.com:0.0.0.6", + "test@webext.com:0.0.0.7", + "test@webext.com:0.0.0.8", + "{b35a1315-0132-438c-b46d-49f212ae97d1}:0.0.1", + "coordinate@mkind.dev:1.8", + "image-compressor@example.com:2.0", + "quari@quari.ai:0.4.6", + "{b3fcccb3-af10-41b8-b41a-b2e63042a3da}:1.0", + "{b3fcccb3-af10-41b8-b41a-b2e63042a3da}:2.0", + "{ef6e8745-4ee9-41d1-887b-8ba3c5e95a11}:1.0", + "ninja-task-copier@example.com:1.0.1" + ] + }, + "schema": 1757918191882, + "key_format": "{guid}:{version}", + "stash_time": 1757939706373, + "id": "dafc4c4b-6098-4e1d-8b78-89eaaa2e4d50", + "last_modified": 1757939790816 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{a965baac-95b1-4bcb-ba36-40ace4721a24}:1.0", + "mist2023alala@gmail.com:1.0", + "{06d0e6f9-55a9-411c-9bbc-7b2861531e11}:1.1.5", + "{59792bc7-054c-4a40-af24-f90eddd879f8}:1.0" + ] + }, + "schema": 1757902548593, + "key_format": "{guid}:{version}", + "stash_time": 1757918105935, + "id": "de547e84-3a75-46ba-99d4-01a2a31919ff", + "last_modified": 1757918191641 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{6f7ce15f-5dfd-4cb2-b570-9e1f6dfb1ee3}:3.0.171", + "mybusboost123@custom:1.3.13", + "{a849dd6b-90a6-4fa2-ab95-0d7d563d6e96}:1.0", + "{d6558581-1810-4b6d-bc06-a89c8f9f675e}:3.0" + ] + }, + "schema": 1757874991209, + "key_format": "{guid}:{version}", + "stash_time": 1757896504706, + "id": "db90cf4b-c43f-4ddd-8072-2caa83239988", + "last_modified": 1757896577896 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "download-video-without-sound-addon@example.com:2025.8.31.3", + "download-video-without-sound-addon@example.com:2025.8.30.1", + "download-video-without-sound-addon@example.com:2025.8.22.1", + "download-video-without-sound-addon@example.com:2025.8.10.1", + "download-video-without-sound-addon@example.com:2025.8.7.2", + "download-video-without-sound-addon@example.com:2025.7.7.1", + "{6e25b010-1945-4b18-93c1-60b89fc484b2}:1.0", + "tab-grab@thestoneroller.com:1.4.0", + "{a4c1f7e6-9b2d-0a5f-3e8c-7d6a1b4f2e9c}:12.8.1", + "{f5e2b9a1-0c3d-8f7a-6e4b-9d1c5f2a8e3b}:12.8.1", + "{c8f3b7e1-5a0d-2f9c-4e6a-1b8d5f3c7e0a}:12.8.1", + "{39dfdab3-5f4f-4f64-a666-cf3886d33525}:1.0", + "{39dfdab3-5f4f-4f64-a666-cf3886d33525}:1.0.1", + "{225902ea-838d-4ac9-b960-8a078e1c2cc1}:1.0.0", + "{0929d299-4a29-4f5b-8fc2-8f8158b7b0b0}:1.0" + ] + }, + "schema": 1757853389966, + "key_format": "{guid}:{version}", + "stash_time": 1757874906738, + "id": "d1b6af5c-9952-411a-ae35-c1b0939a5c2a", + "last_modified": 1757874991007 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "autoclose-ngitonline@mydomain.com:1.0", + "headcleanasfe@zkslsiefjei.com:1.5.3", + "reyvandwiutama08@gmail.com:1.31.5.2025", + "{b8d54506-38f3-48a5-ae7a-a5c818b917d3}:1.1", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.1.0", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.0", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.1", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.2", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.3", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.4", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.6", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.7", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.8", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.2.9", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.3.0", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.3.1", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.3.2", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.4.0", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.4.1", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.5.0", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.5.1", + "{96b7edf5-6cde-4584-80b1-dce853361ebe}:0.5.2", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.4", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.4.1", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.4.2", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.4.3", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.4.4", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.0", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.1", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.2", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.3", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.4", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.5", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.6", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.7", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.8", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.9", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.10", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.11", + "{82195cf4-b5d5-463f-8b94-6e0e066cc0f5}:1.5.12", + "umutcansu@gmail.com:1.0", + "{bc14e74e-0d40-4a87-b3de-a31b99ee1a1d}:1.2.1", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1388.1", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1409.1", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1413.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1422.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1432.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1438.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1454.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1458.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1471.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1473.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1485.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1546.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1623.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1640.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1648.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1657.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1669.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@83d66ac8-8906-46f7-b64d-fb5f1d4042c7.com:0.1681.0" + ] + }, + "schema": 1757831792945, + "key_format": "{guid}:{version}", + "stash_time": 1757853307026, + "id": "9a758ae2-718b-4825-8bd9-ea025fc8bb0f", + "last_modified": 1757853389778 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "extension@oskalist.com:1.0.2", + "{1c0737d0-5c51-44d8-b68e-b6e321851e15}:1.2", + "@PrivacyBadger:2025.9.5", + "@PrivacyBadger:2025.9.5.1", + "{ada9cd32-a359-425e-89c1-518acf0c4aa5}:3.5.1", + "prodexa@example.com:1.0.0", + "{72c4bd5f-715e-47da-8ac6-d6f5837735ff}:2.0", + "bdrab_tel@bdrab.bdrab:1.99.4" + ] + }, + "schema": 1757816147925, + "key_format": "{guid}:{version}", + "stash_time": 1757831706144, + "id": "db25376b-878c-4cce-a3a0-459b322a736c", + "last_modified": 1757831792699 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "roblox-friends-manager-unique-2025@example.com:1.0.5", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:1.0", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:1.0.1", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:1.1.0", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.0.0", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.0.1", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.1.0", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.2.0", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.3.1", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.3.2", + "{c5755ae1-38eb-4cd9-999b-c4a22d3340bc}:2.3.3" + ] + }, + "schema": 1757788589496, + "key_format": "{guid}:{version}", + "stash_time": 1757810106748, + "id": "49af543b-5404-4587-adc1-ea2441fb5ceb", + "last_modified": 1757810194909 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{d6558581-1810-4b6d-bc06-a89c8f9f675e}:1.5", + "{d6558581-1810-4b6d-bc06-a89c8f9f675e}:2.0", + "link-safety-checker@roblomack.dev:1.0.4", + "universal-image-resizer@example.com:1.0", + "{cff8b853-bfb9-4f67-a6a8-d2131c81dbbb}:1.1.1", + "{0a0fa121-21df-4409-9e27-de98ae49e57d}:2.0", + "{0655f4c8-fae5-4204-b700-2ca30a87f267}:1.0" + ] + }, + "schema": 1757766991059, + "key_format": "{guid}:{version}", + "stash_time": 1757788506370, + "id": "079661a4-b534-42c0-974c-e2d4f166fe74", + "last_modified": 1757788589264 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "yt-private-popup@example.com:0.0.4", + "{1d6f68f5-39a1-4098-b4a0-25290d229645}:2.0", + "{8c24f33e-0fc7-47bf-a312-91d88a1dae73}:2.0", + "100ishundred@gmail.com:1.0" + ] + }, + "schema": 1757745389216, + "key_format": "{guid}:{version}", + "stash_time": 1757766906387, + "id": "39d883bd-4b44-43b1-bcbe-caddb7c33c3b", + "last_modified": 1757766990934 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{42b7f1c4-a0e9-42b0-b228-54705b92f84c}:3.0", + "{d39d5a13-1992-400e-999c-894f7696e342}:1.0", + "{dde8fde8-ce8e-4c40-9509-413e7527b95d}:1.0.0" + ] + }, + "schema": 1757729746767, + "key_format": "{guid}:{version}", + "stash_time": 1757745305767, + "id": "97a0e9ad-04d0-4ce9-958f-8ae6ccd45a80", + "last_modified": 1757745389090 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{0e6b32d5-730c-4717-9524-a1bfee792e85}:2.13", + "{fbdd15f8-38be-4d4a-a023-4bddc2496b0f}:5.43", + "{62e3eb31-562f-4cf5-a4a7-31ce5553f82f}:9.50", + "{2bce0ffd-6d5b-4e2d-824a-c0211fe73e4e}:2.56", + "{09709148-8e9f-45ca-b298-7263b0adcab4}:2.25", + "{08043234-658f-45e0-b8ea-55433ad180a7}:4.29", + "{d240c7bf-1744-43e6-9035-81fc5e3e0a0e}:8.43", + "{9f455bf4-1c35-4f4d-ad65-6c5e9cbdc4f6}:3.77", + "{1133c339-6487-4201-8bee-0ee78fc7f963}:6.2", + "{05956a17-ae71-4c3f-8246-c4759de8a6e4}:10.14", + "{123ace6e-a7ad-4ed1-b727-451428482c24}:10.27", + "{dca0547f-c858-45c6-9032-d0048cc983a3}:4.82", + "{2d98c256-cd06-4998-8669-25f5334c77d5}:2.27", + "{9dd61e68-aefd-4603-a2a3-9a1802435de5}:1.8", + "imagedownloaderpro@extensiohub.com:1.0.0", + "Android@bravenhancer.com:16.2.5", + "{0e830e9b-0954-4499-9a99-19334606ed12}:1.6", + "{0e830e9b-0954-4499-9a99-19334606ed12}:0.5", + "imgwordsdata-div@exampleeqwe.com:1.0", + "imgwordsdata-div@exampleeqweee.com:1.0" + ] + }, + "schema": 1757702193788, + "key_format": "{guid}:{version}", + "stash_time": 1757723706765, + "id": "1f7b323e-1b57-4fda-addc-10a5ef73510d", + "last_modified": 1757723792437 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.0", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.1", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.4", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.6", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.7", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.8", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.9", + "{81034f3f-2db4-444e-8495-95879f82a424}:1.0.10", + "{61c9b05b-080b-4d53-8dd5-87179423c41e}:1.0", + "no-dupe-tabs@example.com:1.0", + "reuse-tab@yxl.com:2.0", + "{42defd61-9647-4e6b-849c-3e2169aa3ee6}:1.0", + "{5d087e03-b231-4b8b-8649-676ca62db77c}:1.0", + "newtab-redirect@lonelyshadmin:1.0.0", + "{4279f9ff-76cf-47ad-847a-5f1ef47d83ab}:4.3", + "{4279f9ff-76cf-47ad-847a-5f1ef47d83ab}:4.2.2", + "{4279f9ff-76cf-47ad-847a-5f1ef47d83ab}:4.2.1", + "{4279f9ff-76cf-47ad-847a-5f1ef47d83ab}:4.2" + ] + }, + "schema": 1757680594919, + "key_format": "{guid}:{version}", + "stash_time": 1757702105850, + "id": "78063bc3-9ba3-4519-8cd2-0fd8019f207c", + "last_modified": 1757702193462 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{15eaf6e9-9271-4fd2-8eb9-0e2c353b0c0d}:1.4.1", + "infinpilot@example.com:4.2.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1357.1", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1361.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1377.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1384.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1388.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1409.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1413.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1422.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1432.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1438.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1454.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1458.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1471.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1473.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1485.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1546.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1609.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1623.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1632.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1648.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1681.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1706.0", + "dmpgopmhgecgfpbiphgfobeaeaodaidj@dd8576ba-53fa-4b8d-9b7d-33182135adf9.com:0.1716.0" + ] + }, + "schema": 1757658988162, + "key_format": "{guid}:{version}", + "stash_time": 1757680505728, + "id": "3eb5087e-43db-46e0-b662-0c777548d6b1", + "last_modified": 1757680594725 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "roblox-friends-manager-unique-2025@example.com:1.0.3", + "genuine-preview@salvadroid.mx:1.1", + "{1d6f68f5-39a1-4098-b4a0-25290d229645}:1.0", + "{8c24f33e-0fc7-47bf-a312-91d88a1dae73}:1.4", + "{c6793eea-3122-43cf-a3dc-b83e72b1cf4a}:2.0", + "{d1382520-bd2f-452d-b410-68696bb5dcba}:1.0", + "{9fad9caf-7bb3-4155-ace3-db564b5b029c}:1.0" + ] + }, + "schema": 1757643351001, + "key_format": "{guid}:{version}", + "stash_time": 1757658905640, + "id": "b64d3257-e7c9-4be8-b1e1-234fe0f9d7d6", + "last_modified": 1757658988031 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{16fa5ccd-139e-497b-892a-6b22c356b8dc}:1.0", + "{e3f625a0-2b09-4490-9d0c-3f0d037232ec}:1.0", + "{ce250abf-d14d-4eb5-9455-c65b0b180175}:1.0", + "custom-new-tab-page-pavel@mint.as:1.0.0", + "{5545aa50-986f-4a30-a6ff-824855614649}:1.0", + "{73af7dde-dca8-473b-b2c8-93fd667c1b60}:1.1.1", + "tweaks@zelenin.me:0.1.12", + "{e2915bb0-80ae-4741-a199-e09dc7570be6}:0.1.11", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.0.14", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.0.15", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.0.16", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.0.17", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.0.18", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.0", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.1", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.2", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.3", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.4", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.5", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.6", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.7", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.8", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.9", + "{c6136883-a914-4264-9f05-472cf1403ebf}:0.1.10" + ] + }, + "schema": 1757615793952, + "key_format": "{guid}:{version}", + "stash_time": 1757637306209, + "id": "00c778a5-b213-43ed-b17f-e72f2ca56eaa", + "last_modified": 1757637390689 + }, + { + "stash": { + "blocked": [ + "{7ec27d0d-f302-454a-b319-090b2eed3f8a}:5.1.1", + "{7ec27d0d-f302-454a-b319-090b2eed3f8a}:5.1.2", + "45c3ffe0-4b86-432b-ba2c-97a0ee1b9b89@adblocker:2.3.0", + "{c82a2905-695a-431a-a2b2-9b81d6039d30}:3.1.0", + "ada2cea9-68c8-4703-91fb-a06cf511bdaf@adblockmaster:2.2.4", + "ada2cea9-68c8-4703-91fb-a06cf511bdaf@adblockmaster:2.2.5", + "ada2cea9-68c8-4703-91fb-a06cf511bdaf@adblockmaster:2.2.6", + "ada2cea9-68c8-4703-91fb-a06cf511bdaf@adblockmaster:2.2.7" + ], + "unblocked": [ + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.1.1", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.1.2", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.2.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.2.1", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.3.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.6.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.6.2" + ], + "softblocked": [ + "{73505e4b-052b-4a3d-8a22-35f2445a3a63}:3.0", + "qpd-refactored@example.com:1.0.0", + "drag_to_privew@uxer:0.0.49", + "Android@bravenhancer.com:16.2.3", + "enhancer@goldenfox.com:16.2.3", + "{f0256912-477a-4350-b2fb-881e313dc08e}:1.0.2", + "support@produce8.com:3.1.35", + "extensions@robgreen.me:1.0.0.0", + "extensions@robgreen.me:1.0.1.0", + "extensions@robgreen.me:1.0.2.0", + "extensions@robgreen.me:1.1.0.0", + "Android@bravenhancer.com:16.2.4", + "enhancer@goldenfox.com:16.2.4" + ] + }, + "schema": 1757594182582, + "key_format": "{guid}:{version}", + "stash_time": 1757615705080, + "id": "41aa1896-af94-4f02-84b1-08e524242728", + "last_modified": 1757615793716 + }, + { + "stash": { + "blocked": [ + "{88f6f371-45bd-4d21-a2c2-2a6117d4da4b}:1.0", + "{88f6f371-45bd-4d21-a2c2-2a6117d4da4b}:1.189" + ], + "unblocked": [ + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:0.2.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.8", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.10", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.11", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.12", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.13", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.14", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.15", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.16", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.17", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.18", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.19", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.20", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.1.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.2.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.3.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.6.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.6.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.6.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.7.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.7.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.7.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.10", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.11", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.15", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.16", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.17", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.18", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.19", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.20", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.23", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.27", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.29", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.30", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.31", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.10", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.11", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.12", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.13", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.15.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.15.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.15.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.16.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.17.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.8", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.12", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.13", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.14", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.20.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.21.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.22.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.23.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.23.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.24.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.26.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.27.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.28.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.29.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.30.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.31.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.32.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.32.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.33.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.34.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.36.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.36.2" + ], + "softblocked": [ + "extension@horserealitytools.com:1.0.0", + "{b03dbfd3-99ba-4c88-9e19-ba060165c8ff}:1.0", + "{6cdc287b-df51-459b-8cd3-571d63e3a325}:1.0", + "{a364e2b7-1fa7-43d0-adc1-df28c6e7c47a}:1.0", + "{521df04e-bb6d-495f-88f0-ad16319e0511}:1.0", + "{521df04e-bb6d-495f-88f0-ad16319e0511}:1.1", + "{521df04e-bb6d-495f-88f0-ad16319e0511}:1.2", + "{521df04e-bb6d-495f-88f0-ad16319e0511}:1.3.0", + "{521df04e-bb6d-495f-88f0-ad16319e0511}:1.4.0", + "{521df04e-bb6d-495f-88f0-ad16319e0511}:1.4.2", + "{d08171fa-cf3f-4dd9-b404-e8b9384ebc24}:1.2" + ] + }, + "schema": 1757572590744, + "key_format": "{guid}:{version}", + "stash_time": 1757594105023, + "id": "3bdff531-c1dd-4715-b193-f1d902bf752b", + "last_modified": 1757594182340 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{7c0920a7-853f-40fd-a77a-1c7eb29b8235}:1.1", + "{404cc88d-8dcf-4c09-b695-5525fe750b59}:1.2.0", + "{52cd2029-15f1-441e-8967-99329e81ea39}:1.2.0", + "{e9c3c1c9-5bee-4073-8631-d9d8c5022177}:1.2.0", + "{555932b9-ebcb-4832-945a-4d627d71a98b}:2.0", + "{7c0920a7-853f-40fd-a77a-1c7eb29b8235}:1.2", + "{e9c3c1c9-5bee-4073-8631-d9d8c5022177}:1.3.0", + "{29061a94-0f94-4bc9-acea-4290241c57c6}:1.3.0", + "{35bb50d9-a4b2-412e-9cd3-0f9ef765220f}:1.3.0", + "{35bb50d9-a4b2-412e-9cd3-0f9ef765220f}:1.4.0", + "arpstracker@chucksbasix.com:1.0.0", + "{210086f6-18ac-4452-a6c7-711b40c60d4c}:1.7.1" + ] + }, + "schema": 1757556945947, + "key_format": "{guid}:{version}", + "stash_time": 1757572506547, + "id": "4f6be3e3-5804-4b27-8ffc-b7dfd22c8133", + "last_modified": 1757572590560 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{f91ef2ed-63df-4618-a28d-8b14e7e16739}:6.14", + "{4155332f-3480-4d2c-869b-71ab901762c8}:2.0.13", + "{75f0dbeb-0f11-4234-aa2f-9bd5dde0c6ff}:1.7.1", + "{4102ebb5-ee9d-4e57-a5d9-8decb4f73dab}:1.2", + "{75f0dbeb-0f11-4234-aa2f-9bd5dde0c6ff}:1.7.0", + "{75f0dbeb-0f11-4234-aa2f-9bd5dde0c6ff}:1.7.2", + "{9d571eef-479b-486f-968b-55b5a6d1eff6}:1.0", + "{054b68d1-4798-4a97-a304-53f3f1b45a8b}:1.0.4", + "{8189d924-9b0f-46c2-8ba9-4219dc45f9fa}:1.0", + "{8189d924-9b0f-46c2-8ba9-4219dc45f9fa}:2.0", + "{c873a6e7-a5ea-4284-8cbb-4f324ccd0d6a}:2.5.3", + "{c873a6e7-a5ea-4284-8cbb-4f324ccd0d6a}:2.5.2", + "{c873a6e7-a5ea-4284-8cbb-4f324ccd0d6a}:2.5.5", + "{c873a6e7-a5ea-4284-8cbb-4f324ccd0d6a}:2.5.1" + ] + }, + "schema": 1757529394004, + "key_format": "{guid}:{version}", + "stash_time": 1757550905954, + "id": "ebde7300-554f-448b-88da-10e2a8d6d310", + "last_modified": 1757550993121 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "atelier-enabler-ff@happyticket.it:1.0", + "atelier-enabler-ff@happyticket.it:1.1", + "hoge1@hoge.hoge:1.0.19", + "{6b2e9c3f-5a1d-4e7b-8c0f-2d3a6e9b1c5f}:12.23.1", + "magnolia@12.34:4.2.0.2", + "{cc67d7b3-2e6b-418b-81c6-7dac5c354a71}:1.0", + "{6dae5e6e-72bd-475f-b0f8-895c26db830d}:0.2.3", + "{cc6051f2-08f9-422f-b7e2-c6a646cfbf2a}:1.0", + "{cc6051f2-08f9-422f-b7e2-c6a646cfbf2a}:1.1", + "{88b7f769-6cc0-4ed7-97c4-67cc39ad3887}:1.0", + "{b8495972-e90d-45d1-bc2d-dc7daa358079}:1.0", + "{47911aba-b9d9-4dd1-99f6-5e6763d0ff84}:1.0", + "{859d3020-5343-4958-b1cd-ae8157a25cf5}:1.0", + "{a654cbc3-9dea-478a-96cd-0bc29fa59187}:1.0" + ] + }, + "schema": 1757507785782, + "key_format": "{guid}:{version}", + "stash_time": 1757529306138, + "id": "37da5db5-c2bc-47d8-b797-b2d1aed2d206", + "last_modified": 1757529393791 + }, + { + "stash": { + "blocked": [ + "{f57632d2-6c70-4bb7-beb0-3136495650fa}:2", + "{f57632d2-6c70-4bb7-beb0-3136495650fa}:8.1" + ], + "unblocked": [], + "softblocked": [ + "bookmarksBucket.nagato@library:1.0.1", + "bookmarksBucket.nagato@library:1.0.2", + "bookmarksBucket.nagato@library:1.2.6.8", + "bookmarksBucket.nagato@library:1.2.6.9", + "bookmarksBucket.nagato@library:1.2.6.10", + "cookieBlocker.nagato@library:1.0.0.0", + "cookieBlocker.nagato@library:1.0.0.1", + "cookieBlocker.nagato@library:1.0.0.2", + "adjustGain.nagato@library:1.0.0", + "adjustGain.nagato@library:1.0.1", + "adjustGain.nagato@library:1.0.2", + "adjustGain.nagato@library:1.0.4", + "adjustGain.nagato@library:1.3.3.3", + "adjustGain.nagato@library:1.3.3.4", + "adjustGain.nagato@library:1.3.3.5", + "dragGesture.nagato@library:1.0.1", + "dragGesture.nagato@library:3.3.1.2", + "dragGesture.nagato@library:3.3.1.3", + "dragGesture.nagato@library:3.3.1.4", + "instantTranslate.nagato@library:1.0.0.0", + "instantTranslate.nagato@library:1.0.0.1", + "siteSearch.nagato@library:3.3.4.4", + "siteSearch.nagato@library:3.3.4.5", + "siteSearch.nagato@library:3.3.4.6", + "openFromSelection.nagato@library:2.2.0.2", + "openFromSelection.nagato@library:2.2.0.3", + "openFromSelection.nagato@library:2.2.0.4", + "tabSuccession.nagato@library:2.1.5.4", + "tabSuccession.nagato@library:2.1.5.5", + "tabSuccession.nagato@library:2.1.5.6", + "whitelist-cleaner@foehr:0.3.1", + "contact@docxpress.fr:1.0", + "deeplPopup.nagato@library:1.0", + "deeplPopup.nagato@library:1.1", + "deeplPopup.nagato@library:1.2", + "deeplPopup.nagato@library:1.3", + "deeplPopup.nagato@library:1.3.1", + "deeplPopup.nagato@library:1.3.2", + "deeplPopup.nagato@library:1.3.3", + "deeplPopup.nagato@library:1.3.4", + "deeplPopup.nagato@library:1.3.5", + "deeplPopup.nagato@library:1.3.6", + "deeplPopup.nagato@library:1.3.8", + "deeplPopup.nagato@library:1.3.9", + "deeplPopup.nagato@library:2.2.8.10", + "deeplPopup.nagato@library:2.2.8.11", + "deeplPopup.nagato@library:2.2.8.12", + "singletonSearch.nagato@library:2.0.0", + "singletonSearch.nagato@library:2.0.1", + "singletonSearch.nagato@library:2.5.0.2", + "singletonSearch.nagato@library:2.5.0.3", + "singletonSearch.nagato@library:2.5.0.4", + "NTU_COOL_Video_Downloader@kennyfs:1.0.1", + "NTU_COOL_Video_Downloader@kennyfs:1.0.0", + "NTU_COOL_Video_Downloader@kennyfs:1.0.2", + "rentspree-localstorage-reader@rentspree.com:1.0", + "{87f5e49d-3e03-42c1-8010-6b2e5d359c62}:1.0" + ] + }, + "schema": 1757486192450, + "key_format": "{guid}:{version}", + "stash_time": 1757507705519, + "id": "a2cccad0-5f17-4b96-a372-86f0ed98e2ea", + "last_modified": 1757507785603 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{8da9d52e-ffb6-4c46-9c8f-044deb270744}:1.5.14.0", + "{8da9d52e-ffb6-4c46-9c8f-044deb270744}:8.1", + "jcpqdstdAfroReportes@gmail.dist.dwetds:1.16", + "{7b733b82-9261-47ee-a595-2dda294a4d08}:0.0.0.0", + "{d30777bd-41b2-4efe-9321-b06ccab47ab6}:2", + "{d30777bd-41b2-4efe-9321-b06ccab47ab6}:5.9", + "{8301d86a-e5b9-491e-848f-a012e4414082}:2", + "{8301d86a-e5b9-491e-848f-a012e4414082}:2.2", + "{e74c664c-cf4a-4c2f-b830-b5e11a07a4a8}:1.0", + "{e74c664c-cf4a-4c2f-b830-b5e11a07a4a8}:10" + ] + }, + "schema": 1757470542331, + "key_format": "{guid}:{version}", + "stash_time": 1757486106394, + "id": "c077dc38-05a2-45c6-bcf2-4a5ca4155592", + "last_modified": 1757486192262 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.1.1", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.1.2", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.2.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.2.1", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.3.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.6.0", + "{34c1674f-f75a-4a65-9282-a3ea1a92dcf6}:1.6.2", + "{14831028-bd1a-4441-a0dc-302fe4d22a27}:2.3.2", + "{bfe2be74-7c5f-4137-95eb-b8b43231aed3}:1.0.0", + "ecs-builder-support-utility@ecentrtalstores.com:1.1.1", + "{816b9ac2-08db-4a8a-9ffe-a95563c78736}:1.1.1", + "{e74c664c-cf4a-4c2f-b830-b5e11a07a4a8}:8", + "{e74c664c-cf4a-4c2f-b830-b5e11a07a4a8}:7", + "{e74c664c-cf4a-4c2f-b830-b5e11a07a4a8}:6", + "edge.advantage@unique-identifier.com:1.1", + "edge.advantage@unique-identifier.com:1.2", + "edge.advantage@unique-identifier.com:1.3", + "edge.advantage@unique-identifier.com:1.4", + "edge.advantage@unique-identifier.com:1.5", + "edge.advantage@unique-identifier.com:1.6", + "edge.advantage@unique-identifier.com:1.7", + "{555932b9-ebcb-4832-945a-4d627d71a98b}:1.0" + ] + }, + "schema": 1757449685227, + "key_format": "{guid}:{version}", + "stash_time": 1757464506158, + "id": "01873b98-23fa-4ab9-a49e-9edf0fa33382", + "last_modified": 1757464590907 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{b3e89414-57d8-453b-82ae-7ade1f30c400}:5.5", + "{b3e89414-57d8-453b-82ae-7ade1f30c400}:1.5.14.0", + "{e49657ad-43be-4f88-8917-0bb62faf8e88}:1.5.14.0", + "custom@sidebar.org:1.0", + "{e49657ad-43be-4f88-8917-0bb62faf8e88}:2.2", + "{b3e89414-57d8-453b-82ae-7ade1f30c400}:5.9", + "{0b6ecddc-1a9d-4cf6-be9f-86ce13d816a4}:1.4", + "{0b6ecddc-1a9d-4cf6-be9f-86ce13d816a4}:1.3", + "{0b6ecddc-1a9d-4cf6-be9f-86ce13d816a4}:1.2", + "stella-scripts@kevin.local:1.0.0", + "{89dacfe7-22fd-4274-b63b-0d6111b1e577}:5.9", + "otek-converter@otek.today:1.9", + "otek-converter@otek.today:1.10", + "{ce6971d9-0221-426f-a62d-6c0363eeb84b}:1.0", + "otek.converter@otek.today:1.9.2", + "{017a9875-f85d-4720-a23d-9020db094a8a}:1.0", + "{017a9875-f85d-4720-a23d-9020db094a8a}:5.9" + ] + }, + "schema": 1757421393995, + "key_format": "{guid}:{version}", + "stash_time": 1757442906345, + "id": "79d60419-32b6-4efb-b243-c0074a9956d1", + "last_modified": 1757442990197 + }, + { + "stash": { + "blocked": [ + "{80e0bf5f-cb43-461c-9b70-270b0c434961}:1.0", + "{80e0bf5f-cb43-461c-9b70-270b0c434961}:1.5", + "{8ff76951-222e-4909-90d7-02aa1d9adf0d}:1.0", + "{8ff76951-222e-4909-90d7-02aa1d9adf0d}:6", + "{4895ff88-0228-46c0-ad7f-285517d1f3da}:2", + "{4895ff88-0228-46c0-ad7f-285517d1f3da}:2.2", + "{17e8c9c8-6dbf-4d75-9da2-2748cc35511c}:2", + "{17e8c9c8-6dbf-4d75-9da2-2748cc35511c}:2.11" + ], + "unblocked": [ + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.4", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.5", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.6", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.7", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.9", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.10", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.11", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.12", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.13", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.14", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.15", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.16", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.17", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.18", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.19", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.20", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.23", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.24", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.25", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.26", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.0.27", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.1.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.1.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.1.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.1.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.2.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.2.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.2.4", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.3.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.3.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.4.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.4.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.5.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.5.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.5.4", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.5.6", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.6.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.6.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.7.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.7.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.8.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.9.6", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.9.7", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.9.8", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.9.9", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.9.10", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:0.9.11", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.0.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.0.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.0.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.1.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.1.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.1.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.1.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:1.1.4", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.0.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.0.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.0.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.1.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.1.5", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.1.6", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.4", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.5", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.6", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.8", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.9", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.2.11", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.3.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.3.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.3.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.4.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.5.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.5.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.5.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.5.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.0", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.1", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.2", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.3", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.4", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.5", + "{aee9e933-52b6-410a-8c3f-99c6be596b4e}:2.6.7" + ], + "softblocked": [ + "sy_Andy.CookieMgr@eci.com:1.0.0", + "sy_Andy.CookieMgr@eci.com:1.1.0", + "{87709831-6e38-4746-9124-bc603ba8b4b3}:1.0", + "{04d7a57c-3028-450b-8e36-028b8ad45047}:1.2", + "openstack-profile-switcher@access-intech.de:1.2.0", + "openstack-profile-switcher@access-intech.de:1.0.0", + "openstack-profile-switcher@access-intech.de:1.0.1", + "framesync@example.com:1.6", + "openstack-project-switcher@access-intech.de:1.0.1", + "{b1ad2e82-6cca-4770-a494-f9a40ee07b73}:1.0", + "bitcointalk-script@yhiaali3:2.5", + "mefix@fusionx.biz:1.0.0" + ] + }, + "schema": 1757410208481, + "key_format": "{guid}:{version}", + "stash_time": 1757421306183, + "id": "2377c0b5-42b9-450a-9091-cca5fe038b6e", + "last_modified": 1757421393780 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{68e2afc7-29b1-45c3-b209-bb53eb88780c}:1.0", + "sbing@hbzx:1.0.1", + "sbing@hbzx:1.0.2", + "sbing@hbzx:1.0.3", + "sbing@hbzx:1.0.4", + "sbing@hbzx:1.0.5", + "sbing@hbzx:1.0.6", + "sbing@hbzx:1.0.7", + "sbing@hbzx:1.0.8", + "sbing@hbzx:1.0.9", + "sbing@hbzx:1.0.10", + "sbing@hbzx:1.0.11", + "sbing@hbzx:1.0.12", + "sbing@hbzx:1.0.13", + "sbing@hbzx:1.0.14", + "sbing@hbzx:1.0.15", + "sbing@hbzx:1.0.16", + "sbing@hbzx:1.0.17", + "sbing@hbzx:1.0.18", + "sbing@hbzx:1.0.19", + "sbing@hbzx:1.0.20", + "sbing@hbzx:1.0.21", + "sbing@hbzx:1.0.22", + "jcpqdsad1AfrofavorityStripds@dsoteer.com:1.9", + "jcpqdsad1AfrofavorityStripds@dsoteer.com:1.7", + "{9d6e7b67-4bfd-4ed2-926e-59135032ef58}:2.0.1", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.0", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.1", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.2", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.3", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.4", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.5", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.6", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.7", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.8", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.9", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.10", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.11", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.12", + "jcpqdsad1AfrouserStripds@dsoteer.com:1.13" + ] + }, + "schema": 1757384142562, + "key_format": "{guid}:{version}", + "stash_time": 1757399705915, + "id": "05bc5298-175f-435c-a0c3-4d0ffc2979da", + "last_modified": 1757399792439 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{2af12af7-97f6-4a55-9580-d1e7d5f57a08}:1.6.1", + "{2af12af7-97f6-4a55-9580-d1e7d5f57a08}:1.6.2", + "{2af12af7-97f6-4a55-9580-d1e7d5f57a08}:1.7.0", + "BetterBangs@raadsl:1.4", + "{9adaf579-e359-4966-ad2c-dbd511a9732b}:1.0", + "{f393109a-dc61-4e1c-bddf-d9c3f0a2fd34}:1.0", + "{07e2d4a9-4a44-4acd-b9c3-36f9cb3ecc22}:1.0", + "{0b6ecddc-1a9d-4cf6-be9f-86ce13d816a4}:1.1", + "{d1ce4e15-0d2a-4a6f-8739-4e7440b493d7}:0.1", + "{4e17ccff-3b44-423c-9cfb-920dde46195d}:2.0.2", + "{4e17ccff-3b44-423c-9cfb-920dde46195d}:2.0.1", + "{4e17ccff-3b44-423c-9cfb-920dde46195d}:2.0.0", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.0", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.1", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.2", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.3", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.4", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.5", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.6", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.7", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.8", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.0.9", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.1.0", + "{58b69f32-0f4d-44a9-b160-d0c3b7ccb8a1}:1.1.2", + "{2c9f1869-e3f4-4dd2-8950-4ae6024de433}:1.0.0", + "{2c9f1869-e3f4-4dd2-8950-4ae6024de433}:1.0.1", + "{aa3af8df-2609-43d5-9cb2-23725a01d2d3}:1.0a1", + "{aa3af8df-2609-43d5-9cb2-23725a01d2d3}:1.0b", + "{aa3af8df-2609-43d5-9cb2-23725a01d2d3}:1.1.0", + "{aa3af8df-2609-43d5-9cb2-23725a01d2d3}:1.1.1", + "{560e84ee-995e-441d-ace0-217ec9eaa13f}:1.0", + "{3e6b414b-22ba-4877-ab42-1ada78c72490}:1.0", + "{6c03f2cd-da97-4747-abb6-1b31cd33d654}:1.0", + "groupify@mikhail:4.5.1", + "groupify@mikhail:4.5.2", + "mtadams42@gmail.com:0.1", + "{b498b105-55e1-4166-9d1e-928194405385}:2.3" + ] + }, + "schema": 1757356589676, + "key_format": "{guid}:{version}", + "stash_time": 1757378105719, + "id": "f9e7fca6-d19d-4e7f-80c3-488a28fda2e1", + "last_modified": 1757378187677 + }, + { + "stash": { + "blocked": [ + "{774ec56f-d84b-497d-92b8-1696301cbfca}:1.1", + "{774ec56f-d84b-497d-92b8-1696301cbfca}:2.11", + "{b74077cf-7120-4638-81d4-c11ee88fff55}:1.1", + "{b74077cf-7120-4638-81d4-c11ee88fff55}:1.2", + "{2b8e5a2d-d223-4373-bdd8-142b3b4784d1}:1.0", + "{2b8e5a2d-d223-4373-bdd8-142b3b4784d1}:5.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:0.2.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.8", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.10", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.11", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.12", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.13", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.14", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.15", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.16", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.17", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.18", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.19", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0.20", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.0.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.1.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.2.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.3.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.4.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.5.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.6.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.6.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.6.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.7.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.7.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.7.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.8.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.9.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.10.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.11.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.12.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.10", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.11", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.15", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.16", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.17", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.18", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.19", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.20", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.23", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.27", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.29", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.30", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.13.31", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.6", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.7", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.10", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.11", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.12", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.14.13", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.15.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.15.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.15.5", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.16.3", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.17.4", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.8", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.9", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.12", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.13", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.19.14", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.20.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.21.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.22.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.23.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.23.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.24.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.26.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.27.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.28.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.29.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.30.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.31.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.32.1", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.32.2", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.33.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.34.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.36.0", + "{34ac229e-1cf5-4e4c-8a77-988155c4360f}:1.36.2" + ], + "unblocked": [], + "softblocked": [ + "yourextension@domain:2.2.8", + "{2b4d96d3-ca4b-4eb2-b6e8-9c5d9f15ef17}:2.0.5", + "heartify@moma.rs:1.0.5", + "firxa@zan1456.hu:1.2.3.1", + "firxa@zan1456.hu:1.2.3", + "firxa@zan1456.hu:1.2.2", + "firxa@zan1456.hu:1.2.1", + "{eff190a5-b636-4c68-9ad9-be4d2951a907}:1.0.0" + ] + }, + "schema": 1757334989547, + "key_format": "{guid}:{version}", + "stash_time": 1757356506041, + "id": "7fbaafc0-0e7c-4634-9323-cd54573dce51", + "last_modified": 1757356589575 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ + "{ec74b6ee-9edc-4471-a804-b134abfcb10e}:1.0.4", + "MeFix@example.com:1.0.0", + "MeFix@example.com:1.1.0", + "{371b2ed2-8803-46cf-91de-dc95cd8d8e56}:1.0", + "{48a8b352-f228-4cd2-9a9c-bcbfb03a7aca}:1.0", + "sy_Andy@eci.com:1.0.0", + "janitorai-keybinds@gambler:1.1", + "yandex-tracker-interceptor@yourdomain.com:1.0", + "@mobidevtools-local:0.4.8" + ] + }, + "schema": 1757313385037, + "key_format": "{guid}:{version}", + "stash_time": 1757334905961, + "id": "28156f3f-7baa-41f6-85b3-6a6229faa7a3", + "last_modified": 1757334989449 + }, + { + "stash": { + "blocked": [], + "unblocked": [], + "softblocked": [ "@dinkey.chicken-takeover:1.0.3", "otter-rpc@otter.win:0.1.0", "{e7083bf4-cece-4b01-b6b1-493899dbc963}:2.6.5.1" @@ -4360,5 +7966,5 @@ "last_modified": 1755023922753 } ], - "timestamp": 1757313384936 + "timestamp": 1759732597526 } diff -Nru firefox-esr-140.3.1esr/services/settings/dumps/main/devtools-compatibility-browsers.json firefox-esr-140.4.0esr/services/settings/dumps/main/devtools-compatibility-browsers.json --- firefox-esr-140.3.1esr/services/settings/dumps/main/devtools-compatibility-browsers.json 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/services/settings/dumps/main/devtools-compatibility-browsers.json 2025-10-09 15:35:38.000000000 +0000 @@ -1,292 +1,328 @@ { "data": [ { + "name": "Edge", + "schema": 1759536305651, + "status": "planned", + "version": "144", + "browserid": "edge", + "id": "64945ca2-8c7c-4d04-8a37-dd304f2e93ce", + "last_modified": 1759736266415 + }, + { + "name": "Edge", + "schema": 1759536305590, + "status": "nightly", + "version": "143", + "browserid": "edge", + "id": "5fbdfe94-de4c-4bfe-b789-246f64a7f4b6", + "last_modified": 1759736266411 + }, + { + "name": "Edge", + "schema": 1759536305526, + "status": "beta", + "version": "142", + "browserid": "edge", + "id": "7d644a9d-4167-44d0-b58a-165beedf43e5", + "last_modified": 1759736266406 + }, + { + "name": "Edge", + "schema": 1759536305463, + "status": "current", + "version": "141", + "browserid": "edge", + "id": "1276177b-8e2c-4677-9839-c39cdb272d9f", + "last_modified": 1759736266402 + }, + { "name": "WebView Android", - "schema": 1756944305136, + "schema": 1759363503915, + "status": "planned", + "version": "144", + "browserid": "webview_android", + "id": "336a5fe9-5846-4e9d-9039-be3d1d82f97f", + "last_modified": 1759390855838 + }, + { + "name": "Deno", + "schema": 1759363503600, + "status": "current", + "version": "2.5.0", + "browserid": "deno", + "id": "a44dce57-9592-4b86-bd9c-cdf6223e7e75", + "last_modified": 1759390855835 + }, + { + "name": "Chrome", + "schema": 1759363503158, "status": "planned", + "version": "144", + "browserid": "chrome", + "id": "445d8b56-0300-4c6b-8e1f-0d1ab3f45500", + "last_modified": 1759390855832 + }, + { + "name": "Chrome Android", + "schema": 1759363503474, + "status": "planned", + "version": "144", + "browserid": "chrome_android", + "id": "196eb3bc-6b04-4a4e-875f-b46ff5d5e6da", + "last_modified": 1759390855828 + }, + { + "name": "Bun", + "schema": 1759363502767, + "status": "current", + "version": "1.2.23", + "browserid": "bun", + "id": "153169fe-490e-482d-a3d9-ce19f85c75bb", + "last_modified": 1759390855824 + }, + { + "name": "WebView Android", + "schema": 1759363503853, + "status": "nightly", "version": "143", "browserid": "webview_android", "id": "c0345eaf-8f79-42e7-9d5d-a16f48e6761f", - "last_modified": 1756978460941 + "last_modified": 1759390855817 }, { "name": "Chrome Android", - "schema": 1756944304870, - "status": "planned", + "schema": 1759363503417, + "status": "nightly", "version": "143", "browserid": "chrome_android", "id": "88163a1b-c1ef-4699-a50e-bd33a32ea075", - "last_modified": 1756978460938 + "last_modified": 1759390855814 }, { "name": "Chrome", - "schema": 1756944304595, - "status": "planned", + "schema": 1759363503095, + "status": "nightly", "version": "143", "browserid": "chrome", "id": "d18f46a3-d6bd-4291-8088-27feea84ca76", - "last_modified": 1756978460936 + "last_modified": 1759390855810 + }, + { + "name": "Chrome", + "schema": 1759363502905, + "status": "current", + "version": "141", + "browserid": "chrome", + "id": "7cdd8e9c-d3fc-47b3-bfcc-f63ddfccb7fc", + "last_modified": 1759390855807 }, { "name": "WebView Android", - "schema": 1756944305087, - "status": "nightly", + "schema": 1759363503789, + "status": "beta", "version": "142", "browserid": "webview_android", "id": "d1917e2a-614b-4b6c-8bb4-683132e1fd64", - "last_modified": 1756978460932 + "last_modified": 1759390855798 }, { "name": "Chrome", - "schema": 1756944304535, - "status": "nightly", + "schema": 1759363503031, + "status": "beta", "version": "142", "browserid": "chrome", "id": "80f03197-a17b-4032-ba47-0e81e04ffce2", - "last_modified": 1756978460930 + "last_modified": 1759390855794 }, { "name": "Chrome Android", - "schema": 1756944304821, - "status": "nightly", + "schema": 1759363503355, + "status": "beta", "version": "142", "browserid": "chrome_android", "id": "0b5cf19b-6816-4a96-aeb8-de25f776b025", - "last_modified": 1756978460927 + "last_modified": 1759390855790 }, { "name": "WebView Android", - "schema": 1756944305032, - "status": "beta", + "schema": 1759363503724, + "status": "current", "version": "141", "browserid": "webview_android", "id": "63e64099-e7d1-4b27-9a5d-ae173595a61f", - "last_modified": 1756978460924 + "last_modified": 1759390855786 }, { "name": "Chrome Android", - "schema": 1756944304760, - "status": "beta", + "schema": 1759363503296, + "status": "current", "version": "141", "browserid": "chrome_android", "id": "1fccf4ba-14fb-4641-b9c9-5b02bbb528a5", - "last_modified": 1756978460922 + "last_modified": 1759390855783 }, { - "name": "Chrome", - "schema": 1756944304480, + "name": "WebView on iOS", + "schema": 1758931504573, "status": "beta", - "version": "141", - "browserid": "chrome", - "id": "7cdd8e9c-d3fc-47b3-bfcc-f63ddfccb7fc", - "last_modified": 1756978460919 - }, - { - "name": "Chrome Android", - "schema": 1756944304709, - "status": "current", - "version": "140", - "browserid": "chrome_android", - "id": "794cc316-0785-4962-847c-f31ac285f847", - "last_modified": 1756978460916 - }, - { - "name": "WebView Android", - "schema": 1756944304975, - "status": "current", - "version": "140", - "browserid": "webview_android", - "id": "7bbb223e-ada4-4f53-babb-b93a73927329", - "last_modified": 1756978460913 - }, - { - "name": "Chrome", - "schema": 1756944304418, - "status": "current", - "version": "140", - "browserid": "chrome", - "id": "60172b96-7711-458b-9b0e-2dd55255bf05", - "last_modified": 1756978460910 - }, - { - "name": "Opera", - "schema": 1756512305771, - "status": "nightly", - "version": "123", - "browserid": "opera", - "id": "847fc43b-579e-4b26-a1fa-cb978ec0438b", - "last_modified": 1756731463819 + "version": "26.1", + "browserid": "webview_ios", + "id": "715b8853-603d-4ca8-a18c-3e24169f8895", + "last_modified": 1759122888958 }, { - "name": "Bun", - "schema": 1756512305536, - "status": "current", - "version": "1.2.21", - "browserid": "bun", - "id": "299a9948-9b52-4c99-b40c-26f0be0353dd", - "last_modified": 1756731463816 + "name": "Safari", + "schema": 1758852945474, + "status": "beta", + "version": "26.1", + "browserid": "safari", + "id": "4e69de42-b3b9-4a6e-a764-3038552d0ecb", + "last_modified": 1759122888954 }, { - "name": "Opera", - "schema": 1756512305715, + "name": "Safari on iOS", + "schema": 1758931504510, "status": "beta", - "version": "122", - "browserid": "opera", - "id": "25658331-55b6-4129-8e2d-c59ca95df3f7", - "last_modified": 1756731463810 + "version": "26.1", + "browserid": "safari_ios", + "id": "c67d6870-269b-4aa5-9a1b-03662a4b5771", + "last_modified": 1759122888950 }, { - "name": "Opera", - "schema": 1756512305662, - "status": "current", - "version": "121", - "browserid": "opera", - "id": "f6db5e03-957c-4d2b-a74b-d537ea26be3f", - "last_modified": 1756731463807 + "name": "Firefox for Android", + "schema": 1758326704716, + "status": "planned", + "version": "146", + "browserid": "firefox_android", + "id": "b8de7d68-78f0-49a8-ae02-2b807c2a40d0", + "last_modified": 1758530878231 }, { - "name": "Opera Android", - "schema": 1755648303899, - "status": "current", - "version": "91", - "browserid": "opera_android", - "id": "ea20fdb2-749c-40db-86ef-be115a411cae", - "last_modified": 1755841815012 + "name": "Firefox", + "schema": 1758326704408, + "status": "planned", + "version": "146", + "browserid": "firefox", + "id": "db1e42f6-cbd7-4a17-a388-2190ad554abf", + "last_modified": 1758530878227 }, { "name": "Firefox for Android", - "schema": 1755648303773, - "status": "planned", + "schema": 1758326704661, + "status": "nightly", "version": "145", "browserid": "firefox_android", "id": "546eaac9-d444-4f9f-a403-b97a76646211", - "last_modified": 1755841815009 + "last_modified": 1758530878222 }, { "name": "Firefox", - "schema": 1755648303463, - "status": "planned", + "schema": 1758326704358, + "status": "nightly", "version": "145", "browserid": "firefox", "id": "04fc0708-9123-4914-a491-ca13f20285e6", - "last_modified": 1755841815006 + "last_modified": 1758530878217 }, { "name": "Firefox for Android", - "schema": 1755648303714, - "status": "nightly", + "schema": 1758326704601, + "status": "beta", "version": "144", "browserid": "firefox_android", "id": "6e20e090-5795-4f55-bfe3-b202305eedee", - "last_modified": 1755841815001 + "last_modified": 1758530878213 }, { "name": "Firefox", - "schema": 1755648303385, - "status": "nightly", + "schema": 1758326704297, + "status": "beta", "version": "144", "browserid": "firefox", "id": "759d8212-1e45-4ccc-ac65-75ecfc260633", - "last_modified": 1755841814997 - }, - { - "name": "Safari on iOS", - "schema": 1755648304138, - "status": "current", - "version": "18.6", - "browserid": "safari_ios", - "id": "3993a35c-f47d-4ad1-9e8c-5127b8390c0c", - "last_modified": 1755841814994 - }, - { - "name": "Safari", - "schema": 1755648304021, - "status": "current", - "version": "18.6", - "browserid": "safari", - "id": "9c6309f8-1f2e-41fd-8728-3d8211dac298", - "last_modified": 1755841814991 - }, - { - "name": "WebView on iOS", - "schema": 1755648304256, - "status": "current", - "version": "18.6", - "browserid": "webview_ios", - "id": "3fc4e708-1847-41de-a640-45cabbf41d5a", - "last_modified": 1755841814988 + "last_modified": 1758530878209 }, { "name": "Firefox for Android", - "schema": 1755648303652, - "status": "beta", + "schema": 1758326704544, + "status": "current", "version": "143", "browserid": "firefox_android", "id": "1202f99c-4161-4075-a5f5-01dcb1734bff", - "last_modified": 1755841814985 + "last_modified": 1758530878205 }, { "name": "Firefox", - "schema": 1755648303325, - "status": "beta", + "schema": 1758326704240, + "status": "current", "version": "143", "browserid": "firefox", "id": "8c64af12-6643-49a8-bf55-f3941779399c", - "last_modified": 1755841814982 + "last_modified": 1758530878200 }, { - "name": "Firefox for Android", - "schema": 1755648303589, + "name": "Safari", + "schema": 1758067511101, "status": "current", - "version": "142", - "browserid": "firefox_android", - "id": "78d60df0-cb7e-4949-9917-ed8fdc503382", - "last_modified": 1755841814979 + "version": "26", + "browserid": "safari", + "id": "a2267a3f-85fb-4cae-ae62-114bac84b6e2", + "last_modified": 1758093000205 }, { - "name": "Firefox", - "schema": 1755648303261, + "name": "WebView on iOS", + "schema": 1758067511368, "status": "current", - "version": "142", - "browserid": "firefox", - "id": "a5323a0e-8201-4c4b-a5fd-ff89431cc98b", - "last_modified": 1755841814976 + "version": "26", + "browserid": "webview_ios", + "id": "4bffa3ba-dc73-452c-8ad8-0a5c0a678a5b", + "last_modified": 1758093000202 }, { - "name": "Edge", - "schema": 1754784303244, - "status": "planned", - "version": "142", - "browserid": "edge", - "id": "7d644a9d-4167-44d0-b58a-165beedf43e5", - "last_modified": 1754902587193 + "name": "Safari on iOS", + "schema": 1758067511234, + "status": "current", + "version": "26", + "browserid": "safari_ios", + "id": "35e8bf06-f297-404f-b4d3-186f3fd5dbae", + "last_modified": 1758093000199 }, { - "name": "Edge", - "schema": 1754784303188, + "name": "Opera", + "schema": 1757721902746, "status": "nightly", - "version": "141", - "browserid": "edge", - "id": "1276177b-8e2c-4677-9839-c39cdb272d9f", - "last_modified": 1754902587190 + "version": "124", + "browserid": "opera", + "id": "b74063d3-65d7-45b2-afc1-d30123fc2999", + "last_modified": 1757918638116 }, { - "name": "Edge", - "schema": 1754784303129, + "name": "Opera", + "schema": 1757721902692, "status": "beta", - "version": "140", - "browserid": "edge", - "id": "2f6ded78-f30e-4477-9175-c32d040041c7", - "last_modified": 1754902587186 + "version": "123", + "browserid": "opera", + "id": "847fc43b-579e-4b26-a1fa-cb978ec0438b", + "last_modified": 1757918638110 }, { - "name": "Edge", - "schema": 1754784303073, + "name": "Opera", + "schema": 1757721902630, "status": "current", - "version": "139", - "browserid": "edge", - "id": "c652a9a5-3a1c-4272-8a52-68dd4e9ae1b4", - "last_modified": 1754902587183 + "version": "122", + "browserid": "opera", + "id": "25658331-55b6-4129-8e2d-c59ca95df3f7", + "last_modified": 1757918638101 + }, + { + "name": "Opera Android", + "schema": 1755648303899, + "status": "current", + "version": "91", + "browserid": "opera_android", + "id": "ea20fdb2-749c-40db-86ef-be115a411cae", + "last_modified": 1755841815012 }, { "name": "Firefox for Android", @@ -307,33 +343,6 @@ "last_modified": 1754642891013 }, { - "name": "Safari", - "schema": 1749550693771, - "status": "beta", - "version": "26", - "browserid": "safari", - "id": "a2267a3f-85fb-4cae-ae62-114bac84b6e2", - "last_modified": 1749710045183 - }, - { - "name": "WebView on iOS", - "schema": 1749600305332, - "status": "beta", - "version": "26", - "browserid": "webview_ios", - "id": "4bffa3ba-dc73-452c-8ad8-0a5c0a678a5b", - "last_modified": 1749710045179 - }, - { - "name": "Safari on iOS", - "schema": 1749600305266, - "status": "beta", - "version": "26", - "browserid": "safari_ios", - "id": "35e8bf06-f297-404f-b4d3-186f3fd5dbae", - "last_modified": 1749710045175 - }, - { "name": "Samsung Internet", "schema": 1749254703179, "status": "current", @@ -343,15 +352,6 @@ "last_modified": 1749550693720 }, { - "name": "Deno", - "schema": 1748649903302, - "status": "current", - "version": "2.3.2", - "browserid": "deno", - "id": "1f2765cf-a177-4249-b5f9-fdf271727bb7", - "last_modified": 1748854785996 - }, - { "name": "Node.js", "schema": 1747181110151, "status": "current", @@ -379,5 +379,5 @@ "last_modified": 1665656484764 } ], - "timestamp": 1756978460941 + "timestamp": 1759736266415 } diff -Nru firefox-esr-140.3.1esr/services/settings/dumps/main/translations-models.json firefox-esr-140.4.0esr/services/settings/dumps/main/translations-models.json --- firefox-esr-140.3.1esr/services/settings/dumps/main/translations-models.json 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/services/settings/dumps/main/translations-models.json 2025-10-09 15:35:38.000000000 +0000 @@ -1,6 +1,1982 @@ { "data": [ { + "hash": "d9f46182823d5bbc84201252b2dfcac28f63e561f0ec827ed858f241864c9def", + "name": "vocab.enpt.spm", + "schema": 1759520726445, + "toLang": "pt", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "d9f46182823d5bbc84201252b2dfcac28f63e561f0ec827ed858f241864c9def", + "size": 816726, + "filename": "vocab.enpt.spm", + "location": "main-workspace/translations-models/552305f8-68e2-4b29-bd67-d875d14b27ff.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "54734f87-a586-47f8-be8c-1c53ecee1b5f", + "last_modified": 1759521854764 + }, + { + "hash": "a8f5c51abfa78cae9b8e5e4ed284491681b77efac6f9c541a1caee5a5721b12f", + "name": "lex.50.50.enpt.s2t.bin", + "schema": 1759520728232, + "toLang": "pt", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "a8f5c51abfa78cae9b8e5e4ed284491681b77efac6f9c541a1caee5a5721b12f", + "size": 3969472, + "filename": "lex.50.50.enpt.s2t.bin", + "location": "main-workspace/translations-models/febff7c2-1b12-486c-a5b2-30212fd49e7e.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "ced4d8d4-6d15-4603-a359-52205694d572", + "last_modified": 1759521854761 + }, + { + "hash": "3f58310f2af8106e92d6e37d892d3d469c50cccf33374e96caa99bb477b6f6f2", + "name": "lex.50.50.ennl.s2t.bin", + "schema": 1759520708425, + "toLang": "nl", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "3f58310f2af8106e92d6e37d892d3d469c50cccf33374e96caa99bb477b6f6f2", + "size": 4028196, + "filename": "lex.50.50.ennl.s2t.bin", + "location": "main-workspace/translations-models/2894dd57-5420-48e2-8bf9-ab55f03d2663.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "827f2c1d-dfb7-46a5-886f-f1f828e6cd15", + "last_modified": 1759521854757 + }, + { + "hash": "c09588ca5662b230ed65bd39a07f58d9f7dd21c3a19e4aeb1bff39bf3b297c56", + "name": "vocab.ennl.spm", + "schema": 1759520712489, + "toLang": "nl", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "c09588ca5662b230ed65bd39a07f58d9f7dd21c3a19e4aeb1bff39bf3b297c56", + "size": 807708, + "filename": "vocab.ennl.spm", + "location": "main-workspace/translations-models/51b87d03-189a-4a9c-8eae-6d05503eff2f.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "5236eaf2-77bf-4e0f-9e55-f0ae881103fe", + "last_modified": 1759521854753 + }, + { + "hash": "7a179dfa5e6026f8a6bb4c3175a9fd38f93c4b65858c3ba44d3937fc60b86138", + "name": "model.ennl.intgemm.alphas.bin", + "schema": 1759520714750, + "toLang": "nl", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "7a179dfa5e6026f8a6bb4c3175a9fd38f93c4b65858c3ba44d3937fc60b86138", + "size": 31561787, + "filename": "model.ennl.intgemm.alphas.bin", + "location": "main-workspace/translations-models/26212492-4577-4b45-ba2f-2108940ff3fb.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "31e21afb-cb75-4d4e-9d81-0960069d5c7d", + "last_modified": 1759521854750 + }, + { + "hash": "3ca4400ae45f173c3d647e169e474af804e5198cccf20bc405c93bb12bf9906d", + "name": "model.enpt.intgemm.alphas.bin", + "schema": 1759520730424, + "toLang": "pt", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "3ca4400ae45f173c3d647e169e474af804e5198cccf20bc405c93bb12bf9906d", + "size": 31561787, + "filename": "model.enpt.intgemm.alphas.bin", + "location": "main-workspace/translations-models/aae71849-7d93-4cf5-8719-2a485de2e5dd.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "4d53b99e-3372-4ff9-878c-85478734ba6b", + "last_modified": 1759521854746 + }, + { + "hash": "3ef0211d4ae6db21440892f180f2019fe2bfc110a330ffa9d2eca9665e4f2bc5", + "name": "vocab.enit.spm", + "schema": 1759520687885, + "toLang": "it", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "3ef0211d4ae6db21440892f180f2019fe2bfc110a330ffa9d2eca9665e4f2bc5", + "size": 812724, + "filename": "vocab.enit.spm", + "location": "main-workspace/translations-models/0c1874f1-317a-4f64-861b-8411da7f674e.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "f62ca807-0c80-4a4f-8443-844ae88fc7c5", + "last_modified": 1759521854742 + }, + { + "hash": "c11802433cf72c39eb301ad88ffd682c46a819b027efd2690f0178afdba651f9", + "name": "model.enit.intgemm.alphas.bin", + "schema": 1759520694035, + "toLang": "it", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "c11802433cf72c39eb301ad88ffd682c46a819b027efd2690f0178afdba651f9", + "size": 31561787, + "filename": "model.enit.intgemm.alphas.bin", + "location": "main-workspace/translations-models/48b979e4-d9b5-4942-ba79-78cb4b168999.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "95487501-243e-4515-a150-cafcf6ca9f9f", + "last_modified": 1759521854738 + }, + { + "hash": "783abf3abe075afdf8d85d233994bef2c3a064e935ab1bed946820aff6ac002a", + "name": "vocab.enfr.spm", + "schema": 1759520677153, + "toLang": "fr", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "783abf3abe075afdf8d85d233994bef2c3a064e935ab1bed946820aff6ac002a", + "size": 814404, + "filename": "vocab.enfr.spm", + "location": "main-workspace/translations-models/c7c1bcf3-71f6-425a-a6ed-403bd9a0a759.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "9520d129-61b2-42dd-b823-bf012a4cb12b", + "last_modified": 1759521854734 + }, + { + "hash": "2585ed98d3af0bc949865aedeb390493d591f56870814376e73e4144c41ed059", + "name": "lex.50.50.enfr.s2t.bin", + "schema": 1759520674620, + "toLang": "fr", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "2585ed98d3af0bc949865aedeb390493d591f56870814376e73e4144c41ed059", + "size": 4372936, + "filename": "lex.50.50.enfr.s2t.bin", + "location": "main-workspace/translations-models/293d1823-ff05-48c9-837b-cff8fd33f197.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "644b16c2-5314-4c3c-b3fd-b7ad82cdb060", + "last_modified": 1759521854730 + }, + { + "hash": "2c13dba6937eb2775ac534e7cd4dcb0587c2222a09c178a81127591a15b7f20a", + "name": "lex.50.50.enit.s2t.bin", + "schema": 1759520690006, + "toLang": "it", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "2c13dba6937eb2775ac534e7cd4dcb0587c2222a09c178a81127591a15b7f20a", + "size": 4136368, + "filename": "lex.50.50.enit.s2t.bin", + "location": "main-workspace/translations-models/879e6e19-63d4-491d-ab83-7415cf6628dc.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "b286fa3f-d3ab-4e43-9530-ca3723e7656b", + "last_modified": 1759521854727 + }, + { + "hash": "88b0caa4cc6980d632801cb2b1950748f1dc43ad2ac83678917ad86c720b5cdd", + "name": "model.enfi.intgemm.alphas.bin", + "schema": 1759520661943, + "toLang": "fi", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "88b0caa4cc6980d632801cb2b1950748f1dc43ad2ac83678917ad86c720b5cdd", + "size": 31561787, + "filename": "model.enfi.intgemm.alphas.bin", + "location": "main-workspace/translations-models/b23aac5b-1f93-407d-be1a-aff19bcd86b4.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "e42d9cec-99d8-44d3-9d3e-33b3bae56097", + "last_modified": 1759521854723 + }, + { + "hash": "6322e296d4fecfe395a8d5723da4ec37ecbe6d7613bb1dfcf4b28e2a47498b68", + "name": "model.enfr.intgemm.alphas.bin", + "schema": 1759520679477, + "toLang": "fr", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "6322e296d4fecfe395a8d5723da4ec37ecbe6d7613bb1dfcf4b28e2a47498b68", + "size": 31561787, + "filename": "model.enfr.intgemm.alphas.bin", + "location": "main-workspace/translations-models/e0d7f3ee-163a-4b0a-8e44-8b208b39477d.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "32e897a1-335d-4479-b9d4-60e7b867931c", + "last_modified": 1759521854719 + }, + { + "hash": "26e95a87f87e4b0fa9a35524cf9fea691204504453877ba4ac81ccc66af1488c", + "name": "lex.50.50.enfi.s2t.bin", + "schema": 1759520658123, + "toLang": "fi", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "26e95a87f87e4b0fa9a35524cf9fea691204504453877ba4ac81ccc66af1488c", + "size": 3490092, + "filename": "lex.50.50.enfi.s2t.bin", + "location": "main-workspace/translations-models/a32029c0-5216-49a3-ba89-8f48c29e7188.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "9f360c91-90ec-4381-98d6-ebab48fc3fd6", + "last_modified": 1759521854715 + }, + { + "hash": "89a3deea4ae7d674fb46a4dae39135dd4dfaac9786f2868d0b5bc5c0aca2ef83", + "name": "vocab.enet.spm", + "schema": 1759520640617, + "toLang": "et", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "89a3deea4ae7d674fb46a4dae39135dd4dfaac9786f2868d0b5bc5c0aca2ef83", + "size": 817574, + "filename": "vocab.enet.spm", + "location": "main-workspace/translations-models/957b94c4-d106-40b7-b4e2-176f2a923d32.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "41561d16-be79-4d37-a0e9-4c6bf6bb5efb", + "last_modified": 1759521854711 + }, + { + "hash": "6a866911427f2916609ae89c7f2f04a78de3fdd8aa183039ecba986635d4f246", + "name": "vocab.enfi.spm", + "schema": 1759520660258, + "toLang": "fi", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "6a866911427f2916609ae89c7f2f04a78de3fdd8aa183039ecba986635d4f246", + "size": 818770, + "filename": "vocab.enfi.spm", + "location": "main-workspace/translations-models/f98de766-1b61-4245-83f3-0d300232ebe4.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "d346a6d6-b709-4f8f-8606-65d1bde7f158", + "last_modified": 1759521854708 + }, + { + "hash": "4944790f6176841074bd93964c9eb9d8d7ae9687029a5f90941b5652fc69d937", + "name": "lex.50.50.enes.s2t.bin", + "schema": 1759520622578, + "toLang": "es", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "4944790f6176841074bd93964c9eb9d8d7ae9687029a5f90941b5652fc69d937", + "size": 4198216, + "filename": "lex.50.50.enes.s2t.bin", + "location": "main-workspace/translations-models/93e99ce1-57ff-4a7f-a5db-43f106d44b7a.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "b07e71b6-c128-4373-a7c3-b2da1c2ad118", + "last_modified": 1759521854704 + }, + { + "hash": "5ae254fa9b15aa182e70fd2a6186b1333c63a29a48043a9224c6aa4fcac058ad", + "name": "vocab.enes.spm", + "schema": 1759520636647, + "toLang": "es", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "5ae254fa9b15aa182e70fd2a6186b1333c63a29a48043a9224c6aa4fcac058ad", + "size": 816054, + "filename": "vocab.enes.spm", + "location": "main-workspace/translations-models/5ac5c966-d9b3-4e89-a972-4c23e82e7157.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "ee550bb4-66af-449c-84ed-7187ed7348e8", + "last_modified": 1759521854700 + }, + { + "hash": "36bdc87f8d500861a5d286ebd3ea58df530da87e31b8a233f5e9c46c300c281d", + "name": "model.enet.intgemm.alphas.bin", + "schema": 1759520642209, + "toLang": "et", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "36bdc87f8d500861a5d286ebd3ea58df530da87e31b8a233f5e9c46c300c281d", + "size": 31561787, + "filename": "model.enet.intgemm.alphas.bin", + "location": "main-workspace/translations-models/4c2378de-a52b-4773-9f1a-73ca396520e1.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "ac59477c-ca95-43d3-a310-b58c44e92274", + "last_modified": 1759521854696 + }, + { + "hash": "69f730becafa48e3bb2c244eab66456877c08959a02f2bd5519b5a3088b62f9c", + "name": "vocab.ende.spm", + "schema": 1759520617045, + "toLang": "de", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "69f730becafa48e3bb2c244eab66456877c08959a02f2bd5519b5a3088b62f9c", + "size": 810073, + "filename": "vocab.ende.spm", + "location": "main-workspace/translations-models/b7ebf943-6072-48fc-99d9-c28f653521c3.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "df886ebe-0adf-45c6-8bc0-02f5e5770469", + "last_modified": 1759521854692 + }, + { + "hash": "699b9b59fe3acbcddf831380024b2e139f2cbe225dce96d59ade2b159318f58b", + "name": "lex.50.50.encs.s2t.bin", + "schema": 1759520595073, + "toLang": "cs", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "699b9b59fe3acbcddf831380024b2e139f2cbe225dce96d59ade2b159318f58b", + "size": 3572436, + "filename": "lex.50.50.encs.s2t.bin", + "location": "main-workspace/translations-models/0b6ddbc2-b4cc-45a9-b2db-fe9369ad2064.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "65548616-f6ed-472c-8e2b-6268664ff77e", + "last_modified": 1759521854688 + }, + { + "hash": "065a67085165d095f452752e9c7438d20243cbcc0933ef505d3a77f02668901b", + "name": "model.enes.intgemm.alphas.bin", + "schema": 1759520624649, + "toLang": "es", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "065a67085165d095f452752e9c7438d20243cbcc0933ef505d3a77f02668901b", + "size": 31561787, + "filename": "model.enes.intgemm.alphas.bin", + "location": "main-workspace/translations-models/2ec4ee9d-37e3-4dfc-abc9-5cd509926e88.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "9aaf0cda-43f1-4c87-8686-53b7c3a1c555", + "last_modified": 1759521854685 + }, + { + "hash": "259c60582f49449c226a6e5a369481c68322013f367e459e54c595686c05d4d8", + "name": "lex.50.50.enet.s2t.bin", + "schema": 1759520654114, + "toLang": "et", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "259c60582f49449c226a6e5a369481c68322013f367e459e54c595686c05d4d8", + "size": 3488368, + "filename": "lex.50.50.enet.s2t.bin", + "location": "main-workspace/translations-models/074d0851-cd04-4494-8037-ac14bab5663c.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "823eecf2-3ba0-4020-9f53-bd080aeacb2e", + "last_modified": 1759521854681 + }, + { + "hash": "b295dfefa7022a62e105276e8c39fdfd67bffe588f4fd78583edd4e04ee0cb3b", + "name": "lex.50.50.plen.s2t.bin", + "schema": 1759520574597, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "pl", + "attachment": { + "hash": "b295dfefa7022a62e105276e8c39fdfd67bffe588f4fd78583edd4e04ee0cb3b", + "size": 4964208, + "filename": "lex.50.50.plen.s2t.bin", + "location": "main-workspace/translations-models/9a072be8-d900-4062-a2ab-c53c8eb8e619.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "bf1375e4-51d4-482f-9891-8f665e032117", + "last_modified": 1759521854677 + }, + { + "hash": "ee4b8ce15c8e1237c5f7a2d04741341beb0a5d5c09820f7ec08f13ee2b212755", + "name": "vocab.encs.spm", + "schema": 1759520593413, + "toLang": "cs", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "ee4b8ce15c8e1237c5f7a2d04741341beb0a5d5c09820f7ec08f13ee2b212755", + "size": 815154, + "filename": "vocab.encs.spm", + "location": "main-workspace/translations-models/008ef5e3-4ba0-4d97-9dd6-5898c7348e28.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "eaa1fc30-9601-4446-9780-0654bd53d236", + "last_modified": 1759521854673 + }, + { + "hash": "4bafad5fcc0e771ed82233d1e99d69dcb96487b430702f7e688615c8a61f3df4", + "name": "vocab.enbg.spm", + "schema": 1759520589786, + "toLang": "bg", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "4bafad5fcc0e771ed82233d1e99d69dcb96487b430702f7e688615c8a61f3df4", + "size": 922482, + "filename": "vocab.enbg.spm", + "location": "main-workspace/translations-models/a8ce512a-c98e-4ec3-83f4-10b1b91c75c2.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "b335ba28-1403-4438-8e9c-3859a0a1a7de", + "last_modified": 1759521854670 + }, + { + "hash": "93d4ca4412db269cc4164cbfa04c08edd0f65690c8264d6215a0522d4a13ec1a", + "name": "lex.50.50.enbg.s2t.bin", + "schema": 1759520579024, + "toLang": "bg", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "93d4ca4412db269cc4164cbfa04c08edd0f65690c8264d6215a0522d4a13ec1a", + "size": 3075948, + "filename": "lex.50.50.enbg.s2t.bin", + "location": "main-workspace/translations-models/934075f0-9235-4921-964c-3de9d19d904b.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "e270b1a0-bd0d-4e58-9e69-fb46a8457e9a", + "last_modified": 1759521854666 + }, + { + "hash": "804af7bac566b722b0bad71ce0dbed5fade7d84f48e86986f695b63117646327", + "name": "model.ende.intgemm.alphas.bin", + "schema": 1759520606831, + "toLang": "de", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "804af7bac566b722b0bad71ce0dbed5fade7d84f48e86986f695b63117646327", + "size": 31561787, + "filename": "model.ende.intgemm.alphas.bin", + "location": "main-workspace/translations-models/bb2183f9-4366-469c-bd9f-6019aa4fa2a8.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "550508e9-ca46-4ca9-97fd-90c124ef19f6", + "last_modified": 1759521854662 + }, + { + "hash": "1d7855f91c3e2b8ef79fbea62707d46ceb8a1ad01834ef6dd500f32a7006cc2c", + "name": "model.encs.intgemm.alphas.bin", + "schema": 1759520597164, + "toLang": "cs", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "1d7855f91c3e2b8ef79fbea62707d46ceb8a1ad01834ef6dd500f32a7006cc2c", + "size": 31561787, + "filename": "model.encs.intgemm.alphas.bin", + "location": "main-workspace/translations-models/6dc79644-4994-4816-8d12-418b11df69ff.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "231e82bc-8e3a-4c85-bea9-2bdb677d508c", + "last_modified": 1759521854658 + }, + { + "hash": "e2b30db98ac6706efc893067a74e51f36f015a8f820fe8a4f0f5052fa6a22f30", + "name": "model.enbg.intgemm.alphas.bin", + "schema": 1759520581215, + "toLang": "bg", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "e2b30db98ac6706efc893067a74e51f36f015a8f820fe8a4f0f5052fa6a22f30", + "size": 31561787, + "filename": "model.enbg.intgemm.alphas.bin", + "location": "main-workspace/translations-models/d6370002-bed8-4add-bf86-50f1ab67e6d6.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "45c0ce1c-5381-49a6-8f34-4cb6d86ebaf3", + "last_modified": 1759521854654 + }, + { + "hash": "06dbab3baa3bbceab746bc6a3bba807878f38536382c03acddf59d3edf3b5d94", + "name": "model.plen.intgemm.alphas.bin", + "schema": 1759520562207, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "pl", + "attachment": { + "hash": "06dbab3baa3bbceab746bc6a3bba807878f38536382c03acddf59d3edf3b5d94", + "size": 31561787, + "filename": "model.plen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/dd8a7ab8-b12f-4ad4-8827-0922510df232.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "d1933ad4-9d95-40ec-8f26-c66be1f24089", + "last_modified": 1759521854651 + }, + { + "hash": "6ba996a2dc9cc72df0bbeb29971d1533f6778ab9dda4183f6304f72b4e32ca6d", + "name": "lex.50.50.ende.s2t.bin", + "schema": 1759520618620, + "toLang": "de", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "6ba996a2dc9cc72df0bbeb29971d1533f6778ab9dda4183f6304f72b4e32ca6d", + "size": 4348468, + "filename": "lex.50.50.ende.s2t.bin", + "location": "main-workspace/translations-models/12308686-c98b-46b1-840a-4f0fcb4450bf.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "28639950-4547-4887-96f6-a3d20045ebf2", + "last_modified": 1759521854647 + }, + { + "hash": "2000f182efa8ce5f69bc3f9e574666b5bc2c0af684eedd32f69d15aa9021ea85", + "name": "vocab.plen.spm", + "schema": 1759520572571, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "pl", + "attachment": { + "hash": "2000f182efa8ce5f69bc3f9e574666b5bc2c0af684eedd32f69d15aa9021ea85", + "size": 821612, + "filename": "vocab.plen.spm", + "location": "main-workspace/translations-models/47b0f4cd-7d3c-4cf5-b7b4-0aecfbdc51f6.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "798e0231-0a9c-485f-854a-097d0f5d9fa0", + "last_modified": 1759521854643 + }, + { + "hash": "970c98d174fc01e0339fbabbf45af36a4be3f26f819ec1a5ea1189f71e091889", + "name": "srcvocab.enja.spm", + "schema": 1758214241303, + "toLang": "ja", + "version": "2.3", + "fileType": "srcvocab", + "fromLang": "en", + "attachment": { + "hash": "970c98d174fc01e0339fbabbf45af36a4be3f26f819ec1a5ea1189f71e091889", + "size": 796275, + "filename": "srcvocab.enja.spm", + "location": "main-workspace/translations-models/cdea5422-fe0d-4941-a653-ca090423e8f8.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "e0f9e1be-bd45-4c8c-8c02-48474b05f4d9", + "last_modified": 1758219707471 + }, + { + "hash": "59ae659f9bb63e4f81f474fe3c03d3f4499434b5f9e779fab7c12a45f31fd562", + "name": "model.enja.intgemm.alphas.bin", + "schema": 1758214227445, + "toLang": "ja", + "version": "2.3", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "59ae659f9bb63e4f81f474fe3c03d3f4499434b5f9e779fab7c12a45f31fd562", + "size": 43849787, + "filename": "model.enja.intgemm.alphas.bin", + "location": "main-workspace/translations-models/4e19636e-4644-4072-8a05-9ef695d4a3ae.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "83aa9a9b-f2da-42fa-9332-7cbbdd57eac0", + "last_modified": 1758219707467 + }, + { + "hash": "4e5accc141373565ddc8fa1565bceaa8d0c3482a82cab8131c719ebcc6c2157c", + "name": "model.enzh.intgemm.alphas.bin", + "schema": 1758214387565, + "toLang": "zh-Hans", + "version": "2.2", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "4e5accc141373565ddc8fa1565bceaa8d0c3482a82cab8131c719ebcc6c2157c", + "size": 43849787, + "filename": "model.enzh.intgemm.alphas.bin", + "location": "main-workspace/translations-models/a7ff7d5e-e67e-406c-a34b-a7edea35b10e.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "293c468d-047b-4e00-86ee-07ef56985fda", + "last_modified": 1758219707463 + }, + { + "hash": "bd9b65504acc6d9726dd281f7defc2adb7c2c22d0688fe2f84697de25197c8c5", + "name": "srcvocab.enzh.spm", + "schema": 1758214380378, + "toLang": "zh-Hans", + "version": "2.2", + "fileType": "srcvocab", + "fromLang": "en", + "attachment": { + "hash": "bd9b65504acc6d9726dd281f7defc2adb7c2c22d0688fe2f84697de25197c8c5", + "size": 806952, + "filename": "srcvocab.enzh.spm", + "location": "main-workspace/translations-models/ea98c52c-58dc-45d5-af23-38f2b029d020.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "bbad37a4-c1a9-4227-acf7-a23fc8c36684", + "last_modified": 1758219707459 + }, + { + "hash": "3b3d9f8f3a034d98d0a476f1794fa79c01e4e98a967ceb6777a66ba2d03ec1e1", + "name": "trgvocab.enja.spm", + "schema": 1758214242905, + "toLang": "ja", + "version": "2.3", + "fileType": "trgvocab", + "fromLang": "en", + "attachment": { + "hash": "3b3d9f8f3a034d98d0a476f1794fa79c01e4e98a967ceb6777a66ba2d03ec1e1", + "size": 827144, + "filename": "trgvocab.enja.spm", + "location": "main-workspace/translations-models/5c1a663f-5736-4100-b681-c6737fe79cb5.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "cfdf191b-19ff-4e8b-912c-e79c79eb5cb9", + "last_modified": 1758219707454 + }, + { + "hash": "edfb7eb47b98a2689b804ab3614c31b24f1257aa54b1154da3d85e1ae8152d9f", + "name": "lex.50.50.enja.s2t.bin", + "schema": 1758214244482, + "toLang": "ja", + "version": "2.3", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "edfb7eb47b98a2689b804ab3614c31b24f1257aa54b1154da3d85e1ae8152d9f", + "size": 4128360, + "filename": "lex.50.50.enja.s2t.bin", + "location": "main-workspace/translations-models/87258444-8fac-4d3c-a175-9275e9d10ffa.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "2e666871-3021-47c4-88ce-0c9ebc1bdd64", + "last_modified": 1758219707450 + }, + { + "hash": "d9f46182823d5bbc84201252b2dfcac28f63e561f0ec827ed858f241864c9def", + "name": "vocab.pten.spm", + "schema": 1758214187476, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "pt", + "attachment": { + "hash": "d9f46182823d5bbc84201252b2dfcac28f63e561f0ec827ed858f241864c9def", + "size": 816726, + "filename": "vocab.pten.spm", + "location": "main-workspace/translations-models/9f79e7dc-18ca-4ee7-ad79-2935e46b7d9a.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "460d70dd-8dd8-456f-b208-032d1ec7abf7", + "last_modified": 1758219707446 + }, + { + "hash": "aded6993c36e440284d11cec3f6b8aef9c0e43188a772d80be342a713adf223d", + "name": "trgvocab.enzh.spm", + "schema": 1758214246436, + "toLang": "zh-Hans", + "version": "2.2", + "fileType": "trgvocab", + "fromLang": "en", + "attachment": { + "hash": "aded6993c36e440284d11cec3f6b8aef9c0e43188a772d80be342a713adf223d", + "size": 772004, + "filename": "trgvocab.enzh.spm", + "location": "main-workspace/translations-models/bddbda68-d4d2-4317-a0a1-119caa47525e.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "ffc96f47-882c-4da5-931f-f2ac54fb33f3", + "last_modified": 1758219707442 + }, + { + "hash": "2685d8b6530be92a4db4cc61f15a097eb114552be15cb6c1699e9d2d99d24470", + "name": "lex.50.50.pten.s2t.bin", + "schema": 1758214189609, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "pt", + "attachment": { + "hash": "2685d8b6530be92a4db4cc61f15a097eb114552be15cb6c1699e9d2d99d24470", + "size": 4634492, + "filename": "lex.50.50.pten.s2t.bin", + "location": "main-workspace/translations-models/3a6531f9-2ab9-4164-852e-29d5242ceeaa.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "470fbe6f-962f-48d8-b4e0-88e8314b2748", + "last_modified": 1758219707438 + }, + { + "hash": "c09588ca5662b230ed65bd39a07f58d9f7dd21c3a19e4aeb1bff39bf3b297c56", + "name": "vocab.nlen.spm", + "schema": 1758214175267, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "nl", + "attachment": { + "hash": "c09588ca5662b230ed65bd39a07f58d9f7dd21c3a19e4aeb1bff39bf3b297c56", + "size": 807708, + "filename": "vocab.nlen.spm", + "location": "main-workspace/translations-models/fdbc9d1b-0246-4405-a57f-28fd41b734f7.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "40304b94-0c5a-4008-952f-751eee9f4835", + "last_modified": 1758219707434 + }, + { + "hash": "0700d6d70b30490e68ff9deca0b45b80310745b491855bde3a13e1692d0cbce1", + "name": "lex.50.50.iten.s2t.bin", + "schema": 1758214164445, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "it", + "attachment": { + "hash": "0700d6d70b30490e68ff9deca0b45b80310745b491855bde3a13e1692d0cbce1", + "size": 4713616, + "filename": "lex.50.50.iten.s2t.bin", + "location": "main-workspace/translations-models/122ac310-0f7b-40d5-b49d-bcee81077c85.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "89c47e2d-0cb0-472c-8295-6e4b908b44e7", + "last_modified": 1758219707430 + }, + { + "hash": "3ef0211d4ae6db21440892f180f2019fe2bfc110a330ffa9d2eca9665e4f2bc5", + "name": "vocab.iten.spm", + "schema": 1758214166480, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "it", + "attachment": { + "hash": "3ef0211d4ae6db21440892f180f2019fe2bfc110a330ffa9d2eca9665e4f2bc5", + "size": 812724, + "filename": "vocab.iten.spm", + "location": "main-workspace/translations-models/51b5a437-9daa-481e-a9bc-311f2b3f490c.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "bc2ecd3b-3cdc-481c-8acb-ac44368e4c15", + "last_modified": 1758219707426 + }, + { + "hash": "ff987741ff15a5d94fff16cbef28f2b0a85a6e9547d982fad60ac09d16d11270", + "name": "model.nlen.intgemm.alphas.bin", + "schema": 1758214179752, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "nl", + "attachment": { + "hash": "ff987741ff15a5d94fff16cbef28f2b0a85a6e9547d982fad60ac09d16d11270", + "size": 31561787, + "filename": "model.nlen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/71841772-36c8-483a-a3a2-4564aa55aa7d.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "bc887be4-29a2-4055-80bd-10c106110350", + "last_modified": 1758219707421 + }, + { + "hash": "87c6752ea908f5f0347c10ac0cf7d80d9c2f4f20c81c90168f3e8230b56d4440", + "name": "lex.50.50.fren.s2t.bin", + "schema": 1758214160130, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "fr", + "attachment": { + "hash": "87c6752ea908f5f0347c10ac0cf7d80d9c2f4f20c81c90168f3e8230b56d4440", + "size": 4824120, + "filename": "lex.50.50.fren.s2t.bin", + "location": "main-workspace/translations-models/c4d99496-81bf-480f-b0bb-3aebacdcbe8e.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "a39f1d28-96ab-4b7e-860b-ec53bd646b78", + "last_modified": 1758219707417 + }, + { + "hash": "7b854f1ec5a485dd33efd7c1bc01dd7d5a57f566957c5e47722af333f0ce9157", + "name": "model.pten.intgemm.alphas.bin", + "schema": 1758214192193, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "pt", + "attachment": { + "hash": "7b854f1ec5a485dd33efd7c1bc01dd7d5a57f566957c5e47722af333f0ce9157", + "size": 31561787, + "filename": "model.pten.intgemm.alphas.bin", + "location": "main-workspace/translations-models/6a2cb71f-cf08-431a-a4a2-22e450750408.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "d6e8c5c1-0153-4504-95e5-b2d2243a5899", + "last_modified": 1758219707413 + }, + { + "hash": "e3887341f18bcc7787d9b59eb1229b56eefce18d49b7ebf1e62c55d65a377321", + "name": "model.fien.intgemm.alphas.bin", + "schema": 1758214135884, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "fi", + "attachment": { + "hash": "e3887341f18bcc7787d9b59eb1229b56eefce18d49b7ebf1e62c55d65a377321", + "size": 31561787, + "filename": "model.fien.intgemm.alphas.bin", + "location": "main-workspace/translations-models/53159619-d082-4a0a-95c3-48b5765bee9b.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "3f143049-a980-4761-9a78-e205d709424b", + "last_modified": 1758219707409 + }, + { + "hash": "4a5e5827788060f1d718a8132b69440929387514a045796e9b77f935db68c055", + "name": "lex.50.50.enzh.s2t.bin", + "schema": 1758214395516, + "toLang": "zh-Hans", + "version": "2.2", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "4a5e5827788060f1d718a8132b69440929387514a045796e9b77f935db68c055", + "size": 6506248, + "filename": "lex.50.50.enzh.s2t.bin", + "location": "main-workspace/translations-models/da8fccc0-31df-4665-9703-96d36606e019.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "7d558edd-43cd-4734-8c4b-39eaf584edbc", + "last_modified": 1758219707405 + }, + { + "hash": "21b70978ce2f3b4da7a06b5de86a09abe3acd30b9eee1b2ebb3582b9bad790bf", + "name": "model.iten.intgemm.alphas.bin", + "schema": 1758214168055, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "it", + "attachment": { + "hash": "21b70978ce2f3b4da7a06b5de86a09abe3acd30b9eee1b2ebb3582b9bad790bf", + "size": 31561787, + "filename": "model.iten.intgemm.alphas.bin", + "location": "main-workspace/translations-models/a6e3de84-6612-4546-a4ef-b658ee23ca08.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "c6465a68-e22f-4cf3-ac49-b1a740ee98c7", + "last_modified": 1758219707401 + }, + { + "hash": "ad9750f3b41cb5686e561608271a0dc935fc827bf43226e579a6f48a3f6b5f11", + "name": "lex.50.50.eten.s2t.bin", + "schema": 1758214129776, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "et", + "attachment": { + "hash": "ad9750f3b41cb5686e561608271a0dc935fc827bf43226e579a6f48a3f6b5f11", + "size": 4625968, + "filename": "lex.50.50.eten.s2t.bin", + "location": "main-workspace/translations-models/d1eac33a-7bc9-4434-83ba-2f4d4b71169e.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "a3c86caf-1535-42ce-ac19-81d90dd63765", + "last_modified": 1758219707397 + }, + { + "hash": "df844b3a6df906b2e0682fb7765694f35b351854db00f964896d9c8c365fbff3", + "name": "model.eten.intgemm.alphas.bin", + "schema": 1758214122082, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "et", + "attachment": { + "hash": "df844b3a6df906b2e0682fb7765694f35b351854db00f964896d9c8c365fbff3", + "size": 31561787, + "filename": "model.eten.intgemm.alphas.bin", + "location": "main-workspace/translations-models/db579f73-6a71-45fa-b8a2-4a10592d1708.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "ec546079-e0b3-4ea4-ba14-3b94d94f445d", + "last_modified": 1758219707393 + }, + { + "hash": "15f997bc0d13808b0b0fbd0786e684a3c8a52adcd8071844b76123fdacbf2b90", + "name": "model.fren.intgemm.alphas.bin", + "schema": 1758214152726, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "fr", + "attachment": { + "hash": "15f997bc0d13808b0b0fbd0786e684a3c8a52adcd8071844b76123fdacbf2b90", + "size": 31561787, + "filename": "model.fren.intgemm.alphas.bin", + "location": "main-workspace/translations-models/8ef78b1c-df6c-49fc-8cae-cf8c0c2a6630.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "c17f1314-6d24-477b-b253-66fcba910091", + "last_modified": 1758219707389 + }, + { + "hash": "6a866911427f2916609ae89c7f2f04a78de3fdd8aa183039ecba986635d4f246", + "name": "vocab.fien.spm", + "schema": 1758214134225, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "fi", + "attachment": { + "hash": "6a866911427f2916609ae89c7f2f04a78de3fdd8aa183039ecba986635d4f246", + "size": 818770, + "filename": "vocab.fien.spm", + "location": "main-workspace/translations-models/473d4127-c4ad-4e55-8263-15be0bb60985.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "87a31c25-3d73-486b-be22-ab0a4a79c472", + "last_modified": 1758219707385 + }, + { + "hash": "8bad431e07b062ba47f363b76e4656cc743fd608316d8a4830a4315e44ac9abb", + "name": "lex.50.50.fien.s2t.bin", + "schema": 1758214145976, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "fi", + "attachment": { + "hash": "8bad431e07b062ba47f363b76e4656cc743fd608316d8a4830a4315e44ac9abb", + "size": 5195132, + "filename": "lex.50.50.fien.s2t.bin", + "location": "main-workspace/translations-models/285fa313-3daa-4117-b6fe-4246295fddab.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "bd5ac285-b38a-4633-bf5a-78da71a3a832", + "last_modified": 1758219707381 + }, + { + "hash": "69f730becafa48e3bb2c244eab66456877c08959a02f2bd5519b5a3088b62f9c", + "name": "vocab.deen.spm", + "schema": 1758214091146, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "de", + "attachment": { + "hash": "69f730becafa48e3bb2c244eab66456877c08959a02f2bd5519b5a3088b62f9c", + "size": 810073, + "filename": "vocab.deen.spm", + "location": "main-workspace/translations-models/8ad4d93e-21e6-4862-81d5-c1c3a7d0767b.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "b0af2346-d6d0-4d01-8e01-7a31f462160a", + "last_modified": 1758219707378 + }, + { + "hash": "783abf3abe075afdf8d85d233994bef2c3a064e935ab1bed946820aff6ac002a", + "name": "vocab.fren.spm", + "schema": 1758214150625, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "fr", + "attachment": { + "hash": "783abf3abe075afdf8d85d233994bef2c3a064e935ab1bed946820aff6ac002a", + "size": 814404, + "filename": "vocab.fren.spm", + "location": "main-workspace/translations-models/11ecb9da-60dd-4b39-aa12-27883099294b.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "0aa86c2a-190c-4007-8e55-89ec6be82f93", + "last_modified": 1758219707373 + }, + { + "hash": "4bafad5fcc0e771ed82233d1e99d69dcb96487b430702f7e688615c8a61f3df4", + "name": "vocab.bgen.spm", + "schema": 1758214057340, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "bg", + "attachment": { + "hash": "4bafad5fcc0e771ed82233d1e99d69dcb96487b430702f7e688615c8a61f3df4", + "size": 922482, + "filename": "vocab.bgen.spm", + "location": "main-workspace/translations-models/747b9ae8-c42c-41a5-913c-704fde180308.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "d818b153-523e-4d07-9895-b54fcb737449", + "last_modified": 1758219707370 + }, + { + "hash": "89a3deea4ae7d674fb46a4dae39135dd4dfaac9786f2868d0b5bc5c0aca2ef83", + "name": "vocab.eten.spm", + "schema": 1758214128226, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "et", + "attachment": { + "hash": "89a3deea4ae7d674fb46a4dae39135dd4dfaac9786f2868d0b5bc5c0aca2ef83", + "size": 817574, + "filename": "vocab.eten.spm", + "location": "main-workspace/translations-models/3d6825f2-7be2-4f57-9c75-1d0eeafc7f8c.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "c940008c-7b51-4669-9bf0-76a50a3a2060", + "last_modified": 1758219707366 + }, + { + "hash": "4aed7734152ae0045d1a69ae49c86cfda18f53c61f90e95e1d1de1c7c7c3b033", + "name": "model.esen.intgemm.alphas.bin", + "schema": 1758214108944, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "es", + "attachment": { + "hash": "4aed7734152ae0045d1a69ae49c86cfda18f53c61f90e95e1d1de1c7c7c3b033", + "size": 31561787, + "filename": "model.esen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/d7256ea9-7731-4f15-866c-62998eef93b9.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "81134968-ebdb-41f0-bf23-bf95f796b491", + "last_modified": 1758219707362 + }, + { + "hash": "c815273b31074492eaab0ccd78d33d7ac16f94088707ab2492abaedcb9ee0b75", + "name": "model.csen.intgemm.alphas.bin", + "schema": 1758214073796, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "cs", + "attachment": { + "hash": "c815273b31074492eaab0ccd78d33d7ac16f94088707ab2492abaedcb9ee0b75", + "size": 31561787, + "filename": "model.csen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/23af171d-0de1-4d96-a495-c9aa5a0b503d.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "7e5619e9-4d89-41c6-9da0-a6b7efa06bf0", + "last_modified": 1758219707358 + }, + { + "hash": "e661dfdd88aa9ff9606f237a60c910d97c2e710960199589579f628c5d8aa899", + "name": "lex.50.50.bgen.s2t.bin", + "schema": 1758214055124, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "bg", + "attachment": { + "hash": "e661dfdd88aa9ff9606f237a60c910d97c2e710960199589579f628c5d8aa899", + "size": 4355920, + "filename": "lex.50.50.bgen.s2t.bin", + "location": "main-workspace/translations-models/bb8b98f9-8067-442f-ae1c-d21a7182bc4d.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "ce7630a8-63ff-4fee-8c17-11f950709809", + "last_modified": 1758219707354 + }, + { + "hash": "ee4b8ce15c8e1237c5f7a2d04741341beb0a5d5c09820f7ec08f13ee2b212755", + "name": "vocab.csen.spm", + "schema": 1758214071832, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "cs", + "attachment": { + "hash": "ee4b8ce15c8e1237c5f7a2d04741341beb0a5d5c09820f7ec08f13ee2b212755", + "size": 815154, + "filename": "vocab.csen.spm", + "location": "main-workspace/translations-models/862ea69e-6c5e-4a6f-91a4-16d797f8c8aa.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "22e383ce-6bbd-4d17-bb88-5c4a61719c2c", + "last_modified": 1758219707351 + }, + { + "hash": "51b4ee3f828d10015464523d0b4f5a6c086b0b2a9bde716a581001cf6c260366", + "name": "vocab.aren.spm", + "schema": 1758214051550, + "toLang": "en", + "version": "2.2", + "fileType": "vocab", + "fromLang": "ar", + "attachment": { + "hash": "51b4ee3f828d10015464523d0b4f5a6c086b0b2a9bde716a581001cf6c260366", + "size": 860035, + "filename": "vocab.aren.spm", + "location": "main-workspace/translations-models/2dc6ab68-1f3e-4149-9c7c-d3dc1e6f70c3.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "12090ad6-9a19-49f9-84fe-ef9ecdac29f1", + "last_modified": 1758219707347 + }, + { + "hash": "7b7af0282dc5f4d8805b9a298c2fa828967e3f09ca10f1942ebeea0b2cfc12fa", + "name": "model.aren.intgemm.alphas.bin", + "schema": 1758214041098, + "toLang": "en", + "version": "2.2", + "fileType": "model", + "fromLang": "ar", + "attachment": { + "hash": "7b7af0282dc5f4d8805b9a298c2fa828967e3f09ca10f1942ebeea0b2cfc12fa", + "size": 31561787, + "filename": "model.aren.intgemm.alphas.bin", + "location": "main-workspace/translations-models/d66f948a-452f-45d4-adc1-e9cb9acb8766.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "386d946a-bb57-49c5-8837-15d1926e1e3a", + "last_modified": 1758219707343 + }, + { + "hash": "113b98460468360cca68c042e1cddf49c4e1931cbb975ed04349c9a3bd607010", + "name": "lex.50.50.deen.s2t.bin", + "schema": 1758214104503, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "de", + "attachment": { + "hash": "113b98460468360cca68c042e1cddf49c4e1931cbb975ed04349c9a3bd607010", + "size": 4945796, + "filename": "lex.50.50.deen.s2t.bin", + "location": "main-workspace/translations-models/d0e4efcb-6145-43db-a69e-568904cc2925.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "f48d3fb9-4035-4c9a-bd82-3caa3b9bef16", + "last_modified": 1758219707338 + }, + { + "hash": "eba6bd9575251525f1941640ea0b6527a06e72a46421579eafea04d635ee20a8", + "name": "lex.50.50.csen.s2t.bin", + "schema": 1758214086544, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "cs", + "attachment": { + "hash": "eba6bd9575251525f1941640ea0b6527a06e72a46421579eafea04d635ee20a8", + "size": 4990588, + "filename": "lex.50.50.csen.s2t.bin", + "location": "main-workspace/translations-models/5041825d-9867-42aa-a7ed-633b23912956.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "b22dad20-5d6b-4adf-85ee-5e74178e6593", + "last_modified": 1758219707334 + }, + { + "hash": "e2610211d3b9577d012638fe7e7e74ed7b4b708ce96b9e792e67c282a6492daa", + "name": "lex.50.50.esen.s2t.bin", + "schema": 1758214117953, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "es", + "attachment": { + "hash": "e2610211d3b9577d012638fe7e7e74ed7b4b708ce96b9e792e67c282a6492daa", + "size": 4636248, + "filename": "lex.50.50.esen.s2t.bin", + "location": "main-workspace/translations-models/a55a9cf2-8a8c-4942-a528-91e93d081746.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "521d7a12-4fa0-44cb-8fce-7364046dbdb2", + "last_modified": 1758219707330 + }, + { + "hash": "3e6f7c2c2425d10824797270b382bee718ff34af2cab9308841c82ca46dc6f20", + "name": "model.deen.intgemm.alphas.bin", + "schema": 1758214093329, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "de", + "attachment": { + "hash": "3e6f7c2c2425d10824797270b382bee718ff34af2cab9308841c82ca46dc6f20", + "size": 31561787, + "filename": "model.deen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/f44b1b1b-9df6-4ece-971e-0e5ce96fae54.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "37828762-4d80-43ad-9b46-497600ea1e7f", + "last_modified": 1758219707326 + }, + { + "hash": "8d93c54aa5e2044c416ec680b5ff9af0227bd698521666e8b1a1ea1b041fbae8", + "name": "vocab.enar.spm", + "schema": 1758214034533, + "toLang": "ar", + "version": "2.2", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "8d93c54aa5e2044c416ec680b5ff9af0227bd698521666e8b1a1ea1b041fbae8", + "size": 863591, + "filename": "vocab.enar.spm", + "location": "main-workspace/translations-models/793d9667-7929-4375-855d-96bbed2f113d.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "8d51a3f4-b11f-4930-9414-8665aa933c30", + "last_modified": 1758219707322 + }, + { + "hash": "ec0c210d09cd5d8a5edf7a50462db0a8fb5dd78d03bbc6d4d72d91074f0490e4", + "name": "model.enhu.intgemm.alphas.bin", + "schema": 1758214013673, + "toLang": "hu", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "ec0c210d09cd5d8a5edf7a50462db0a8fb5dd78d03bbc6d4d72d91074f0490e4", + "size": 31561787, + "filename": "model.enhu.intgemm.alphas.bin", + "location": "main-workspace/translations-models/d5939cb1-6af0-4e55-8fa1-6b11b1b029c2.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "f681dc04-16d1-4bd5-98c3-be26fac6f310", + "last_modified": 1758219707318 + }, + { + "hash": "78f7e6e1435cc2d4a29cf597f493187fe29ddb9ce9d3766c287e2e6d37052d01", + "name": "model.bgen.intgemm.alphas.bin", + "schema": 1758214059169, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "bg", + "attachment": { + "hash": "78f7e6e1435cc2d4a29cf597f493187fe29ddb9ce9d3766c287e2e6d37052d01", + "size": 31561787, + "filename": "model.bgen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/97fce537-11f0-4af5-a558-c314c9d25d09.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "3edbe2ed-e6b3-483e-8766-1c931443381f", + "last_modified": 1758219707314 + }, + { + "hash": "2eee837cfdcc45c091d025f585d3fcdb293db7794e316b38a0aeff8c47a659e0", + "name": "vocab.enhu.spm", + "schema": 1758214020342, + "toLang": "hu", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "2eee837cfdcc45c091d025f585d3fcdb293db7794e316b38a0aeff8c47a659e0", + "size": 806121, + "filename": "vocab.enhu.spm", + "location": "main-workspace/translations-models/65e27100-79fd-4e8e-bd2e-5786456ef8fb.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "588da9e4-3a61-41ea-b59b-2311ee63b985", + "last_modified": 1758219707310 + }, + { + "hash": "2b7194817c5dd9225ca90c0d908cc92e1d6d1f45625781a5feb037ac568d6a61", + "name": "lex.50.50.enar.s2t.bin", + "schema": 1758214032737, + "toLang": "ar", + "version": "2.2", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "2b7194817c5dd9225ca90c0d908cc92e1d6d1f45625781a5feb037ac568d6a61", + "size": 3139692, + "filename": "lex.50.50.enar.s2t.bin", + "location": "main-workspace/translations-models/d821aec4-485b-4747-b643-6e63cda5117d.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "cf1c8c47-6b3f-42d7-910a-a4f3a855e7ca", + "last_modified": 1758219707306 + }, + { + "hash": "ae659d7045fc2e5d6ba50583586a5d94ee4358d92c019847e37b57a0e627faa8", + "name": "model.enar.intgemm.alphas.bin", + "schema": 1758214026435, + "toLang": "ar", + "version": "2.2", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "ae659d7045fc2e5d6ba50583586a5d94ee4358d92c019847e37b57a0e627faa8", + "size": 31561787, + "filename": "model.enar.intgemm.alphas.bin", + "location": "main-workspace/translations-models/e282aa49-a77e-466e-b1b7-f98f34a9ea58.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "671ea5d4-7ceb-4742-a640-b60e50eddd52", + "last_modified": 1758219707302 + }, + { + "hash": "f3d1e61003597d1cc9d87e05d2b398a7ae2b3941e3f96947764aac239df1a808", + "name": "lex.50.50.enhu.s2t.bin", + "schema": 1758214022064, + "toLang": "hu", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "f3d1e61003597d1cc9d87e05d2b398a7ae2b3941e3f96947764aac239df1a808", + "size": 3490288, + "filename": "lex.50.50.enhu.s2t.bin", + "location": "main-workspace/translations-models/0f61321a-fae2-4195-8838-2fe6c5791f21.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "491785e8-9ca0-4e5e-91d4-6c16581b1ccf", + "last_modified": 1758219707297 + }, + { + "hash": "811ac8f9dcbd12706e2d73a7057a7bbe6b9f0607d15170ffe9439977e8229b41", + "name": "lex.50.50.nlen.s2t.bin", + "schema": 1758214177461, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "nl", + "attachment": { + "hash": "811ac8f9dcbd12706e2d73a7057a7bbe6b9f0607d15170ffe9439977e8229b41", + "size": 4862412, + "filename": "lex.50.50.nlen.s2t.bin", + "location": "main-workspace/translations-models/42bce52f-f0bf-4771-82d9-507af6aed9db.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "d27ec3cf-edf7-4e6e-b36a-b2c8e8f77f48", + "last_modified": 1758219707293 + }, + { + "hash": "4b45f14dbea40d368093a13563fc1ca48457ee70c1291c82b206f3baff210081", + "name": "lex.50.50.aren.s2t.bin", + "schema": 1758214038656, + "toLang": "en", + "version": "2.2", + "fileType": "lex", + "fromLang": "ar", + "attachment": { + "hash": "4b45f14dbea40d368093a13563fc1ca48457ee70c1291c82b206f3baff210081", + "size": 4627200, + "filename": "lex.50.50.aren.s2t.bin", + "location": "main-workspace/translations-models/856e509e-56c6-4b05-ab20-acd66650eaf0.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "bc20343b-bdf6-4eca-a722-5661b0e0849a", + "last_modified": 1758219707289 + }, + { + "hash": "74880047539925630601d61aa6c29a0672046236ca6cf33eeaf6f6f6690e914e", + "name": "lex.50.50.caen.s2t.bin", + "schema": 1758213996475, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "ca", + "attachment": { + "hash": "74880047539925630601d61aa6c29a0672046236ca6cf33eeaf6f6f6690e914e", + "size": 4359552, + "filename": "lex.50.50.caen.s2t.bin", + "location": "main-workspace/translations-models/99f40b15-343d-4210-887a-7c4388156868.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "094b9918-e00e-4b48-bea1-e9b3d8a3c727", + "last_modified": 1758219707285 + }, + { + "hash": "64ebcb5f6cb5a954ced615e48a44a85e77a644e4910544014b299b8ee0fa1b1f", + "name": "vocab.enca.spm", + "schema": 1758214000940, + "toLang": "ca", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "64ebcb5f6cb5a954ced615e48a44a85e77a644e4910544014b299b8ee0fa1b1f", + "size": 810653, + "filename": "vocab.enca.spm", + "location": "main-workspace/translations-models/6f3f4782-5c23-4f61-bcd5-3234441c59e6.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "985602f8-999e-48ff-9ebe-c230bced21ca", + "last_modified": 1758219707281 + }, + { + "hash": "735881c99ff303e55eb2e92a3b86762523d5dd1a4797b2574b851062051426ee", + "name": "model.enca.intgemm.alphas.bin", + "schema": 1758214005200, + "toLang": "ca", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "735881c99ff303e55eb2e92a3b86762523d5dd1a4797b2574b851062051426ee", + "size": 31561787, + "filename": "model.enca.intgemm.alphas.bin", + "location": "main-workspace/translations-models/deeec29e-faaa-4273-bef6-2827edf193f6.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "df8a1beb-d2f8-496d-b5a5-1d600bbfc5c4", + "last_modified": 1758219707277 + }, + { + "hash": "4dd6a91feff71e745395dcc0d52f885848ca0d843d5f70628ca51b3be1b70b45", + "name": "vocab.enuk.spm", + "schema": 1758213982261, + "toLang": "uk", + "version": "2.2", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "4dd6a91feff71e745395dcc0d52f885848ca0d843d5f70628ca51b3be1b70b45", + "size": 922077, + "filename": "vocab.enuk.spm", + "location": "main-workspace/translations-models/ffea5811-fcfe-486e-8812-6284bd33ee3a.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "7c2407e4-f84f-480a-852c-c3cb8bfb8ffa", + "last_modified": 1758219707273 + }, + { + "hash": "8f2151a7fb75454f5167a8df8758ec02ab02c0302893851bad7caa6b729822fb", + "name": "lex.50.50.enca.s2t.bin", + "schema": 1758214002562, + "toLang": "ca", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "8f2151a7fb75454f5167a8df8758ec02ab02c0302893851bad7caa6b729822fb", + "size": 4344092, + "filename": "lex.50.50.enca.s2t.bin", + "location": "main-workspace/translations-models/d2065bc0-e4bf-4810-a0cf-a0cd1163b3c0.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "6e460120-e60e-4cc8-9277-d4d391f4be42", + "last_modified": 1758219707268 + }, + { + "hash": "14c1d9e92918e8d04cb0ed351ae386c3b5d5c62a6dc601d9515f4c7e6c2a3a56", + "name": "model.bnen.intgemm.alphas.bin", + "schema": 1758213966854, + "toLang": "en", + "version": "1.0", + "fileType": "model", + "fromLang": "bn", + "attachment": { + "hash": "14c1d9e92918e8d04cb0ed351ae386c3b5d5c62a6dc601d9515f4c7e6c2a3a56", + "size": 17141051, + "filename": "model.bnen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/6c82adc9-494b-4224-89c5-ef33c10ea569.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "39ac5cc6-ab0f-49c9-a10a-4751a20aa160", + "last_modified": 1758219707264 + }, + { + "hash": "aea901a6bd8722962551c0349b8570af684444028b62bbff465be9931e6e9800", + "name": "lex.50.50.bnen.s2t.bin", + "schema": 1758213964199, + "toLang": "en", + "version": "1.0", + "fileType": "lex", + "fromLang": "bn", + "attachment": { + "hash": "aea901a6bd8722962551c0349b8570af684444028b62bbff465be9931e6e9800", + "size": 4793596, + "filename": "lex.50.50.bnen.s2t.bin", + "location": "main-workspace/translations-models/884d5a04-b0ff-4dc0-ba3d-efc1c57d1765.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "eef25d32-66f4-4e9e-8e10-79c5004592d5", + "last_modified": 1758219707260 + }, + { + "hash": "5ae254fa9b15aa182e70fd2a6186b1333c63a29a48043a9224c6aa4fcac058ad", + "name": "vocab.esen.spm", + "schema": 1758214116313, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "es", + "attachment": { + "hash": "5ae254fa9b15aa182e70fd2a6186b1333c63a29a48043a9224c6aa4fcac058ad", + "size": 816054, + "filename": "vocab.esen.spm", + "location": "main-workspace/translations-models/8695cc3d-7897-4c29-808b-bc983a93d1cd.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "c5072437-0234-48c1-ac78-dbe50715bcc8", + "last_modified": 1758219707257 + }, + { + "hash": "6d22da90905873c2793d0805e34e5c27901b16e7e7a7a427696696f67dfe1f0e", + "name": "vocab.caen.spm", + "schema": 1758213994783, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "ca", + "attachment": { + "hash": "6d22da90905873c2793d0805e34e5c27901b16e7e7a7a427696696f67dfe1f0e", + "size": 810273, + "filename": "vocab.caen.spm", + "location": "main-workspace/translations-models/2a2ebc69-f213-4c69-8721-80ef9e6bc2e9.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "19c8a02d-572e-47ae-aabb-39f41e2b02a8", + "last_modified": 1758219707253 + }, + { + "hash": "b7f9c70823052f60c257eb1c4eff893abea3648aa9d1c23c8774e1e5ef061434", + "name": "model.caen.intgemm.alphas.bin", + "schema": 1758213988244, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "ca", + "attachment": { + "hash": "b7f9c70823052f60c257eb1c4eff893abea3648aa9d1c23c8774e1e5ef061434", + "size": 31561787, + "filename": "model.caen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/4b691a87-59f0-46e1-b609-fb6d687199f2.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "a3b912f2-c7a7-4295-8e05-959220e6820a", + "last_modified": 1758219707249 + }, + { + "hash": "9c87aa09ff4f81c320993fe412624ca3584fe9ccf5371247d64f1117dffcf168", + "name": "model.enaz.intgemm.alphas.bin", + "schema": 1758213944612, + "toLang": "az", + "version": "1.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "9c87aa09ff4f81c320993fe412624ca3584fe9ccf5371247d64f1117dffcf168", + "size": 17141051, + "filename": "model.enaz.intgemm.alphas.bin", + "location": "main-workspace/translations-models/caf9be8c-0650-4f5d-b353-1e20817c91db.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "f72dde96-0e8c-4f11-8eda-b70593c1debf", + "last_modified": 1758219707245 + }, + { + "hash": "456ad3952bcc59d208c76baba4dcef340ee4239416bd760d6fec27f9a16228f8", + "name": "model.enfa.intgemm.alphas.bin", + "schema": 1758213955183, + "toLang": "fa", + "version": "1.1", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "456ad3952bcc59d208c76baba4dcef340ee4239416bd760d6fec27f9a16228f8", + "size": 17141051, + "filename": "model.enfa.intgemm.alphas.bin", + "location": "main-workspace/translations-models/8e412aee-68b4-46cd-aa00-1e7357db24c1.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "fba02e33-b450-421d-b877-c0c798bb3819", + "last_modified": 1758219707242 + }, + { + "hash": "dbfd4f8dc95da9c575164f7fc95ef00a2fb5f7d9f51b656559f99eeebdb57c87", + "name": "lex.50.50.enuk.s2t.bin", + "schema": 1758213984012, + "toLang": "uk", + "version": "2.2", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "dbfd4f8dc95da9c575164f7fc95ef00a2fb5f7d9f51b656559f99eeebdb57c87", + "size": 3054364, + "filename": "lex.50.50.enuk.s2t.bin", + "location": "main-workspace/translations-models/e7b2fd05-abf2-4e30-a612-59bce8a6702c.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "6f503132-0995-4164-9dc6-da8ec150710c", + "last_modified": 1758219707238 + }, + { + "hash": "459626236a49158aa555facd23e5f594e2f8416f4ebad32e0548af94c5b1ae0c", + "name": "model.enis.intgemm.alphas.bin", + "schema": 1758213934468, + "toLang": "is", + "version": "2.0", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "459626236a49158aa555facd23e5f594e2f8416f4ebad32e0548af94c5b1ae0c", + "size": 31561787, + "filename": "model.enis.intgemm.alphas.bin", + "location": "main-workspace/translations-models/6fc94b8f-3dfd-4c2c-8d11-df3d07e0cfba.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "a08a08c5-cb35-4471-a495-29bf32042c61", + "last_modified": 1758219707234 + }, + { + "hash": "4927d2bed702141b4ddd8a5e7034b27fb17312fdb7e3cc5f455ccf2e2f6670e0", + "name": "lex.50.50.enis.s2t.bin", + "schema": 1758213930220, + "toLang": "is", + "version": "2.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "4927d2bed702141b4ddd8a5e7034b27fb17312fdb7e3cc5f455ccf2e2f6670e0", + "size": 3837564, + "filename": "lex.50.50.enis.s2t.bin", + "location": "main-workspace/translations-models/f166d353-90b1-4ae7-adc7-c4fdc44744a5.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "6f35502b-1f28-49dc-9cf1-dcf3994e6d64", + "last_modified": 1758219707230 + }, + { + "hash": "8542e7fb2bfa3a11b89f8392b8adb0dbbf863cd34569488b7c4535a91c3ae6b4", + "name": "lex.50.50.enfa.s2t.bin", + "schema": 1758213959907, + "toLang": "fa", + "version": "1.1", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "8542e7fb2bfa3a11b89f8392b8adb0dbbf863cd34569488b7c4535a91c3ae6b4", + "size": 3631332, + "filename": "lex.50.50.enfa.s2t.bin", + "location": "main-workspace/translations-models/8ec72d9b-f5b6-40bd-a23d-cedb2c757e92.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "e7cf2d71-ddb8-474b-83eb-e3d4789aa8ce", + "last_modified": 1758219707226 + }, + { + "hash": "f87f5de2674cf48562df60843a658e0000bedfd75aa8ffa5e251e2cb1321f255", + "name": "lex.50.50.enaz.s2t.bin", + "schema": 1758213949183, + "toLang": "az", + "version": "1.0", + "fileType": "lex", + "fromLang": "en", + "attachment": { + "hash": "f87f5de2674cf48562df60843a658e0000bedfd75aa8ffa5e251e2cb1321f255", + "size": 3332384, + "filename": "lex.50.50.enaz.s2t.bin", + "location": "main-workspace/translations-models/8b7460cc-c1d2-47cb-8fd0-884d7f16d6b0.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "ee7cef1b-4495-4d67-8372-e364cef018b4", + "last_modified": 1758219707222 + }, + { + "hash": "afc1f4d7d20cd04addd3bc605acfdb83afbf62fb76d1a6bbc94cf42bf0286108", + "name": "vocab.enaz.spm", + "schema": 1758213942919, + "toLang": "az", + "version": "1.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "afc1f4d7d20cd04addd3bc605acfdb83afbf62fb76d1a6bbc94cf42bf0286108", + "size": 835729, + "filename": "vocab.enaz.spm", + "location": "main-workspace/translations-models/c4842ab3-371d-4752-8d8c-9a54ed6944f7.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "5247ef10-4006-430f-8124-9b856a258e50", + "last_modified": 1758219707218 + }, + { + "hash": "61b2ea10edbe4cc61e36c833cacc2f55778ed9ca860cd382729060634d4b0adb", + "name": "vocab.enis.spm", + "schema": 1758213932769, + "toLang": "is", + "version": "2.0", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "61b2ea10edbe4cc61e36c833cacc2f55778ed9ca860cd382729060634d4b0adb", + "size": 809991, + "filename": "vocab.enis.spm", + "location": "main-workspace/translations-models/8e36da15-fa26-4ae3-a661-e6f5f92e8ff4.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "47620e17-9fed-4517-99fa-09bc4f7a6885", + "last_modified": 1758219707213 + }, + { + "hash": "8a6a4de992ccd47bae4227ec6420866374137d6cc88ed6e8b2f16b36322a9d37", + "name": "vocab.bnen.spm", + "schema": 1758213971462, + "toLang": "en", + "version": "1.0", + "fileType": "vocab", + "fromLang": "bn", + "attachment": { + "hash": "8a6a4de992ccd47bae4227ec6420866374137d6cc88ed6e8b2f16b36322a9d37", + "size": 981300, + "filename": "vocab.bnen.spm", + "location": "main-workspace/translations-models/06c324a2-85e3-40ac-a03c-77cdb486a19c.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "11e6dba5-684a-4517-9755-5037d30c05e2", + "last_modified": 1758219707209 + }, + { + "hash": "6435d3d9d766159fe192ab90892540b438ad7adb7ab4ea4049f68d0b4cdea3bd", + "name": "vocab.enfa.spm", + "schema": 1758213953521, + "toLang": "fa", + "version": "1.1", + "fileType": "vocab", + "fromLang": "en", + "attachment": { + "hash": "6435d3d9d766159fe192ab90892540b438ad7adb7ab4ea4049f68d0b4cdea3bd", + "size": 843133, + "filename": "vocab.enfa.spm", + "location": "main-workspace/translations-models/203a10f4-6885-49c2-89e3-e7a4f3e3e738.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "06db515e-bc96-4886-a35e-ea819642fff5", + "last_modified": 1758219707204 + }, + { + "hash": "ed8bb4a811e1c45a259e91052080d25e5c8b4e2df0e59cb1521c04a57855ef97", + "name": "model.enuk.intgemm.alphas.bin", + "schema": 1758213975149, + "toLang": "uk", + "version": "2.2", + "fileType": "model", + "fromLang": "en", + "attachment": { + "hash": "ed8bb4a811e1c45a259e91052080d25e5c8b4e2df0e59cb1521c04a57855ef97", + "size": 31561787, + "filename": "model.enuk.intgemm.alphas.bin", + "location": "main-workspace/translations-models/6c69578a-1f77-44ce-993d-4d37c81e081e.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "4f541358-d119-49cc-b6a6-8dbb80670349", + "last_modified": 1758219707200 + }, + { + "hash": "d2c285755d37f710458f1a49db5391a123e4e41ca7bd9829dd87cc61e4907ee6", + "name": "model.isen.intgemm.alphas.bin", + "schema": 1758213917449, + "toLang": "en", + "version": "2.0", + "fileType": "model", + "fromLang": "is", + "attachment": { + "hash": "d2c285755d37f710458f1a49db5391a123e4e41ca7bd9829dd87cc61e4907ee6", + "size": 31561787, + "filename": "model.isen.intgemm.alphas.bin", + "location": "main-workspace/translations-models/7f963727-dae3-4004-91b0-6405a29ca2f0.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "dd096d59-e925-4a67-92fe-ca6979a70268", + "last_modified": 1758219707195 + }, + { + "hash": "0655d05ccaf3cd2a01f910ef542455b7b14e66d96f6c95889079b9ca1ee168cf", + "name": "lex.50.50.isen.s2t.bin", + "schema": 1758213925723, + "toLang": "en", + "version": "2.0", + "fileType": "lex", + "fromLang": "is", + "attachment": { + "hash": "0655d05ccaf3cd2a01f910ef542455b7b14e66d96f6c95889079b9ca1ee168cf", + "size": 3951884, + "filename": "lex.50.50.isen.s2t.bin", + "location": "main-workspace/translations-models/0248937c-889b-4f94-bd01-b01453ef07a4.bin", + "mimetype": "application/octet-stream" + }, + "filter_expression": "", + "id": "d0ff98d8-887a-4829-a2d6-9d7d25224057", + "last_modified": 1758219707191 + }, + { + "hash": "5c69f0c81f6198f5615ac5aad9d89eb81a46ae8ea396a9e8e274a76409d35e13", + "name": "vocab.isen.spm", + "schema": 1758213923959, + "toLang": "en", + "version": "2.0", + "fileType": "vocab", + "fromLang": "is", + "attachment": { + "hash": "5c69f0c81f6198f5615ac5aad9d89eb81a46ae8ea396a9e8e274a76409d35e13", + "size": 808315, + "filename": "vocab.isen.spm", + "location": "main-workspace/translations-models/4fa854b5-b9c3-4487-a430-e3237cd51059.spm", + "mimetype": "text/plain" + }, + "filter_expression": "", + "id": "06ef4e6b-4686-4d63-a261-ed0b6b558d19", + "last_modified": 1758219707187 + }, + { "name": "model.enja.intgemm.alphas.bin", "schema": 1753211565728, "toLang": "ja", @@ -9013,5 +10989,5 @@ "last_modified": 1701186751412 } ], - "timestamp": 1753213325774 + "timestamp": 1759521854764 } diff -Nru firefox-esr-140.3.1esr/services/settings/dumps/security-state/intermediates.json firefox-esr-140.4.0esr/services/settings/dumps/security-state/intermediates.json --- firefox-esr-140.3.1esr/services/settings/dumps/security-state/intermediates.json 2025-09-22 21:16:17.000000000 +0000 +++ firefox-esr-140.4.0esr/services/settings/dumps/security-state/intermediates.json 2025-10-09 15:35:37.000000000 +0000 @@ -1,6 +1,617 @@ { "data": [ { + "schema": 1758851900202, + "derHash": "e8sPLy0QMaavjWG6qDXSg1o7i8wm2Uo7BIsWVfuBKYw=", + "attachment": { + "hash": "f5c17f18cb99cd23b899b47efb311cc69915cdf3e6bbce1e8e17dfefe738d813", + "size": 1975, + "filename": "gKjJIacZSuY6bbDnu13WF_rufps_FKwGIaqxRb5nKZA=.pem", + "location": "security-state-staging/intermediates/21041e65-d22f-492b-b07a-00258dab5ef4.pem", + "mimetype": "application/x-pem-file" + }, + "id": "51f74273-2909-4229-b8b7-a18a82922d99", + "last_modified": 1758855422595 + }, + { + "schema": 1758851898836, + "derHash": "Jqk9YAOQd2VMDdoftjSvX/XBFMesH9BEmxydIXiwKP8=", + "attachment": { + "hash": "8de368511fadb1d86db734f4d85fab8292731ec5fcf54d3b060cc1dfc924531c", + "size": 2024, + "filename": "ww9H85szAjIB4B_FOLdXky5TsrNLh3jRxBxclRz4qlY=.pem", + "location": "security-state-staging/intermediates/c13fdd93-871d-4b99-b0cb-9e54fda07795.pem", + "mimetype": "application/x-pem-file" + }, + "id": "3e65fb0c-51a1-4e6f-813b-28b523e77fc9", + "last_modified": 1758855422592 + }, + { + "schema": 1758808719520, + "derHash": "88C+VeIH8M5V/CE/R29gWUR/9r5Xi27QMU+aN4qkuRU=", + "attachment": { + "hash": "a9aa88afb3872bbc2aa2acbf6e8a2cc0fe32185a93c97346f2af549d37eb258d", + "size": 2227, + "filename": "XHGmi4Q2R0rjPW8q9v0Mp8QotyaTdd-yHWstzDh_oq4=.pem", + "location": "security-state-staging/intermediates/d052ac88-165a-4b80-82e4-d132055406f1.pem", + "mimetype": "application/x-pem-file" + }, + "id": "16ae7115-e499-4fea-ab3c-900c5f23d02d", + "last_modified": 1758812222592 + }, + { + "schema": 1758808714936, + "derHash": "lkyPBi+85iZbjdIMYuOVOtnAVHQwWHBGn4LfWi74Ja4=", + "attachment": { + "hash": "1490aba97c12699b3b74da31c45069cb97e791855188b15f5aa9a8804c560cc0", + "size": 1215, + "filename": "EBjFan9QHb3dlwy-__7dCdhA4Vur_QsIf-0ayjdJM9I=.pem", + "location": "security-state-staging/intermediates/533c0067-14ce-4c60-b56f-0aee2fd4a187.pem", + "mimetype": "application/x-pem-file" + }, + "id": "7bbffd3f-7faf-45ed-b144-33488137f1d1", + "last_modified": 1758812222589 + }, + { + "schema": 1758808711474, + "derHash": "FajQ69aY0YcRH1uqWWUe/qZZowPv8I3LxqahTsOI5lg=", + "attachment": { + "hash": "4b3ab8a48ef7b12a9e8ff60f8f8188b85c1365856d4e733001028d7312135d8b", + "size": 2194, + "filename": "2OPjVozNW-3TuNi-PvrmN9SyDjqA02XeGAawCn3t5wM=.pem", + "location": "security-state-staging/intermediates/5146437d-d65f-43b0-af75-0ee644848f7e.pem", + "mimetype": "application/x-pem-file" + }, + "id": "c7d36b09-7454-4507-a322-b6d45f298237", + "last_modified": 1758812222586 + }, + { + "schema": 1758808716081, + "derHash": "vshPzg2qQj87Pu046kgGbMVhj1JErWXNn4YkqBP6TD0=", + "attachment": { + "hash": "ae21f354a4399685d2cb11872547bf7cf9cc62bdb1096b343bf4e01cfdc2b7b4", + "size": 1171, + "filename": "xwyjb5aN7tSRWj02XSZa2cKGLxXLdKHUBfLT_7twjhQ=.pem", + "location": "security-state-staging/intermediates/6d84cbd2-9172-4218-9d5e-5e7f1d00b963.pem", + "mimetype": "application/x-pem-file" + }, + "id": "8ae16bad-61f3-4f6d-bf7e-0345a470827c", + "last_modified": 1758812222583 + }, + { + "schema": 1758808710243, + "derHash": "7J1ryrmBi33VntYdojplipapxOlQ7e4NLak+fPIXR4A=", + "attachment": { + "hash": "4ba9498dd2c5f348984fdc1cf75755259b2da6eefb354bff0c92bf8e982e4f81", + "size": 2186, + "filename": "rnhtVs65ADYfQGtMuB0jq2kZwwHy6_iqnBiUKcK1m0Y=.pem", + "location": "security-state-staging/intermediates/50988ec9-126d-482d-9f95-14854361ce9e.pem", + "mimetype": "application/x-pem-file" + }, + "id": "6fa9b4bd-5468-4010-a910-5f4d5cba27d8", + "last_modified": 1758812222581 + }, + { + "schema": 1758808707787, + "derHash": "sZDcEITTQSbhDbLKKNuD0RJi0VoSvEtyYqKYpLKh7zU=", + "attachment": { + "hash": "37b81b200f99b094a0d214404e3fecb4007407d8651a78bf07dc29a05186d65b", + "size": 2227, + "filename": "lmmJHVo1-ZoRA4kxWLUEgycdFv_7FQ1k73xBPVUE6fw=.pem", + "location": "security-state-staging/intermediates/3f4afdb0-c88e-4d90-89b1-8a8e214eb9cb.pem", + "mimetype": "application/x-pem-file" + }, + "id": "f366f2fd-6956-40bc-b117-3994321a1e03", + "last_modified": 1758812222578 + }, + { + "schema": 1758808709020, + "derHash": "KItb4ZaFqyDSjqyup8pl4+AFqtN3l/NDUJXLK5OukwM=", + "attachment": { + "hash": "4a4233fef8b020fa92ced5d302db73ce6024495acff233f5325bf8b387d59d8a", + "size": 2186, + "filename": "y-niAVIkCoUGLjIb4hxbCATgEQ0A7wkiAGtMdVsNJ8s=.pem", + "location": "security-state-staging/intermediates/6a520ea2-d119-46e8-89cb-64a8d98e5a4d.pem", + "mimetype": "application/x-pem-file" + }, + "id": "3773968a-caf2-4ad6-a47f-7d0fa57e3bf4", + "last_modified": 1758812222575 + }, + { + "schema": 1758808706654, + "derHash": "V49RrBfnBNu8A3P8qcoVMSxOaRcEJQnbTg5Emwl/EUQ=", + "attachment": { + "hash": "836bf2f3457cd67cf76f69a1475e39547f23bd880797e25182ab5d954cf9fb53", + "size": 2182, + "filename": "GfDuvWlZiWvtVxmUQa2jv_PI6Xi0gkQ2fVQ4VlzGKWM=.pem", + "location": "security-state-staging/intermediates/e504abdc-f814-4a10-b025-bdcfe17908e1.pem", + "mimetype": "application/x-pem-file" + }, + "id": "0df2212c-2ea5-4f03-8fa0-7b3c01082094", + "last_modified": 1758812222573 + }, + { + "schema": 1758808705494, + "derHash": "V1R6l58QMueug6yuHtLLD3vDButKUnMeKrftvnNtnWM=", + "attachment": { + "hash": "48379561547f843e7c07c1cac3d58681d0a9325b598806be98830a5f3c3e4c5c", + "size": 1167, + "filename": "otOvJasPYgQvgqNWW2W9k9P-pDM5qrUBTOBqPCJOMYU=.pem", + "location": "security-state-staging/intermediates/8007b0e7-e120-4bfd-b411-4505f44b47a2.pem", + "mimetype": "application/x-pem-file" + }, + "id": "53ab17b0-99a7-4baa-86b9-f1904d2af743", + "last_modified": 1758812222570 + }, + { + "schema": 1758808718400, + "derHash": "niScspJBoJXfTuU1WC9WiiGo0pdCkg3q3Sm6eqMjps4=", + "attachment": { + "hash": "fe70851351062a619077d5480fa26d22c5a78242def180a3ebd415f8a4d63d21", + "size": 1215, + "filename": "pokZJoWCSdNKhUx-dbCVww-n-1DpquGWNzaBqA5Fsd4=.pem", + "location": "security-state-staging/intermediates/c2d1fe9a-7499-4a22-8cc1-1fa3df74176a.pem", + "mimetype": "application/x-pem-file" + }, + "id": "93429f3e-6254-495d-8bf5-2071cd7bb2b2", + "last_modified": 1758812222567 + }, + { + "schema": 1758808717235, + "derHash": "MxFndAb0PwVjtI74QVZSh60puab2EWjj3zKqp3us2ws=", + "attachment": { + "hash": "12f23c81d3874dcaffe87bc651b113c1f552d0310919dbf28d9d6c9f99d4ad2d", + "size": 1211, + "filename": "F0jeu1ooaExK80ncqyacDPz1VBwmJ_q46tOMOiz4C1A=.pem", + "location": "security-state-staging/intermediates/f80445c6-7652-4843-bfd6-3db937b9c1c2.pem", + "mimetype": "application/x-pem-file" + }, + "id": "c73c32ab-acf6-4397-8464-5142b9d0daf2", + "last_modified": 1758812222564 + }, + { + "schema": 1758808713743, + "derHash": "Z4cVroaez1KQxJ94BiOS9stYz/CWl2PqunBAG+doEJ8=", + "attachment": { + "hash": "47703b78b834762d1339b76f75820329e5137143bac72efaf73819e9c0236ab3", + "size": 1171, + "filename": "3zlWbOFfrA0FcXs6G3atQ0ogNS7i0--awt6n4j1NxDo=.pem", + "location": "security-state-staging/intermediates/34e2fc9f-85fe-4f0a-9560-3f9b4105d0f7.pem", + "mimetype": "application/x-pem-file" + }, + "id": "189acb57-b662-40cc-a514-8a426a495090", + "last_modified": 1758812222561 + }, + { + "schema": 1758808712602, + "derHash": "eaNVj62j6yw2tefRwrW/5PiJxq52r0XdTrhvT/oZt2A=", + "attachment": { + "hash": "09bd64dae7848139eb90921ea1c2a0e193f7ff5c0af37b895e890e85f8b9c7f0", + "size": 2227, + "filename": "aIdJj55afx33USYsa2nFmF0aqJ8kGkOWRTAtlQ5vUgk=.pem", + "location": "security-state-staging/intermediates/286743f0-9643-430c-b372-401119f30db7.pem", + "mimetype": "application/x-pem-file" + }, + "id": "4f8d47a0-775b-49cf-854c-a13a78280027", + "last_modified": 1758812222558 + }, + { + "schema": 1758635901382, + "derHash": "GIRTCYcnqSyxHJBeC7ajZ7K9KpqLK/gscHNXQ9+lUP8=", + "attachment": { + "hash": "2fd6b6f7c5954454695808abfbd5c34361dd7269ca1ae0644d24cf8645e21d28", + "size": 1089, + "filename": "vPpsXqWfnUfzqsGmSqYeHfU0xzWrS_TipwvdAqQBsGY=.pem", + "location": "security-state-staging/intermediates/559ce0ee-63e5-43bd-90a2-c66cf2048387.pem", + "mimetype": "application/x-pem-file" + }, + "id": "5e5883cf-3472-4a06-a7f1-e4671130c170", + "last_modified": 1758639422554 + }, + { + "schema": 1758635900247, + "derHash": "Smwwc4WCAbCM8RVWJQ9UGHfeCP/83u3yA/uxmKRY8vM=", + "attachment": { + "hash": "6668c639a213c6a027a109921d0234d5a5bcda1051db84d49ea895205f0737c3", + "size": 1150, + "filename": "FoQXNG59r6sWwnw4ljMvDOPCdt4L3sImdB8BoYhHPKM=.pem", + "location": "security-state-staging/intermediates/0a941488-8af7-4a14-b7e4-cd4f16b09e35.pem", + "mimetype": "application/x-pem-file" + }, + "id": "9ba8571c-66ed-4263-9cdc-dfb0395e1f78", + "last_modified": 1758639422552 + }, + { + "schema": 1758635903709, + "derHash": "fXcConfP68KD9vJKLBfKDrp2AAlhBSRK0ZE+e+Llaik=", + "attachment": { + "hash": "8f0ad20f3779575cbf7d51ae47f306b2ca4ac28f84823fa0e3291b3263ca9095", + "size": 2211, + "filename": "dL7WQjUW5MZRpc3F0ixd4jdAhnqQVofJSfhESwUSw48=.pem", + "location": "security-state-staging/intermediates/c3a1f2af-5195-4f34-92ce-2679ddad48fc.pem", + "mimetype": "application/x-pem-file" + }, + "id": "891420de-db96-4549-8017-b8f4a2f0f262", + "last_modified": 1758639422549 + }, + { + "schema": 1758635898966, + "derHash": "4ciTpWWNY+K6eMr/FguB+YNraoUfGjyqSLO04ofwCS8=", + "attachment": { + "hash": "17ee142c8ff76b5afca1d1674d8233121cc5742c35b0419df294cf1a2b7e0159", + "size": 2211, + "filename": "RLfd6MLys8WCGuJuYLY5GCL6s6TF2kdobBK_GYirBLY=.pem", + "location": "security-state-staging/intermediates/c7f4808b-321c-4f02-bbb3-ca1221ac83f3.pem", + "mimetype": "application/x-pem-file" + }, + "id": "2eba7073-010a-48c6-8d77-23f84f522bac", + "last_modified": 1758639422547 + }, + { + "schema": 1758635897595, + "derHash": "ZToXFJx/KJr2UNOd+ZHD+nKEPN4/OZZE4Kht9zs7BVY=", + "attachment": { + "hash": "3ca6cda6a73316e47386343109eef9901ff14dbf9e528732f1b3e299a46e865e", + "size": 2121, + "filename": "IXSS41sD3QK-hKPi46PmjXX7bSAHl7wAdQoZQj5xQY4=.pem", + "location": "security-state-staging/intermediates/b71d1dcf-f155-4618-9d00-d4b9b756ea70.pem", + "mimetype": "application/x-pem-file" + }, + "id": "9acdcb46-e251-43c3-9562-edf7b11201c2", + "last_modified": 1758639422545 + }, + { + "schema": 1758635902552, + "derHash": "akGrh5o47hslTVuHqqLezX7mhR3KMM5HzYSNoeaPxS4=", + "attachment": { + "hash": "9ace094f347b6c1276f35622b610b0320163ae47ee474dfb3064f8195817b067", + "size": 2064, + "filename": "t70Rs7pIYU7LPkc8YCU23ZMMiTjpottOLk4ptxC9Nqs=.pem", + "location": "security-state-staging/intermediates/8dd37e28-2a76-46a6-8914-d2d6b69586d7.pem", + "mimetype": "application/x-pem-file" + }, + "id": "31107c63-5ee3-4c65-8bba-a63eecc05e4b", + "last_modified": 1758639422542 + }, + { + "schema": 1758592703726, + "derHash": "81qKUp7lHCQHjTagC5GMUICu3KBhHlvlWDG0y2bywvU=", + "attachment": { + "hash": "33610d4515fecc6f50b618a61ffcfc9d489dcccb018dd12e40ec2466b5b5befd", + "size": 1033, + "filename": "lWWQdyVGS-C_9EsSMvhe6GKpoNmduXG6IDRKr0FDHVg=.pem", + "location": "security-state-staging/intermediates/8a55ab5f-bb9e-4b51-9bdd-70132278b588.pem", + "mimetype": "application/x-pem-file" + }, + "id": "832a6884-37bb-4dbe-b6cb-912594aa44c2", + "last_modified": 1758596222575 + }, + { + "schema": 1758592702559, + "derHash": "xd8HThw6Lq7HQpML7abBpCnbKT+WqPHbOxQ213K3xIM=", + "attachment": { + "hash": "6fd248aec4dcc8b5668d9b13acff9d62f2d49a95eefd87c6a77a33cdffb3c93b", + "size": 1118, + "filename": "eY_hCVfoxaCHQgHK8J1e9LLiQSxHv5kZSVZstULTrz8=.pem", + "location": "security-state-staging/intermediates/73aa444f-c4fa-47e8-8973-ed85e16a20db.pem", + "mimetype": "application/x-pem-file" + }, + "id": "aa86b51e-1910-43fd-99ec-76995906a374", + "last_modified": 1758596222573 + }, + { + "schema": 1758592700705, + "derHash": "vdsBHplaYrn1hQeUTgT4piSIjvTAxBx5yrAyFoyGuDs=", + "attachment": { + "hash": "692dc9fa9548043b643bb9e6b0e57fce1c7e757247dec441305445c6ab8e33f6", + "size": 1569, + "filename": "jZNVWOajyJYzAUj_32oawKW_uhq0RUUTWjs3bJoaMI0=.pem", + "location": "security-state-staging/intermediates/479b2fd0-00b2-4fed-91a1-5d79cdfcfd96.pem", + "mimetype": "application/x-pem-file" + }, + "id": "4a249876-52ac-43e2-8b39-19be2cb0a946", + "last_modified": 1758596222569 + }, + { + "schema": 1758247109528, + "derHash": "DNVo4IakzL59JaDg/csSP6RSL+OjPNNCKMSIYAAWG5E=", + "attachment": { + "hash": "3b188e4ae5995071c7b4c9a8a9903d8f37f5bbe066c1e0fcdea1afc1ee78f3ee", + "size": 2426, + "filename": "wpbAk36dCj5H1klkMx_87J_qT__776IELceqrMdzjeU=.pem", + "location": "security-state-staging/intermediates/456ee704-e773-42d4-a393-46546ea5463d.pem", + "mimetype": "application/x-pem-file" + }, + "id": "4166a3e5-8834-4e06-9df7-daa40bf57577", + "last_modified": 1758250622608 + }, + { + "schema": 1758203915459, + "derHash": "lWKCqsn3jYmrgYkU29sA+xuWhaCZsx2iSfp1FgW5TdI=", + "attachment": { + "hash": "2ecc9082143159f86a22c2f2d7ec75d1cce3c09702ca06c13abfe5dd37ca0277", + "size": 1983, + "filename": "_AQe5lWT9xIwgAiIHcAT-pRj70-ckw8xE4qArEfIyd0=.pem", + "location": "security-state-staging/intermediates/abacaf7b-2fc2-4a70-bb2e-2a323b9bf8ae.pem", + "mimetype": "application/x-pem-file" + }, + "id": "d00c7ca9-6219-43b6-8b8a-e048a45c5d2c", + "last_modified": 1758207422601 + }, + { + "schema": 1758203916550, + "derHash": "fMTGKJtcCS7nrHpfh71AFmgyd3MpmiKdFY7Pa1kQuLo=", + "attachment": { + "hash": "9b3b522135606ab4c289e9054577ebddecc4a8b21266ab44fed4759f96f4288d", + "size": 1987, + "filename": "OfXp7s_mA-7Syh7zoom2IuL92dtJFWJQ4LjjCHnZCrk=.pem", + "location": "security-state-staging/intermediates/8556b6cd-c343-463c-859d-62216bc6fc28.pem", + "mimetype": "application/x-pem-file" + }, + "id": "e18b91e2-750b-4787-82e4-ae5cf9a39025", + "last_modified": 1758207422598 + }, + { + "schema": 1758203914260, + "derHash": "0x/BhkNpniWKfhCSSxsZ8C/xB/vUwJLz90+Nzce5nMA=", + "attachment": { + "hash": "fa914c29ec4aa8ae1a6374168c081fcb59c59c95a816f35640b0224739ded107", + "size": 1163, + "filename": "atwg6ejpADR_jBbKnuSFzeAuVeHiQKJdUl2HSR0gLmU=.pem", + "location": "security-state-staging/intermediates/c279c12e-4984-4a59-a447-bb77e5d03809.pem", + "mimetype": "application/x-pem-file" + }, + "id": "8f117858-02ed-4937-80e7-d6be174a2b9f", + "last_modified": 1758207422595 + }, + { + "schema": 1758203912163, + "derHash": "ZvgV15JcuyU3v+qiSgBB993vkOXUcXsWwhzMBEeltvs=", + "attachment": { + "hash": "aeae56d55702c654e6222d60fceae8e8347cf805d47d8d8a5ffa97cf84ae8352", + "size": 1163, + "filename": "l9l5rsCxnWfS7st1kW3EqURDe6gYtprAmX8et0XpFIA=.pem", + "location": "security-state-staging/intermediates/d190f29f-dc54-47c1-a240-8a9968f20109.pem", + "mimetype": "application/x-pem-file" + }, + "id": "2e79725d-be71-488f-b498-35b4eab64d79", + "last_modified": 1758207422592 + }, + { + "schema": 1758203910972, + "derHash": "c8sP0f52TOdgX3e85x3+xJ5EntK7nMdrauf3VpHqYWE=", + "attachment": { + "hash": "9517cbaa17cfd7cfed97f4bdcfcd1a6abed3c91cae9382a22d254dbe138c9aac", + "size": 2324, + "filename": "PgjSe9Y0zTvUqxS1cBGgdAC09TJihhzhfFkJ5T0ckms=.pem", + "location": "security-state-staging/intermediates/8178f57e-88c1-4bac-aee6-7b22eeca0882.pem", + "mimetype": "application/x-pem-file" + }, + "id": "1b09549a-ac3f-40d0-a7af-d59c83442298", + "last_modified": 1758207422589 + }, + { + "schema": 1758203909921, + "derHash": "ZObZWO7kSv0P6MSrk9pQ2lNrp+tCbS2GJ7y2Shg9dJM=", + "attachment": { + "hash": "25606bee15d3cdaf94d56fc4df116fb0e3289f898713af18c3054d1af587bd78", + "size": 1163, + "filename": "7k0rYa-qry4wDaWSSycBwDVQALkMXBvBWeWHCjNIjTA=.pem", + "location": "security-state-staging/intermediates/8311fd02-1929-4614-9b69-fe82bb9d2843.pem", + "mimetype": "application/x-pem-file" + }, + "id": "a2467a50-ffb3-407e-80ef-d8f3c339c9df", + "last_modified": 1758207422586 + }, + { + "schema": 1758203908848, + "derHash": "TLZ7+sW8R8eBfDXaM5E6+wIa7gdLicx1PuVmE4y10BY=", + "attachment": { + "hash": "779390c34901c880542fecdf1eace9d4fa72e42450d442f69c7335b7095ffa99", + "size": 1983, + "filename": "tHoUHCrraSrjkHaUbZGcxRVrjSHn8i6s8_iI6HHC6Ok=.pem", + "location": "security-state-staging/intermediates/323e9ad4-43f1-4b8c-b9d9-e7ff6fba082f.pem", + "mimetype": "application/x-pem-file" + }, + "id": "e7c475f4-396b-449e-aebb-9569bbd46b4e", + "last_modified": 1758207422583 + }, + { + "schema": 1758203913236, + "derHash": "s2df6TmxijSs6cWq16h4DDQ0CvfSNSKS5dAJrrIALPY=", + "attachment": { + "hash": "20026ab8a54e6e1cf5fe6a546fe2f452940e576285f8fca76fab9af5dd6aebdb", + "size": 1987, + "filename": "fpLQRtZkeoQDvEsHjbmGGp4fKzFQ1gW-e9kvlVQKjBY=.pem", + "location": "security-state-staging/intermediates/06777cd9-c895-4fc1-8981-cb7ea93be1a8.pem", + "mimetype": "application/x-pem-file" + }, + "id": "9ef0488b-5cf9-463f-8b1b-b4b174cbb649", + "last_modified": 1758207422580 + }, + { + "schema": 1758203906687, + "derHash": "HaeDg9VfgBxK9LnPit8UkVXB5gXhODhJKBL3Wk5q9+U=", + "attachment": { + "hash": "6852b2ede5dfd26dc3230484a790124f6cd415b0b69d09283fee49bdfc0be333", + "size": 2288, + "filename": "u84zFyN8mFVdd_DVCTYSGeIIq2mnvBBvbmmOckAcxbM=.pem", + "location": "security-state-staging/intermediates/f21d6767-e786-400c-a103-e294e62804ac.pem", + "mimetype": "application/x-pem-file" + }, + "id": "83edd9fc-5165-4921-883b-f88b80a69a0a", + "last_modified": 1758207422577 + }, + { + "schema": 1758203901297, + "derHash": "1m2b9SKQfV3IKWWCy5dFkI5GAAl5Lz65r+wtca3zV6E=", + "attachment": { + "hash": "cbf5ccb97b8edb3cc8b2b405298484644f44f50386323443462faab24b70c12a", + "size": 1163, + "filename": "gJ1It3GyfR5y0xbHIcRJPwjI6151kRqrGSR_W5v6jek=.pem", + "location": "security-state-staging/intermediates/2972e7d8-7e9d-4ac9-b576-585eb16187d4.pem", + "mimetype": "application/x-pem-file" + }, + "id": "b0b449b1-c992-4d8c-b711-f53321d9160c", + "last_modified": 1758207422566 + }, + { + "schema": 1758203902407, + "derHash": "0WDi3k5WyxC2bBywrct5z5PHjc2dswwgGCICYsBAY/k=", + "attachment": { + "hash": "f709ac1c815ce6a3e18d51e978f5495eefadda5e3034e8b3092ab3f14ab1bda3", + "size": 1963, + "filename": "nZ4QsWxivBcuuFkI8dXgfa0Pb2o1sjZ8hKx6h-729xw=.pem", + "location": "security-state-staging/intermediates/93cc62e5-b102-43ea-9d43-200fd86b7bb8.pem", + "mimetype": "application/x-pem-file" + }, + "id": "2c7f3809-2cfe-48fd-bef4-cbe979e1b4c9", + "last_modified": 1758207422563 + }, + { + "schema": 1758203900232, + "derHash": "0qydzHolUCml9RgNY/Gp7WDhFBKoXBSNS3H2rho2aVw=", + "attachment": { + "hash": "57057632ad8ed91c8f1ac76c49aea86f88dcecd71d2c3c50590433880c8a6042", + "size": 1963, + "filename": "aOsyRBA0kzFNZZnksCj53uH5SEl1eqbPAbTGEWzixSU=.pem", + "location": "security-state-staging/intermediates/95ec4de7-cddf-4bbf-8ef2-88617b698b68.pem", + "mimetype": "application/x-pem-file" + }, + "id": "d78066cd-d30a-434c-8c6c-b132a6a02db9", + "last_modified": 1758207422561 + }, + { + "schema": 1758203903486, + "derHash": "hY18la9K9jNtocaX+1Y0RTHF3J9nO+UWAwMeUw3G06o=", + "attachment": { + "hash": "320ed0e9b7ea4d93f718599f1bcb6f523aa30392f89562c883aca2315837a9d8", + "size": 1983, + "filename": "75pE_IZKhqgviWzR4qTd2zPqnbH6f4VSS4OvPeBjEjQ=.pem", + "location": "security-state-staging/intermediates/d08ba0b4-8578-4cb9-8daf-1c5a420ee5a1.pem", + "mimetype": "application/x-pem-file" + }, + "id": "30807eb1-dda2-4555-bf14-9f6f65bc5b9d", + "last_modified": 1758207422558 + }, + { + "schema": 1758203907771, + "derHash": "0Hfyd2iN1RQQKd2E0C9Rlm4fM3tc/tiMW71hkp6zt0g=", + "attachment": { + "hash": "904ba8ee7a6824ca7c1c751a471ceab159830ae16e6a6672aac372ed28b70294", + "size": 1179, + "filename": "UfZj3LETGY3VKR1F3r1c-nTd4DAG80wk6LlGgeGIbZI=.pem", + "location": "security-state-staging/intermediates/cc26ce24-0d48-470e-8c67-c6bb72a094c6.pem", + "mimetype": "application/x-pem-file" + }, + "id": "3877da9a-c1fb-4877-8999-61f83e829e46", + "last_modified": 1758207422555 + }, + { + "schema": 1758203905624, + "derHash": "tZQQ82e5humOU6l4mmWAVTp0vlFSEdn27LbooR6Drqo=", + "attachment": { + "hash": "6c695606ba04597db6c6abfa25ca2e234b7c4da6897b6998fc97ffdfdba16bcb", + "size": 1963, + "filename": "qla2PQT5GrIilpynO2s6RwuCnuoNma-quUi6nw4inYM=.pem", + "location": "security-state-staging/intermediates/e41c4b45-398e-44b4-8203-6ce38d115f99.pem", + "mimetype": "application/x-pem-file" + }, + "id": "692af014-51df-4ebf-bbe6-82e0e139af1b", + "last_modified": 1758207422552 + }, + { + "schema": 1758203904561, + "derHash": "IW1VbS8wVgY1elLzEcuCWru3InVxs1It8PgjYAAH0u0=", + "attachment": { + "hash": "f2ca2e62932500f5055e3bf3a94d8a088d1f364a85612855658c9197b0729dc6", + "size": 1163, + "filename": "0-HVm9eASKqwXP0cn779C8-2TRaPT3jNw3ubZnUKZHg=.pem", + "location": "security-state-staging/intermediates/da191923-805b-42fe-9e26-fe38d574d705.pem", + "mimetype": "application/x-pem-file" + }, + "id": "9cbf8c9f-fbfe-48d5-9093-985dc67c890f", + "last_modified": 1758207422549 + }, + { + "schema": 1758160708985, + "derHash": "3tN03HKQTcyvt9zYQp1FpqrauAKP18cMsaC9U/4MzG4=", + "attachment": { + "hash": "427051eccc12bab26b4f51984f14c2607d838e6ea8b2a6d7d8712f4fe43b3698", + "size": 1983, + "filename": "D2CK5YkrtH6dJajHxLR-P6JOnCIlK4TORS4_07BmMA8=.pem", + "location": "security-state-staging/intermediates/cc37b897-3e87-4928-a2b7-4ce0dbf878b9.pem", + "mimetype": "application/x-pem-file" + }, + "id": "42a4536f-beb6-4e59-a050-8f16a5f86c7c", + "last_modified": 1758164222352 + }, + { + "schema": 1758160706850, + "derHash": "ZP5H4SVgg82qH+F6stPZZZGfrZz+BjpFqF9iSH+IBH4=", + "attachment": { + "hash": "5ba7dc0e4bc3a9dd6bce5ce67f6e115938322c2b80721762122fd61b79939dc1", + "size": 1983, + "filename": "XztAsecQzzxu1jUv1WbLy4I-Rd8k920eS6JthbhBF7w=.pem", + "location": "security-state-staging/intermediates/eee75da5-942e-4f97-9724-648f356e204f.pem", + "mimetype": "application/x-pem-file" + }, + "id": "58e87456-ff48-4bdb-93fb-921b0597bdec", + "last_modified": 1758164222349 + }, + { + "schema": 1758160704561, + "derHash": "OcSS0G7RFQ01/OrPDfKND7YbugcqNKpOgk1r4zmn6yM=", + "attachment": { + "hash": "0a74b252ae573b8304b0aad8428a663f9275e03f4cb9cba2cccee8ec08b4aba4", + "size": 1183, + "filename": "p4UlhI-4INdk1HPs8-QdeU9xFTzIwh8tuwVaVcuoAdg=.pem", + "location": "security-state-staging/intermediates/90a52681-a664-4b0b-a541-7d67ab6c1dd3.pem", + "mimetype": "application/x-pem-file" + }, + "id": "a3d15496-e378-49c7-8790-45c9c9f812a0", + "last_modified": 1758164222346 + }, + { + "schema": 1758160703406, + "derHash": "O/urlNhXPPVQHocnODMXLuOyGE///ZuVo5BvxN062lA=", + "attachment": { + "hash": "fdda814851a4ed81c64b8bfeaed7d5c9505c034fd77b6d854c5fdde229d14d18", + "size": 1187, + "filename": "W-Umw3HYfIOzV9bxKzoWQcUfT5Ssj5St0SlQgxYWXVI=.pem", + "location": "security-state-staging/intermediates/b0753169-5164-4f30-9989-367d74d19f47.pem", + "mimetype": "application/x-pem-file" + }, + "id": "fddb52ad-fed9-4959-81ce-ad596f6f13fa", + "last_modified": 1758164222343 + }, + { + "schema": 1758160707928, + "derHash": "bshc2T5ae0yuWIGMsClqgLOyOsjXJo5IiC5TcA8VRKg=", + "attachment": { + "hash": "ba50b22194f9ebbf045331226f576f6e59a445b3783be031139d7d9be6fd5bfa", + "size": 1983, + "filename": "DaH-BZQc0vDvzDnwIYWQow8VlNFoJSPHT4EqvAUJlno=.pem", + "location": "security-state-staging/intermediates/26ee575c-092f-47c4-b9c8-2a974f4c0555.pem", + "mimetype": "application/x-pem-file" + }, + "id": "b35d2e89-d70d-4741-9a27-b42718d99b33", + "last_modified": 1758164222341 + }, + { + "schema": 1758160705792, + "derHash": "PtP4Z5gC4Kvu2ziKkB2vYZtvKzT2km3M//ITlRc1EXg=", + "attachment": { + "hash": "b2ee39528b217b0b6a6e809b831ba4b5b2efdf7b0deabdc0191a1b9973b85d38", + "size": 1983, + "filename": "FZ9pybbuyn9HhpGR1NPthWsnzkVhQmQzQLyshe2YYQI=.pem", + "location": "security-state-staging/intermediates/fa792f43-68b5-4a82-ae42-5752193cca67.pem", + "mimetype": "application/x-pem-file" + }, + "id": "ce3c1d70-a893-4f7d-b4f1-4096a0717930", + "last_modified": 1758164222337 + }, + { "schema": 1757037509106, "derHash": "LXtbQp+AwPCgMqAFH2lqD40LmJgOcfbyROrGNnvEyRc=", "attachment": { @@ -8812,78 +9423,6 @@ "last_modified": 1702526223655 }, { - "schema": 1702486085377, - "derHash": "CoUHXdazguqzFEmCPbi+1rYaRBcUFl4z+spCzZyN7Co=", - "subject": "CN=vTrus DV SSL CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEUxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRgwFgYDVQQDEw92VHJ1cyBEViBTU0wgQ0E=", - "whitelist": false, - "attachment": { - "hash": "006851a10c762422e7e12ab4089a413ae73d2e8903dcf2b5f33339eb89028d4d", - "size": 2064, - "filename": "75pE_IZKhqgviWzR4qTd2zPqnbH6f4VSS4OvPeBjEjQ=.pem", - "location": "security-state-staging/intermediates/e1f0958b-86df-449d-b5f1-2757e988420c.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "75pE/IZKhqgviWzR4qTd2zPqnbH6f4VSS4OvPeBjEjQ=", - "crlite_enrolled": false, - "id": "d6f08689-0364-4035-9f67-188ef9a50390", - "last_modified": 1702486623398 - }, - { - "schema": 1702486084746, - "derHash": "O4PrXXqaWvBidaChwbNb1WJiKlUh4mmfJVWTKLiCkFg=", - "subject": "CN=vTrus FastSSL CA G1,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEkxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRwwGgYDVQQDExN2VHJ1cyBGYXN0U1NMIENBIEcx", - "whitelist": false, - "attachment": { - "hash": "21f6f414641686539d652061920c99da66eeac581d65caca2e1263ca27038b16", - "size": 2073, - "filename": "fpLQRtZkeoQDvEsHjbmGGp4fKzFQ1gW-e9kvlVQKjBY=.pem", - "location": "security-state-staging/intermediates/f44e1b60-b2f5-4240-a8cb-336596d983f3.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "fpLQRtZkeoQDvEsHjbmGGp4fKzFQ1gW+e9kvlVQKjBY=", - "crlite_enrolled": false, - "id": "c65114a4-315c-4f34-8e9e-0ef28fbdfdc5", - "last_modified": 1702486623395 - }, - { - "schema": 1702486083830, - "derHash": "p9coWEO4mxNPhSy1Km9DGTglfIJtaZqoBsiUoKHNuEc=", - "subject": "CN=vTrus YunSSL DV CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEgxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRswGQYDVQQDExJ2VHJ1cyBZdW5TU0wgRFYgQ0E=", - "whitelist": false, - "attachment": { - "hash": "ba59a36c91137df6649c2f760f9117e321c471b7573176c4f2332ec8bddde489", - "size": 2068, - "filename": "OfXp7s_mA-7Syh7zoom2IuL92dtJFWJQ4LjjCHnZCrk=.pem", - "location": "security-state-staging/intermediates/b4f3d401-59d8-4949-82ef-944da5336058.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "OfXp7s/mA+7Syh7zoom2IuL92dtJFWJQ4LjjCHnZCrk=", - "crlite_enrolled": false, - "id": "28811891-e6f8-4c0f-bce3-5c665db2b118", - "last_modified": 1702486623391 - }, - { - "schema": 1702486085061, - "derHash": "LPVTkkmp44/AEOKf8+gEZljz0DC5MxBHNof6kfjaRMo=", - "subject": "CN=vTrus OV SSL CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEUxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRgwFgYDVQQDEw92VHJ1cyBPViBTU0wgQ0E=", - "whitelist": false, - "attachment": { - "hash": "d32a79724707e94c73675621bcd08858efa114f126cfd38d017df2d44b3177b1", - "size": 2064, - "filename": "_AQe5lWT9xIwgAiIHcAT-pRj70-ckw8xE4qArEfIyd0=.pem", - "location": "security-state-staging/intermediates/1ca4e475-3a37-4fba-b668-07c7f5b577dc.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "/AQe5lWT9xIwgAiIHcAT+pRj70+ckw8xE4qArEfIyd0=", - "crlite_enrolled": false, - "id": "e01d9a3b-493a-4396-9ca4-f3f2de493daa", - "last_modified": 1702486623388 - }, - { "schema": 1702486085692, "derHash": "g0aSLLhzC7aucasDv8QkYvQWBCPZB5vmQ4ViGsWHdnI=", "subject": "CN=Cybertrust Japan SureServer CA G4,O=Cybertrust Japan Co.\\, Ltd.,C=JP", @@ -8920,42 +9459,6 @@ "last_modified": 1702486623382 }, { - "schema": 1702486084441, - "derHash": "TTkfx5C9cCytPMvAsCXFzdiMb98nTc9fvT8CeoDCx+U=", - "subject": "CN=vTrus ECC DV SSL CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEkxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRwwGgYDVQQDExN2VHJ1cyBFQ0MgRFYgU1NMIENB", - "whitelist": false, - "attachment": { - "hash": "5d0d09acee96f60239874fa8cbd87dfee41ac77ccb2c2345645425c953b4c5c6", - "size": 1248, - "filename": "gJ1It3GyfR5y0xbHIcRJPwjI6151kRqrGSR_W5v6jek=.pem", - "location": "security-state-staging/intermediates/d7ce4c2f-7a54-4c3b-b5d0-e9a45a50d0ec.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "gJ1It3GyfR5y0xbHIcRJPwjI6151kRqrGSR/W5v6jek=", - "crlite_enrolled": false, - "id": "4492cc7c-97f7-4600-9e46-da9cddcdec08", - "last_modified": 1702486623379 - }, - { - "schema": 1702486085984, - "derHash": "QuRsRIdFkShRdklzFFe2riAJnVQb0YLFSXsuZ+b/0PY=", - "subject": "CN=vTrus ECC OV SSL CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEkxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRwwGgYDVQQDExN2VHJ1cyBFQ0MgT1YgU1NMIENB", - "whitelist": false, - "attachment": { - "hash": "9a039a52d5e8d351f219305666a32564c917aa7d800fad7ae1c6f67c124b735f", - "size": 1248, - "filename": "atwg6ejpADR_jBbKnuSFzeAuVeHiQKJdUl2HSR0gLmU=.pem", - "location": "security-state-staging/intermediates/422a5983-0489-4cd2-8b21-9eed0ec2384a.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "atwg6ejpADR/jBbKnuSFzeAuVeHiQKJdUl2HSR0gLmU=", - "crlite_enrolled": false, - "id": "5e3187ba-e500-4d22-865b-3ba0e069935c", - "last_modified": 1702486623376 - }, - { "schema": 1702352884804, "derHash": "mDgOQ34aRuasKqZNe+bXHylp5RCsr103hGzxK4r+ez4=", "subject": "CN=CFCA EV RSA CA,O=China Financial Certification Authority,C=CN", @@ -13834,24 +14337,6 @@ "last_modified": 1666727874713 }, { - "schema": 1666727340433, - "derHash": "ykOJyJ3fwxvsJsdLRKhJjFiy2DhRb6AbFPE5NinlikA=", - "subject": "CN=AffirmTrust Certificate Authority - DV1,OU=See www.affirmtrust.com/repository,O=AffirmTrust,C=CA", - "subjectDN": "MIGCMQswCQYDVQQGEwJDQTEUMBIGA1UEChMLQWZmaXJtVHJ1c3QxKzApBgNVBAsTIlNlZSB3d3cuYWZmaXJtdHJ1c3QuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0FmZmlybVRydXN0IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIERWMQ==", - "whitelist": false, - "attachment": { - "hash": "24062c77649490466b59b727862356b7b091396ef80b8d336e7a301146304ddf", - "size": 1662, - "filename": "68BRY3XqvlKubfNnBJ64F_17BHUniDemUwxZNNvfdaA=.pem", - "location": "security-state-staging/intermediates/4683bd6d-bd49-4e42-b154-69a18d94d8c8.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "68BRY3XqvlKubfNnBJ64F/17BHUniDemUwxZNNvfdaA=", - "crlite_enrolled": false, - "id": "dcda7a02-af57-41d8-9206-72360ea3f7c1", - "last_modified": 1666727874684 - }, - { "schema": 1666727381008, "derHash": "D2ctkqCwbO6UjwOyclAmAsbjfSoq1pSjHV3jExlukoI=", "subject": "CN=Certum Digital Identification CA SHA2,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL", @@ -14014,24 +14499,6 @@ "last_modified": 1666727874404 }, { - "schema": 1666727441777, - "derHash": "RWO5NuNauXV29a7xk12bx+mXeEHwVzvS4WvKyVNKavk=", - "subject": "CN=AffirmTrust Certificate Authority - DV1,OU=See www.affirmtrust.com/repository,O=AffirmTrust,C=CA", - "subjectDN": "MIGCMQswCQYDVQQGEwJDQTEUMBIGA1UEChMLQWZmaXJtVHJ1c3QxKzApBgNVBAsTIlNlZSB3d3cuYWZmaXJtdHJ1c3QuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0FmZmlybVRydXN0IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIERWMQ==", - "whitelist": false, - "attachment": { - "hash": "f469b6a26ab18f58e6fd0cfbda5e03e69cf3d3264a9c4790878f903d60151468", - "size": 1674, - "filename": "68BRY3XqvlKubfNnBJ64F_17BHUniDemUwxZNNvfdaA=.pem", - "location": "security-state-staging/intermediates/62e47fee-8839-40c8-9719-edf4a5d2615c.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "68BRY3XqvlKubfNnBJ64F/17BHUniDemUwxZNNvfdaA=", - "crlite_enrolled": false, - "id": "dd1c7414-0b47-4e26-8b61-6e686bc90126", - "last_modified": 1666727874346 - }, - { "schema": 1666727380667, "derHash": "9nh/qMrX0sJ5oDdL+1A4B8xq3MfCNwknPdWkBH0a73g=", "subject": "CN=SZCA DV SSL CA,O=Shenzhen Digital Certificate Authority Center Co.\\, Ltd,C=CN", @@ -18856,24 +19323,6 @@ "last_modified": 1666727868260 }, { - "schema": 1666727339046, - "derHash": "/yAcoSyHpvDLpkPpq7PJVMkVWt0xObLi6u0RS/n3XTE=", - "subject": "CN=COMODO RSA Domain Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB", - "subjectDN": "MIGSMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE4MDYGA1UEAxMvQ09NT0RPIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBIDI=", - "whitelist": false, - "attachment": { - "hash": "0e5888672dc235ecb49291515f1535331145bafac3937935291ca7a7503b3cfe", - "size": 2154, - "filename": "EULHwYvGhknyznoBvyvgbidiBH3JX3eFHHlIO3YK8Ek=.pem", - "location": "security-state-staging/intermediates/5c8056e2-7f02-452a-a514-695f16f72486.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "EULHwYvGhknyznoBvyvgbidiBH3JX3eFHHlIO3YK8Ek=", - "crlite_enrolled": false, - "id": "4e1f664c-f28d-4b71-95e8-c89ac5edb71e", - "last_modified": 1666727868247 - }, - { "schema": 1666727332312, "derHash": "5/vS2obeMa5/4FHGQ/xF0x5nRUsqXNjkPG1lZyOujOo=", "subject": "CN=FujiSSL SHA2 Extended Validation Secure Site CA,OU=Controlled by Sectigo exclusively for Nijimo K.K.,O=Nijimo K.K.,L=Shibuya-ku,ST=Tokyo,C=JP", @@ -19594,24 +20043,6 @@ "last_modified": 1666727867427 }, { - "schema": 1666727443480, - "derHash": "zWwQig5kHyyhIqqm0D+CZ1nK58b4AOq/dtxItnzQg84=", - "subject": "CN=COMODO ECC Domain Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB", - "subjectDN": "MIGSMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE4MDYGA1UEAxMvQ09NT0RPIEVDQyBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBIDI=", - "whitelist": false, - "attachment": { - "hash": "fdc9f35f8aa108a206630dc736519f9dfbfe8d377befd1434e04057351cb23b8", - "size": 1317, - "filename": "x9SZw6TwIqfmvrLZ_kz1o0Ossjmn728BnBKpUFqGNVM=.pem", - "location": "security-state-staging/intermediates/bd12ec7e-95c9-43a1-8ba0-bb79c0c971cb.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "x9SZw6TwIqfmvrLZ/kz1o0Ossjmn728BnBKpUFqGNVM=", - "crlite_enrolled": false, - "id": "0e9934e0-e8f1-4282-9296-be48b24cc9bf", - "last_modified": 1666727867412 - }, - { "schema": 1666727338705, "derHash": "WDRT7ArdhSaAHmL7hQePCySEXwtnYSgw3al+wOgp9B0=", "subject": "CN=Trusted Secure Certificate Authority DV,O=Corporation Service Company,L=Wilmington,ST=DE,C=US", @@ -23104,24 +23535,6 @@ "last_modified": 1663786626496 }, { - "schema": 1663786383741, - "derHash": "kUfDjgO0bIzl3dsCyqKTLx4WdcCgAVKRODNu0Q2ZmDo=", - "subject": "CN=COMODO RSA Domain Validation Secure Server CA 3,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB", - "subjectDN": "MIGSMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE4MDYGA1UEAxMvQ09NT0RPIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBIDM=", - "whitelist": false, - "attachment": { - "hash": "76b55e319beb0a0b3a30c9556ebb53fcad7f327f6c14a4903a10bfc2c9cfe8b8", - "size": 2158, - "filename": "InQsVwxFxCARGa9oRQJcZVg2VPAXkUYSVkDc3jhuVUM=.pem", - "location": "security-state-staging/intermediates/ea431013-e9c9-46d0-b171-4bfaa692ba0b.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "InQsVwxFxCARGa9oRQJcZVg2VPAXkUYSVkDc3jhuVUM=", - "crlite_enrolled": false, - "id": "1e04130f-d460-40fd-9186-6bd19a55934d", - "last_modified": 1663786626468 - }, - { "schema": 1663786375695, "derHash": "DjTMNfZt4MBuHZAeJYCWFULsLi+rF1eDfQnP42VHlmw=", "subject": "CN=ISSAuth RSA EV CA,O=INTEGRITY Security Services LLC,C=US", @@ -23320,24 +23733,6 @@ "last_modified": 1663786626225 }, { - "schema": 1663786354329, - "derHash": "kdAFBjP2JXL2eWFIhnZE7jEUCtciZuD5MFp8b9QED58=", - "subject": "CN=COMODO ECC Domain Validation Secure Server CA 3,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB", - "subjectDN": "MIGSMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE4MDYGA1UEAxMvQ09NT0RPIEVDQyBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBIDM=", - "whitelist": false, - "attachment": { - "hash": "a61e122807ad3a61a777dc8f4c749d88f4409f31804006b1eb5a70944c7efc57", - "size": 1317, - "filename": "yRx6JkdTon5X6I6GmE6-8BL0QUZRKbcRvDM_vt2Beyg=.pem", - "location": "security-state-staging/intermediates/85aef9ad-5fb3-41c1-8be0-97335974816d.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "yRx6JkdTon5X6I6GmE6+8BL0QUZRKbcRvDM/vt2Beyg=", - "crlite_enrolled": false, - "id": "8949c218-e8ec-4e70-a3ef-6a4f7c989fe7", - "last_modified": 1663786626211 - }, - { "schema": 1663786346195, "derHash": "ZeeA3/y1OHDqTtnhhLz5v8pGSEi00n5e7fY5GOabO4c=", "subject": "CN=Don Dominio / MrDomain RSA OV CA,O=Soluciones Corporativas IP\\, SL,L=Manacor,ST=Illes Balears,C=ES", @@ -23500,24 +23895,6 @@ "last_modified": 1663786626080 }, { - "schema": 1663786329097, - "derHash": "kMZx4I5oI7hkbC7BgCN2msD8NDijPBAfZoO5XeMYBSQ=", - "subject": "CN=COMODO ECC Extended Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB", - "subjectDN": "MIGUMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE6MDgGA1UEAxMxQ09NT0RPIEVDQyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0EgMg==", - "whitelist": false, - "attachment": { - "hash": "2d0f4b22b6568077c96779daabd7d06484ff21f2d47d3b497b237d1e36faaf6f", - "size": 1366, - "filename": "8BVB_xN70KohDkSwXqSXWyZjE3Wl2yUIqPlb8CShV54=.pem", - "location": "security-state-staging/intermediates/c9f2ed62-6fd3-482a-8672-f51217ff5dd7.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "8BVB/xN70KohDkSwXqSXWyZjE3Wl2yUIqPlb8CShV54=", - "crlite_enrolled": false, - "id": "c61ce58d-5a36-4cd6-b9fd-ebb5d8bcb7ee", - "last_modified": 1663786626059 - }, - { "schema": 1663786324767, "derHash": "yjd7GIZrI48xqASd/RNgnlSbdROQ7vzbmpoTUxJ/+zU=", "subject": "CN=DNEncrypt ECC OV SSL/TLS [Run by the Issuer],O=DNEncrypt\\, Inc,C=US", @@ -23806,24 +24183,6 @@ "last_modified": 1663786625708 }, { - "schema": 1663786282996, - "derHash": "qyyT4BzCFYB/BM2/w2KAjYiUCnss7nAjjTVtjZSVbfk=", - "subject": "CN=COMODO RSA Extended Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB", - "subjectDN": "MIGUMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE6MDgGA1UEAxMxQ09NT0RPIFJTQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0EgMg==", - "whitelist": false, - "attachment": { - "hash": "8e70b65da05caf7f28d7bcfb3ec44605864986d6ec0bf12372711eda665619b8", - "size": 2207, - "filename": "_KV5PqHI-A-AHDl7BRjU7Yfi8xL4XtBw8FQAx1HWgH4=.pem", - "location": "security-state-staging/intermediates/26a042d6-fc2e-44df-a739-754b6e28914a.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "/KV5PqHI+A+AHDl7BRjU7Yfi8xL4XtBw8FQAx1HWgH4=", - "crlite_enrolled": false, - "id": "02e75ed1-98e8-41e9-9a28-8a2924ba9fb8", - "last_modified": 1663786625701 - }, - { "schema": 1663786285532, "derHash": "qK7gyk++CQh4qQHLVkElV07GS6KOnpApbtPkkrFgtNk=", "subject": "CN=DNEncrypt SHA2 OV SSL/TLS [Run by the Issuer],O=DNEncrypt\\, Inc,C=US", @@ -24796,42 +25155,6 @@ "last_modified": 1663333023134 }, { - "schema": 1663292931545, - "derHash": "vTDA0eesuD78T19sYvjzpXm6snUnr65mbGlsOoZxdfE=", - "subject": "CN=vTrus ECC EV SSL CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEkxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRwwGgYDVQQDExN2VHJ1cyBFQ0MgRVYgU1NMIENB", - "whitelist": false, - "attachment": { - "hash": "5efe51a26c5280ef3910747587a1258ee032a5cd4592afff27a55faecd152eec", - "size": 1183, - "filename": "7k0rYa-qry4wDaWSSycBwDVQALkMXBvBWeWHCjNIjTA=.pem", - "location": "security-state-staging/intermediates/cd43148a-54af-4d80-ae67-169c20b9e44f.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "7k0rYa+qry4wDaWSSycBwDVQALkMXBvBWeWHCjNIjTA=", - "crlite_enrolled": false, - "id": "e538f9af-2862-49fd-bf86-757961d7fae8", - "last_modified": 1663293423124 - }, - { - "schema": 1663292929822, - "derHash": "86ptcSoV9j+DUIBJedtUJBmmGysdIudWxBer/o10o8o=", - "subject": "CN=vTrus EV SSL CA,O=iTrusChina Co.\\,Ltd.,C=CN", - "subjectDN": "MEUxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRgwFgYDVQQDEw92VHJ1cyBFViBTU0wgQ0E=", - "whitelist": false, - "attachment": { - "hash": "01cb1f5c741d941d11e0575e8235a3df364dc571bdd452841c23bd28e35016d3", - "size": 2003, - "filename": "tHoUHCrraSrjkHaUbZGcxRVrjSHn8i6s8_iI6HHC6Ok=.pem", - "location": "security-state-staging/intermediates/ebfa270b-ca4e-440a-992b-6b490b598528.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "tHoUHCrraSrjkHaUbZGcxRVrjSHn8i6s8/iI6HHC6Ok=", - "crlite_enrolled": false, - "id": "abf9e632-aa0d-4b33-a74e-1afa980faa53", - "last_modified": 1663293423105 - }, - { "schema": 1662515823574, "derHash": "Yjq+xvhacCisoQ9b3F2BtWtjFN8odD/8yE7KMvNa6EY=", "subject": "CN=MuaSSL.com TLS Issuing ECC CA R1,O=Hao Quang Viet Software Company Limited,C=VN", @@ -26956,24 +27279,6 @@ "last_modified": 1645578268654 }, { - "schema": 1645577354679, - "derHash": "us3gRjBTzh1i+L50Nwu6551PyvGfwHZDrvGV5qWb1Xg=", - "subject": "CN=E2,O=Let's Encrypt,C=US", - "subjectDN": "MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJFMg==", - "whitelist": false, - "attachment": { - "hash": "051882dab9b07102f7aba08eef5eb943e8b8096631074d7f98f9c7dcef77e86d", - "size": 1020, - "filename": "vZNucrIS7293MQLGt304-UKXMi78JTlrwyeUIuDIknA=.pem", - "location": "security-state-staging/intermediates/0636e71b-fceb-48eb-b0f6-37d5ce14cea6.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "vZNucrIS7293MQLGt304+UKXMi78JTlrwyeUIuDIknA=", - "crlite_enrolled": false, - "id": "02bf75eb-e74f-44f4-8318-55d1097a8849", - "last_modified": 1645578268568 - }, - { "schema": 1645577377719, "derHash": "vOcJE1XSQXo3+M/irI8XwnSIiLoO6pAAD8mA7PwtBB8=", "subject": "CN=GlobalSign Atlas R6 EV TLS CA 2020,O=GlobalSign nv-sa,C=BE", @@ -27136,24 +27441,6 @@ "last_modified": 1645578267998 }, { - "schema": 1645577434085, - "derHash": "iwW2jMZZ5e0PyzjyyUL7/SAOby/5+F1jxplO9eCwJwE=", - "subject": "CN=ISRG Root X2,O=Internet Security Research Group,C=US", - "subjectDN": "ME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgy", - "whitelist": false, - "attachment": { - "hash": "0a551cc852c7b0f054ae4c9e72acb7a6b4b1a8bab2d598b21063ab92fc36ecb6", - "size": 1577, - "filename": "diGVwiVYbubAI3RW4hB9xU8e_CH2GnkuvVFZE8zmgzI=.pem", - "location": "security-state-staging/intermediates/a9c4efcb-3d99-44aa-ba70-b708ebb61779.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "diGVwiVYbubAI3RW4hB9xU8e/CH2GnkuvVFZE8zmgzI=", - "crlite_enrolled": false, - "id": "f0173e43-16e0-4e9f-8374-fd40addf5a22", - "last_modified": 1645578267968 - }, - { "schema": 1645577440775, "derHash": "HjNJzTZqk+We9BUqHkg9rGB2GExdRtTNoA5gk+/J5qM=", "subject": "CN=University of West Attica TLS RSA SubCA R1,O=Hellenic Academic and Research Institutions CA,C=GR", @@ -27298,24 +27585,6 @@ "last_modified": 1645578267065 }, { - "schema": 1645577557948, - "derHash": "Z63RFmsCCuYbj1/JaBPATCqliZYHloZVcqPH5zdhPf0=", - "subject": "CN=R3,O=Let's Encrypt,C=US", - "subjectDN": "MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJSMw==", - "whitelist": false, - "attachment": { - "hash": "c298ec17b9257dbfb7f36280caade22c6317186c146b5fdd5792bcb77afced29", - "size": 1825, - "filename": "jQJTbIh0grw0_1TkHSumWb-Fs0Ggogr621gT3PvPKG0=.pem", - "location": "security-state-staging/intermediates/d7c06dc8-e1a0-4fd1-accb-cb12a54a8760.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "jQJTbIh0grw0/1TkHSumWb+Fs0Ggogr621gT3PvPKG0=", - "crlite_enrolled": false, - "id": "ba68b537-2a39-44eb-b070-be4b1ad5e0ef", - "last_modified": 1645578267024 - }, - { "schema": 1645577560630, "derHash": "FkjOSrG7ZcSFyyI2x2j6u4ZRR9QmkVuSr7yoHpsu47w=", "subject": "CN=e-Szigno Qualified Pseudonymous CA 2017,O=Microsec Ltd.,L=Budapest,C=HU", @@ -27478,24 +27747,6 @@ "last_modified": 1645578266783 }, { - "schema": 1645577592853, - "derHash": "GgdSmos/AdIx360qvfcYmSALtlzX4DxZ+oInJTM1W3Q=", - "subject": "CN=R4,O=Let's Encrypt,C=US", - "subjectDN": "MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJSNA==", - "whitelist": false, - "attachment": { - "hash": "e7c443b15be49a4083c31378f2a1749ea59e73cd564b4d4e0465ea2d9d839146", - "size": 1825, - "filename": "5VReIRNHJBiRxVSgOTTN6bdJZkpZ0m1hX-WPd5kPLQM=.pem", - "location": "security-state-staging/intermediates/4eb48f8a-eff3-4ca5-abab-9dfe2ab3a50e.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "5VReIRNHJBiRxVSgOTTN6bdJZkpZ0m1hX+WPd5kPLQM=", - "crlite_enrolled": false, - "id": "e35b8ec9-20fd-46e7-851c-4d7d2566d1c0", - "last_modified": 1645578266773 - }, - { "schema": 1645577614499, "derHash": "ugMS97cva2S0zO40tfYoz2Wh87nxa43+etqQxU5HWhw=", "subject": "CN=HARICA QWAC ECC SubCA R1,OU=Hellenic Academic and Research Institutions CA,O=Greek Universities Network (GUnet),L=Athens,C=GR", @@ -27550,24 +27801,6 @@ "last_modified": 1645578266525 }, { - "schema": 1645577626559, - "derHash": "RklOMDeQWd8YvlISQwXmBvxZBw5bIQds4ROVS2BRfNo=", - "subject": "CN=E1,O=Let's Encrypt,C=US", - "subjectDN": "MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJFMQ==", - "whitelist": false, - "attachment": { - "hash": "14cf69c79f1a688b326247f724ad50a3b22de5e34daf12c66670e5a38b1273d0", - "size": 1020, - "filename": "J2_oqMTsdhFWW_n85tys6b4yDBtb6idZayIEBx7QTxA=.pem", - "location": "security-state-staging/intermediates/6f24bdbe-5332-48da-8591-994a182c5271.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "J2/oqMTsdhFWW/n85tys6b4yDBtb6idZayIEBx7QTxA=", - "crlite_enrolled": false, - "id": "5f7b8a2f-c2df-4f79-b8e7-89710f155789", - "last_modified": 1645578266515 - }, - { "schema": 1645577633162, "derHash": "Kg4/KneoDcvlzVLVDWUHbr03+tUx2xDWoThaVX97cl0=", "subject": "CN=e-Szigno Class2 SSL CA 2017,O=Microsec Ltd.,L=Budapest,C=HU", @@ -29584,24 +29817,6 @@ "last_modified": 1562025358063 }, { - "schema": 1562025337064, - "derHash": "qlNFLViQaevZFCODT+woinisxqe51NDxQ9jJLguD2Ok=", - "subject": "CN=CERTSIGN FOR BANKING QUALIFIED DS PRODUCTION CA V3,OU=Certificat de productie Production certificate,O=certSIGN,C=RO", - "subjectDN": "MIGWMQswCQYDVQQGEwJSTzERMA8GA1UECgwIY2VydFNJR04xNzA1BgNVBAsMLkNlcnRpZmljYXQgZGUgcHJvZHVjdGllIFByb2R1Y3Rpb24gY2VydGlmaWNhdGUxOzA5BgNVBAMMMkNFUlRTSUdOIEZPUiBCQU5LSU5HIFFVQUxJRklFRCBEUyBQUk9EVUNUSU9OIENBIFYz", - "whitelist": false, - "attachment": { - "hash": "eaa0de7b4753356246d652e36cc56d60e8a923001719aa842e83a1fbfb036ca1", - "size": 1683, - "filename": "lgaybEWhquJ9CUpEl0ci8n7TT_mQu7ls6VLD9gC0u2g=.pem", - "location": "security-state-staging/intermediates/b16e7431-1a00-4dad-9c47-46be383bcfe4.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "lgaybEWhquJ9CUpEl0ci8n7TT/mQu7ls6VLD9gC0u2g=", - "crlite_enrolled": false, - "id": "515bc65f-fec1-4f6b-98db-30c867438ca2", - "last_modified": 1562025337821 - }, - { "schema": 1562025318342, "derHash": "GJWNA6+0CWh6G8Jjhg0Nc1oloASrYODw5F1jM1h0N64=", "subject": "CN=GoGetSSL Business Validation CA SHA2,OU=GoGetSSL Certification Authority,O=EnVers Group SIA,C=LV", @@ -29674,24 +29889,6 @@ "last_modified": 1562025250818 }, { - "schema": 1562025247064, - "derHash": "yucvZtYa+5ppczjo9TWNgHG6+krk0nF8fmNftepD02U=", - "subject": "CN=CERTSIGN FOR BANKING SIMPLE SSL PRODUCTION CA V3,OU=Certificat de productie Production certificate,O=certSIGN,C=RO", - "subjectDN": "MIGUMQswCQYDVQQGEwJSTzERMA8GA1UECgwIY2VydFNJR04xNzA1BgNVBAsMLkNlcnRpZmljYXQgZGUgcHJvZHVjdGllIFByb2R1Y3Rpb24gY2VydGlmaWNhdGUxOTA3BgNVBAMMMENFUlRTSUdOIEZPUiBCQU5LSU5HIFNJTVBMRSBTU0wgUFJPRFVDVElPTiBDQSBWMw==", - "whitelist": false, - "attachment": { - "hash": "9c05002f5f1bd3a2e682040ad3ca45aa65b80fbea14f287d0b612d125aae2b87", - "size": 1678, - "filename": "dSEYX-UXMMv7WVy6VlLFnfcCjxt0nH-xwgRrYqDvmpA=.pem", - "location": "security-state-staging/intermediates/86434fba-a8fc-495a-9af1-290826501bfc.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "dSEYX+UXMMv7WVy6VlLFnfcCjxt0nH+xwgRrYqDvmpA=", - "crlite_enrolled": false, - "id": "9a546d40-8e30-4cfa-b711-298337b46008", - "last_modified": 1562025247802 - }, - { "schema": 1562025170804, "derHash": "Viy7y96+6zy1WUa9ziSMpKYj0rpud7Y7dU06Vx9n36I=", "subject": "CN=Fraunhofer User CA - G02,OU=Fraunhofer Corporate PKI,O=Fraunhofer,L=Muenchen,ST=Bayern,C=DE", @@ -30268,5 +30465,5 @@ "last_modified": 1559865884636 } ], - "timestamp": 1757041022475 + "timestamp": 1759384622673 } diff -Nru firefox-esr-140.3.1esr/services/settings/dumps/security-state/onecrl.json firefox-esr-140.4.0esr/services/settings/dumps/security-state/onecrl.json --- firefox-esr-140.3.1esr/services/settings/dumps/security-state/onecrl.json 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/services/settings/dumps/security-state/onecrl.json 2025-10-09 15:35:37.000000000 +0000 @@ -1,6 +1,336 @@ { "data": [ { + "schema": 1759112148984, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1991483", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEoxCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlJZGVuVHJ1c3QxJzAlBgNVBAMTHklkZW5UcnVzdCBDb21tZXJjaWFsIFJvb3QgQ0EgMQ==", + "serialNumber": "QAGZTuaVjBYaoCT7yxS+8Q==", + "id": "6fdde02e-abca-4053-8c8b-ee96715b5822", + "last_modified": 1759512219332 + }, + { + "schema": 1758733249086, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEMxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRYwFAYDVQQDEw12VHJ1cyBSb290IENB", + "serialNumber": "H/L4i1v5/XOL7JCrr9tQGv506to=", + "id": "295f678f-7e40-46a1-a503-e17444837279", + "last_modified": 1758925232405 + }, + { + "schema": 1758733248864, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEMxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRYwFAYDVQQDEw12VHJ1cyBSb290IENB", + "serialNumber": "SBXL3j0r4GR183k/uU5koHPSG/o=", + "id": "ebda4091-6026-4c48-b559-53f32b16a14d", + "last_modified": 1758925232400 + }, + { + "schema": 1758733248537, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgQ29tbWVyY2lhbA==", + "serialNumber": "WA4AsU6GzjU=", + "id": "2d547269-424e-4338-80cb-cd5130c5a55e", + "last_modified": 1758925232395 + }, + { + "schema": 1758733248936, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEMxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRYwFAYDVQQDEw12VHJ1cyBSb290IENB", + "serialNumber": "IwMB5daayJMNYjOU/9KgkXwOfns=", + "id": "1c51fba4-924d-4fbf-862a-7d2d1b865046", + "last_modified": 1758925232390 + }, + { + "schema": 1758733248793, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEMxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRYwFAYDVQQDEw12VHJ1cyBSb290IENB", + "serialNumber": "R7YSD+vV5yVMmd4c3N1TWtNfmXY=", + "id": "9aa4fc79-b99a-4a76-91f8-59b07ae8e7b5", + "last_modified": 1758925232385 + }, + { + "schema": 1758733248457, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEMxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRYwFAYDVQQDEw12VHJ1cyBSb290IENB", + "serialNumber": "fXRuo24hNicOj8LiRW0inLkMgLc=", + "id": "e5af86c7-eb99-4842-ab6d-5177d0dfb2f2", + "last_modified": 1758925232381 + }, + { + "schema": 1758733248681, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEcxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRowGAYDVQQDExF2VHJ1cyBFQ0MgUm9vdCBDQQ==", + "serialNumber": "RgqFRnlv0Tm6Yu2G12NGlCEpt6Q=", + "id": "0b48cb3d-9ee2-4300-987d-d04fb85bc8d8", + "last_modified": 1758925232376 + }, + { + "schema": 1758680148877, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgQ29tbWVyY2lhbA==", + "serialNumber": "YrTD66U5GBd/EnqDe1dPlg==", + "id": "8c075d70-593a-4cd8-ae91-044e30199a52", + "last_modified": 1758925232371 + }, + { + "schema": 1758733249006, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEcxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRowGAYDVQQDExF2VHJ1cyBFQ0MgUm9vdCBDQQ==", + "serialNumber": "FGaoLL8Bg6oJP9IoD6w8DjnwKUA=", + "id": "b2a3d4c3-37ef-407a-abb5-041afb7b0ffb", + "last_modified": 1758925232366 + }, + { + "schema": 1758733248610, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1990548", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEcxCzAJBgNVBAYTAkNOMRwwGgYDVQQKExNpVHJ1c0NoaW5hIENvLixMdGQuMRowGAYDVQQDExF2VHJ1cyBFQ0MgUm9vdCBDQQ==", + "serialNumber": "MCKC1m3zs3p/W/Nz1K6OfFwSU3Y=", + "id": "23328e11-e0a0-486b-bacc-49c0fd35a1ca", + "last_modified": 1758925232361 + }, + { + "schema": 1757350848431, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MIGwMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L0NQUyBpcyBpbmNvcnBvcmF0ZWQgYnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwNiBFbnRydXN0LCBJbmMuMS0wKwYDVQQDEyRFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=", + "serialNumber": "AIZmsCrBy1RAAAAAAFHTWJw=", + "id": "438674be-8ca8-40db-bae9-de78781645cb", + "last_modified": 1757617168015 + }, + { + "schema": 1757350848496, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MIG+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMg==", + "serialNumber": "AKyaWNhjdWjSzf3cHHlVzA==", + "id": "936c78c6-41e6-4de9-ac19-69096be77277", + "last_modified": 1757617168010 + }, + { + "schema": 1757350848364, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0M=", + "serialNumber": "AgKlhME0Bk3J8y0gfqNymA==", + "id": "46feb6b4-8718-4601-abd1-d75c20d8441f", + "last_modified": 1757617168006 + }, + { + "schema": 1757350848303, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgQ29tbWVyY2lhbA==", + "serialNumber": "QPC7qorgwJg=", + "id": "2fb5fab8-7ea5-4854-a833-c8530a951547", + "last_modified": 1757617168002 + }, + { + "schema": 1757350848240, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgQ29tbWVyY2lhbA==", + "serialNumber": "U/amEQkuUo7ZY/GRSVMiBA==", + "id": "dd5dc9b1-39b8-4dc3-baf2-efb7acbaf703", + "last_modified": 1757617167998 + }, + { + "schema": 1757350848040, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgTmV0d29ya2luZw==", + "serialNumber": "NCSh7Pjwo1/nRrcBHEPoRA==", + "id": "8e410ddb-9913-4914-a771-f6d1e056e819", + "last_modified": 1757617167993 + }, + { + "schema": 1757350847978, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEExCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEcMBoGA1UEAwwTQWZmaXJtVHJ1c3QgUHJlbWl1bQ==", + "serialNumber": "U3HI6weE/VEI5dTz4yPsRg==", + "id": "ef8e8f67-fda8-4721-81a4-1a18af74dbdf", + "last_modified": 1757617167988 + }, + { + "schema": 1757297740422, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgQ29tbWVyY2lhbA==", + "serialNumber": "GH5/O/ZvI80=", + "id": "f3762abb-84b6-4908-9bdf-3bc8d0372156", + "last_modified": 1757617167984 + }, + { + "schema": 1757350847914, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MEQxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEfMB0GA1UEAwwWQWZmaXJtVHJ1c3QgQ29tbWVyY2lhbA==", + "serialNumber": "FylVHtaOf7Ht9XMA811/1Q==", + "id": "cd592aec-024b-43e2-ae63-31aabb44e846", + "last_modified": 1757617167980 + }, + { + "schema": 1757350848174, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MIG+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMg==", + "serialNumber": "ewNQp7HUaIWvTMjHQKVosA==", + "id": "efe819a5-4809-4b21-97c7-500d0fd4ffd3", + "last_modified": 1757617167975 + }, + { + "schema": 1757350848103, + "details": { + "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1987472", + "who": "", + "why": "", + "name": "", + "created": "" + }, + "enabled": false, + "issuerName": "MIG+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMg==", + "serialNumber": "APq7J93/gNCaAAAAAFHTlEA=", + "id": "46055c11-dd44-4697-bbed-0cc4f5f4fd52", + "last_modified": 1757617167970 + }, + { "schema": 1755882048899, "details": { "bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1984708", @@ -25664,5 +25994,5 @@ "last_modified": 1480349158647 } ], - "timestamp": 1756158950197 + "timestamp": 1759512219332 } diff -Nru firefox-esr-140.3.1esr/sourcestamp.txt firefox-esr-140.4.0esr/sourcestamp.txt --- firefox-esr-140.3.1esr/sourcestamp.txt 2025-09-22 21:16:47.000000000 +0000 +++ firefox-esr-140.4.0esr/sourcestamp.txt 2025-10-09 15:36:08.000000000 +0000 @@ -1,2 +1,2 @@ -20250922173505 -https://hg.mozilla.org/releases/mozilla-esr140/rev/0b8c16d258d0c9d9d0379b9f317c77245ec010ff +20251009121631 +https://hg.mozilla.org/releases/mozilla-esr140/rev/c4525dfe35a20458c7a6966c0c6d27f92f2deca7 diff -Nru firefox-esr-140.3.1esr/supply-chain/audits.toml firefox-esr-140.4.0esr/supply-chain/audits.toml --- firefox-esr-140.3.1esr/supply-chain/audits.toml 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/supply-chain/audits.toml 2025-10-09 15:35:38.000000000 +0000 @@ -652,6 +652,17 @@ criteria = "safe-to-deploy" version = "0.2.18" +[[audits.allocator-api2]] +who = "Mike Hommey " +criteria = "safe-to-deploy" +delta = "0.2.20 -> 0.2.21" + +[[audits.allocator-api2]] +who = "Mike Hommey " +criteria = "safe-to-deploy" +delta = "0.2.21 -> 0.2.21@git:ad5f3d56a5a4519eff52af4ff85293431466ef5c" +importable = false + [[audits.alsa]] who = "Mike Hommey " criteria = "safe-to-deploy" diff -Nru firefox-esr-140.3.1esr/supply-chain/config.toml firefox-esr-140.4.0esr/supply-chain/config.toml --- firefox-esr-140.3.1esr/supply-chain/config.toml 2025-09-22 21:16:17.000000000 +0000 +++ firefox-esr-140.4.0esr/supply-chain/config.toml 2025-10-09 15:35:38.000000000 +0000 @@ -21,7 +21,7 @@ [policy.allocator-api2] audit-as-crates-io = true -notes = "This is the upstream code without the Box implementation which may have a soundness issue." +notes = "This is the upstream code with a fix for rust 1.89." [policy.any_all_workaround] audit-as-crates-io = true diff -Nru firefox-esr-140.3.1esr/supply-chain/imports.lock firefox-esr-140.4.0esr/supply-chain/imports.lock --- firefox-esr-140.3.1esr/supply-chain/imports.lock 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/supply-chain/imports.lock 2025-10-09 15:35:38.000000000 +0000 @@ -1,10 +1,6 @@ # cargo-vet imports lock -[[unpublished.allocator-api2]] -version = "0.2.999" -audited_as = "0.2.20" - [[publisher.aho-corasick]] version = "1.1.0" when = "2023-09-18" @@ -909,7 +905,7 @@ criteria = "safe-to-deploy" user-id = 696 # Nick Fitzgerald (fitzgen) start = "2020-01-14" -end = "2025-07-30" +end = "2026-08-21" notes = "I am an author of this crate." [[audits.bytecode-alliance.wildcard-audits.bumpalo]] @@ -917,14 +913,14 @@ criteria = "safe-to-deploy" user-id = 696 # Nick Fitzgerald (fitzgen) start = "2019-03-16" -end = "2025-07-30" +end = "2026-08-21" [[audits.bytecode-alliance.wildcard-audits.derive_arbitrary]] who = "Nick Fitzgerald " criteria = "safe-to-deploy" user-id = 696 # Nick Fitzgerald (fitzgen) start = "2020-01-14" -end = "2025-07-30" +end = "2026-08-21" notes = "I am an author of this crate" [[audits.bytecode-alliance.wildcard-audits.wasmparser]] @@ -2297,7 +2293,7 @@ criteria = "safe-to-deploy" user-id = 48 # Jan-Erik Rediger (badboy) start = "2021-03-03" -end = "2025-08-05" +end = "2026-07-02" notes = "Maintained by me" aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" diff -Nru firefox-esr-140.3.1esr/taskcluster/kinds/cron-bouncer-check/kind.yml firefox-esr-140.4.0esr/taskcluster/kinds/cron-bouncer-check/kind.yml --- firefox-esr-140.3.1esr/taskcluster/kinds/cron-bouncer-check/kind.yml 2025-09-22 21:16:17.000000000 +0000 +++ firefox-esr-140.4.0esr/taskcluster/kinds/cron-bouncer-check/kind.yml 2025-10-09 15:35:38.000000000 +0000 @@ -53,7 +53,7 @@ mozilla-central: FIREFOX_NIGHTLY mozilla-beta: LATEST_FIREFOX_RELEASED_DEVEL_VERSION mozilla-release: LATEST_FIREFOX_VERSION - mozilla-esr140: FIREFOX_ESR_NEXT + mozilla-esr140: FIREFOX_ESR default: LATEST_FIREFOX_DEVEL_VERSION products-url: https://product-details.mozilla.org/1.0/firefox_versions.json treeherder: diff -Nru firefox-esr-140.3.1esr/taskcluster/kinds/release-bouncer-aliases/kind.yml firefox-esr-140.4.0esr/taskcluster/kinds/release-bouncer-aliases/kind.yml --- firefox-esr-140.3.1esr/taskcluster/kinds/release-bouncer-aliases/kind.yml 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/taskcluster/kinds/release-bouncer-aliases/kind.yml 2025-10-09 15:35:38.000000000 +0000 @@ -73,6 +73,7 @@ firefox-esr-msix-latest-ssl: msix firefox-esr-pkg-latest-ssl: pkg firefox-esr-langpack-latest-ssl: langpack + esrXXX: # ... these point to the newer branch firefox-esr-next-latest-ssl: installer-ssl firefox-esr-next-latest: installer diff -Nru firefox-esr-140.3.1esr/taskcluster/kinds/release-update-verify-config-next/kind.yml firefox-esr-140.4.0esr/taskcluster/kinds/release-update-verify-config-next/kind.yml --- firefox-esr-140.3.1esr/taskcluster/kinds/release-update-verify-config-next/kind.yml 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/taskcluster/kinds/release-update-verify-config-next/kind.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. ---- -loader: taskgraph.loader.transform:loader - -transforms: - - gecko_taskgraph.transforms.release:run_on_releases - - gecko_taskgraph.transforms.update_verify_config:transforms - - gecko_taskgraph.transforms.job:transforms - - gecko_taskgraph.transforms.task:transforms - -task-defaults: - name: update-verify-config-next - run-on-projects: [] # to make sure this never runs as part of CI - run-on-releases: [esr140] - shipping-phase: promote - worker-type: b-linux-gcp - worker: - docker-image: - in-tree: "update-verify" - max-run-time: 3600 - artifacts: - - name: public/build/update-verify.cfg - path: /builds/worker/checkouts/gecko/update-verify.cfg - type: file - run: - sparse-profile: mozharness - treeherder: - symbol: UVCnext - kind: test - tier: 1 - extra: - app-name: browser - branch-prefix: mozilla - last-linux-bz2-version: "134.99.0" # Bug 1710599: Last version to use bz2 compression on Linux builds - archive-prefix: - by-release-level: - staging: "http://ftp.stage.mozaws.net/pub" - production: "https://archive.mozilla.org/pub" - previous-archive-prefix: - by-release-level: - staging: "https://archive.mozilla.org/pub" - production: null - aus-server: - by-release-level: - staging: "https://stage.balrog.nonprod.cloudops.mozgcp.net" - production: "https://aus5.mozilla.org" - override-certs: - by-release-level: - staging: dep - production: null - updater-platform: linux-x86_64 - product: firefox - channel: "esr-localtest-next" - include-version: esr140-next - last-watershed: "68.0esr" - -tasks: - firefox-next-linux: - shipping-product: firefox - treeherder: - platform: linux32-shippable/opt - attributes: - build_platform: linux-shippable - extra: - platform: linux-i686 - firefox-next-linux64: - shipping-product: firefox - treeherder: - platform: linux64-shippable/opt - attributes: - build_platform: linux64-shippable - extra: - platform: linux-x86_64 - firefox-next-macosx64: - shipping-product: firefox - treeherder: - platform: osx-shippable/opt - attributes: - build_platform: macosx64-shippable - extra: - platform: mac - firefox-next-win32: - shipping-product: firefox - treeherder: - platform: windows2012-32-shippable/opt - attributes: - build_platform: win32-shippable - extra: - platform: win32 - firefox-next-win64: - shipping-product: firefox - treeherder: - platform: windows2012-64-shippable/opt - attributes: - build_platform: win64-shippable - extra: - platform: win64 - firefox-next-win64-aarch64: - shipping-product: firefox - treeherder: - platform: windows2012-aarch64-shippable/opt - attributes: - build_platform: win64-aarch64-shippable - extra: - platform: win64-aarch64 diff -Nru firefox-esr-140.3.1esr/taskcluster/kinds/release-update-verify-next/kind.yml firefox-esr-140.4.0esr/taskcluster/kinds/release-update-verify-next/kind.yml --- firefox-esr-140.3.1esr/taskcluster/kinds/release-update-verify-next/kind.yml 2025-09-22 21:16:16.000000000 +0000 +++ firefox-esr-140.4.0esr/taskcluster/kinds/release-update-verify-next/kind.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. ---- -loader: taskgraph.loader.transform:loader - -kind-dependencies: - - post-balrog-dummy - - post-beetmover-dummy - - release-balrog-submit-toplevel - - release-update-verify-config-next - - toolchain - -transforms: - - gecko_taskgraph.transforms.release:run_on_releases - - gecko_taskgraph.transforms.release_deps:transforms - - gecko_taskgraph.transforms.update_verify:transforms - - gecko_taskgraph.transforms.job:transforms - - gecko_taskgraph.transforms.task:transforms - -task-defaults: - name: update-verify-next - run-on-projects: [] # to make sure this never runs as part of CI - run-on-releases: [esr140] - shipping-phase: promote - worker-type: b-linux-gcp - worker: - artifacts: - - name: 'public/build/diff-summary.log' - path: '/builds/worker/tools/release/updates/diff-summary.log' - type: file - docker-image: - in-tree: "update-verify" - max-run-time: 7200 - retry-exit-status: - - 255 - env: - CHANNEL: "esr-localtest-next" - treeherder: - symbol: UVnext() - kind: test - extra: - chunks: 12 - -tasks: - firefox-next-linux64: - description: linux64 esr-next update verify - shipping-product: firefox - attributes: - build_platform: linux64-shippable - - firefox-next-linux: - description: linux esr-next update verify - shipping-product: firefox - attributes: - build_platform: linux-shippable - - firefox-next-win64: - description: win64 esr-next update verify - shipping-product: firefox - attributes: - build_platform: win64-shippable - - firefox-next-win64-aarch64: - description: win64-aarch64 esr-next update verify - shipping-product: firefox - attributes: - build_platform: win64-aarch64-shippable - - firefox-next-win32: - description: win32 esr-next update verify - shipping-product: firefox - attributes: - build_platform: win32-shippable - - firefox-next-macosx64: - description: macosx64 esr-next update verify - shipping-product: firefox - attributes: - build_platform: macosx64-shippable - fetches: - toolchain: - - linux64-libdmg diff -Nru firefox-esr-140.3.1esr/testing/profiles/web-platform/user.js firefox-esr-140.4.0esr/testing/profiles/web-platform/user.js --- firefox-esr-140.3.1esr/testing/profiles/web-platform/user.js 2025-09-22 21:16:17.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/profiles/web-platform/user.js 2025-10-09 15:35:38.000000000 +0000 @@ -87,7 +87,7 @@ // Disable hardware WebAuthn authenticators. user_pref("security.webauth.webauthn_enable_usbtoken", false); // Disable the WebAuthn direct attestation consent prompt. -user_pref("security.webauth.webauthn_testing_allow_direct_attestation", true); +user_pref("security.webauthn.always_allow_direct_attestation", true); // Enable WebAuthn conditional mediation. user_pref("security.webauthn.enable_conditional_mediation", true); // Disable captive portal service diff -Nru firefox-esr-140.3.1esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html.ini firefox-esr-140.4.0esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html.ini --- firefox-esr-140.3.1esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html.ini 2025-09-22 21:16:18.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html.ini 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -[naturalWidth-naturalHeight-unavailable.tentative.html] - expected: - if (processor == "x86") and (os == "linux"): CRASH diff -Nru firefox-esr-140.3.1esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html.ini firefox-esr-140.4.0esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html.ini --- firefox-esr-140.3.1esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html.ini 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/meta/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html.ini 2025-10-09 15:35:39.000000000 +0000 @@ -0,0 +1,4 @@ +[naturalWidth-naturalHeight-width-height.tentative.html] + # TODO(dholbert): Look into this crash in bug 1969597 + expected: + if (processor == "x86") and (os == "linux"): CRASH diff -Nru firefox-esr-140.3.1esr/testing/web-platform/meta/notifications/cross-origin-nested.tentative.https.sub.html.ini firefox-esr-140.4.0esr/testing/web-platform/meta/notifications/cross-origin-nested.tentative.https.sub.html.ini --- firefox-esr-140.3.1esr/testing/web-platform/meta/notifications/cross-origin-nested.tentative.https.sub.html.ini 2025-09-22 21:16:18.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/meta/notifications/cross-origin-nested.tentative.https.sub.html.ini 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -[cross-origin-nested.tentative.https.sub.html] - [nested first party iframe] - expected: - if (processor == "x86") and (os == "linux"): FAIL diff -Nru firefox-esr-140.3.1esr/testing/web-platform/tests/css/css-overflow/scrollable-overflow-transform-011.html firefox-esr-140.4.0esr/testing/web-platform/tests/css/css-overflow/scrollable-overflow-transform-011.html --- firefox-esr-140.3.1esr/testing/web-platform/tests/css/css-overflow/scrollable-overflow-transform-011.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/tests/css/css-overflow/scrollable-overflow-transform-011.html 2025-10-09 15:35:41.000000000 +0000 @@ -0,0 +1,45 @@ + + + +CSS Overflow: Scrollable Overflow Transform Zero Area Overflow + + + + + +

Test passes if there is a filled green square and no red.

+
+
+
+
+ + diff -Nru firefox-esr-140.3.1esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html firefox-esr-140.4.0esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html --- firefox-esr-140.3.1esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html 2025-09-22 21:16:21.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,189 +0,0 @@ - - -HTMLImageElement naturalWidth/naturalHeight behavior for SVG that lacks at least one natural dimension - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- diff -Nru firefox-esr-140.3.1esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html firefox-esr-140.4.0esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html --- firefox-esr-140.3.1esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-width-height.tentative.html 2025-10-09 15:35:42.000000000 +0000 @@ -0,0 +1,377 @@ + + + +HTMLImageElement attributes naturalWidth, naturalHeight, width, height + + + + + + + + + + + + + +
+
+
+
+ + + diff -Nru firefox-esr-140.3.1esr/testing/web-platform/tests/notifications/cross-origin-nested.tentative.https.sub.html firefox-esr-140.4.0esr/testing/web-platform/tests/notifications/cross-origin-nested.tentative.https.sub.html --- firefox-esr-140.3.1esr/testing/web-platform/tests/notifications/cross-origin-nested.tentative.https.sub.html 2025-09-22 21:16:22.000000000 +0000 +++ firefox-esr-140.4.0esr/testing/web-platform/tests/notifications/cross-origin-nested.tentative.https.sub.html 2025-10-09 15:35:43.000000000 +0000 @@ -56,11 +56,11 @@ promise_test(async t => { const result = await promises.get("child"); - assert_equals(result.permission, "granted", `should grant the permission`); - assert_true(result.shown, `notification should be shown`); + assert_equals(result.permission, "denied", `should deny the permission`); + assert_false(result.shown, `notification should not be shown`); const childRequestResult = await promises.get("childRequest"); - assert_equals(childRequestResult.permission, "granted", "should accept the permission request"); + assert_equals(childRequestResult.permission, "denied", "should deny the permission request"); }, "nested first party iframe"); promise_test(async t => { @@ -71,7 +71,7 @@ promise_test(async t => { const result = await promises.get("childWorker"); - assert_equals(result.permission, "granted", `should grant the permission`); - assert_true(result.shown, `notification should be shown`); + assert_equals(result.permission, "denied", `should deny the permission`); + assert_false(result.shown, `notification should not be shown`); }, "nested first party worker"); diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/.cargo-checksum.json firefox-esr-140.4.0esr/third_party/rust/allocator-api2/.cargo-checksum.json --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/.cargo-checksum.json 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/.cargo-checksum.json 2025-10-09 15:35:44.000000000 +0000 @@ -1 +1 @@ -{"files":{"CHANGELOG.md":"886f8c688db0c22d24b650df0dc30a39d05d54d0e562c00d9574bf31cbf73251","Cargo.toml":"8c0d2ca1b5a6063aedcd462337eeb4dfb755d81e8d132fe810419689e45eef42","LICENSE-APACHE":"20fe7b00e904ed690e3b9fd6073784d3fc428141dbd10b81c01fd143d0797f58","LICENSE-MIT":"36516aefdc84c5d5a1e7485425913a22dbda69eb1930c5e84d6ae4972b5194b9","README.md":"7bf09e77c1d8e9292992b717d88e33d031439aa31dc9e7bb617464270519b051","src/lib.rs":"c937309febe24f97bc637650137311d5b8097b8574b0e973f4d6fb591c3448f7","src/nightly.rs":"fcff4d236e23bc95b1ce2c00140807ba3698cc01233d910d65d74986bb36f161","src/stable/alloc/global.rs":"14836ad7d73a364474fc153b24a1f17ad0e60a69b90a8721dc1059eada8bf869","src/stable/alloc/mod.rs":"866dafd3984dd246e381d8ad1c2b3e02a60c3421b598ca493aa83f9b6422608d","src/stable/alloc/system.rs":"db5d5bf088eecac3fc5ff1281e1bf26ca36dd38f13cd52c49d95ff1bab064254","src/stable/boxed.rs":"8b9b7f4cebbc1629c478dce0dd8227db16508e1383f24490d32eab7aeb3a0cea","src/stable/macros.rs":"74490796a766338d0163f40a37612cd9ea2de58ae3d8e9abf6c7bcf81d9be4a6","src/stable/mod.rs":"a6a724e10e4db4e3b7960c65bac803152a1115af46b898ff8a61e486365c16c7","src/stable/raw_vec.rs":"8cc0e3e4d5fd21e0e83776ff21c576cbb87b69647903ee9b8f5372f8781a7328","src/stable/slice.rs":"089263b058e6c185467bad7ad14908479e5675408fc70a8291e5dddaef36035a","src/stable/vec/drain.rs":"740cd2e0f31eeb0146bbd0f645a14fe12bacd3912f003db433ddc6b3a178461f","src/stable/vec/into_iter.rs":"88c22b09682cd90c7362d702d0501566173b2d836cf82a2b92ae11fdef5b9435","src/stable/vec/mod.rs":"1561b75d0bbcdf64f47bd7f1661088b68796f0e7e02a4e9391d8a50010b86f6b","src/stable/vec/partial_eq.rs":"9f1b18605164a62b58d9e17914d573698735de31c51ceb8bd3666e83d32df370","src/stable/vec/set_len_on_drop.rs":"561342e22a194e515cc25c9a1bcd827ca24c4db033e9e2c4266fbdd2fb16e5bc","src/stable/vec/splice.rs":"95a460b3a7b4af60fdc9ba04d3a719b61a0c11786cd2d8823d022e22c397f9c9"},"package":"5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"} \ No newline at end of file +{"files":{"CHANGELOG.md":"b4d01c4b8a790e435dc0ab67a1ef8b6d8e39f87bec233540e247ef313737d855","Cargo.toml":"97b99c5d9b742ecc3652dc4b77407c694cb67ca8bc75b12442cbec87c519ccce","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"8796f799e695228183db03715930631400df9b8527cfd7db200c53ab8a5d92e8","src/lib.rs":"6d0a4ce2987502a1f6ff40451ae00f819a3eb91ea14768f74744527342b4134a","src/nightly.rs":"3b9b055fea5e6df0a435706fe7b6967213dc60c5f39f2e6690b6e1a74b4af3c4","src/stable/alloc/global.rs":"e58d538406e80fe5e70f99f57452d9401ce8efa6a7fd4ccfb87b8d55430f01ab","src/stable/alloc/mod.rs":"63db909472169a70ad5332f33f67b88e9ea361c13725c65540d7003c83d8d226","src/stable/alloc/system.rs":"7c9145f594869c3cb934e97d3eda1b0b8ed6bd8ba89b1aea7435fc6680465b6b","src/stable/boxed.rs":"6903d42dd29cc945852a06a91d88da0d138651db954444e00ae2cf2484d597f1","src/stable/macros.rs":"c05b6bbc359a2e2ac1520922ed0c54d34ebea7da85a51902e1f840816ba4afc2","src/stable/mod.rs":"2df7ccfe227d62540c4ccc09538cef9aaa3780c7a1884914f364dbecd325d4b1","src/stable/raw_vec.rs":"e767edf03ef948e6d20dd09eb7f9534591e33f31be8a00a91c426c1b0500ca9d","src/stable/slice.rs":"14d6eb35e3557b5f78feb48fd4bea343f037e8f1f2d2707089db4dbed438b558","src/stable/unique.rs":"93a57a0270b8f5fc4d05afe251190f988bf5eabe4fb4eb286a31b3a6efb98649","src/stable/vec/drain.rs":"f8209cbd76a57823f6583a84fee285727b6c00189ec299acc9f97a0829f0742f","src/stable/vec/into_iter.rs":"6e8481635e2f9876a14636d4914f9b2bae7cccdefc4ca7c6b1e1f35ac420794f","src/stable/vec/mod.rs":"bdd605f7badb539d9f56ebcef05ea99fa1a3e90650c21cfa9edace7911b2eeac","src/stable/vec/partial_eq.rs":"cb88615747b4413f26dcab206e026bbd50150bf7d97d8df174384e86151d875e","src/stable/vec/set_len_on_drop.rs":"36f2e8fdc9b0a838eb443d74bec0291d389e52bfe4f617e391d977f15e6893b5","src/stable/vec/splice.rs":"7ce9fa74764c36ab9043f7339548e96b0b68f7d1a16769c9cb066b9a538dcb14"},"package":null} \ No newline at end of file diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/CHANGELOG.md firefox-esr-140.4.0esr/third_party/rust/allocator-api2/CHANGELOG.md --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/CHANGELOG.md 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/CHANGELOG.md 2025-10-09 15:35:44.000000000 +0000 @@ -1,7 +1,7 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/Cargo.toml firefox-esr-140.4.0esr/third_party/rust/allocator-api2/Cargo.toml --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/Cargo.toml 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/Cargo.toml 2025-10-09 15:35:44.000000000 +0000 @@ -9,14 +9,18 @@ # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. -# This is a fork of allocator-api2 0.2.18 with Box removed. -# See https://github.com/zakarumych/allocator-api2/issues/10 - [package] edition = "2018" +rust-version = "1.63" name = "allocator-api2" -version = "0.2.999" +version = "0.2.21" authors = ["Zakarum "] +build = false +autolib = false +autobins = false +autoexamples = false +autotests = false +autobenches = false description = "Mirror of Rust's allocator API" homepage = "https://github.com/zakarumych/allocator-api2" documentation = "https://docs.rs/allocator-api2" @@ -24,15 +28,25 @@ license = "MIT OR Apache-2.0" repository = "https://github.com/zakarumych/allocator-api2" -[dependencies.serde] -version = "1.0" -optional = true - [features] alloc = [] default = ["std"] +fresh-rust = [] nightly = [] std = ["alloc"] -[lints.rust] -unexpected_cfgs = { level = "warn", check-cfg = ['cfg(no_global_oom_handling)'] } +[lib] +name = "allocator_api2" +path = "src/lib.rs" + +[dependencies.serde] +version = "1.0" +optional = true + +[lints.rust.unexpected_cfgs] +level = "warn" +priority = 0 +check-cfg = ["cfg(no_global_oom_handling)"] + +[workspace] +members = ["tests"] diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/LICENSE-APACHE firefox-esr-140.4.0esr/third_party/rust/allocator-api2/LICENSE-APACHE --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/LICENSE-APACHE 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/LICENSE-APACHE 2025-10-09 15:35:45.000000000 +0000 @@ -1,176 +1,176 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/LICENSE-MIT firefox-esr-140.4.0esr/third_party/rust/allocator-api2/LICENSE-MIT --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/LICENSE-MIT 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/LICENSE-MIT 2025-10-09 15:35:44.000000000 +0000 @@ -1,23 +1,23 @@ -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/README.md firefox-esr-140.4.0esr/third_party/rust/allocator-api2/README.md --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/README.md 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/README.md 2025-10-09 15:35:45.000000000 +0000 @@ -1,53 +1,61 @@ -# allocator-api2 - -[![crates](https://img.shields.io/crates/v/allocator-api2.svg?style=for-the-badge&label=allocator-api2)](https://crates.io/crates/allocator-api2) -[![docs](https://img.shields.io/badge/docs.rs-allocator--api2-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white)](https://docs.rs/allocator-api2) -[![actions](https://img.shields.io/github/actions/workflow/status/zakarumych/allocator-api2/badge.yml?branch=main&style=for-the-badge)](https://github.com/zakarumych/allocator-api2/actions/workflows/badge.yml) -[![MIT/Apache](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?style=for-the-badge)](COPYING) -![loc](https://img.shields.io/tokei/lines/github/zakarumych/allocator-api2?style=for-the-badge) - -This crate mirrors types and traits from Rust's unstable [`allocator_api`] -The intention of this crate is to serve as substitution for actual thing -for libs when build on stable and beta channels. -The target users are library authors who implement allocators or collection types -that use allocators, or anyone else who wants using [`allocator_api`] - -The crate should be frequently updated with minor version bump. -When [`allocator_api`] is stable this crate will get version `1.0` and simply -re-export from `core`, `alloc` and `std`. - -The code is mostly verbatim copy from rust repository. -Mostly attributes are removed. - -## Usage - -This paragraph describes how to use this crate correctly to ensure -compatibility and interoperability on both stable and nightly channels. - -If you are writing a library that interacts with allocators API, you can -add this crate as a dependency and use the types and traits from this -crate instead of the ones in `core` or `alloc`. -This will allow your library to compile on stable and beta channels. - -Your library *MAY* provide a feature that will enable "allocator-api2/nightly". -When this feature is enabled, your library *MUST* enable -unstable `#![feature(allocator_api)]` or it may not compile. -If feature is not provided, your library may not be compatible with the -rest of the users and cause compilation errors on nightly channel -when some other crate enables "allocator-api2/nightly" feature. - -## License - -Licensed under either of - -* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) -* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) - -at your option. - -## Contributions - -Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. - - -[`allocator_api`]: https://doc.rust-lang.org/unstable-book/library-features/allocator-api.html +# allocator-api2 + +[![crates](https://img.shields.io/crates/v/allocator-api2.svg?style=for-the-badge&label=allocator-api2)](https://crates.io/crates/allocator-api2) +[![docs](https://img.shields.io/badge/docs.rs-allocator--api2-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white)](https://docs.rs/allocator-api2) +[![actions](https://img.shields.io/github/actions/workflow/status/zakarumych/allocator-api2/badge.yml?branch=main&style=for-the-badge)](https://github.com/zakarumych/allocator-api2/actions/workflows/badge.yml) +[![MIT/Apache](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?style=for-the-badge)](COPYING) +![loc](https://img.shields.io/tokei/lines/github/zakarumych/allocator-api2?style=for-the-badge) + +This crate mirrors types and traits from Rust's unstable [`allocator_api`] +The intention of this crate is to serve as substitution for actual thing +for libs when build on stable and beta channels. +The target users are library authors who implement allocators or collection types +that use allocators, or anyone else who wants using [`allocator_api`] + +The crate should be frequently updated with minor version bump. +When [`allocator_api`] is stable this crate will get version `1.0` and simply +re-export from `core`, `alloc` and `std`. + +The code is mostly verbatim copy from rust repository. +Mostly attributes are removed. + +## Usage + +This paragraph describes how to use this crate correctly to ensure +compatibility and interoperability on both stable and nightly channels. + +If you are writing a library that interacts with allocators API, you can +add this crate as a dependency and use the types and traits from this +crate instead of the ones in `core` or `alloc`. +This will allow your library to compile on stable and beta channels. + +Your library *MAY* provide a feature that will enable "allocator-api2/nightly". +When this feature is enabled, your library *MUST* enable +unstable `#![feature(allocator_api)]` or it may not compile. +If feature is not provided, your library may not be compatible with the +rest of the users and cause compilation errors on nightly channel +when some other crate enables "allocator-api2/nightly" feature. + +# Minimal Supported Rust Version (MSRV) + +This crate is guaranteed to compile on stable Rust 1.64 and up. +A feature "fresh-rust" bumps the MSRV to unspecified higher version, but should be compatible with +at least few latest stable releases. The feature enables some additional functionality: + +* `CStr` without "std" feature + +## License + +Licensed under either of + +* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) +* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) + +at your option. + +## Contributions + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. + + +[`allocator_api`]: https://doc.rust-lang.org/unstable-book/library-features/allocator-api.html diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/lib.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/lib.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/lib.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/lib.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,24 +1,20 @@ -// This library is patched, this considered first-party. Ignore warnings -// as if it were third-party. -#![allow(warnings)] +//! +//! allocator-api2 crate. +//! +#![cfg_attr(not(feature = "std"), no_std)] -//! -//! allocator-api2 crate. -//! -#![cfg_attr(not(feature = "std"), no_std)] -#![allow(unused)] - -#[cfg(feature = "alloc")] -extern crate alloc as alloc_crate; - -#[cfg(not(feature = "nightly"))] -mod stable; - -#[cfg(feature = "nightly")] -mod nightly; - -#[cfg(not(feature = "nightly"))] -pub use self::stable::*; - -#[cfg(feature = "nightly")] -pub use self::nightly::*; +#[cfg(feature = "alloc")] +extern crate alloc as alloc_crate; + +#[cfg(not(feature = "nightly"))] +#[macro_use] +mod stable; + +#[cfg(feature = "nightly")] +mod nightly; + +#[cfg(not(feature = "nightly"))] +pub use self::stable::*; + +#[cfg(feature = "nightly")] +pub use self::nightly::*; diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/nightly.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/nightly.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/nightly.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/nightly.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,5 +1,5 @@ -#[cfg(not(feature = "alloc"))] -pub use core::alloc; - -#[cfg(feature = "alloc")] -pub use alloc_crate::{alloc, vec}; +#[cfg(not(feature = "alloc"))] +pub use core::alloc; + +#[cfg(feature = "alloc")] +pub use alloc_crate::{alloc, boxed, vec, collections}; diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/alloc/global.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/global.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/alloc/global.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/global.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,187 +1,187 @@ -use core::ptr::NonNull; - -use alloc_crate::alloc::{alloc, alloc_zeroed, dealloc, realloc}; - -use crate::stable::{assume, invalid_mut}; - -use super::{AllocError, Allocator, Layout}; - -/// The global memory allocator. -/// -/// This type implements the [`Allocator`] trait by forwarding calls -/// to the allocator registered with the `#[global_allocator]` attribute -/// if there is one, or the `std` crate’s default. -/// -/// Note: while this type is unstable, the functionality it provides can be -/// accessed through the [free functions in `alloc`](crate#functions). -#[derive(Copy, Clone, Default, Debug)] -pub struct Global; - -impl Global { - #[inline(always)] - fn alloc_impl(&self, layout: Layout, zeroed: bool) -> Result, AllocError> { - match layout.size() { - 0 => Ok(unsafe { - NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - invalid_mut(layout.align()), - 0, - )) - }), - // SAFETY: `layout` is non-zero in size, - size => unsafe { - let raw_ptr = if zeroed { - alloc_zeroed(layout) - } else { - alloc(layout) - }; - let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - ptr.as_ptr(), - size, - ))) - }, - } - } - - // SAFETY: Same as `Allocator::grow` - #[inline(always)] - unsafe fn grow_impl( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - zeroed: bool, - ) -> Result, AllocError> { - debug_assert!( - new_layout.size() >= old_layout.size(), - "`new_layout.size()` must be greater than or equal to `old_layout.size()`" - ); - - match old_layout.size() { - 0 => self.alloc_impl(new_layout, zeroed), - - // SAFETY: `new_size` is non-zero as `old_size` is greater than or equal to `new_size` - // as required by safety conditions. Other conditions must be upheld by the caller - old_size if old_layout.align() == new_layout.align() => unsafe { - let new_size = new_layout.size(); - - // `realloc` probably checks for `new_size >= old_layout.size()` or something similar. - assume(new_size >= old_layout.size()); - - let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size); - let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; - if zeroed { - raw_ptr.add(old_size).write_bytes(0, new_size - old_size); - } - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - ptr.as_ptr(), - new_size, - ))) - }, - - // SAFETY: because `new_layout.size()` must be greater than or equal to `old_size`, - // both the old and new memory allocation are valid for reads and writes for `old_size` - // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap - // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract - // for `dealloc` must be upheld by the caller. - old_size => unsafe { - let new_ptr = self.alloc_impl(new_layout, zeroed)?; - core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_size); - self.deallocate(ptr, old_layout); - Ok(new_ptr) - }, - } - } -} - -unsafe impl Allocator for Global { - #[inline(always)] - fn allocate(&self, layout: Layout) -> Result, AllocError> { - self.alloc_impl(layout, false) - } - - #[inline(always)] - fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { - self.alloc_impl(layout, true) - } - - #[inline(always)] - unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { - if layout.size() != 0 { - // SAFETY: `layout` is non-zero in size, - // other conditions must be upheld by the caller - unsafe { dealloc(ptr.as_ptr(), layout) } - } - } - - #[inline(always)] - unsafe fn grow( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: all conditions must be upheld by the caller - unsafe { self.grow_impl(ptr, old_layout, new_layout, false) } - } - - #[inline(always)] - unsafe fn grow_zeroed( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: all conditions must be upheld by the caller - unsafe { self.grow_impl(ptr, old_layout, new_layout, true) } - } - - #[inline(always)] - unsafe fn shrink( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - debug_assert!( - new_layout.size() <= old_layout.size(), - "`new_layout.size()` must be smaller than or equal to `old_layout.size()`" - ); - - match new_layout.size() { - // SAFETY: conditions must be upheld by the caller - 0 => unsafe { - self.deallocate(ptr, old_layout); - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - invalid_mut(new_layout.align()), - 0, - ))) - }, - - // SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller - new_size if old_layout.align() == new_layout.align() => unsafe { - // `realloc` probably checks for `new_size <= old_layout.size()` or something similar. - assume(new_size <= old_layout.size()); - - let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size); - let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - ptr.as_ptr(), - new_size, - ))) - }, - - // SAFETY: because `new_size` must be smaller than or equal to `old_layout.size()`, - // both the old and new memory allocation are valid for reads and writes for `new_size` - // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap - // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract - // for `dealloc` must be upheld by the caller. - new_size => unsafe { - let new_ptr = self.allocate(new_layout)?; - core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), new_size); - self.deallocate(ptr, old_layout); - Ok(new_ptr) - }, - } - } -} +use core::ptr::NonNull; + +use alloc_crate::alloc::{alloc, alloc_zeroed, dealloc, realloc}; + +use crate::stable::{assume, invalid_mut}; + +use super::{AllocError, Allocator, Layout}; + +/// The global memory allocator. +/// +/// This type implements the [`Allocator`] trait by forwarding calls +/// to the allocator registered with the `#[global_allocator]` attribute +/// if there is one, or the `std` crate’s default. +/// +/// Note: while this type is unstable, the functionality it provides can be +/// accessed through the [free functions in `alloc`](crate#functions). +#[derive(Copy, Clone, Default, Debug)] +pub struct Global; + +impl Global { + #[inline(always)] + fn alloc_impl(&self, layout: Layout, zeroed: bool) -> Result, AllocError> { + match layout.size() { + 0 => Ok(unsafe { + NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + invalid_mut(layout.align()), + 0, + )) + }), + // SAFETY: `layout` is non-zero in size, + size => unsafe { + let raw_ptr = if zeroed { + alloc_zeroed(layout) + } else { + alloc(layout) + }; + let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + ptr.as_ptr(), + size, + ))) + }, + } + } + + // SAFETY: Same as `Allocator::grow` + #[inline(always)] + unsafe fn grow_impl( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + zeroed: bool, + ) -> Result, AllocError> { + debug_assert!( + new_layout.size() >= old_layout.size(), + "`new_layout.size()` must be greater than or equal to `old_layout.size()`" + ); + + match old_layout.size() { + 0 => self.alloc_impl(new_layout, zeroed), + + // SAFETY: `new_size` is non-zero as `old_size` is greater than or equal to `new_size` + // as required by safety conditions. Other conditions must be upheld by the caller + old_size if old_layout.align() == new_layout.align() => unsafe { + let new_size = new_layout.size(); + + // `realloc` probably checks for `new_size >= old_layout.size()` or something similar. + assume(new_size >= old_layout.size()); + + let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size); + let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; + if zeroed { + raw_ptr.add(old_size).write_bytes(0, new_size - old_size); + } + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + ptr.as_ptr(), + new_size, + ))) + }, + + // SAFETY: because `new_layout.size()` must be greater than or equal to `old_size`, + // both the old and new memory allocation are valid for reads and writes for `old_size` + // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap + // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract + // for `dealloc` must be upheld by the caller. + old_size => unsafe { + let new_ptr = self.alloc_impl(new_layout, zeroed)?; + core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_size); + self.deallocate(ptr, old_layout); + Ok(new_ptr) + }, + } + } +} + +unsafe impl Allocator for Global { + #[inline(always)] + fn allocate(&self, layout: Layout) -> Result, AllocError> { + self.alloc_impl(layout, false) + } + + #[inline(always)] + fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { + self.alloc_impl(layout, true) + } + + #[inline(always)] + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { + if layout.size() != 0 { + // SAFETY: `layout` is non-zero in size, + // other conditions must be upheld by the caller + unsafe { dealloc(ptr.as_ptr(), layout) } + } + } + + #[inline(always)] + unsafe fn grow( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: all conditions must be upheld by the caller + unsafe { self.grow_impl(ptr, old_layout, new_layout, false) } + } + + #[inline(always)] + unsafe fn grow_zeroed( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: all conditions must be upheld by the caller + unsafe { self.grow_impl(ptr, old_layout, new_layout, true) } + } + + #[inline(always)] + unsafe fn shrink( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + debug_assert!( + new_layout.size() <= old_layout.size(), + "`new_layout.size()` must be smaller than or equal to `old_layout.size()`" + ); + + match new_layout.size() { + // SAFETY: conditions must be upheld by the caller + 0 => unsafe { + self.deallocate(ptr, old_layout); + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + invalid_mut(new_layout.align()), + 0, + ))) + }, + + // SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller + new_size if old_layout.align() == new_layout.align() => unsafe { + // `realloc` probably checks for `new_size <= old_layout.size()` or something similar. + assume(new_size <= old_layout.size()); + + let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size); + let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + ptr.as_ptr(), + new_size, + ))) + }, + + // SAFETY: because `new_size` must be smaller than or equal to `old_layout.size()`, + // both the old and new memory allocation are valid for reads and writes for `new_size` + // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap + // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract + // for `dealloc` must be upheld by the caller. + new_size => unsafe { + let new_ptr = self.allocate(new_layout)?; + core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), new_size); + self.deallocate(ptr, old_layout); + Ok(new_ptr) + }, + } + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/alloc/mod.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/mod.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/alloc/mod.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/mod.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,416 +1,416 @@ -//! Memory allocation APIs - -use core::{ - fmt, - ptr::{self, NonNull}, -}; - -#[cfg(feature = "alloc")] -mod global; - -#[cfg(feature = "std")] -mod system; - -pub use core::alloc::{GlobalAlloc, Layout, LayoutError}; - -#[cfg(feature = "alloc")] -pub use self::global::Global; - -#[cfg(feature = "std")] -pub use self::system::System; - -#[cfg(feature = "alloc")] -pub use alloc_crate::alloc::{alloc, alloc_zeroed, dealloc, realloc}; - -#[cfg(all(feature = "alloc", not(no_global_oom_handling)))] -pub use alloc_crate::alloc::handle_alloc_error; - -/// The `AllocError` error indicates an allocation failure -/// that may be due to resource exhaustion or to -/// something wrong when combining the given input arguments with this -/// allocator. -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub struct AllocError; - -#[cfg(feature = "std")] -impl std::error::Error for AllocError {} - -// (we need this for downstream impl of trait Error) -impl fmt::Display for AllocError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str("memory allocation failed") - } -} - -/// An implementation of `Allocator` can allocate, grow, shrink, and deallocate arbitrary blocks of -/// data described via [`Layout`][]. -/// -/// `Allocator` is designed to be implemented on ZSTs, references, or smart pointers because having -/// an allocator like `MyAlloc([u8; N])` cannot be moved, without updating the pointers to the -/// allocated memory. -/// -/// Unlike [`GlobalAlloc`][], zero-sized allocations are allowed in `Allocator`. If an underlying -/// allocator does not support this (like jemalloc) or return a null pointer (such as -/// `libc::malloc`), this must be caught by the implementation. -/// -/// ### Currently allocated memory -/// -/// Some of the methods require that a memory block be *currently allocated* via an allocator. This -/// means that: -/// -/// * the starting address for that memory block was previously returned by [`allocate`], [`grow`], or -/// [`shrink`], and -/// -/// * the memory block has not been subsequently deallocated, where blocks are either deallocated -/// directly by being passed to [`deallocate`] or were changed by being passed to [`grow`] or -/// [`shrink`] that returns `Ok`. If `grow` or `shrink` have returned `Err`, the passed pointer -/// remains valid. -/// -/// [`allocate`]: Allocator::allocate -/// [`grow`]: Allocator::grow -/// [`shrink`]: Allocator::shrink -/// [`deallocate`]: Allocator::deallocate -/// -/// ### Memory fitting -/// -/// Some of the methods require that a layout *fit* a memory block. What it means for a layout to -/// "fit" a memory block means (or equivalently, for a memory block to "fit" a layout) is that the -/// following conditions must hold: -/// -/// * The block must be allocated with the same alignment as [`layout.align()`], and -/// -/// * The provided [`layout.size()`] must fall in the range `min ..= max`, where: -/// - `min` is the size of the layout most recently used to allocate the block, and -/// - `max` is the latest actual size returned from [`allocate`], [`grow`], or [`shrink`]. -/// -/// [`layout.align()`]: Layout::align -/// [`layout.size()`]: Layout::size -/// -/// # Safety -/// -/// * Memory blocks returned from an allocator must point to valid memory and retain their validity -/// until the instance and all of its clones are dropped, -/// -/// * cloning or moving the allocator must not invalidate memory blocks returned from this -/// allocator. A cloned allocator must behave like the same allocator, and -/// -/// * any pointer to a memory block which is [*currently allocated*] may be passed to any other -/// method of the allocator. -/// -/// [*currently allocated*]: #currently-allocated-memory -pub unsafe trait Allocator { - /// Attempts to allocate a block of memory. - /// - /// On success, returns a [`NonNull<[u8]>`][NonNull] meeting the size and alignment guarantees of `layout`. - /// - /// The returned block may have a larger size than specified by `layout.size()`, and may or may - /// not have its contents initialized. - /// - /// # Errors - /// - /// Returning `Err` indicates that either memory is exhausted or `layout` does not meet - /// allocator's size or alignment constraints. - /// - /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or - /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement - /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) - /// - /// Clients wishing to abort computation in response to an allocation error are encouraged to - /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. - /// - /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html - fn allocate(&self, layout: Layout) -> Result, AllocError>; - - /// Behaves like `allocate`, but also ensures that the returned memory is zero-initialized. - /// - /// # Errors - /// - /// Returning `Err` indicates that either memory is exhausted or `layout` does not meet - /// allocator's size or alignment constraints. - /// - /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or - /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement - /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) - /// - /// Clients wishing to abort computation in response to an allocation error are encouraged to - /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. - /// - /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html - #[inline(always)] - fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { - let ptr = self.allocate(layout)?; - // SAFETY: `alloc` returns a valid memory block - unsafe { ptr.cast::().as_ptr().write_bytes(0, ptr.len()) } - Ok(ptr) - } - - /// Deallocates the memory referenced by `ptr`. - /// - /// # Safety - /// - /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator, and - /// * `layout` must [*fit*] that block of memory. - /// - /// [*currently allocated*]: #currently-allocated-memory - /// [*fit*]: #memory-fitting - unsafe fn deallocate(&self, ptr: NonNull, layout: Layout); - - /// Attempts to extend the memory block. - /// - /// Returns a new [`NonNull<[u8]>`][NonNull] containing a pointer and the actual size of the allocated - /// memory. The pointer is suitable for holding data described by `new_layout`. To accomplish - /// this, the allocator may extend the allocation referenced by `ptr` to fit the new layout. - /// - /// If this returns `Ok`, then ownership of the memory block referenced by `ptr` has been - /// transferred to this allocator. Any access to the old `ptr` is Undefined Behavior, even if the - /// allocation was grown in-place. The newly returned pointer is the only valid pointer - /// for accessing this memory now. - /// - /// If this method returns `Err`, then ownership of the memory block has not been transferred to - /// this allocator, and the contents of the memory block are unaltered. - /// - /// # Safety - /// - /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator. - /// * `old_layout` must [*fit*] that block of memory (The `new_layout` argument need not fit it.). - /// * `new_layout.size()` must be greater than or equal to `old_layout.size()`. - /// - /// Note that `new_layout.align()` need not be the same as `old_layout.align()`. - /// - /// [*currently allocated*]: #currently-allocated-memory - /// [*fit*]: #memory-fitting - /// - /// # Errors - /// - /// Returns `Err` if the new layout does not meet the allocator's size and alignment - /// constraints of the allocator, or if growing otherwise fails. - /// - /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or - /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement - /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) - /// - /// Clients wishing to abort computation in response to an allocation error are encouraged to - /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. - /// - /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html - #[inline(always)] - unsafe fn grow( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - debug_assert!( - new_layout.size() >= old_layout.size(), - "`new_layout.size()` must be greater than or equal to `old_layout.size()`" - ); - - let new_ptr = self.allocate(new_layout)?; - - // SAFETY: because `new_layout.size()` must be greater than or equal to - // `old_layout.size()`, both the old and new memory allocation are valid for reads and - // writes for `old_layout.size()` bytes. Also, because the old allocation wasn't yet - // deallocated, it cannot overlap `new_ptr`. Thus, the call to `copy_nonoverlapping` is - // safe. The safety contract for `dealloc` must be upheld by the caller. - unsafe { - ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_layout.size()); - self.deallocate(ptr, old_layout); - } - - Ok(new_ptr) - } - - /// Behaves like `grow`, but also ensures that the new contents are set to zero before being - /// returned. - /// - /// The memory block will contain the following contents after a successful call to - /// `grow_zeroed`: - /// * Bytes `0..old_layout.size()` are preserved from the original allocation. - /// * Bytes `old_layout.size()..old_size` will either be preserved or zeroed, depending on - /// the allocator implementation. `old_size` refers to the size of the memory block prior - /// to the `grow_zeroed` call, which may be larger than the size that was originally - /// requested when it was allocated. - /// * Bytes `old_size..new_size` are zeroed. `new_size` refers to the size of the memory - /// block returned by the `grow_zeroed` call. - /// - /// # Safety - /// - /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator. - /// * `old_layout` must [*fit*] that block of memory (The `new_layout` argument need not fit it.). - /// * `new_layout.size()` must be greater than or equal to `old_layout.size()`. - /// - /// Note that `new_layout.align()` need not be the same as `old_layout.align()`. - /// - /// [*currently allocated*]: #currently-allocated-memory - /// [*fit*]: #memory-fitting - /// - /// # Errors - /// - /// Returns `Err` if the new layout does not meet the allocator's size and alignment - /// constraints of the allocator, or if growing otherwise fails. - /// - /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or - /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement - /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) - /// - /// Clients wishing to abort computation in response to an allocation error are encouraged to - /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. - /// - /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html - #[inline(always)] - unsafe fn grow_zeroed( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - debug_assert!( - new_layout.size() >= old_layout.size(), - "`new_layout.size()` must be greater than or equal to `old_layout.size()`" - ); - - let new_ptr = self.allocate_zeroed(new_layout)?; - - // SAFETY: because `new_layout.size()` must be greater than or equal to - // `old_layout.size()`, both the old and new memory allocation are valid for reads and - // writes for `old_layout.size()` bytes. Also, because the old allocation wasn't yet - // deallocated, it cannot overlap `new_ptr`. Thus, the call to `copy_nonoverlapping` is - // safe. The safety contract for `dealloc` must be upheld by the caller. - unsafe { - ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_layout.size()); - self.deallocate(ptr, old_layout); - } - - Ok(new_ptr) - } - - /// Attempts to shrink the memory block. - /// - /// Returns a new [`NonNull<[u8]>`][NonNull] containing a pointer and the actual size of the allocated - /// memory. The pointer is suitable for holding data described by `new_layout`. To accomplish - /// this, the allocator may shrink the allocation referenced by `ptr` to fit the new layout. - /// - /// If this returns `Ok`, then ownership of the memory block referenced by `ptr` has been - /// transferred to this allocator. Any access to the old `ptr` is Undefined Behavior, even if the - /// allocation was shrunk in-place. The newly returned pointer is the only valid pointer - /// for accessing this memory now. - /// - /// If this method returns `Err`, then ownership of the memory block has not been transferred to - /// this allocator, and the contents of the memory block are unaltered. - /// - /// # Safety - /// - /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator. - /// * `old_layout` must [*fit*] that block of memory (The `new_layout` argument need not fit it.). - /// * `new_layout.size()` must be smaller than or equal to `old_layout.size()`. - /// - /// Note that `new_layout.align()` need not be the same as `old_layout.align()`. - /// - /// [*currently allocated*]: #currently-allocated-memory - /// [*fit*]: #memory-fitting - /// - /// # Errors - /// - /// Returns `Err` if the new layout does not meet the allocator's size and alignment - /// constraints of the allocator, or if shrinking otherwise fails. - /// - /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or - /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement - /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) - /// - /// Clients wishing to abort computation in response to an allocation error are encouraged to - /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. - /// - /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html - #[inline(always)] - unsafe fn shrink( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - debug_assert!( - new_layout.size() <= old_layout.size(), - "`new_layout.size()` must be smaller than or equal to `old_layout.size()`" - ); - - let new_ptr = self.allocate(new_layout)?; - - // SAFETY: because `new_layout.size()` must be lower than or equal to - // `old_layout.size()`, both the old and new memory allocation are valid for reads and - // writes for `new_layout.size()` bytes. Also, because the old allocation wasn't yet - // deallocated, it cannot overlap `new_ptr`. Thus, the call to `copy_nonoverlapping` is - // safe. The safety contract for `dealloc` must be upheld by the caller. - unsafe { - ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), new_layout.size()); - self.deallocate(ptr, old_layout); - } - - Ok(new_ptr) - } - - /// Creates a "by reference" adapter for this instance of `Allocator`. - /// - /// The returned adapter also implements `Allocator` and will simply borrow this. - #[inline(always)] - fn by_ref(&self) -> &Self - where - Self: Sized, - { - self - } -} - -unsafe impl Allocator for &A -where - A: Allocator + ?Sized, -{ - #[inline(always)] - fn allocate(&self, layout: Layout) -> Result, AllocError> { - (**self).allocate(layout) - } - - #[inline(always)] - fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { - (**self).allocate_zeroed(layout) - } - - #[inline(always)] - unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { - // SAFETY: the safety contract must be upheld by the caller - unsafe { (**self).deallocate(ptr, layout) } - } - - #[inline(always)] - unsafe fn grow( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: the safety contract must be upheld by the caller - unsafe { (**self).grow(ptr, old_layout, new_layout) } - } - - #[inline(always)] - unsafe fn grow_zeroed( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: the safety contract must be upheld by the caller - unsafe { (**self).grow_zeroed(ptr, old_layout, new_layout) } - } - - #[inline(always)] - unsafe fn shrink( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: the safety contract must be upheld by the caller - unsafe { (**self).shrink(ptr, old_layout, new_layout) } - } -} +//! Memory allocation APIs + +use core::{ + fmt, + ptr::{self, NonNull}, +}; + +#[cfg(feature = "alloc")] +mod global; + +#[cfg(feature = "std")] +mod system; + +pub use core::alloc::{GlobalAlloc, Layout, LayoutError}; + +#[cfg(feature = "alloc")] +pub use self::global::Global; + +#[cfg(feature = "std")] +pub use self::system::System; + +#[cfg(feature = "alloc")] +pub use alloc_crate::alloc::{alloc, alloc_zeroed, dealloc, realloc}; + +#[cfg(all(feature = "alloc", not(no_global_oom_handling)))] +pub use alloc_crate::alloc::handle_alloc_error; + +/// The `AllocError` error indicates an allocation failure +/// that may be due to resource exhaustion or to +/// something wrong when combining the given input arguments with this +/// allocator. +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub struct AllocError; + +#[cfg(feature = "std")] +impl std::error::Error for AllocError {} + +// (we need this for downstream impl of trait Error) +impl fmt::Display for AllocError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str("memory allocation failed") + } +} + +/// An implementation of `Allocator` can allocate, grow, shrink, and deallocate arbitrary blocks of +/// data described via [`Layout`][]. +/// +/// `Allocator` is designed to be implemented on ZSTs, references, or smart pointers because having +/// an allocator like `MyAlloc([u8; N])` cannot be moved, without updating the pointers to the +/// allocated memory. +/// +/// Unlike [`GlobalAlloc`][], zero-sized allocations are allowed in `Allocator`. If an underlying +/// allocator does not support this (like jemalloc) or return a null pointer (such as +/// `libc::malloc`), this must be caught by the implementation. +/// +/// ### Currently allocated memory +/// +/// Some of the methods require that a memory block be *currently allocated* via an allocator. This +/// means that: +/// +/// * the starting address for that memory block was previously returned by [`allocate`], [`grow`], or +/// [`shrink`], and +/// +/// * the memory block has not been subsequently deallocated, where blocks are either deallocated +/// directly by being passed to [`deallocate`] or were changed by being passed to [`grow`] or +/// [`shrink`] that returns `Ok`. If `grow` or `shrink` have returned `Err`, the passed pointer +/// remains valid. +/// +/// [`allocate`]: Allocator::allocate +/// [`grow`]: Allocator::grow +/// [`shrink`]: Allocator::shrink +/// [`deallocate`]: Allocator::deallocate +/// +/// ### Memory fitting +/// +/// Some of the methods require that a layout *fit* a memory block. What it means for a layout to +/// "fit" a memory block means (or equivalently, for a memory block to "fit" a layout) is that the +/// following conditions must hold: +/// +/// * The block must be allocated with the same alignment as [`layout.align()`], and +/// +/// * The provided [`layout.size()`] must fall in the range `min ..= max`, where: +/// - `min` is the size of the layout most recently used to allocate the block, and +/// - `max` is the latest actual size returned from [`allocate`], [`grow`], or [`shrink`]. +/// +/// [`layout.align()`]: Layout::align +/// [`layout.size()`]: Layout::size +/// +/// # Safety +/// +/// * Memory blocks returned from an allocator must point to valid memory and retain their validity +/// until the instance and all of its clones are dropped, +/// +/// * cloning or moving the allocator must not invalidate memory blocks returned from this +/// allocator. A cloned allocator must behave like the same allocator, and +/// +/// * any pointer to a memory block which is [*currently allocated*] may be passed to any other +/// method of the allocator. +/// +/// [*currently allocated*]: #currently-allocated-memory +pub unsafe trait Allocator { + /// Attempts to allocate a block of memory. + /// + /// On success, returns a [`NonNull<[u8]>`][NonNull] meeting the size and alignment guarantees of `layout`. + /// + /// The returned block may have a larger size than specified by `layout.size()`, and may or may + /// not have its contents initialized. + /// + /// # Errors + /// + /// Returning `Err` indicates that either memory is exhausted or `layout` does not meet + /// allocator's size or alignment constraints. + /// + /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or + /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement + /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) + /// + /// Clients wishing to abort computation in response to an allocation error are encouraged to + /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. + /// + /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html + fn allocate(&self, layout: Layout) -> Result, AllocError>; + + /// Behaves like `allocate`, but also ensures that the returned memory is zero-initialized. + /// + /// # Errors + /// + /// Returning `Err` indicates that either memory is exhausted or `layout` does not meet + /// allocator's size or alignment constraints. + /// + /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or + /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement + /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) + /// + /// Clients wishing to abort computation in response to an allocation error are encouraged to + /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. + /// + /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html + #[inline(always)] + fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { + let ptr = self.allocate(layout)?; + // SAFETY: `alloc` returns a valid memory block + unsafe { ptr.cast::().as_ptr().write_bytes(0, ptr.len()) } + Ok(ptr) + } + + /// Deallocates the memory referenced by `ptr`. + /// + /// # Safety + /// + /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator, and + /// * `layout` must [*fit*] that block of memory. + /// + /// [*currently allocated*]: #currently-allocated-memory + /// [*fit*]: #memory-fitting + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout); + + /// Attempts to extend the memory block. + /// + /// Returns a new [`NonNull<[u8]>`][NonNull] containing a pointer and the actual size of the allocated + /// memory. The pointer is suitable for holding data described by `new_layout`. To accomplish + /// this, the allocator may extend the allocation referenced by `ptr` to fit the new layout. + /// + /// If this returns `Ok`, then ownership of the memory block referenced by `ptr` has been + /// transferred to this allocator. Any access to the old `ptr` is Undefined Behavior, even if the + /// allocation was grown in-place. The newly returned pointer is the only valid pointer + /// for accessing this memory now. + /// + /// If this method returns `Err`, then ownership of the memory block has not been transferred to + /// this allocator, and the contents of the memory block are unaltered. + /// + /// # Safety + /// + /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator. + /// * `old_layout` must [*fit*] that block of memory (The `new_layout` argument need not fit it.). + /// * `new_layout.size()` must be greater than or equal to `old_layout.size()`. + /// + /// Note that `new_layout.align()` need not be the same as `old_layout.align()`. + /// + /// [*currently allocated*]: #currently-allocated-memory + /// [*fit*]: #memory-fitting + /// + /// # Errors + /// + /// Returns `Err` if the new layout does not meet the allocator's size and alignment + /// constraints of the allocator, or if growing otherwise fails. + /// + /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or + /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement + /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) + /// + /// Clients wishing to abort computation in response to an allocation error are encouraged to + /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. + /// + /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html + #[inline(always)] + unsafe fn grow( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + debug_assert!( + new_layout.size() >= old_layout.size(), + "`new_layout.size()` must be greater than or equal to `old_layout.size()`" + ); + + let new_ptr = self.allocate(new_layout)?; + + // SAFETY: because `new_layout.size()` must be greater than or equal to + // `old_layout.size()`, both the old and new memory allocation are valid for reads and + // writes for `old_layout.size()` bytes. Also, because the old allocation wasn't yet + // deallocated, it cannot overlap `new_ptr`. Thus, the call to `copy_nonoverlapping` is + // safe. The safety contract for `dealloc` must be upheld by the caller. + unsafe { + ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_layout.size()); + self.deallocate(ptr, old_layout); + } + + Ok(new_ptr) + } + + /// Behaves like `grow`, but also ensures that the new contents are set to zero before being + /// returned. + /// + /// The memory block will contain the following contents after a successful call to + /// `grow_zeroed`: + /// * Bytes `0..old_layout.size()` are preserved from the original allocation. + /// * Bytes `old_layout.size()..old_size` will either be preserved or zeroed, depending on + /// the allocator implementation. `old_size` refers to the size of the memory block prior + /// to the `grow_zeroed` call, which may be larger than the size that was originally + /// requested when it was allocated. + /// * Bytes `old_size..new_size` are zeroed. `new_size` refers to the size of the memory + /// block returned by the `grow_zeroed` call. + /// + /// # Safety + /// + /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator. + /// * `old_layout` must [*fit*] that block of memory (The `new_layout` argument need not fit it.). + /// * `new_layout.size()` must be greater than or equal to `old_layout.size()`. + /// + /// Note that `new_layout.align()` need not be the same as `old_layout.align()`. + /// + /// [*currently allocated*]: #currently-allocated-memory + /// [*fit*]: #memory-fitting + /// + /// # Errors + /// + /// Returns `Err` if the new layout does not meet the allocator's size and alignment + /// constraints of the allocator, or if growing otherwise fails. + /// + /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or + /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement + /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) + /// + /// Clients wishing to abort computation in response to an allocation error are encouraged to + /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. + /// + /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html + #[inline(always)] + unsafe fn grow_zeroed( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + debug_assert!( + new_layout.size() >= old_layout.size(), + "`new_layout.size()` must be greater than or equal to `old_layout.size()`" + ); + + let new_ptr = self.allocate_zeroed(new_layout)?; + + // SAFETY: because `new_layout.size()` must be greater than or equal to + // `old_layout.size()`, both the old and new memory allocation are valid for reads and + // writes for `old_layout.size()` bytes. Also, because the old allocation wasn't yet + // deallocated, it cannot overlap `new_ptr`. Thus, the call to `copy_nonoverlapping` is + // safe. The safety contract for `dealloc` must be upheld by the caller. + unsafe { + ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_layout.size()); + self.deallocate(ptr, old_layout); + } + + Ok(new_ptr) + } + + /// Attempts to shrink the memory block. + /// + /// Returns a new [`NonNull<[u8]>`][NonNull] containing a pointer and the actual size of the allocated + /// memory. The pointer is suitable for holding data described by `new_layout`. To accomplish + /// this, the allocator may shrink the allocation referenced by `ptr` to fit the new layout. + /// + /// If this returns `Ok`, then ownership of the memory block referenced by `ptr` has been + /// transferred to this allocator. Any access to the old `ptr` is Undefined Behavior, even if the + /// allocation was shrunk in-place. The newly returned pointer is the only valid pointer + /// for accessing this memory now. + /// + /// If this method returns `Err`, then ownership of the memory block has not been transferred to + /// this allocator, and the contents of the memory block are unaltered. + /// + /// # Safety + /// + /// * `ptr` must denote a block of memory [*currently allocated*] via this allocator. + /// * `old_layout` must [*fit*] that block of memory (The `new_layout` argument need not fit it.). + /// * `new_layout.size()` must be smaller than or equal to `old_layout.size()`. + /// + /// Note that `new_layout.align()` need not be the same as `old_layout.align()`. + /// + /// [*currently allocated*]: #currently-allocated-memory + /// [*fit*]: #memory-fitting + /// + /// # Errors + /// + /// Returns `Err` if the new layout does not meet the allocator's size and alignment + /// constraints of the allocator, or if shrinking otherwise fails. + /// + /// Implementations are encouraged to return `Err` on memory exhaustion rather than panicking or + /// aborting, but this is not a strict requirement. (Specifically: it is *legal* to implement + /// this trait atop an underlying native allocation library that aborts on memory exhaustion.) + /// + /// Clients wishing to abort computation in response to an allocation error are encouraged to + /// call the [`handle_alloc_error`] function, rather than directly invoking `panic!` or similar. + /// + /// [`handle_alloc_error`]: ../../alloc/alloc/fn.handle_alloc_error.html + #[inline(always)] + unsafe fn shrink( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + debug_assert!( + new_layout.size() <= old_layout.size(), + "`new_layout.size()` must be smaller than or equal to `old_layout.size()`" + ); + + let new_ptr = self.allocate(new_layout)?; + + // SAFETY: because `new_layout.size()` must be lower than or equal to + // `old_layout.size()`, both the old and new memory allocation are valid for reads and + // writes for `new_layout.size()` bytes. Also, because the old allocation wasn't yet + // deallocated, it cannot overlap `new_ptr`. Thus, the call to `copy_nonoverlapping` is + // safe. The safety contract for `dealloc` must be upheld by the caller. + unsafe { + ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), new_layout.size()); + self.deallocate(ptr, old_layout); + } + + Ok(new_ptr) + } + + /// Creates a "by reference" adapter for this instance of `Allocator`. + /// + /// The returned adapter also implements `Allocator` and will simply borrow this. + #[inline(always)] + fn by_ref(&self) -> &Self + where + Self: Sized, + { + self + } +} + +unsafe impl Allocator for &A +where + A: Allocator + ?Sized, +{ + #[inline(always)] + fn allocate(&self, layout: Layout) -> Result, AllocError> { + (**self).allocate(layout) + } + + #[inline(always)] + fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { + (**self).allocate_zeroed(layout) + } + + #[inline(always)] + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { + // SAFETY: the safety contract must be upheld by the caller + unsafe { (**self).deallocate(ptr, layout) } + } + + #[inline(always)] + unsafe fn grow( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: the safety contract must be upheld by the caller + unsafe { (**self).grow(ptr, old_layout, new_layout) } + } + + #[inline(always)] + unsafe fn grow_zeroed( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: the safety contract must be upheld by the caller + unsafe { (**self).grow_zeroed(ptr, old_layout, new_layout) } + } + + #[inline(always)] + unsafe fn shrink( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: the safety contract must be upheld by the caller + unsafe { (**self).shrink(ptr, old_layout, new_layout) } + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/alloc/system.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/system.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/alloc/system.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/alloc/system.rs 2025-10-09 15:35:45.000000000 +0000 @@ -1,172 +1,172 @@ -use core::ptr::NonNull; -pub use std::alloc::System; - -use crate::stable::{assume, invalid_mut}; - -use super::{AllocError, Allocator, GlobalAlloc as _, Layout}; - -unsafe impl Allocator for System { - #[inline(always)] - fn allocate(&self, layout: Layout) -> Result, AllocError> { - alloc_impl(layout, false) - } - - #[inline(always)] - fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { - alloc_impl(layout, true) - } - - #[inline(always)] - unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { - if layout.size() != 0 { - // SAFETY: `layout` is non-zero in size, - // other conditions must be upheld by the caller - unsafe { System.dealloc(ptr.as_ptr(), layout) } - } - } - - #[inline(always)] - unsafe fn grow( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: all conditions must be upheld by the caller - unsafe { grow_impl(ptr, old_layout, new_layout, false) } - } - - #[inline(always)] - unsafe fn grow_zeroed( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - // SAFETY: all conditions must be upheld by the caller - unsafe { grow_impl(ptr, old_layout, new_layout, true) } - } - - #[inline(always)] - unsafe fn shrink( - &self, - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - ) -> Result, AllocError> { - debug_assert!( - new_layout.size() <= old_layout.size(), - "`new_layout.size()` must be smaller than or equal to `old_layout.size()`" - ); - - match new_layout.size() { - // SAFETY: conditions must be upheld by the caller - 0 => unsafe { - self.deallocate(ptr, old_layout); - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - invalid_mut(new_layout.align()), - 0, - ))) - }, - - // SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller - new_size if old_layout.align() == new_layout.align() => unsafe { - // `realloc` probably checks for `new_size <= old_layout.size()` or something similar. - assume(new_size <= old_layout.size()); - - let raw_ptr = System.realloc(ptr.as_ptr(), old_layout, new_size); - let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - ptr.as_ptr(), - new_size, - ))) - }, - - // SAFETY: because `new_size` must be smaller than or equal to `old_layout.size()`, - // both the old and new memory allocation are valid for reads and writes for `new_size` - // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap - // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract - // for `dealloc` must be upheld by the caller. - new_size => unsafe { - let new_ptr = self.allocate(new_layout)?; - core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), new_size); - self.deallocate(ptr, old_layout); - Ok(new_ptr) - }, - } - } -} - -#[inline(always)] -fn alloc_impl(layout: Layout, zeroed: bool) -> Result, AllocError> { - match layout.size() { - 0 => Ok(unsafe { - NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - invalid_mut(layout.align()), - 0, - )) - }), - // SAFETY: `layout` is non-zero in size, - size => unsafe { - let raw_ptr = if zeroed { - System.alloc_zeroed(layout) - } else { - System.alloc(layout) - }; - let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - ptr.as_ptr(), - size, - ))) - }, - } -} - -// SAFETY: Same as `Allocator::grow` -#[inline(always)] -unsafe fn grow_impl( - ptr: NonNull, - old_layout: Layout, - new_layout: Layout, - zeroed: bool, -) -> Result, AllocError> { - debug_assert!( - new_layout.size() >= old_layout.size(), - "`new_layout.size()` must be greater than or equal to `old_layout.size()`" - ); - - match old_layout.size() { - 0 => alloc_impl(new_layout, zeroed), - - // SAFETY: `new_size` is non-zero as `old_size` is greater than or equal to `new_size` - // as required by safety conditions. Other conditions must be upheld by the caller - old_size if old_layout.align() == new_layout.align() => unsafe { - let new_size = new_layout.size(); - - // `realloc` probably checks for `new_size >= old_layout.size()` or something similar. - assume(new_size >= old_layout.size()); - - let raw_ptr = System.realloc(ptr.as_ptr(), old_layout, new_size); - let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; - if zeroed { - raw_ptr.add(old_size).write_bytes(0, new_size - old_size); - } - Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( - ptr.as_ptr(), - new_size, - ))) - }, - - // SAFETY: because `new_layout.size()` must be greater than or equal to `old_size`, - // both the old and new memory allocation are valid for reads and writes for `old_size` - // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap - // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract - // for `dealloc` must be upheld by the caller. - old_size => unsafe { - let new_ptr = alloc_impl(new_layout, zeroed)?; - core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_size); - System.deallocate(ptr, old_layout); - Ok(new_ptr) - }, - } -} +use core::ptr::NonNull; +pub use std::alloc::System; + +use crate::stable::{assume, invalid_mut}; + +use super::{AllocError, Allocator, GlobalAlloc as _, Layout}; + +unsafe impl Allocator for System { + #[inline(always)] + fn allocate(&self, layout: Layout) -> Result, AllocError> { + alloc_impl(layout, false) + } + + #[inline(always)] + fn allocate_zeroed(&self, layout: Layout) -> Result, AllocError> { + alloc_impl(layout, true) + } + + #[inline(always)] + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { + if layout.size() != 0 { + // SAFETY: `layout` is non-zero in size, + // other conditions must be upheld by the caller + unsafe { System.dealloc(ptr.as_ptr(), layout) } + } + } + + #[inline(always)] + unsafe fn grow( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: all conditions must be upheld by the caller + unsafe { grow_impl(ptr, old_layout, new_layout, false) } + } + + #[inline(always)] + unsafe fn grow_zeroed( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + // SAFETY: all conditions must be upheld by the caller + unsafe { grow_impl(ptr, old_layout, new_layout, true) } + } + + #[inline(always)] + unsafe fn shrink( + &self, + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + ) -> Result, AllocError> { + debug_assert!( + new_layout.size() <= old_layout.size(), + "`new_layout.size()` must be smaller than or equal to `old_layout.size()`" + ); + + match new_layout.size() { + // SAFETY: conditions must be upheld by the caller + 0 => unsafe { + self.deallocate(ptr, old_layout); + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + invalid_mut(new_layout.align()), + 0, + ))) + }, + + // SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller + new_size if old_layout.align() == new_layout.align() => unsafe { + // `realloc` probably checks for `new_size <= old_layout.size()` or something similar. + assume(new_size <= old_layout.size()); + + let raw_ptr = System.realloc(ptr.as_ptr(), old_layout, new_size); + let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + ptr.as_ptr(), + new_size, + ))) + }, + + // SAFETY: because `new_size` must be smaller than or equal to `old_layout.size()`, + // both the old and new memory allocation are valid for reads and writes for `new_size` + // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap + // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract + // for `dealloc` must be upheld by the caller. + new_size => unsafe { + let new_ptr = self.allocate(new_layout)?; + core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), new_size); + self.deallocate(ptr, old_layout); + Ok(new_ptr) + }, + } + } +} + +#[inline(always)] +fn alloc_impl(layout: Layout, zeroed: bool) -> Result, AllocError> { + match layout.size() { + 0 => Ok(unsafe { + NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + invalid_mut(layout.align()), + 0, + )) + }), + // SAFETY: `layout` is non-zero in size, + size => unsafe { + let raw_ptr = if zeroed { + System.alloc_zeroed(layout) + } else { + System.alloc(layout) + }; + let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + ptr.as_ptr(), + size, + ))) + }, + } +} + +// SAFETY: Same as `Allocator::grow` +#[inline(always)] +unsafe fn grow_impl( + ptr: NonNull, + old_layout: Layout, + new_layout: Layout, + zeroed: bool, +) -> Result, AllocError> { + debug_assert!( + new_layout.size() >= old_layout.size(), + "`new_layout.size()` must be greater than or equal to `old_layout.size()`" + ); + + match old_layout.size() { + 0 => alloc_impl(new_layout, zeroed), + + // SAFETY: `new_size` is non-zero as `old_size` is greater than or equal to `new_size` + // as required by safety conditions. Other conditions must be upheld by the caller + old_size if old_layout.align() == new_layout.align() => unsafe { + let new_size = new_layout.size(); + + // `realloc` probably checks for `new_size >= old_layout.size()` or something similar. + assume(new_size >= old_layout.size()); + + let raw_ptr = System.realloc(ptr.as_ptr(), old_layout, new_size); + let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?; + if zeroed { + raw_ptr.add(old_size).write_bytes(0, new_size - old_size); + } + Ok(NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut( + ptr.as_ptr(), + new_size, + ))) + }, + + // SAFETY: because `new_layout.size()` must be greater than or equal to `old_size`, + // both the old and new memory allocation are valid for reads and writes for `old_size` + // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap + // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract + // for `dealloc` must be upheld by the caller. + old_size => unsafe { + let new_ptr = alloc_impl(new_layout, zeroed)?; + core::ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_ptr().cast(), old_size); + System.deallocate(ptr, old_layout); + Ok(new_ptr) + }, + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/boxed.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/boxed.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/boxed.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/boxed.rs 2025-10-09 15:35:45.000000000 +0000 @@ -1,2155 +1,2272 @@ -//! The `Box` type for heap allocation. -//! -//! [`Box`], casually referred to as a 'box', provides the simplest form of -//! heap allocation in Rust. Boxes provide ownership for this allocation, and -//! drop their contents when they go out of scope. Boxes also ensure that they -//! never allocate more than `isize::MAX` bytes. -//! -//! # Examples -//! -//! Move a value from the stack to the heap by creating a [`Box`]: -//! -//! ``` -//! let val: u8 = 5; -//! let boxed: Box = Box::new(val); -//! ``` -//! -//! Move a value from a [`Box`] back to the stack by [dereferencing]: -//! -//! ``` -//! let boxed: Box = Box::new(5); -//! let val: u8 = *boxed; -//! ``` -//! -//! Creating a recursive data structure: -//! -//! ``` -//! #[derive(Debug)] -//! enum List { -//! Cons(T, Box>), -//! Nil, -//! } -//! -//! let list: List = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil)))); -//! println!("{list:?}"); -//! ``` -//! -//! This will print `Cons(1, Cons(2, Nil))`. -//! -//! Recursive structures must be boxed, because if the definition of `Cons` -//! looked like this: -//! -//! ```compile_fail,E0072 -//! # enum List { -//! Cons(T, List), -//! # } -//! ``` -//! -//! It wouldn't work. This is because the size of a `List` depends on how many -//! elements are in the list, and so we don't know how much memory to allocate -//! for a `Cons`. By introducing a [`Box`], which has a defined size, we know how -//! big `Cons` needs to be. -//! -//! # Memory layout -//! -//! For non-zero-sized values, a [`Box`] will use the [`Global`] allocator for -//! its allocation. It is valid to convert both ways between a [`Box`] and a -//! raw pointer allocated with the [`Global`] allocator, given that the -//! [`Layout`] used with the allocator is correct for the type. More precisely, -//! a `value: *mut T` that has been allocated with the [`Global`] allocator -//! with `Layout::for_value(&*value)` may be converted into a box using -//! [`Box::::from_raw(value)`]. Conversely, the memory backing a `value: *mut -//! T` obtained from [`Box::::into_raw`] may be deallocated using the -//! [`Global`] allocator with [`Layout::for_value(&*value)`]. -//! -//! For zero-sized values, the `Box` pointer still has to be [valid] for reads -//! and writes and sufficiently aligned. In particular, casting any aligned -//! non-zero integer literal to a raw pointer produces a valid pointer, but a -//! pointer pointing into previously allocated memory that since got freed is -//! not valid. The recommended way to build a Box to a ZST if `Box::new` cannot -//! be used is to use [`ptr::NonNull::dangling`]. -//! -//! So long as `T: Sized`, a `Box` is guaranteed to be represented -//! as a single pointer and is also ABI-compatible with C pointers -//! (i.e. the C type `T*`). This means that if you have extern "C" -//! Rust functions that will be called from C, you can define those -//! Rust functions using `Box` types, and use `T*` as corresponding -//! type on the C side. As an example, consider this C header which -//! declares functions that create and destroy some kind of `Foo` -//! value: -//! -//! ```c -//! /* C header */ -//! -//! /* Returns ownership to the caller */ -//! struct Foo* foo_new(void); -//! -//! /* Takes ownership from the caller; no-op when invoked with null */ -//! void foo_delete(struct Foo*); -//! ``` -//! -//! These two functions might be implemented in Rust as follows. Here, the -//! `struct Foo*` type from C is translated to `Box`, which captures -//! the ownership constraints. Note also that the nullable argument to -//! `foo_delete` is represented in Rust as `Option>`, since `Box` -//! cannot be null. -//! -//! ``` -//! #[repr(C)] -//! pub struct Foo; -//! -//! #[no_mangle] -//! pub extern "C" fn foo_new() -> Box { -//! Box::new(Foo) -//! } -//! -//! #[no_mangle] -//! pub extern "C" fn foo_delete(_: Option>) {} -//! ``` -//! -//! Even though `Box` has the same representation and C ABI as a C pointer, -//! this does not mean that you can convert an arbitrary `T*` into a `Box` -//! and expect things to work. `Box` values will always be fully aligned, -//! non-null pointers. Moreover, the destructor for `Box` will attempt to -//! free the value with the global allocator. In general, the best practice -//! is to only use `Box` for pointers that originated from the global -//! allocator. -//! -//! **Important.** At least at present, you should avoid using -//! `Box` types for functions that are defined in C but invoked -//! from Rust. In those cases, you should directly mirror the C types -//! as closely as possible. Using types like `Box` where the C -//! definition is just using `T*` can lead to undefined behavior, as -//! described in [rust-lang/unsafe-code-guidelines#198][ucg#198]. -//! -//! # Considerations for unsafe code -//! -//! **Warning: This section is not normative and is subject to change, possibly -//! being relaxed in the future! It is a simplified summary of the rules -//! currently implemented in the compiler.** -//! -//! The aliasing rules for `Box` are the same as for `&mut T`. `Box` -//! asserts uniqueness over its content. Using raw pointers derived from a box -//! after that box has been mutated through, moved or borrowed as `&mut T` -//! is not allowed. For more guidance on working with box from unsafe code, see -//! [rust-lang/unsafe-code-guidelines#326][ucg#326]. -//! -//! -//! [ucg#198]: https://github.com/rust-lang/unsafe-code-guidelines/issues/198 -//! [ucg#326]: https://github.com/rust-lang/unsafe-code-guidelines/issues/326 -//! [dereferencing]: core::ops::Deref -//! [`Box::::from_raw(value)`]: Box::from_raw -//! [`Global`]: crate::alloc::Global -//! [`Layout`]: crate::alloc::Layout -//! [`Layout::for_value(&*value)`]: crate::alloc::Layout::for_value -//! [valid]: ptr#safety - -use core::any::Any; -use core::borrow; -use core::cmp::Ordering; -use core::convert::{From, TryFrom}; - -// use core::error::Error; -use core::fmt; -use core::future::Future; -use core::hash::{Hash, Hasher}; -#[cfg(not(no_global_oom_handling))] -use core::iter::FromIterator; -use core::iter::{FusedIterator, Iterator}; -use core::marker::Unpin; -use core::mem; -use core::ops::{Deref, DerefMut}; -use core::pin::Pin; -use core::ptr::{self, NonNull}; -use core::task::{Context, Poll}; - -use super::alloc::{AllocError, Allocator, Global, Layout}; -use super::raw_vec::RawVec; -#[cfg(not(no_global_oom_handling))] -use super::vec::Vec; -#[cfg(not(no_global_oom_handling))] -use alloc_crate::alloc::handle_alloc_error; - -/// A pointer type for heap allocation. -/// -/// See the [module-level documentation](../../std/boxed/index.html) for more. -pub struct Box(NonNull, A); - -// Safety: Box owns both T and A, so sending is safe if -// sending is safe for T and A. -unsafe impl Send for Box -where - T: Send, - A: Send, -{ -} - -// Safety: Box owns both T and A, so sharing is safe if -// sharing is safe for T and A. -unsafe impl Sync for Box -where - T: Sync, - A: Sync, -{ -} - -impl Box { - /// Allocates memory on the heap and then places `x` into it. - /// - /// This doesn't actually allocate if `T` is zero-sized. - /// - /// # Examples - /// - /// ``` - /// let five = Box::new(5); - /// ``` - #[cfg(all(not(no_global_oom_handling)))] - #[inline(always)] - #[must_use] - pub fn new(x: T) -> Self { - Self::new_in(x, Global) - } - - /// Constructs a new box with uninitialized contents. - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let mut five = Box::::new_uninit(); - /// - /// let five = unsafe { - /// // Deferred initialization: - /// five.as_mut_ptr().write(5); - /// - /// five.assume_init() - /// }; - /// - /// assert_eq!(*five, 5) - /// ``` - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_uninit() -> Box> { - Self::new_uninit_in(Global) - } - - /// Constructs a new `Box` with uninitialized contents, with the memory - /// being filled with `0` bytes. - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let zero = Box::::new_zeroed(); - /// let zero = unsafe { zero.assume_init() }; - /// - /// assert_eq!(*zero, 0) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_zeroed() -> Box> { - Self::new_zeroed_in(Global) - } - - /// Constructs a new `Pin>`. If `T` does not implement [`Unpin`], then - /// `x` will be pinned in memory and unable to be moved. - /// - /// Constructing and pinning of the `Box` can also be done in two steps: `Box::pin(x)` - /// does the same as [Box::into_pin]\([Box::new]\(x)). Consider using - /// [`into_pin`](Box::into_pin) if you already have a `Box`, or if you want to - /// construct a (pinned) `Box` in a different way than with [`Box::new`]. - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn pin(x: T) -> Pin> { - Box::new(x).into() - } - - /// Allocates memory on the heap then places `x` into it, - /// returning an error if the allocation fails - /// - /// This doesn't actually allocate if `T` is zero-sized. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api)] - /// - /// let five = Box::try_new(5)?; - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - #[inline(always)] - pub fn try_new(x: T) -> Result { - Self::try_new_in(x, Global) - } - - /// Constructs a new box with uninitialized contents on the heap, - /// returning an error if the allocation fails - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// let mut five = Box::::try_new_uninit()?; - /// - /// let five = unsafe { - /// // Deferred initialization: - /// five.as_mut_ptr().write(5); - /// - /// five.assume_init() - /// }; - /// - /// assert_eq!(*five, 5); - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - #[inline(always)] - pub fn try_new_uninit() -> Result>, AllocError> { - Box::try_new_uninit_in(Global) - } - - /// Constructs a new `Box` with uninitialized contents, with the memory - /// being filled with `0` bytes on the heap - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// let zero = Box::::try_new_zeroed()?; - /// let zero = unsafe { zero.assume_init() }; - /// - /// assert_eq!(*zero, 0); - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[inline(always)] - pub fn try_new_zeroed() -> Result>, AllocError> { - Box::try_new_zeroed_in(Global) - } -} - -impl Box { - /// Allocates memory in the given allocator then places `x` into it. - /// - /// This doesn't actually allocate if `T` is zero-sized. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api)] - /// - /// use std::alloc::System; - /// - /// let five = Box::new_in(5, System); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_in(x: T, alloc: A) -> Self - where - A: Allocator, - { - let mut boxed = Self::new_uninit_in(alloc); - unsafe { - boxed.as_mut_ptr().write(x); - boxed.assume_init() - } - } - - /// Allocates memory in the given allocator then places `x` into it, - /// returning an error if the allocation fails - /// - /// This doesn't actually allocate if `T` is zero-sized. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api)] - /// - /// use std::alloc::System; - /// - /// let five = Box::try_new_in(5, System)?; - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - #[inline(always)] - pub fn try_new_in(x: T, alloc: A) -> Result - where - A: Allocator, - { - let mut boxed = Self::try_new_uninit_in(alloc)?; - unsafe { - boxed.as_mut_ptr().write(x); - Ok(boxed.assume_init()) - } - } - - /// Constructs a new box with uninitialized contents in the provided allocator. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// use std::alloc::System; - /// - /// let mut five = Box::::new_uninit_in(System); - /// - /// let five = unsafe { - /// // Deferred initialization: - /// five.as_mut_ptr().write(5); - /// - /// five.assume_init() - /// }; - /// - /// assert_eq!(*five, 5) - /// ``` - #[cfg(not(no_global_oom_handling))] - #[must_use] - // #[unstable(feature = "new_uninit", issue = "63291")] - #[inline(always)] - pub fn new_uninit_in(alloc: A) -> Box, A> - where - A: Allocator, - { - let layout = Layout::new::>(); - // NOTE: Prefer match over unwrap_or_else since closure sometimes not inlineable. - // That would make code size bigger. - match Box::try_new_uninit_in(alloc) { - Ok(m) => m, - Err(_) => handle_alloc_error(layout), - } - } - - /// Constructs a new box with uninitialized contents in the provided allocator, - /// returning an error if the allocation fails - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// use std::alloc::System; - /// - /// let mut five = Box::::try_new_uninit_in(System)?; - /// - /// let five = unsafe { - /// // Deferred initialization: - /// five.as_mut_ptr().write(5); - /// - /// five.assume_init() - /// }; - /// - /// assert_eq!(*five, 5); - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - #[inline(always)] - pub fn try_new_uninit_in(alloc: A) -> Result, A>, AllocError> - where - A: Allocator, - { - let layout = Layout::new::>(); - let ptr = alloc.allocate(layout)?.cast(); - unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) } - } - - /// Constructs a new `Box` with uninitialized contents, with the memory - /// being filled with `0` bytes in the provided allocator. - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// use std::alloc::System; - /// - /// let zero = Box::::new_zeroed_in(System); - /// let zero = unsafe { zero.assume_init() }; - /// - /// assert_eq!(*zero, 0) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[cfg(not(no_global_oom_handling))] - // #[unstable(feature = "new_uninit", issue = "63291")] - #[must_use] - #[inline(always)] - pub fn new_zeroed_in(alloc: A) -> Box, A> - where - A: Allocator, - { - let layout = Layout::new::>(); - // NOTE: Prefer match over unwrap_or_else since closure sometimes not inlineable. - // That would make code size bigger. - match Box::try_new_zeroed_in(alloc) { - Ok(m) => m, - Err(_) => handle_alloc_error(layout), - } - } - - /// Constructs a new `Box` with uninitialized contents, with the memory - /// being filled with `0` bytes in the provided allocator, - /// returning an error if the allocation fails, - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// use std::alloc::System; - /// - /// let zero = Box::::try_new_zeroed_in(System)?; - /// let zero = unsafe { zero.assume_init() }; - /// - /// assert_eq!(*zero, 0); - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[inline(always)] - pub fn try_new_zeroed_in(alloc: A) -> Result, A>, AllocError> - where - A: Allocator, - { - let layout = Layout::new::>(); - let ptr = alloc.allocate_zeroed(layout)?.cast(); - unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) } - } - - /// Constructs a new `Pin>`. If `T` does not implement [`Unpin`], then - /// `x` will be pinned in memory and unable to be moved. - /// - /// Constructing and pinning of the `Box` can also be done in two steps: `Box::pin_in(x, alloc)` - /// does the same as [Box::into_pin]\([Box::new_in]\(x, alloc)). Consider using - /// [`into_pin`](Box::into_pin) if you already have a `Box`, or if you want to - /// construct a (pinned) `Box` in a different way than with [`Box::new_in`]. - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn pin_in(x: T, alloc: A) -> Pin - where - A: 'static + Allocator, - { - Self::into_pin(Self::new_in(x, alloc)) - } - - /// Converts a `Box` into a `Box<[T]>` - /// - /// This conversion does not allocate on the heap and happens in place. - #[inline(always)] - pub fn into_boxed_slice(boxed: Self) -> Box<[T], A> { - let (raw, alloc) = Box::into_raw_with_allocator(boxed); - unsafe { Box::from_raw_in(raw as *mut [T; 1], alloc) } - } - - /// Consumes the `Box`, returning the wrapped value. - /// - /// # Examples - /// - /// ``` - /// #![feature(box_into_inner)] - /// - /// let c = Box::new(5); - /// - /// assert_eq!(Box::into_inner(c), 5); - /// ``` - #[inline(always)] - pub fn into_inner(boxed: Self) -> T { - let ptr = boxed.0; - let unboxed = unsafe { ptr.as_ptr().read() }; - unsafe { boxed.1.deallocate(ptr.cast(), Layout::new::()) }; - unboxed - } -} - -impl Box<[T]> { - /// Constructs a new boxed slice with uninitialized contents. - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let mut values = Box::<[u32]>::new_uninit_slice(3); - /// - /// let values = unsafe { - /// // Deferred initialization: - /// values[0].as_mut_ptr().write(1); - /// values[1].as_mut_ptr().write(2); - /// values[2].as_mut_ptr().write(3); - /// - /// values.assume_init() - /// }; - /// - /// assert_eq!(*values, [1, 2, 3]) - /// ``` - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_uninit_slice(len: usize) -> Box<[mem::MaybeUninit]> { - unsafe { RawVec::with_capacity(len).into_box(len) } - } - - /// Constructs a new boxed slice with uninitialized contents, with the memory - /// being filled with `0` bytes. - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let values = Box::<[u32]>::new_zeroed_slice(3); - /// let values = unsafe { values.assume_init() }; - /// - /// assert_eq!(*values, [0, 0, 0]) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_zeroed_slice(len: usize) -> Box<[mem::MaybeUninit]> { - unsafe { RawVec::with_capacity_zeroed(len).into_box(len) } - } - - /// Constructs a new boxed slice with uninitialized contents. Returns an error if - /// the allocation fails - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// let mut values = Box::<[u32]>::try_new_uninit_slice(3)?; - /// let values = unsafe { - /// // Deferred initialization: - /// values[0].as_mut_ptr().write(1); - /// values[1].as_mut_ptr().write(2); - /// values[2].as_mut_ptr().write(3); - /// values.assume_init() - /// }; - /// - /// assert_eq!(*values, [1, 2, 3]); - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - #[inline(always)] - pub fn try_new_uninit_slice(len: usize) -> Result]>, AllocError> { - unsafe { - let layout = match Layout::array::>(len) { - Ok(l) => l, - Err(_) => return Err(AllocError), - }; - let ptr = Global.allocate(layout)?; - Ok(RawVec::from_raw_parts_in(ptr.as_ptr() as *mut _, len, Global).into_box(len)) - } - } - - /// Constructs a new boxed slice with uninitialized contents, with the memory - /// being filled with `0` bytes. Returns an error if the allocation fails - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// let values = Box::<[u32]>::try_new_zeroed_slice(3)?; - /// let values = unsafe { values.assume_init() }; - /// - /// assert_eq!(*values, [0, 0, 0]); - /// # Ok::<(), std::alloc::AllocError>(()) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[inline(always)] - pub fn try_new_zeroed_slice(len: usize) -> Result]>, AllocError> { - unsafe { - let layout = match Layout::array::>(len) { - Ok(l) => l, - Err(_) => return Err(AllocError), - }; - let ptr = Global.allocate_zeroed(layout)?; - Ok(RawVec::from_raw_parts_in(ptr.as_ptr() as *mut _, len, Global).into_box(len)) - } - } -} - -impl Box<[T], A> { - /// Constructs a new boxed slice with uninitialized contents in the provided allocator. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// use std::alloc::System; - /// - /// let mut values = Box::<[u32], _>::new_uninit_slice_in(3, System); - /// - /// let values = unsafe { - /// // Deferred initialization: - /// values[0].as_mut_ptr().write(1); - /// values[1].as_mut_ptr().write(2); - /// values[2].as_mut_ptr().write(3); - /// - /// values.assume_init() - /// }; - /// - /// assert_eq!(*values, [1, 2, 3]) - /// ``` - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[mem::MaybeUninit], A> { - unsafe { RawVec::with_capacity_in(len, alloc).into_box(len) } - } - - /// Constructs a new boxed slice with uninitialized contents in the provided allocator, - /// with the memory being filled with `0` bytes. - /// - /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage - /// of this method. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, new_uninit)] - /// - /// use std::alloc::System; - /// - /// let values = Box::<[u32], _>::new_zeroed_slice_in(3, System); - /// let values = unsafe { values.assume_init() }; - /// - /// assert_eq!(*values, [0, 0, 0]) - /// ``` - /// - /// [zeroed]: mem::MaybeUninit::zeroed - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[mem::MaybeUninit], A> { - unsafe { RawVec::with_capacity_zeroed_in(len, alloc).into_box(len) } - } - - pub fn into_vec(self) -> Vec - where - A: Allocator, - { - unsafe { - let len = self.len(); - let (b, alloc) = Box::into_raw_with_allocator(self); - Vec::from_raw_parts_in(b as *mut T, len, len, alloc) - } - } -} - -impl Box, A> { - /// Converts to `Box`. - /// - /// # Safety - /// - /// As with [`MaybeUninit::assume_init`], - /// it is up to the caller to guarantee that the value - /// really is in an initialized state. - /// Calling this when the content is not yet fully initialized - /// causes immediate undefined behavior. - /// - /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let mut five = Box::::new_uninit(); - /// - /// let five: Box = unsafe { - /// // Deferred initialization: - /// five.as_mut_ptr().write(5); - /// - /// five.assume_init() - /// }; - /// - /// assert_eq!(*five, 5) - /// ``` - #[inline(always)] - pub unsafe fn assume_init(self) -> Box { - let (raw, alloc) = Box::into_raw_with_allocator(self); - unsafe { Box::from_raw_in(raw as *mut T, alloc) } - } - - /// Writes the value and converts to `Box`. - /// - /// This method converts the box similarly to [`Box::assume_init`] but - /// writes `value` into it before conversion thus guaranteeing safety. - /// In some scenarios use of this method may improve performance because - /// the compiler may be able to optimize copying from stack. - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let big_box = Box::<[usize; 1024]>::new_uninit(); - /// - /// let mut array = [0; 1024]; - /// for (i, place) in array.iter_mut().enumerate() { - /// *place = i; - /// } - /// - /// // The optimizer may be able to elide this copy, so previous code writes - /// // to heap directly. - /// let big_box = Box::write(big_box, array); - /// - /// for (i, x) in big_box.iter().enumerate() { - /// assert_eq!(*x, i); - /// } - /// ``` - #[inline(always)] - pub fn write(mut boxed: Self, value: T) -> Box { - unsafe { - (*boxed).write(value); - boxed.assume_init() - } - } -} - -impl Box<[mem::MaybeUninit], A> { - /// Converts to `Box<[T], A>`. - /// - /// # Safety - /// - /// As with [`MaybeUninit::assume_init`], - /// it is up to the caller to guarantee that the values - /// really are in an initialized state. - /// Calling this when the content is not yet fully initialized - /// causes immediate undefined behavior. - /// - /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init - /// - /// # Examples - /// - /// ``` - /// #![feature(new_uninit)] - /// - /// let mut values = Box::<[u32]>::new_uninit_slice(3); - /// - /// let values = unsafe { - /// // Deferred initialization: - /// values[0].as_mut_ptr().write(1); - /// values[1].as_mut_ptr().write(2); - /// values[2].as_mut_ptr().write(3); - /// - /// values.assume_init() - /// }; - /// - /// assert_eq!(*values, [1, 2, 3]) - /// ``` - #[inline(always)] - pub unsafe fn assume_init(self) -> Box<[T], A> { - let (raw, alloc) = Box::into_raw_with_allocator(self); - unsafe { Box::from_raw_in(raw as *mut [T], alloc) } - } -} - -impl Box { - /// Constructs a box from a raw pointer. - /// - /// After calling this function, the raw pointer is owned by the - /// resulting `Box`. Specifically, the `Box` destructor will call - /// the destructor of `T` and free the allocated memory. For this - /// to be safe, the memory must have been allocated in accordance - /// with the [memory layout] used by `Box` . - /// - /// # Safety - /// - /// This function is unsafe because improper use may lead to - /// memory problems. For example, a double-free may occur if the - /// function is called twice on the same raw pointer. - /// - /// The safety conditions are described in the [memory layout] section. - /// - /// # Examples - /// - /// Recreate a `Box` which was previously converted to a raw pointer - /// using [`Box::into_raw`]: - /// ``` - /// let x = Box::new(5); - /// let ptr = Box::into_raw(x); - /// let x = unsafe { Box::from_raw(ptr) }; - /// ``` - /// Manually create a `Box` from scratch by using the global allocator: - /// ``` - /// use std::alloc::{alloc, Layout}; - /// - /// unsafe { - /// let ptr = alloc(Layout::new::()) as *mut i32; - /// // In general .write is required to avoid attempting to destruct - /// // the (uninitialized) previous contents of `ptr`, though for this - /// // simple example `*ptr = 5` would have worked as well. - /// ptr.write(5); - /// let x = Box::from_raw(ptr); - /// } - /// ``` - /// - /// [memory layout]: self#memory-layout - /// [`Layout`]: crate::Layout - #[must_use = "call `drop(from_raw(ptr))` if you intend to drop the `Box`"] - #[inline(always)] - pub unsafe fn from_raw(raw: *mut T) -> Self { - unsafe { Self::from_raw_in(raw, Global) } - } -} - -impl Box { - /// Constructs a box from a raw pointer in the given allocator. - /// - /// After calling this function, the raw pointer is owned by the - /// resulting `Box`. Specifically, the `Box` destructor will call - /// the destructor of `T` and free the allocated memory. For this - /// to be safe, the memory must have been allocated in accordance - /// with the [memory layout] used by `Box` . - /// - /// # Safety - /// - /// This function is unsafe because improper use may lead to - /// memory problems. For example, a double-free may occur if the - /// function is called twice on the same raw pointer. - /// - /// - /// # Examples - /// - /// Recreate a `Box` which was previously converted to a raw pointer - /// using [`Box::into_raw_with_allocator`]: - /// ``` - /// use std::alloc::System; - /// # use allocator_api2::boxed::Box; - /// - /// let x = Box::new_in(5, System); - /// let (ptr, alloc) = Box::into_raw_with_allocator(x); - /// let x = unsafe { Box::from_raw_in(ptr, alloc) }; - /// ``` - /// Manually create a `Box` from scratch by using the system allocator: - /// ``` - /// use allocator_api2::alloc::{Allocator, Layout, System}; - /// # use allocator_api2::boxed::Box; - /// - /// unsafe { - /// let ptr = System.allocate(Layout::new::())?.as_ptr().cast::(); - /// // In general .write is required to avoid attempting to destruct - /// // the (uninitialized) previous contents of `ptr`, though for this - /// // simple example `*ptr = 5` would have worked as well. - /// ptr.write(5); - /// let x = Box::from_raw_in(ptr, System); - /// } - /// # Ok::<(), allocator_api2::alloc::AllocError>(()) - /// ``` - /// - /// [memory layout]: self#memory-layout - /// [`Layout`]: crate::Layout - #[inline(always)] - pub const unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Self { - Box(unsafe { NonNull::new_unchecked(raw) }, alloc) - } - - /// Consumes the `Box`, returning a wrapped raw pointer. - /// - /// The pointer will be properly aligned and non-null. - /// - /// After calling this function, the caller is responsible for the - /// memory previously managed by the `Box`. In particular, the - /// caller should properly destroy `T` and release the memory, taking - /// into account the [memory layout] used by `Box`. The easiest way to - /// do this is to convert the raw pointer back into a `Box` with the - /// [`Box::from_raw`] function, allowing the `Box` destructor to perform - /// the cleanup. - /// - /// Note: this is an associated function, which means that you have - /// to call it as `Box::into_raw(b)` instead of `b.into_raw()`. This - /// is so that there is no conflict with a method on the inner type. - /// - /// # Examples - /// Converting the raw pointer back into a `Box` with [`Box::from_raw`] - /// for automatic cleanup: - /// ``` - /// let x = Box::new(String::from("Hello")); - /// let ptr = Box::into_raw(x); - /// let x = unsafe { Box::from_raw(ptr) }; - /// ``` - /// Manual cleanup by explicitly running the destructor and deallocating - /// the memory: - /// ``` - /// use std::alloc::{dealloc, Layout}; - /// use std::ptr; - /// - /// let x = Box::new(String::from("Hello")); - /// let p = Box::into_raw(x); - /// unsafe { - /// ptr::drop_in_place(p); - /// dealloc(p as *mut u8, Layout::new::()); - /// } - /// ``` - /// - /// [memory layout]: self#memory-layout - #[inline(always)] - pub fn into_raw(b: Self) -> *mut T { - Self::into_raw_with_allocator(b).0 - } - - /// Consumes the `Box`, returning a wrapped raw pointer and the allocator. - /// - /// The pointer will be properly aligned and non-null. - /// - /// After calling this function, the caller is responsible for the - /// memory previously managed by the `Box`. In particular, the - /// caller should properly destroy `T` and release the memory, taking - /// into account the [memory layout] used by `Box`. The easiest way to - /// do this is to convert the raw pointer back into a `Box` with the - /// [`Box::from_raw_in`] function, allowing the `Box` destructor to perform - /// the cleanup. - /// - /// Note: this is an associated function, which means that you have - /// to call it as `Box::into_raw_with_allocator(b)` instead of `b.into_raw_with_allocator()`. This - /// is so that there is no conflict with a method on the inner type. - /// - /// # Examples - /// Converting the raw pointer back into a `Box` with [`Box::from_raw_in`] - /// for automatic cleanup: - /// ``` - /// #![feature(allocator_api)] - /// - /// use std::alloc::System; - /// - /// let x = Box::new_in(String::from("Hello"), System); - /// let (ptr, alloc) = Box::into_raw_with_allocator(x); - /// let x = unsafe { Box::from_raw_in(ptr, alloc) }; - /// ``` - /// Manual cleanup by explicitly running the destructor and deallocating - /// the memory: - /// ``` - /// #![feature(allocator_api)] - /// - /// use std::alloc::{Allocator, Layout, System}; - /// use std::ptr::{self, NonNull}; - /// - /// let x = Box::new_in(String::from("Hello"), System); - /// let (ptr, alloc) = Box::into_raw_with_allocator(x); - /// unsafe { - /// ptr::drop_in_place(ptr); - /// let non_null = NonNull::new_unchecked(ptr); - /// alloc.deallocate(non_null.cast(), Layout::new::()); - /// } - /// ``` - /// - /// [memory layout]: self#memory-layout - #[inline(always)] - pub fn into_raw_with_allocator(b: Self) -> (*mut T, A) { - let (leaked, alloc) = Box::into_non_null(b); - (leaked.as_ptr(), alloc) - } - - #[inline(always)] - pub fn into_non_null(b: Self) -> (NonNull, A) { - // Box is recognized as a "unique pointer" by Stacked Borrows, but internally it is a - // raw pointer for the type system. Turning it directly into a raw pointer would not be - // recognized as "releasing" the unique pointer to permit aliased raw accesses, - // so all raw pointer methods have to go through `Box::leak`. Turning *that* to a raw pointer - // behaves correctly. - let alloc = unsafe { ptr::read(&b.1) }; - (NonNull::from(Box::leak(b)), alloc) - } - - /// Returns a reference to the underlying allocator. - /// - /// Note: this is an associated function, which means that you have - /// to call it as `Box::allocator(&b)` instead of `b.allocator()`. This - /// is so that there is no conflict with a method on the inner type. - #[inline(always)] - pub const fn allocator(b: &Self) -> &A { - &b.1 - } - - /// Consumes and leaks the `Box`, returning a mutable reference, - /// `&'a mut T`. Note that the type `T` must outlive the chosen lifetime - /// `'a`. If the type has only static references, or none at all, then this - /// may be chosen to be `'static`. - /// - /// This function is mainly useful for data that lives for the remainder of - /// the program's life. Dropping the returned reference will cause a memory - /// leak. If this is not acceptable, the reference should first be wrapped - /// with the [`Box::from_raw`] function producing a `Box`. This `Box` can - /// then be dropped which will properly destroy `T` and release the - /// allocated memory. - /// - /// Note: this is an associated function, which means that you have - /// to call it as `Box::leak(b)` instead of `b.leak()`. This - /// is so that there is no conflict with a method on the inner type. - /// - /// # Examples - /// - /// Simple usage: - /// - /// ``` - /// let x = Box::new(41); - /// let static_ref: &'static mut usize = Box::leak(x); - /// *static_ref += 1; - /// assert_eq!(*static_ref, 42); - /// ``` - /// - /// Unsized data: - /// - /// ``` - /// let x = vec![1, 2, 3].into_boxed_slice(); - /// let static_ref = Box::leak(x); - /// static_ref[0] = 4; - /// assert_eq!(*static_ref, [4, 2, 3]); - /// ``` - #[inline(always)] - fn leak<'a>(b: Self) -> &'a mut T - where - A: 'a, - { - unsafe { &mut *mem::ManuallyDrop::new(b).0.as_ptr() } - } - - /// Converts a `Box` into a `Pin>`. If `T` does not implement [`Unpin`], then - /// `*boxed` will be pinned in memory and unable to be moved. - /// - /// This conversion does not allocate on the heap and happens in place. - /// - /// This is also available via [`From`]. - /// - /// Constructing and pinning a `Box` with Box::into_pin([Box::new]\(x)) - /// can also be written more concisely using [Box::pin]\(x). - /// This `into_pin` method is useful if you already have a `Box`, or you are - /// constructing a (pinned) `Box` in a different way than with [`Box::new`]. - /// - /// # Notes - /// - /// It's not recommended that crates add an impl like `From> for Pin`, - /// as it'll introduce an ambiguity when calling `Pin::from`. - /// A demonstration of such a poor impl is shown below. - /// - /// ```compile_fail - /// # use std::pin::Pin; - /// struct Foo; // A type defined in this crate. - /// impl From> for Pin { - /// fn from(_: Box<()>) -> Pin { - /// Pin::new(Foo) - /// } - /// } - /// - /// let foo = Box::new(()); - /// let bar = Pin::from(foo); - /// ``` - #[inline(always)] - pub fn into_pin(boxed: Self) -> Pin - where - A: 'static, - { - // It's not possible to move or replace the insides of a `Pin>` - // when `T: !Unpin`, so it's safe to pin it directly without any - // additional requirements. - unsafe { Pin::new_unchecked(boxed) } - } -} - -impl Drop for Box { - #[inline(always)] - fn drop(&mut self) { - let layout = Layout::for_value::(&**self); - unsafe { - ptr::drop_in_place(self.0.as_mut()); - self.1.deallocate(self.0.cast(), layout); - } - } -} - -#[cfg(not(no_global_oom_handling))] -impl Default for Box { - /// Creates a `Box`, with the `Default` value for T. - #[inline(always)] - fn default() -> Self { - Box::new(T::default()) - } -} - -impl Default for Box<[T], A> { - #[inline(always)] - fn default() -> Self { - let ptr: NonNull<[T]> = NonNull::<[T; 0]>::dangling(); - Box(ptr, A::default()) - } -} - -impl Default for Box { - #[inline(always)] - fn default() -> Self { - // SAFETY: This is the same as `Unique::cast` but with an unsized `U = str`. - let ptr: NonNull = unsafe { - let bytes: NonNull<[u8]> = NonNull::<[u8; 0]>::dangling(); - NonNull::new_unchecked(bytes.as_ptr() as *mut str) - }; - Box(ptr, A::default()) - } -} - -#[cfg(not(no_global_oom_handling))] -impl Clone for Box { - /// Returns a new box with a `clone()` of this box's contents. - /// - /// # Examples - /// - /// ``` - /// let x = Box::new(5); - /// let y = x.clone(); - /// - /// // The value is the same - /// assert_eq!(x, y); - /// - /// // But they are unique objects - /// assert_ne!(&*x as *const i32, &*y as *const i32); - /// ``` - #[inline(always)] - fn clone(&self) -> Self { - // Pre-allocate memory to allow writing the cloned value directly. - let mut boxed = Self::new_uninit_in(self.1.clone()); - unsafe { - boxed.write((**self).clone()); - boxed.assume_init() - } - } - - /// Copies `source`'s contents into `self` without creating a new allocation. - /// - /// # Examples - /// - /// ``` - /// let x = Box::new(5); - /// let mut y = Box::new(10); - /// let yp: *const i32 = &*y; - /// - /// y.clone_from(&x); - /// - /// // The value is the same - /// assert_eq!(x, y); - /// - /// // And no allocation occurred - /// assert_eq!(yp, &*y); - /// ``` - #[inline(always)] - fn clone_from(&mut self, source: &Self) { - (**self).clone_from(&(**source)); - } -} - -#[cfg(not(no_global_oom_handling))] -impl Clone for Box { - #[inline(always)] - fn clone(&self) -> Self { - // this makes a copy of the data - let buf: Box<[u8]> = self.as_bytes().into(); - unsafe { Box::from_raw(Box::into_raw(buf) as *mut str) } - } -} - -impl PartialEq for Box { - #[inline(always)] - fn eq(&self, other: &Self) -> bool { - PartialEq::eq(&**self, &**other) - } - #[inline(always)] - fn ne(&self, other: &Self) -> bool { - PartialEq::ne(&**self, &**other) - } -} - -impl PartialOrd for Box { - #[inline(always)] - fn partial_cmp(&self, other: &Self) -> Option { - PartialOrd::partial_cmp(&**self, &**other) - } - #[inline(always)] - fn lt(&self, other: &Self) -> bool { - PartialOrd::lt(&**self, &**other) - } - #[inline(always)] - fn le(&self, other: &Self) -> bool { - PartialOrd::le(&**self, &**other) - } - #[inline(always)] - fn ge(&self, other: &Self) -> bool { - PartialOrd::ge(&**self, &**other) - } - #[inline(always)] - fn gt(&self, other: &Self) -> bool { - PartialOrd::gt(&**self, &**other) - } -} - -impl Ord for Box { - #[inline(always)] - fn cmp(&self, other: &Self) -> Ordering { - Ord::cmp(&**self, &**other) - } -} - -impl Eq for Box {} - -impl Hash for Box { - #[inline(always)] - fn hash(&self, state: &mut H) { - (**self).hash(state); - } -} - -impl Hasher for Box { - #[inline(always)] - fn finish(&self) -> u64 { - (**self).finish() - } - #[inline(always)] - fn write(&mut self, bytes: &[u8]) { - (**self).write(bytes) - } - #[inline(always)] - fn write_u8(&mut self, i: u8) { - (**self).write_u8(i) - } - #[inline(always)] - fn write_u16(&mut self, i: u16) { - (**self).write_u16(i) - } - #[inline(always)] - fn write_u32(&mut self, i: u32) { - (**self).write_u32(i) - } - #[inline(always)] - fn write_u64(&mut self, i: u64) { - (**self).write_u64(i) - } - #[inline(always)] - fn write_u128(&mut self, i: u128) { - (**self).write_u128(i) - } - #[inline(always)] - fn write_usize(&mut self, i: usize) { - (**self).write_usize(i) - } - #[inline(always)] - fn write_i8(&mut self, i: i8) { - (**self).write_i8(i) - } - #[inline(always)] - fn write_i16(&mut self, i: i16) { - (**self).write_i16(i) - } - #[inline(always)] - fn write_i32(&mut self, i: i32) { - (**self).write_i32(i) - } - #[inline(always)] - fn write_i64(&mut self, i: i64) { - (**self).write_i64(i) - } - #[inline(always)] - fn write_i128(&mut self, i: i128) { - (**self).write_i128(i) - } - #[inline(always)] - fn write_isize(&mut self, i: isize) { - (**self).write_isize(i) - } -} - -#[cfg(not(no_global_oom_handling))] -impl From for Box { - /// Converts a `T` into a `Box` - /// - /// The conversion allocates on the heap and moves `t` - /// from the stack into it. - /// - /// # Examples - /// - /// ```rust - /// let x = 5; - /// let boxed = Box::new(5); - /// - /// assert_eq!(Box::from(x), boxed); - /// ``` - #[inline(always)] - fn from(t: T) -> Self { - Box::new(t) - } -} - -impl From> for Pin> -where - A: 'static, -{ - /// Converts a `Box` into a `Pin>`. If `T` does not implement [`Unpin`], then - /// `*boxed` will be pinned in memory and unable to be moved. - /// - /// This conversion does not allocate on the heap and happens in place. - /// - /// This is also available via [`Box::into_pin`]. - /// - /// Constructing and pinning a `Box` with >>::from([Box::new]\(x)) - /// can also be written more concisely using [Box::pin]\(x). - /// This `From` implementation is useful if you already have a `Box`, or you are - /// constructing a (pinned) `Box` in a different way than with [`Box::new`]. - #[inline(always)] - fn from(boxed: Box) -> Self { - Box::into_pin(boxed) - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<&[T]> for Box<[T], A> { - /// Converts a `&[T]` into a `Box<[T]>` - /// - /// This conversion allocates on the heap - /// and performs a copy of `slice` and its contents. - /// - /// # Examples - /// ```rust - /// // create a &[u8] which will be used to create a Box<[u8]> - /// let slice: &[u8] = &[104, 101, 108, 108, 111]; - /// let boxed_slice: Box<[u8]> = Box::from(slice); - /// - /// println!("{boxed_slice:?}"); - /// ``` - #[inline(always)] - fn from(slice: &[T]) -> Box<[T], A> { - let len = slice.len(); - let buf = RawVec::with_capacity_in(len, A::default()); - unsafe { - ptr::copy_nonoverlapping(slice.as_ptr(), buf.ptr(), len); - buf.into_box(slice.len()).assume_init() - } - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<&str> for Box { - /// Converts a `&str` into a `Box` - /// - /// This conversion allocates on the heap - /// and performs a copy of `s`. - /// - /// # Examples - /// - /// ```rust - /// let boxed: Box = Box::from("hello"); - /// println!("{boxed}"); - /// ``` - #[inline(always)] - fn from(s: &str) -> Box { - let (raw, alloc) = Box::into_raw_with_allocator(Box::<[u8], A>::from(s.as_bytes())); - unsafe { Box::from_raw_in(raw as *mut str, alloc) } - } -} - -impl From> for Box<[u8], A> { - /// Converts a `Box` into a `Box<[u8]>` - /// - /// This conversion does not allocate on the heap and happens in place. - /// - /// # Examples - /// ```rust - /// // create a Box which will be used to create a Box<[u8]> - /// let boxed: Box = Box::from("hello"); - /// let boxed_str: Box<[u8]> = Box::from(boxed); - /// - /// // create a &[u8] which will be used to create a Box<[u8]> - /// let slice: &[u8] = &[104, 101, 108, 108, 111]; - /// let boxed_slice = Box::from(slice); - /// - /// assert_eq!(boxed_slice, boxed_str); - /// ``` - #[inline(always)] - fn from(s: Box) -> Self { - let (raw, alloc) = Box::into_raw_with_allocator(s); - unsafe { Box::from_raw_in(raw as *mut [u8], alloc) } - } -} - -impl Box<[T; N], A> { - #[inline(always)] - pub fn slice(b: Self) -> Box<[T], A> { - let (ptr, alloc) = Box::into_raw_with_allocator(b); - unsafe { Box::from_raw_in(ptr, alloc) } - } - - pub fn into_vec(self) -> Vec - where - A: Allocator, - { - unsafe { - let (b, alloc) = Box::into_raw_with_allocator(self); - Vec::from_raw_parts_in(b as *mut T, N, N, alloc) - } - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<[T; N]> for Box<[T]> { - /// Converts a `[T; N]` into a `Box<[T]>` - /// - /// This conversion moves the array to newly heap-allocated memory. - /// - /// # Examples - /// - /// ```rust - /// let boxed: Box<[u8]> = Box::from([4, 2]); - /// println!("{boxed:?}"); - /// ``` - #[inline(always)] - fn from(array: [T; N]) -> Box<[T]> { - Box::slice(Box::new(array)) - } -} - -impl TryFrom> for Box<[T; N], A> { - type Error = Box<[T], A>; - - /// Attempts to convert a `Box<[T]>` into a `Box<[T; N]>`. - /// - /// The conversion occurs in-place and does not require a - /// new memory allocation. - /// - /// # Errors - /// - /// Returns the old `Box<[T]>` in the `Err` variant if - /// `boxed_slice.len()` does not equal `N`. - #[inline(always)] - fn try_from(boxed_slice: Box<[T], A>) -> Result { - if boxed_slice.len() == N { - let (ptr, alloc) = Box::into_raw_with_allocator(boxed_slice); - Ok(unsafe { Box::from_raw_in(ptr as *mut [T; N], alloc) }) - } else { - Err(boxed_slice) - } - } -} - -impl Box { - /// Attempt to downcast the box to a concrete type. - /// - /// # Examples - /// - /// ``` - /// use std::any::Any; - /// - /// fn print_if_string(value: Box) { - /// if let Ok(string) = value.downcast::() { - /// println!("String ({}): {}", string.len(), string); - /// } - /// } - /// - /// let my_string = "Hello World".to_string(); - /// print_if_string(Box::new(my_string)); - /// print_if_string(Box::new(0i8)); - /// ``` - #[inline(always)] - pub fn downcast(self) -> Result, Self> { - if self.is::() { - unsafe { Ok(self.downcast_unchecked::()) } - } else { - Err(self) - } - } - - /// Downcasts the box to a concrete type. - /// - /// For a safe alternative see [`downcast`]. - /// - /// # Examples - /// - /// ``` - /// #![feature(downcast_unchecked)] - /// - /// use std::any::Any; - /// - /// let x: Box = Box::new(1_usize); - /// - /// unsafe { - /// assert_eq!(*x.downcast_unchecked::(), 1); - /// } - /// ``` - /// - /// # Safety - /// - /// The contained value must be of type `T`. Calling this method - /// with the incorrect type is *undefined behavior*. - /// - /// [`downcast`]: Self::downcast - #[inline(always)] - pub unsafe fn downcast_unchecked(self) -> Box { - debug_assert!(self.is::()); - unsafe { - let (raw, alloc): (*mut dyn Any, _) = Box::into_raw_with_allocator(self); - Box::from_raw_in(raw as *mut T, alloc) - } - } -} - -impl Box { - /// Attempt to downcast the box to a concrete type. - /// - /// # Examples - /// - /// ``` - /// use std::any::Any; - /// - /// fn print_if_string(value: Box) { - /// if let Ok(string) = value.downcast::() { - /// println!("String ({}): {}", string.len(), string); - /// } - /// } - /// - /// let my_string = "Hello World".to_string(); - /// print_if_string(Box::new(my_string)); - /// print_if_string(Box::new(0i8)); - /// ``` - #[inline(always)] - pub fn downcast(self) -> Result, Self> { - if self.is::() { - unsafe { Ok(self.downcast_unchecked::()) } - } else { - Err(self) - } - } - - /// Downcasts the box to a concrete type. - /// - /// For a safe alternative see [`downcast`]. - /// - /// # Examples - /// - /// ``` - /// #![feature(downcast_unchecked)] - /// - /// use std::any::Any; - /// - /// let x: Box = Box::new(1_usize); - /// - /// unsafe { - /// assert_eq!(*x.downcast_unchecked::(), 1); - /// } - /// ``` - /// - /// # Safety - /// - /// The contained value must be of type `T`. Calling this method - /// with the incorrect type is *undefined behavior*. - /// - /// [`downcast`]: Self::downcast - #[inline(always)] - pub unsafe fn downcast_unchecked(self) -> Box { - debug_assert!(self.is::()); - unsafe { - let (raw, alloc): (*mut (dyn Any + Send), _) = Box::into_raw_with_allocator(self); - Box::from_raw_in(raw as *mut T, alloc) - } - } -} - -impl Box { - /// Attempt to downcast the box to a concrete type. - /// - /// # Examples - /// - /// ``` - /// use std::any::Any; - /// - /// fn print_if_string(value: Box) { - /// if let Ok(string) = value.downcast::() { - /// println!("String ({}): {}", string.len(), string); - /// } - /// } - /// - /// let my_string = "Hello World".to_string(); - /// print_if_string(Box::new(my_string)); - /// print_if_string(Box::new(0i8)); - /// ``` - #[inline(always)] - pub fn downcast(self) -> Result, Self> { - if self.is::() { - unsafe { Ok(self.downcast_unchecked::()) } - } else { - Err(self) - } - } - - /// Downcasts the box to a concrete type. - /// - /// For a safe alternative see [`downcast`]. - /// - /// # Examples - /// - /// ``` - /// #![feature(downcast_unchecked)] - /// - /// use std::any::Any; - /// - /// let x: Box = Box::new(1_usize); - /// - /// unsafe { - /// assert_eq!(*x.downcast_unchecked::(), 1); - /// } - /// ``` - /// - /// # Safety - /// - /// The contained value must be of type `T`. Calling this method - /// with the incorrect type is *undefined behavior*. - /// - /// [`downcast`]: Self::downcast - #[inline(always)] - pub unsafe fn downcast_unchecked(self) -> Box { - debug_assert!(self.is::()); - unsafe { - let (raw, alloc): (*mut (dyn Any + Send + Sync), _) = - Box::into_raw_with_allocator(self); - Box::from_raw_in(raw as *mut T, alloc) - } - } -} - -impl fmt::Display for Box { - #[inline(always)] - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Display::fmt(&**self, f) - } -} - -impl fmt::Debug for Box { - #[inline(always)] - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Debug::fmt(&**self, f) - } -} - -impl fmt::Pointer for Box { - #[inline(always)] - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - // It's not possible to extract the inner Uniq directly from the Box, - // instead we cast it to a *const which aliases the Unique - let ptr: *const T = &**self; - fmt::Pointer::fmt(&ptr, f) - } -} - -impl Deref for Box { - type Target = T; - - #[inline(always)] - fn deref(&self) -> &T { - unsafe { self.0.as_ref() } - } -} - -impl DerefMut for Box { - #[inline(always)] - fn deref_mut(&mut self) -> &mut T { - unsafe { self.0.as_mut() } - } -} - -impl Iterator for Box { - type Item = I::Item; - - #[inline(always)] - fn next(&mut self) -> Option { - (**self).next() - } - - #[inline(always)] - fn size_hint(&self) -> (usize, Option) { - (**self).size_hint() - } - - #[inline(always)] - fn nth(&mut self, n: usize) -> Option { - (**self).nth(n) - } - - #[inline(always)] - fn last(self) -> Option { - BoxIter::last(self) - } -} - -trait BoxIter { - type Item; - fn last(self) -> Option; -} - -impl BoxIter for Box { - type Item = I::Item; - - #[inline(always)] - fn last(self) -> Option { - #[inline(always)] - fn some(_: Option, x: T) -> Option { - Some(x) - } - - self.fold(None, some) - } -} - -impl DoubleEndedIterator for Box { - #[inline(always)] - fn next_back(&mut self) -> Option { - (**self).next_back() - } - #[inline(always)] - fn nth_back(&mut self, n: usize) -> Option { - (**self).nth_back(n) - } -} - -impl ExactSizeIterator for Box { - #[inline(always)] - fn len(&self) -> usize { - (**self).len() - } -} - -impl FusedIterator for Box {} - -#[cfg(not(no_global_oom_handling))] -impl FromIterator for Box<[I]> { - #[inline(always)] - fn from_iter>(iter: T) -> Self { - iter.into_iter().collect::>().into_boxed_slice() - } -} - -#[cfg(not(no_global_oom_handling))] -impl Clone for Box<[T], A> { - #[inline(always)] - fn clone(&self) -> Self { - let alloc = Box::allocator(self).clone(); - let mut vec = Vec::with_capacity_in(self.len(), alloc); - vec.extend_from_slice(self); - vec.into_boxed_slice() - } - - #[inline(always)] - fn clone_from(&mut self, other: &Self) { - if self.len() == other.len() { - self.clone_from_slice(other); - } else { - *self = other.clone(); - } - } -} - -impl borrow::Borrow for Box { - #[inline(always)] - fn borrow(&self) -> &T { - self - } -} - -impl borrow::BorrowMut for Box { - #[inline(always)] - fn borrow_mut(&mut self) -> &mut T { - self - } -} - -impl AsRef for Box { - #[inline(always)] - fn as_ref(&self) -> &T { - self - } -} - -impl AsMut for Box { - #[inline(always)] - fn as_mut(&mut self) -> &mut T { - self - } -} - -/* Nota bene - * - * We could have chosen not to add this impl, and instead have written a - * function of Pin> to Pin. Such a function would not be sound, - * because Box implements Unpin even when T does not, as a result of - * this impl. - * - * We chose this API instead of the alternative for a few reasons: - * - Logically, it is helpful to understand pinning in regard to the - * memory region being pointed to. For this reason none of the - * standard library pointer types support projecting through a pin - * (Box is the only pointer type in std for which this would be - * safe.) - * - It is in practice very useful to have Box be unconditionally - * Unpin because of trait objects, for which the structural auto - * trait functionality does not apply (e.g., Box would - * otherwise not be Unpin). - * - * Another type with the same semantics as Box but only a conditional - * implementation of `Unpin` (where `T: Unpin`) would be valid/safe, and - * could have a method to project a Pin from it. - */ -impl Unpin for Box where A: 'static {} - -impl Future for Box -where - A: 'static, -{ - type Output = F::Output; - - #[inline(always)] - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - F::poll(Pin::new(&mut *self), cx) - } -} - -#[cfg(feature = "std")] -mod error { - use std::error::Error; - - use super::Box; - - #[cfg(not(no_global_oom_handling))] - impl<'a, E: Error + 'a> From for Box { - /// Converts a type of [`Error`] into a box of dyn [`Error`]. - /// - /// # Examples - /// - /// ``` - /// use std::error::Error; - /// use std::fmt; - /// use std::mem; - /// - /// #[derive(Debug)] - /// struct AnError; - /// - /// impl fmt::Display for AnError { - /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - /// write!(f, "An error") - /// } - /// } - /// - /// impl Error for AnError {} - /// - /// let an_error = AnError; - /// assert!(0 == mem::size_of_val(&an_error)); - /// let a_boxed_error = Box::::from(an_error); - /// assert!(mem::size_of::>() == mem::size_of_val(&a_boxed_error)) - /// ``` - #[inline(always)] - fn from(err: E) -> Box { - unsafe { Box::from_raw(Box::leak(Box::new(err))) } - } - } - - #[cfg(not(no_global_oom_handling))] - impl<'a, E: Error + Send + Sync + 'a> From for Box { - /// Converts a type of [`Error`] + [`Send`] + [`Sync`] into a box of - /// dyn [`Error`] + [`Send`] + [`Sync`]. - /// - /// # Examples - /// - /// ``` - /// use std::error::Error; - /// use std::fmt; - /// use std::mem; - /// - /// #[derive(Debug)] - /// struct AnError; - /// - /// impl fmt::Display for AnError { - /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - /// write!(f, "An error") - /// } - /// } - /// - /// impl Error for AnError {} - /// - /// unsafe impl Send for AnError {} - /// - /// unsafe impl Sync for AnError {} - /// - /// let an_error = AnError; - /// assert!(0 == mem::size_of_val(&an_error)); - /// let a_boxed_error = Box::::from(an_error); - /// assert!( - /// mem::size_of::>() == mem::size_of_val(&a_boxed_error)) - /// ``` - #[inline(always)] - fn from(err: E) -> Box { - unsafe { Box::from_raw(Box::leak(Box::new(err))) } - } - } - - impl Error for Box { - #[inline(always)] - fn source(&self) -> Option<&(dyn Error + 'static)> { - Error::source(&**self) - } - } -} - -#[cfg(feature = "std")] -impl std::io::Read for Box { - #[inline] - fn read(&mut self, buf: &mut [u8]) -> std::io::Result { - (**self).read(buf) - } - - #[inline] - fn read_to_end(&mut self, buf: &mut std::vec::Vec) -> std::io::Result { - (**self).read_to_end(buf) - } - - #[inline] - fn read_to_string(&mut self, buf: &mut String) -> std::io::Result { - (**self).read_to_string(buf) - } - - #[inline] - fn read_exact(&mut self, buf: &mut [u8]) -> std::io::Result<()> { - (**self).read_exact(buf) - } -} - -#[cfg(feature = "std")] -impl std::io::Write for Box { - #[inline] - fn write(&mut self, buf: &[u8]) -> std::io::Result { - (**self).write(buf) - } - - #[inline] - fn flush(&mut self) -> std::io::Result<()> { - (**self).flush() - } - - #[inline] - fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> { - (**self).write_all(buf) - } - - #[inline] - fn write_fmt(&mut self, fmt: fmt::Arguments<'_>) -> std::io::Result<()> { - (**self).write_fmt(fmt) - } -} - -#[cfg(feature = "std")] -impl std::io::Seek for Box { - #[inline] - fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result { - (**self).seek(pos) - } - - #[inline] - fn stream_position(&mut self) -> std::io::Result { - (**self).stream_position() - } -} - -#[cfg(feature = "std")] -impl std::io::BufRead for Box { - #[inline] - fn fill_buf(&mut self) -> std::io::Result<&[u8]> { - (**self).fill_buf() - } - - #[inline] - fn consume(&mut self, amt: usize) { - (**self).consume(amt) - } - - #[inline] - fn read_until(&mut self, byte: u8, buf: &mut std::vec::Vec) -> std::io::Result { - (**self).read_until(byte, buf) - } - - #[inline] - fn read_line(&mut self, buf: &mut std::string::String) -> std::io::Result { - (**self).read_line(buf) - } -} - -#[cfg(feature = "alloc")] -impl Extend> for alloc_crate::string::String { - fn extend>>(&mut self, iter: I) { - iter.into_iter().for_each(move |s| self.push_str(&s)); - } -} - -#[cfg(not(no_global_oom_handling))] -impl Clone for Box { - #[inline] - fn clone(&self) -> Self { - (**self).into() - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<&core::ffi::CStr> for Box { - /// Converts a `&CStr` into a `Box`, - /// by copying the contents into a newly allocated [`Box`]. - fn from(s: &core::ffi::CStr) -> Box { - let boxed: Box<[u8]> = Box::from(s.to_bytes_with_nul()); - unsafe { Box::from_raw(Box::into_raw(boxed) as *mut core::ffi::CStr) } - } -} - -#[cfg(feature = "serde")] -impl serde::Serialize for Box -where - T: serde::Serialize, - A: Allocator, -{ - #[inline(always)] - fn serialize(&self, serializer: S) -> Result { - (**self).serialize(serializer) - } -} - -#[cfg(feature = "serde")] -impl<'de, T, A> serde::Deserialize<'de> for Box -where - T: serde::Deserialize<'de>, - A: Allocator + Default, -{ - #[inline(always)] - fn deserialize>(deserializer: D) -> Result { - let value = T::deserialize(deserializer)?; - Ok(Box::new_in(value, A::default())) - } -} +//! The `Box` type for heap allocation. +//! +//! [`Box`], casually referred to as a 'box', provides the simplest form of +//! heap allocation in Rust. Boxes provide ownership for this allocation, and +//! drop their contents when they go out of scope. Boxes also ensure that they +//! never allocate more than `isize::MAX` bytes. +//! +//! # Examples +//! +//! Move a value from the stack to the heap by creating a [`Box`]: +//! +//! ``` +//! let val: u8 = 5; +//! let boxed: Box = Box::new(val); +//! ``` +//! +//! Move a value from a [`Box`] back to the stack by [dereferencing]: +//! +//! ``` +//! let boxed: Box = Box::new(5); +//! let val: u8 = *boxed; +//! ``` +//! +//! Creating a recursive data structure: +//! +//! ``` +//! #[derive(Debug)] +//! enum List { +//! Cons(T, Box>), +//! Nil, +//! } +//! +//! let list: List = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil)))); +//! println!("{list:?}"); +//! ``` +//! +//! This will print `Cons(1, Cons(2, Nil))`. +//! +//! Recursive structures must be boxed, because if the definition of `Cons` +//! looked like this: +//! +//! ```compile_fail,E0072 +//! # enum List { +//! Cons(T, List), +//! # } +//! ``` +//! +//! It wouldn't work. This is because the size of a `List` depends on how many +//! elements are in the list, and so we don't know how much memory to allocate +//! for a `Cons`. By introducing a [`Box`], which has a defined size, we know how +//! big `Cons` needs to be. +//! +//! # Memory layout +//! +//! For non-zero-sized values, a [`Box`] will use the [`Global`] allocator for +//! its allocation. It is valid to convert both ways between a [`Box`] and a +//! raw pointer allocated with the [`Global`] allocator, given that the +//! [`Layout`] used with the allocator is correct for the type. More precisely, +//! a `value: *mut T` that has been allocated with the [`Global`] allocator +//! with `Layout::for_value(&*value)` may be converted into a box using +//! [`Box::::from_raw(value)`]. Conversely, the memory backing a `value: *mut +//! T` obtained from [`Box::::into_raw`] may be deallocated using the +//! [`Global`] allocator with [`Layout::for_value(&*value)`]. +//! +//! For zero-sized values, the `Box` pointer still has to be [valid] for reads +//! and writes and sufficiently aligned. In particular, casting any aligned +//! non-zero integer literal to a raw pointer produces a valid pointer, but a +//! pointer pointing into previously allocated memory that since got freed is +//! not valid. The recommended way to build a Box to a ZST if `Box::new` cannot +//! be used is to use [`ptr::NonNull::dangling`]. +//! +//! So long as `T: Sized`, a `Box` is guaranteed to be represented +//! as a single pointer and is also ABI-compatible with C pointers +//! (i.e. the C type `T*`). This means that if you have extern "C" +//! Rust functions that will be called from C, you can define those +//! Rust functions using `Box` types, and use `T*` as corresponding +//! type on the C side. As an example, consider this C header which +//! declares functions that create and destroy some kind of `Foo` +//! value: +//! +//! ```c +//! /* C header */ +//! +//! /* Returns ownership to the caller */ +//! struct Foo* foo_new(void); +//! +//! /* Takes ownership from the caller; no-op when invoked with null */ +//! void foo_delete(struct Foo*); +//! ``` +//! +//! These two functions might be implemented in Rust as follows. Here, the +//! `struct Foo*` type from C is translated to `Box`, which captures +//! the ownership constraints. Note also that the nullable argument to +//! `foo_delete` is represented in Rust as `Option>`, since `Box` +//! cannot be null. +//! +//! ``` +//! #[repr(C)] +//! pub struct Foo; +//! +//! #[no_mangle] +//! pub extern "C" fn foo_new() -> Box { +//! Box::new(Foo) +//! } +//! +//! #[no_mangle] +//! pub extern "C" fn foo_delete(_: Option>) {} +//! ``` +//! +//! Even though `Box` has the same representation and C ABI as a C pointer, +//! this does not mean that you can convert an arbitrary `T*` into a `Box` +//! and expect things to work. `Box` values will always be fully aligned, +//! non-null pointers. Moreover, the destructor for `Box` will attempt to +//! free the value with the global allocator. In general, the best practice +//! is to only use `Box` for pointers that originated from the global +//! allocator. +//! +//! **Important.** At least at present, you should avoid using +//! `Box` types for functions that are defined in C but invoked +//! from Rust. In those cases, you should directly mirror the C types +//! as closely as possible. Using types like `Box` where the C +//! definition is just using `T*` can lead to undefined behavior, as +//! described in [rust-lang/unsafe-code-guidelines#198][ucg#198]. +//! +//! # Considerations for unsafe code +//! +//! **Warning: This section is not normative and is subject to change, possibly +//! being relaxed in the future! It is a simplified summary of the rules +//! currently implemented in the compiler.** +//! +//! The aliasing rules for `Box` are the same as for `&mut T`. `Box` +//! asserts uniqueness over its content. Using raw pointers derived from a box +//! after that box has been mutated through, moved or borrowed as `&mut T` +//! is not allowed. For more guidance on working with box from unsafe code, see +//! [rust-lang/unsafe-code-guidelines#326][ucg#326]. +//! +//! +//! [ucg#198]: https://github.com/rust-lang/unsafe-code-guidelines/issues/198 +//! [ucg#326]: https://github.com/rust-lang/unsafe-code-guidelines/issues/326 +//! [dereferencing]: core::ops::Deref +//! [`Box::::from_raw(value)`]: Box::from_raw +//! [`Global`]: crate::alloc::Global +//! [`Layout`]: crate::alloc::Layout +//! [`Layout::for_value(&*value)`]: crate::alloc::Layout::for_value +//! [valid]: ptr#safety + +use core::any::Any; +use core::borrow; +use core::cmp::Ordering; +use core::convert::{From, TryFrom}; + +// use core::error::Error; +use core::fmt; +use core::future::Future; +use core::hash::{Hash, Hasher}; +#[cfg(not(no_global_oom_handling))] +use core::iter::FromIterator; +use core::iter::{FusedIterator, Iterator}; +use core::marker::Unpin; +use core::mem::{self, MaybeUninit}; +use core::ops::{Deref, DerefMut}; +use core::pin::Pin; +use core::ptr::{self, NonNull}; +use core::task::{Context, Poll}; + +use super::alloc::{AllocError, Allocator, Global, Layout}; +use super::raw_vec::RawVec; +use super::unique::Unique; +#[cfg(not(no_global_oom_handling))] +use super::vec::Vec; +#[cfg(not(no_global_oom_handling))] +use alloc_crate::alloc::handle_alloc_error; + +/// A pointer type for heap allocation. +/// +/// See the [module-level documentation](../../std/boxed/index.html) for more. +pub struct Box(Unique, A); + +// Safety: Box owns both T and A, so sending is safe if +// sending is safe for T and A. +unsafe impl Send for Box +where + T: Send, + A: Send, +{ +} + +// Safety: Box owns both T and A, so sharing is safe if +// sharing is safe for T and A. +unsafe impl Sync for Box +where + T: Sync, + A: Sync, +{ +} + +impl Box { + /// Allocates memory on the heap and then places `x` into it. + /// + /// This doesn't actually allocate if `T` is zero-sized. + /// + /// # Examples + /// + /// ``` + /// let five = Box::new(5); + /// ``` + #[cfg(all(not(no_global_oom_handling)))] + #[inline(always)] + #[must_use] + pub fn new(x: T) -> Self { + Self::new_in(x, Global) + } + + /// Constructs a new box with uninitialized contents. + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let mut five = Box::::new_uninit(); + /// + /// let five = unsafe { + /// // Deferred initialization: + /// five.as_mut_ptr().write(5); + /// + /// five.assume_init() + /// }; + /// + /// assert_eq!(*five, 5) + /// ``` + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_uninit() -> Box> { + Self::new_uninit_in(Global) + } + + /// Constructs a new `Box` with uninitialized contents, with the memory + /// being filled with `0` bytes. + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let zero = Box::::new_zeroed(); + /// let zero = unsafe { zero.assume_init() }; + /// + /// assert_eq!(*zero, 0) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_zeroed() -> Box> { + Self::new_zeroed_in(Global) + } + + /// Constructs a new `Pin>`. If `T` does not implement [`Unpin`], then + /// `x` will be pinned in memory and unable to be moved. + /// + /// Constructing and pinning of the `Box` can also be done in two steps: `Box::pin(x)` + /// does the same as [Box::into_pin]\([Box::new]\(x)). Consider using + /// [`into_pin`](Box::into_pin) if you already have a `Box`, or if you want to + /// construct a (pinned) `Box` in a different way than with [`Box::new`]. + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn pin(x: T) -> Pin> { + Box::new(x).into() + } + + /// Allocates memory on the heap then places `x` into it, + /// returning an error if the allocation fails + /// + /// This doesn't actually allocate if `T` is zero-sized. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api)] + /// + /// let five = Box::try_new(5)?; + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + #[inline(always)] + pub fn try_new(x: T) -> Result { + Self::try_new_in(x, Global) + } + + /// Constructs a new box with uninitialized contents on the heap, + /// returning an error if the allocation fails + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// let mut five = Box::::try_new_uninit()?; + /// + /// let five = unsafe { + /// // Deferred initialization: + /// five.as_mut_ptr().write(5); + /// + /// five.assume_init() + /// }; + /// + /// assert_eq!(*five, 5); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + #[inline(always)] + pub fn try_new_uninit() -> Result>, AllocError> { + Box::try_new_uninit_in(Global) + } + + /// Constructs a new `Box` with uninitialized contents, with the memory + /// being filled with `0` bytes on the heap + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// let zero = Box::::try_new_zeroed()?; + /// let zero = unsafe { zero.assume_init() }; + /// + /// assert_eq!(*zero, 0); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[inline(always)] + pub fn try_new_zeroed() -> Result>, AllocError> { + Box::try_new_zeroed_in(Global) + } +} + +impl Box { + /// Allocates memory in the given allocator then places `x` into it. + /// + /// This doesn't actually allocate if `T` is zero-sized. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api)] + /// + /// use std::alloc::System; + /// + /// let five = Box::new_in(5, System); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_in(x: T, alloc: A) -> Self + where + A: Allocator, + { + let mut boxed = Self::new_uninit_in(alloc); + unsafe { + boxed.as_mut_ptr().write(x); + boxed.assume_init() + } + } + + /// Allocates memory in the given allocator then places `x` into it, + /// returning an error if the allocation fails + /// + /// This doesn't actually allocate if `T` is zero-sized. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api)] + /// + /// use std::alloc::System; + /// + /// let five = Box::try_new_in(5, System)?; + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + #[inline(always)] + pub fn try_new_in(x: T, alloc: A) -> Result + where + A: Allocator, + { + let mut boxed = Self::try_new_uninit_in(alloc)?; + unsafe { + boxed.as_mut_ptr().write(x); + Ok(boxed.assume_init()) + } + } + + /// Constructs a new box with uninitialized contents in the provided allocator. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let mut five = Box::::new_uninit_in(System); + /// + /// let five = unsafe { + /// // Deferred initialization: + /// five.as_mut_ptr().write(5); + /// + /// five.assume_init() + /// }; + /// + /// assert_eq!(*five, 5) + /// ``` + #[cfg(not(no_global_oom_handling))] + #[must_use] + // #[unstable(feature = "new_uninit", issue = "63291")] + #[inline(always)] + pub fn new_uninit_in(alloc: A) -> Box, A> + where + A: Allocator, + { + let layout = Layout::new::>(); + // NOTE: Prefer match over unwrap_or_else since closure sometimes not inlineable. + // That would make code size bigger. + match Box::try_new_uninit_in(alloc) { + Ok(m) => m, + Err(_) => handle_alloc_error(layout), + } + } + + /// Constructs a new box with uninitialized contents in the provided allocator, + /// returning an error if the allocation fails + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let mut five = Box::::try_new_uninit_in(System)?; + /// + /// let five = unsafe { + /// // Deferred initialization: + /// five.as_mut_ptr().write(5); + /// + /// five.assume_init() + /// }; + /// + /// assert_eq!(*five, 5); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + #[inline(always)] + pub fn try_new_uninit_in(alloc: A) -> Result, A>, AllocError> + where + A: Allocator, + { + let ptr = if mem::size_of::() == 0 { + NonNull::dangling() + } else { + let layout = Layout::new::>(); + alloc.allocate(layout)?.cast() + }; + + unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) } + } + + /// Constructs a new `Box` with uninitialized contents, with the memory + /// being filled with `0` bytes in the provided allocator. + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let zero = Box::::new_zeroed_in(System); + /// let zero = unsafe { zero.assume_init() }; + /// + /// assert_eq!(*zero, 0) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[cfg(not(no_global_oom_handling))] + // #[unstable(feature = "new_uninit", issue = "63291")] + #[must_use] + #[inline(always)] + pub fn new_zeroed_in(alloc: A) -> Box, A> + where + A: Allocator, + { + let layout = Layout::new::>(); + // NOTE: Prefer match over unwrap_or_else since closure sometimes not inlineable. + // That would make code size bigger. + match Box::try_new_zeroed_in(alloc) { + Ok(m) => m, + Err(_) => handle_alloc_error(layout), + } + } + + /// Constructs a new `Box` with uninitialized contents, with the memory + /// being filled with `0` bytes in the provided allocator, + /// returning an error if the allocation fails, + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let zero = Box::::try_new_zeroed_in(System)?; + /// let zero = unsafe { zero.assume_init() }; + /// + /// assert_eq!(*zero, 0); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[inline(always)] + pub fn try_new_zeroed_in(alloc: A) -> Result, A>, AllocError> + where + A: Allocator, + { + let ptr = if mem::size_of::() == 0 { + NonNull::dangling() + } else { + let layout = Layout::new::>(); + alloc.allocate_zeroed(layout)?.cast() + }; + unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) } + } + + /// Constructs a new `Pin>`. If `T` does not implement [`Unpin`], then + /// `x` will be pinned in memory and unable to be moved. + /// + /// Constructing and pinning of the `Box` can also be done in two steps: `Box::pin_in(x, alloc)` + /// does the same as [Box::into_pin]\([Box::new_in]\(x, alloc)). Consider using + /// [`into_pin`](Box::into_pin) if you already have a `Box`, or if you want to + /// construct a (pinned) `Box` in a different way than with [`Box::new_in`]. + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn pin_in(x: T, alloc: A) -> Pin + where + A: 'static + Allocator, + { + Self::into_pin(Self::new_in(x, alloc)) + } + + /// Converts a `Box` into a `Box<[T]>` + /// + /// This conversion does not allocate on the heap and happens in place. + #[inline(always)] + pub fn into_boxed_slice(boxed: Self) -> Box<[T], A> { + let (raw, alloc) = Box::into_raw_with_allocator(boxed); + unsafe { Box::from_raw_in(raw as *mut [T; 1], alloc) } + } + + /// Consumes the `Box`, returning the wrapped value. + /// + /// # Examples + /// + /// ``` + /// #![feature(box_into_inner)] + /// + /// let c = Box::new(5); + /// + /// assert_eq!(Box::into_inner(c), 5); + /// ``` + #[inline(always)] + pub fn into_inner(boxed: Self) -> T { + // Override our default `Drop` implementation. + // Though the default `Drop` implementation drops the both the pointer and the allocator, + // here we only want to drop the allocator. + let boxed = mem::ManuallyDrop::new(boxed); + let alloc = unsafe { ptr::read(&boxed.1) }; + + let ptr = boxed.0; + let unboxed = unsafe { ptr.as_ptr().read() }; + unsafe { alloc.deallocate(ptr.as_non_null_ptr().cast(), Layout::new::()) }; + + unboxed + } +} + +impl Box<[T]> { + /// Constructs a new boxed slice with uninitialized contents. + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let mut values = Box::<[u32]>::new_uninit_slice(3); + /// + /// let values = unsafe { + /// // Deferred initialization: + /// values[0].as_mut_ptr().write(1); + /// values[1].as_mut_ptr().write(2); + /// values[2].as_mut_ptr().write(3); + /// + /// values.assume_init() + /// }; + /// + /// assert_eq!(*values, [1, 2, 3]) + /// ``` + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_uninit_slice(len: usize) -> Box<[mem::MaybeUninit]> { + unsafe { RawVec::with_capacity(len).into_box(len) } + } + + /// Constructs a new boxed slice with uninitialized contents, with the memory + /// being filled with `0` bytes. + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let values = Box::<[u32]>::new_zeroed_slice(3); + /// let values = unsafe { values.assume_init() }; + /// + /// assert_eq!(*values, [0, 0, 0]) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_zeroed_slice(len: usize) -> Box<[mem::MaybeUninit]> { + unsafe { RawVec::with_capacity_zeroed(len).into_box(len) } + } + + /// Constructs a new boxed slice with uninitialized contents. Returns an error if + /// the allocation fails + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// let mut values = Box::<[u32]>::try_new_uninit_slice(3)?; + /// let values = unsafe { + /// // Deferred initialization: + /// values[0].as_mut_ptr().write(1); + /// values[1].as_mut_ptr().write(2); + /// values[2].as_mut_ptr().write(3); + /// values.assume_init() + /// }; + /// + /// assert_eq!(*values, [1, 2, 3]); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + #[inline(always)] + pub fn try_new_uninit_slice(len: usize) -> Result]>, AllocError> { + Self::try_new_uninit_slice_in(len, Global) + } + + /// Constructs a new boxed slice with uninitialized contents, with the memory + /// being filled with `0` bytes. Returns an error if the allocation fails + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// let values = Box::<[u32]>::try_new_zeroed_slice(3)?; + /// let values = unsafe { values.assume_init() }; + /// + /// assert_eq!(*values, [0, 0, 0]); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[inline(always)] + pub fn try_new_zeroed_slice(len: usize) -> Result]>, AllocError> { + Self::try_new_zeroed_slice_in(len, Global) + } +} + +impl Box<[T], A> { + /// Constructs a new boxed slice with uninitialized contents in the provided allocator. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let mut values = Box::<[u32], _>::new_uninit_slice_in(3, System); + /// + /// let values = unsafe { + /// // Deferred initialization: + /// values[0].as_mut_ptr().write(1); + /// values[1].as_mut_ptr().write(2); + /// values[2].as_mut_ptr().write(3); + /// + /// values.assume_init() + /// }; + /// + /// assert_eq!(*values, [1, 2, 3]) + /// ``` + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[mem::MaybeUninit], A> { + unsafe { RawVec::with_capacity_in(len, alloc).into_box(len) } + } + + /// Constructs a new boxed slice with uninitialized contents in the provided allocator, + /// with the memory being filled with `0` bytes. + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let values = Box::<[u32], _>::new_zeroed_slice_in(3, System); + /// let values = unsafe { values.assume_init() }; + /// + /// assert_eq!(*values, [0, 0, 0]) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[mem::MaybeUninit], A> { + unsafe { RawVec::with_capacity_zeroed_in(len, alloc).into_box(len) } + } + + /// Constructs a new boxed slice with uninitialized contents in the provided allocator. Returns an error if + /// the allocation fails. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let mut values = Box::<[u32], _>::try_new_uninit_slice_in(3, System)?; + /// let values = unsafe { + /// // Deferred initialization: + /// values[0].as_mut_ptr().write(1); + /// values[1].as_mut_ptr().write(2); + /// values[2].as_mut_ptr().write(3); + /// values.assume_init() + /// }; + /// + /// assert_eq!(*values, [1, 2, 3]); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + #[inline] + pub fn try_new_uninit_slice_in( + len: usize, + alloc: A, + ) -> Result], A>, AllocError> { + let ptr = if mem::size_of::() == 0 || len == 0 { + NonNull::dangling() + } else { + let layout = match Layout::array::>(len) { + Ok(l) => l, + Err(_) => return Err(AllocError), + }; + alloc.allocate(layout)?.cast() + }; + unsafe { Ok(RawVec::from_raw_parts_in(ptr.as_ptr(), len, alloc).into_box(len)) } + } + + /// Constructs a new boxed slice with uninitialized contents in the provided allocator, with the memory + /// being filled with `0` bytes. Returns an error if the allocation fails. + /// + /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage + /// of this method. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, new_uninit)] + /// + /// use std::alloc::System; + /// + /// let values = Box::<[u32], _>::try_new_zeroed_slice_in(3, System)?; + /// let values = unsafe { values.assume_init() }; + /// + /// assert_eq!(*values, [0, 0, 0]); + /// # Ok::<(), std::alloc::AllocError>(()) + /// ``` + /// + /// [zeroed]: mem::MaybeUninit::zeroed + #[inline] + pub fn try_new_zeroed_slice_in( + len: usize, + alloc: A, + ) -> Result], A>, AllocError> { + let ptr = if mem::size_of::() == 0 || len == 0 { + NonNull::dangling() + } else { + let layout = match Layout::array::>(len) { + Ok(l) => l, + Err(_) => return Err(AllocError), + }; + alloc.allocate_zeroed(layout)?.cast() + }; + unsafe { Ok(RawVec::from_raw_parts_in(ptr.as_ptr(), len, alloc).into_box(len)) } + } + + /// Converts `self` into a vector without clones or allocation. + /// + /// The resulting vector can be converted back into a box via + /// `Vec`'s `into_boxed_slice` method. + /// + /// # Examples + /// + /// ``` + /// let s: Box<[i32]> = Box::new([10, 40, 30]); + /// let x = s.into_vec(); + /// // `s` cannot be used anymore because it has been converted into `x`. + /// + /// assert_eq!(x, vec![10, 40, 30]); + /// ``` + #[inline] + pub fn into_vec(self) -> Vec + where + A: Allocator, + { + unsafe { + let len = self.len(); + let (b, alloc) = Box::into_raw_with_allocator(self); + Vec::from_raw_parts_in(b as *mut T, len, len, alloc) + } + } +} + +impl Box, A> { + /// Converts to `Box`. + /// + /// # Safety + /// + /// As with [`MaybeUninit::assume_init`], + /// it is up to the caller to guarantee that the value + /// really is in an initialized state. + /// Calling this when the content is not yet fully initialized + /// causes immediate undefined behavior. + /// + /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let mut five = Box::::new_uninit(); + /// + /// let five: Box = unsafe { + /// // Deferred initialization: + /// five.as_mut_ptr().write(5); + /// + /// five.assume_init() + /// }; + /// + /// assert_eq!(*five, 5) + /// ``` + #[inline(always)] + pub unsafe fn assume_init(self) -> Box { + let (raw, alloc) = Self::into_raw_with_allocator(self); + unsafe { Box::::from_raw_in(raw as *mut T, alloc) } + } + + /// Writes the value and converts to `Box`. + /// + /// This method converts the box similarly to [`Box::assume_init`] but + /// writes `value` into it before conversion thus guaranteeing safety. + /// In some scenarios use of this method may improve performance because + /// the compiler may be able to optimize copying from stack. + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let big_box = Box::<[usize; 1024]>::new_uninit(); + /// + /// let mut array = [0; 1024]; + /// for (i, place) in array.iter_mut().enumerate() { + /// *place = i; + /// } + /// + /// // The optimizer may be able to elide this copy, so previous code writes + /// // to heap directly. + /// let big_box = Box::write(big_box, array); + /// + /// for (i, x) in big_box.iter().enumerate() { + /// assert_eq!(*x, i); + /// } + /// ``` + #[inline(always)] + pub fn write(mut boxed: Self, value: T) -> Box { + unsafe { + (*boxed).write(value); + boxed.assume_init() + } + } +} + +impl Box<[mem::MaybeUninit], A> { + /// Converts to `Box<[T], A>`. + /// + /// # Safety + /// + /// As with [`MaybeUninit::assume_init`], + /// it is up to the caller to guarantee that the values + /// really are in an initialized state. + /// Calling this when the content is not yet fully initialized + /// causes immediate undefined behavior. + /// + /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init + /// + /// # Examples + /// + /// ``` + /// #![feature(new_uninit)] + /// + /// let mut values = Box::<[u32]>::new_uninit_slice(3); + /// + /// let values = unsafe { + /// // Deferred initialization: + /// values[0].as_mut_ptr().write(1); + /// values[1].as_mut_ptr().write(2); + /// values[2].as_mut_ptr().write(3); + /// + /// values.assume_init() + /// }; + /// + /// assert_eq!(*values, [1, 2, 3]) + /// ``` + #[inline(always)] + pub unsafe fn assume_init(self) -> Box<[T], A> { + let (raw, alloc) = Self::into_raw_with_allocator(self); + unsafe { Box::<[T], A>::from_raw_in(raw as *mut [T], alloc) } + } +} + +impl Box { + /// Constructs a box from a raw pointer. + /// + /// After calling this function, the raw pointer is owned by the + /// resulting `Box`. Specifically, the `Box` destructor will call + /// the destructor of `T` and free the allocated memory. For this + /// to be safe, the memory must have been allocated in accordance + /// with the [memory layout] used by `Box` . + /// + /// # Safety + /// + /// This function is unsafe because improper use may lead to + /// memory problems. For example, a double-free may occur if the + /// function is called twice on the same raw pointer. + /// + /// The safety conditions are described in the [memory layout] section. + /// + /// # Examples + /// + /// Recreate a `Box` which was previously converted to a raw pointer + /// using [`Box::into_raw`]: + /// ``` + /// let x = Box::new(5); + /// let ptr = Box::into_raw(x); + /// let x = unsafe { Box::from_raw(ptr) }; + /// ``` + /// Manually create a `Box` from scratch by using the global allocator: + /// ``` + /// use std::alloc::{alloc, Layout}; + /// + /// unsafe { + /// let ptr = alloc(Layout::new::()) as *mut i32; + /// // In general .write is required to avoid attempting to destruct + /// // the (uninitialized) previous contents of `ptr`, though for this + /// // simple example `*ptr = 5` would have worked as well. + /// ptr.write(5); + /// let x = Box::from_raw(ptr); + /// } + /// ``` + /// + /// [memory layout]: self#memory-layout + /// [`Layout`]: crate::Layout + #[must_use = "call `drop(from_raw(ptr))` if you intend to drop the `Box`"] + #[inline(always)] + pub unsafe fn from_raw(raw: *mut T) -> Self { + unsafe { Self::from_raw_in(raw, Global) } + } +} + +impl Box { + /// Constructs a box from a raw pointer in the given allocator. + /// + /// After calling this function, the raw pointer is owned by the + /// resulting `Box`. Specifically, the `Box` destructor will call + /// the destructor of `T` and free the allocated memory. For this + /// to be safe, the memory must have been allocated in accordance + /// with the [memory layout] used by `Box` . + /// + /// # Safety + /// + /// This function is unsafe because improper use may lead to + /// memory problems. For example, a double-free may occur if the + /// function is called twice on the same raw pointer. + /// + /// + /// # Examples + /// + /// Recreate a `Box` which was previously converted to a raw pointer + /// using [`Box::into_raw_with_allocator`]: + /// ``` + /// use std::alloc::System; + /// # use allocator_api2::boxed::Box; + /// + /// let x = Box::new_in(5, System); + /// let (ptr, alloc) = Box::into_raw_with_allocator(x); + /// let x = unsafe { Box::from_raw_in(ptr, alloc) }; + /// ``` + /// Manually create a `Box` from scratch by using the system allocator: + /// ``` + /// use allocator_api2::alloc::{Allocator, Layout, System}; + /// # use allocator_api2::boxed::Box; + /// + /// unsafe { + /// let ptr = System.allocate(Layout::new::())?.as_ptr().cast::(); + /// // In general .write is required to avoid attempting to destruct + /// // the (uninitialized) previous contents of `ptr`, though for this + /// // simple example `*ptr = 5` would have worked as well. + /// ptr.write(5); + /// let x = Box::from_raw_in(ptr, System); + /// } + /// # Ok::<(), allocator_api2::alloc::AllocError>(()) + /// ``` + /// + /// [memory layout]: self#memory-layout + /// [`Layout`]: crate::Layout + #[inline(always)] + pub const unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Self { + Box(unsafe { Unique::new_unchecked(raw) }, alloc) + } + + /// Consumes the `Box`, returning a wrapped raw pointer. + /// + /// The pointer will be properly aligned and non-null. + /// + /// After calling this function, the caller is responsible for the + /// memory previously managed by the `Box`. In particular, the + /// caller should properly destroy `T` and release the memory, taking + /// into account the [memory layout] used by `Box`. The easiest way to + /// do this is to convert the raw pointer back into a `Box` with the + /// [`Box::from_raw`] function, allowing the `Box` destructor to perform + /// the cleanup. + /// + /// Note: this is an associated function, which means that you have + /// to call it as `Box::into_raw(b)` instead of `b.into_raw()`. This + /// is so that there is no conflict with a method on the inner type. + /// + /// # Examples + /// Converting the raw pointer back into a `Box` with [`Box::from_raw`] + /// for automatic cleanup: + /// ``` + /// let x = Box::new(String::from("Hello")); + /// let ptr = Box::into_raw(x); + /// let x = unsafe { Box::from_raw(ptr) }; + /// ``` + /// Manual cleanup by explicitly running the destructor and deallocating + /// the memory: + /// ``` + /// use std::alloc::{dealloc, Layout}; + /// use std::ptr; + /// + /// let x = Box::new(String::from("Hello")); + /// let p = Box::into_raw(x); + /// unsafe { + /// ptr::drop_in_place(p); + /// dealloc(p as *mut u8, Layout::new::()); + /// } + /// ``` + /// + /// [memory layout]: self#memory-layout + #[inline(always)] + pub fn into_raw(b: Self) -> *mut T { + Self::into_raw_with_allocator(b).0 + } + + /// Consumes the `Box`, returning a wrapped raw pointer and the allocator. + /// + /// The pointer will be properly aligned and non-null. + /// + /// After calling this function, the caller is responsible for the + /// memory previously managed by the `Box`. In particular, the + /// caller should properly destroy `T` and release the memory, taking + /// into account the [memory layout] used by `Box`. The easiest way to + /// do this is to convert the raw pointer back into a `Box` with the + /// [`Box::from_raw_in`] function, allowing the `Box` destructor to perform + /// the cleanup. + /// + /// Note: this is an associated function, which means that you have + /// to call it as `Box::into_raw_with_allocator(b)` instead of `b.into_raw_with_allocator()`. This + /// is so that there is no conflict with a method on the inner type. + /// + /// # Examples + /// Converting the raw pointer back into a `Box` with [`Box::from_raw_in`] + /// for automatic cleanup: + /// ``` + /// #![feature(allocator_api)] + /// + /// use std::alloc::System; + /// + /// let x = Box::new_in(String::from("Hello"), System); + /// let (ptr, alloc) = Box::into_raw_with_allocator(x); + /// let x = unsafe { Box::from_raw_in(ptr, alloc) }; + /// ``` + /// Manual cleanup by explicitly running the destructor and deallocating + /// the memory: + /// ``` + /// #![feature(allocator_api)] + /// + /// use std::alloc::{Allocator, Layout, System}; + /// use std::ptr::{self, NonNull}; + /// + /// let x = Box::new_in(String::from("Hello"), System); + /// let (ptr, alloc) = Box::into_raw_with_allocator(x); + /// unsafe { + /// ptr::drop_in_place(ptr); + /// let non_null = NonNull::new_unchecked(ptr); + /// alloc.deallocate(non_null.cast(), Layout::new::()); + /// } + /// ``` + /// + /// [memory layout]: self#memory-layout + #[inline(always)] + pub fn into_raw_with_allocator(b: Self) -> (*mut T, A) { + let (leaked, alloc) = Box::into_non_null(b); + (leaked.as_ptr(), alloc) + } + + #[inline(always)] + pub fn into_non_null(b: Self) -> (NonNull, A) { + // Box is recognized as a "unique pointer" by Stacked Borrows, but internally it is a + // raw pointer for the type system. Turning it directly into a raw pointer would not be + // recognized as "releasing" the unique pointer to permit aliased raw accesses, + // so all raw pointer methods have to go through `Box::leak`. Turning *that* to a raw pointer + // behaves correctly. + let alloc = unsafe { ptr::read(&b.1) }; + (NonNull::from(Box::leak(b)), alloc) + } + + /// Returns a reference to the underlying allocator. + /// + /// Note: this is an associated function, which means that you have + /// to call it as `Box::allocator(&b)` instead of `b.allocator()`. This + /// is so that there is no conflict with a method on the inner type. + #[inline(always)] + pub const fn allocator(b: &Self) -> &A { + &b.1 + } + + /// Consumes and leaks the `Box`, returning a mutable reference, + /// `&'a mut T`. Note that the type `T` must outlive the chosen lifetime + /// `'a`. If the type has only static references, or none at all, then this + /// may be chosen to be `'static`. + /// + /// This function is mainly useful for data that lives for the remainder of + /// the program's life. Dropping the returned reference will cause a memory + /// leak. If this is not acceptable, the reference should first be wrapped + /// with the [`Box::from_raw`] function producing a `Box`. This `Box` can + /// then be dropped which will properly destroy `T` and release the + /// allocated memory. + /// + /// Note: this is an associated function, which means that you have + /// to call it as `Box::leak(b)` instead of `b.leak()`. This + /// is so that there is no conflict with a method on the inner type. + /// + /// # Examples + /// + /// Simple usage: + /// + /// ``` + /// let x = Box::new(41); + /// let static_ref: &'static mut usize = Box::leak(x); + /// *static_ref += 1; + /// assert_eq!(*static_ref, 42); + /// ``` + /// + /// Unsized data: + /// + /// ``` + /// let x = vec![1, 2, 3].into_boxed_slice(); + /// let static_ref = Box::leak(x); + /// static_ref[0] = 4; + /// assert_eq!(*static_ref, [4, 2, 3]); + /// ``` + #[inline(always)] + pub fn leak<'a>(b: Self) -> &'a mut T + where + A: 'a, + { + unsafe { &mut *mem::ManuallyDrop::new(b).0.as_ptr() } + } + + /// Converts a `Box` into a `Pin>`. If `T` does not implement [`Unpin`], then + /// `*boxed` will be pinned in memory and unable to be moved. + /// + /// This conversion does not allocate on the heap and happens in place. + /// + /// This is also available via [`From`]. + /// + /// Constructing and pinning a `Box` with Box::into_pin([Box::new]\(x)) + /// can also be written more concisely using [Box::pin]\(x). + /// This `into_pin` method is useful if you already have a `Box`, or you are + /// constructing a (pinned) `Box` in a different way than with [`Box::new`]. + /// + /// # Notes + /// + /// It's not recommended that crates add an impl like `From> for Pin`, + /// as it'll introduce an ambiguity when calling `Pin::from`. + /// A demonstration of such a poor impl is shown below. + /// + /// ```compile_fail + /// # use std::pin::Pin; + /// struct Foo; // A type defined in this crate. + /// impl From> for Pin { + /// fn from(_: Box<()>) -> Pin { + /// Pin::new(Foo) + /// } + /// } + /// + /// let foo = Box::new(()); + /// let bar = Pin::from(foo); + /// ``` + #[inline(always)] + pub fn into_pin(boxed: Self) -> Pin + where + A: 'static, + { + // It's not possible to move or replace the insides of a `Pin>` + // when `T: !Unpin`, so it's safe to pin it directly without any + // additional requirements. + unsafe { Pin::new_unchecked(boxed) } + } +} + +impl Drop for Box { + #[inline(always)] + fn drop(&mut self) { + let layout = Layout::for_value::(&**self); + unsafe { + ptr::drop_in_place(self.0.as_mut()); + self.1.deallocate(self.0.as_non_null_ptr().cast(), layout); + } + } +} + +#[cfg(not(no_global_oom_handling))] +impl Default for Box { + /// Creates a `Box`, with the `Default` value for T. + #[inline(always)] + fn default() -> Self { + Box::new(T::default()) + } +} + +impl Default for Box<[T], A> { + #[inline(always)] + fn default() -> Self { + let ptr: NonNull<[T]> = NonNull::<[T; 0]>::dangling(); + Box(unsafe { Unique::new_unchecked(ptr.as_ptr()) }, A::default()) + } +} + +impl Default for Box { + #[inline(always)] + fn default() -> Self { + // SAFETY: This is the same as `Unique::cast` but with an unsized `U = str`. + let ptr: Unique = unsafe { + let bytes: NonNull<[u8]> = NonNull::<[u8; 0]>::dangling(); + Unique::new_unchecked(bytes.as_ptr() as *mut str) + }; + Box(ptr, A::default()) + } +} + +#[cfg(not(no_global_oom_handling))] +impl Clone for Box { + /// Returns a new box with a `clone()` of this box's contents. + /// + /// # Examples + /// + /// ``` + /// let x = Box::new(5); + /// let y = x.clone(); + /// + /// // The value is the same + /// assert_eq!(x, y); + /// + /// // But they are unique objects + /// assert_ne!(&*x as *const i32, &*y as *const i32); + /// ``` + #[inline(always)] + fn clone(&self) -> Self { + // Pre-allocate memory to allow writing the cloned value directly. + let mut boxed = Self::new_uninit_in(self.1.clone()); + unsafe { + boxed.write((**self).clone()); + boxed.assume_init() + } + } + + /// Copies `source`'s contents into `self` without creating a new allocation. + /// + /// # Examples + /// + /// ``` + /// let x = Box::new(5); + /// let mut y = Box::new(10); + /// let yp: *const i32 = &*y; + /// + /// y.clone_from(&x); + /// + /// // The value is the same + /// assert_eq!(x, y); + /// + /// // And no allocation occurred + /// assert_eq!(yp, &*y); + /// ``` + #[inline(always)] + fn clone_from(&mut self, source: &Self) { + (**self).clone_from(&(**source)); + } +} + +#[cfg(not(no_global_oom_handling))] +impl Clone for Box { + #[inline(always)] + fn clone(&self) -> Self { + // this makes a copy of the data + let buf: Box<[u8]> = self.as_bytes().into(); + unsafe { Box::from_raw(Box::into_raw(buf) as *mut str) } + } +} + +impl PartialEq for Box { + #[inline(always)] + fn eq(&self, other: &Self) -> bool { + PartialEq::eq(&**self, &**other) + } + #[inline(always)] + fn ne(&self, other: &Self) -> bool { + PartialEq::ne(&**self, &**other) + } +} + +impl PartialOrd for Box { + #[inline(always)] + fn partial_cmp(&self, other: &Self) -> Option { + PartialOrd::partial_cmp(&**self, &**other) + } + #[inline(always)] + fn lt(&self, other: &Self) -> bool { + PartialOrd::lt(&**self, &**other) + } + #[inline(always)] + fn le(&self, other: &Self) -> bool { + PartialOrd::le(&**self, &**other) + } + #[inline(always)] + fn ge(&self, other: &Self) -> bool { + PartialOrd::ge(&**self, &**other) + } + #[inline(always)] + fn gt(&self, other: &Self) -> bool { + PartialOrd::gt(&**self, &**other) + } +} + +impl Ord for Box { + #[inline(always)] + fn cmp(&self, other: &Self) -> Ordering { + Ord::cmp(&**self, &**other) + } +} + +impl Eq for Box {} + +impl Hash for Box { + #[inline(always)] + fn hash(&self, state: &mut H) { + (**self).hash(state); + } +} + +impl Hasher for Box { + #[inline(always)] + fn finish(&self) -> u64 { + (**self).finish() + } + #[inline(always)] + fn write(&mut self, bytes: &[u8]) { + (**self).write(bytes) + } + #[inline(always)] + fn write_u8(&mut self, i: u8) { + (**self).write_u8(i) + } + #[inline(always)] + fn write_u16(&mut self, i: u16) { + (**self).write_u16(i) + } + #[inline(always)] + fn write_u32(&mut self, i: u32) { + (**self).write_u32(i) + } + #[inline(always)] + fn write_u64(&mut self, i: u64) { + (**self).write_u64(i) + } + #[inline(always)] + fn write_u128(&mut self, i: u128) { + (**self).write_u128(i) + } + #[inline(always)] + fn write_usize(&mut self, i: usize) { + (**self).write_usize(i) + } + #[inline(always)] + fn write_i8(&mut self, i: i8) { + (**self).write_i8(i) + } + #[inline(always)] + fn write_i16(&mut self, i: i16) { + (**self).write_i16(i) + } + #[inline(always)] + fn write_i32(&mut self, i: i32) { + (**self).write_i32(i) + } + #[inline(always)] + fn write_i64(&mut self, i: i64) { + (**self).write_i64(i) + } + #[inline(always)] + fn write_i128(&mut self, i: i128) { + (**self).write_i128(i) + } + #[inline(always)] + fn write_isize(&mut self, i: isize) { + (**self).write_isize(i) + } +} + +#[cfg(not(no_global_oom_handling))] +impl From for Box { + /// Converts a `T` into a `Box` + /// + /// The conversion allocates on the heap and moves `t` + /// from the stack into it. + /// + /// # Examples + /// + /// ```rust + /// let x = 5; + /// let boxed = Box::new(5); + /// + /// assert_eq!(Box::from(x), boxed); + /// ``` + #[inline(always)] + fn from(t: T) -> Self { + Box::new(t) + } +} + +impl From> for Pin> +where + A: 'static, +{ + /// Converts a `Box` into a `Pin>`. If `T` does not implement [`Unpin`], then + /// `*boxed` will be pinned in memory and unable to be moved. + /// + /// This conversion does not allocate on the heap and happens in place. + /// + /// This is also available via [`Box::into_pin`]. + /// + /// Constructing and pinning a `Box` with >>::from([Box::new]\(x)) + /// can also be written more concisely using [Box::pin]\(x). + /// This `From` implementation is useful if you already have a `Box`, or you are + /// constructing a (pinned) `Box` in a different way than with [`Box::new`]. + #[inline(always)] + fn from(boxed: Box) -> Self { + Box::into_pin(boxed) + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<&[T]> for Box<[T], A> { + /// Converts a `&[T]` into a `Box<[T]>` + /// + /// This conversion allocates on the heap + /// and performs a copy of `slice` and its contents. + /// + /// # Examples + /// ```rust + /// // create a &[u8] which will be used to create a Box<[u8]> + /// let slice: &[u8] = &[104, 101, 108, 108, 111]; + /// let boxed_slice: Box<[u8]> = Box::from(slice); + /// + /// println!("{boxed_slice:?}"); + /// ``` + #[inline(always)] + fn from(slice: &[T]) -> Box<[T], A> { + let len = slice.len(); + let buf = RawVec::with_capacity_in(len, A::default()); + unsafe { + ptr::copy_nonoverlapping(slice.as_ptr(), buf.ptr(), len); + buf.into_box(slice.len()).assume_init() + } + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<&str> for Box { + /// Converts a `&str` into a `Box` + /// + /// This conversion allocates on the heap + /// and performs a copy of `s`. + /// + /// # Examples + /// + /// ```rust + /// let boxed: Box = Box::from("hello"); + /// println!("{boxed}"); + /// ``` + #[inline(always)] + fn from(s: &str) -> Box { + let (raw, alloc) = Box::into_raw_with_allocator(Box::<[u8], A>::from(s.as_bytes())); + unsafe { Box::from_raw_in(raw as *mut str, alloc) } + } +} + +impl From> for Box<[u8], A> { + /// Converts a `Box` into a `Box<[u8]>` + /// + /// This conversion does not allocate on the heap and happens in place. + /// + /// # Examples + /// ```rust + /// // create a Box which will be used to create a Box<[u8]> + /// let boxed: Box = Box::from("hello"); + /// let boxed_str: Box<[u8]> = Box::from(boxed); + /// + /// // create a &[u8] which will be used to create a Box<[u8]> + /// let slice: &[u8] = &[104, 101, 108, 108, 111]; + /// let boxed_slice = Box::from(slice); + /// + /// assert_eq!(boxed_slice, boxed_str); + /// ``` + #[inline(always)] + fn from(s: Box) -> Self { + let (raw, alloc) = Box::into_raw_with_allocator(s); + unsafe { Box::from_raw_in(raw as *mut [u8], alloc) } + } +} + +impl Box<[T; N], A> { + #[inline(always)] + pub fn slice(b: Self) -> Box<[T], A> { + let (ptr, alloc) = Box::into_raw_with_allocator(b); + unsafe { Box::from_raw_in(ptr, alloc) } + } + + pub fn into_vec(self) -> Vec + where + A: Allocator, + { + unsafe { + let (b, alloc) = Box::into_raw_with_allocator(self); + Vec::from_raw_parts_in(b as *mut T, N, N, alloc) + } + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<[T; N]> for Box<[T]> { + /// Converts a `[T; N]` into a `Box<[T]>` + /// + /// This conversion moves the array to newly heap-allocated memory. + /// + /// # Examples + /// + /// ```rust + /// let boxed: Box<[u8]> = Box::from([4, 2]); + /// println!("{boxed:?}"); + /// ``` + #[inline(always)] + fn from(array: [T; N]) -> Box<[T]> { + Box::slice(Box::new(array)) + } +} + +impl TryFrom> for Box<[T; N], A> { + type Error = Box<[T], A>; + + /// Attempts to convert a `Box<[T]>` into a `Box<[T; N]>`. + /// + /// The conversion occurs in-place and does not require a + /// new memory allocation. + /// + /// # Errors + /// + /// Returns the old `Box<[T]>` in the `Err` variant if + /// `boxed_slice.len()` does not equal `N`. + #[inline(always)] + fn try_from(boxed_slice: Box<[T], A>) -> Result { + if boxed_slice.len() == N { + let (ptr, alloc) = Box::into_raw_with_allocator(boxed_slice); + Ok(unsafe { Box::from_raw_in(ptr as *mut [T; N], alloc) }) + } else { + Err(boxed_slice) + } + } +} + +impl Box { + /// Attempt to downcast the box to a concrete type. + /// + /// # Examples + /// + /// ``` + /// use std::any::Any; + /// + /// fn print_if_string(value: Box) { + /// if let Ok(string) = value.downcast::() { + /// println!("String ({}): {}", string.len(), string); + /// } + /// } + /// + /// let my_string = "Hello World".to_string(); + /// print_if_string(Box::new(my_string)); + /// print_if_string(Box::new(0i8)); + /// ``` + #[inline(always)] + pub fn downcast(self) -> Result, Self> { + if self.is::() { + unsafe { Ok(self.downcast_unchecked::()) } + } else { + Err(self) + } + } + + /// Downcasts the box to a concrete type. + /// + /// For a safe alternative see [`downcast`]. + /// + /// # Examples + /// + /// ``` + /// #![feature(downcast_unchecked)] + /// + /// use std::any::Any; + /// + /// let x: Box = Box::new(1_usize); + /// + /// unsafe { + /// assert_eq!(*x.downcast_unchecked::(), 1); + /// } + /// ``` + /// + /// # Safety + /// + /// The contained value must be of type `T`. Calling this method + /// with the incorrect type is *undefined behavior*. + /// + /// [`downcast`]: Self::downcast + #[inline(always)] + pub unsafe fn downcast_unchecked(self) -> Box { + debug_assert!(self.is::()); + unsafe { + let (raw, alloc): (*mut dyn Any, _) = Box::into_raw_with_allocator(self); + Box::from_raw_in(raw as *mut T, alloc) + } + } +} + +impl Box { + /// Attempt to downcast the box to a concrete type. + /// + /// # Examples + /// + /// ``` + /// use std::any::Any; + /// + /// fn print_if_string(value: Box) { + /// if let Ok(string) = value.downcast::() { + /// println!("String ({}): {}", string.len(), string); + /// } + /// } + /// + /// let my_string = "Hello World".to_string(); + /// print_if_string(Box::new(my_string)); + /// print_if_string(Box::new(0i8)); + /// ``` + #[inline(always)] + pub fn downcast(self) -> Result, Self> { + if self.is::() { + unsafe { Ok(self.downcast_unchecked::()) } + } else { + Err(self) + } + } + + /// Downcasts the box to a concrete type. + /// + /// For a safe alternative see [`downcast`]. + /// + /// # Examples + /// + /// ``` + /// #![feature(downcast_unchecked)] + /// + /// use std::any::Any; + /// + /// let x: Box = Box::new(1_usize); + /// + /// unsafe { + /// assert_eq!(*x.downcast_unchecked::(), 1); + /// } + /// ``` + /// + /// # Safety + /// + /// The contained value must be of type `T`. Calling this method + /// with the incorrect type is *undefined behavior*. + /// + /// [`downcast`]: Self::downcast + #[inline(always)] + pub unsafe fn downcast_unchecked(self) -> Box { + debug_assert!(self.is::()); + unsafe { + let (raw, alloc): (*mut (dyn Any + Send), _) = Box::into_raw_with_allocator(self); + Box::from_raw_in(raw as *mut T, alloc) + } + } +} + +impl Box { + /// Attempt to downcast the box to a concrete type. + /// + /// # Examples + /// + /// ``` + /// use std::any::Any; + /// + /// fn print_if_string(value: Box) { + /// if let Ok(string) = value.downcast::() { + /// println!("String ({}): {}", string.len(), string); + /// } + /// } + /// + /// let my_string = "Hello World".to_string(); + /// print_if_string(Box::new(my_string)); + /// print_if_string(Box::new(0i8)); + /// ``` + #[inline(always)] + pub fn downcast(self) -> Result, Self> { + if self.is::() { + unsafe { Ok(self.downcast_unchecked::()) } + } else { + Err(self) + } + } + + /// Downcasts the box to a concrete type. + /// + /// For a safe alternative see [`downcast`]. + /// + /// # Examples + /// + /// ``` + /// #![feature(downcast_unchecked)] + /// + /// use std::any::Any; + /// + /// let x: Box = Box::new(1_usize); + /// + /// unsafe { + /// assert_eq!(*x.downcast_unchecked::(), 1); + /// } + /// ``` + /// + /// # Safety + /// + /// The contained value must be of type `T`. Calling this method + /// with the incorrect type is *undefined behavior*. + /// + /// [`downcast`]: Self::downcast + #[inline(always)] + pub unsafe fn downcast_unchecked(self) -> Box { + debug_assert!(self.is::()); + unsafe { + let (raw, alloc): (*mut (dyn Any + Send + Sync), _) = + Box::into_raw_with_allocator(self); + Box::from_raw_in(raw as *mut T, alloc) + } + } +} + +impl fmt::Display for Box { + #[inline(always)] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(&**self, f) + } +} + +impl fmt::Debug for Box { + #[inline(always)] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&**self, f) + } +} + +impl fmt::Pointer for Box { + #[inline(always)] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + // It's not possible to extract the inner Uniq directly from the Box, + // instead we cast it to a *const which aliases the Unique + let ptr: *const T = &**self; + fmt::Pointer::fmt(&ptr, f) + } +} + +impl Deref for Box { + type Target = T; + + #[inline(always)] + fn deref(&self) -> &T { + unsafe { self.0.as_ref() } + } +} + +impl DerefMut for Box { + #[inline(always)] + fn deref_mut(&mut self) -> &mut T { + unsafe { self.0.as_mut() } + } +} + +impl Iterator for Box { + type Item = I::Item; + + #[inline(always)] + fn next(&mut self) -> Option { + (**self).next() + } + + #[inline(always)] + fn size_hint(&self) -> (usize, Option) { + (**self).size_hint() + } + + #[inline(always)] + fn nth(&mut self, n: usize) -> Option { + (**self).nth(n) + } + + #[inline(always)] + fn last(self) -> Option { + BoxIter::last(self) + } +} + +trait BoxIter { + type Item; + fn last(self) -> Option; +} + +impl BoxIter for Box { + type Item = I::Item; + + #[inline(always)] + fn last(self) -> Option { + #[inline(always)] + fn some(_: Option, x: T) -> Option { + Some(x) + } + + self.fold(None, some) + } +} + +impl DoubleEndedIterator for Box { + #[inline(always)] + fn next_back(&mut self) -> Option { + (**self).next_back() + } + #[inline(always)] + fn nth_back(&mut self, n: usize) -> Option { + (**self).nth_back(n) + } +} + +impl ExactSizeIterator for Box { + #[inline(always)] + fn len(&self) -> usize { + (**self).len() + } +} + +impl FusedIterator for Box {} + +#[cfg(not(no_global_oom_handling))] +impl FromIterator for Box<[I]> { + #[inline(always)] + fn from_iter>(iter: T) -> Self { + iter.into_iter().collect::>().into_boxed_slice() + } +} + +#[cfg(not(no_global_oom_handling))] +impl Clone for Box<[T], A> { + #[inline(always)] + fn clone(&self) -> Self { + let alloc = Box::allocator(self).clone(); + let mut vec = Vec::with_capacity_in(self.len(), alloc); + vec.extend_from_slice(self); + vec.into_boxed_slice() + } + + #[inline(always)] + fn clone_from(&mut self, other: &Self) { + if self.len() == other.len() { + self.clone_from_slice(other); + } else { + *self = other.clone(); + } + } +} + +impl borrow::Borrow for Box { + #[inline(always)] + fn borrow(&self) -> &T { + self + } +} + +impl borrow::BorrowMut for Box { + #[inline(always)] + fn borrow_mut(&mut self) -> &mut T { + self + } +} + +impl AsRef for Box { + #[inline(always)] + fn as_ref(&self) -> &T { + self + } +} + +impl AsMut for Box { + #[inline(always)] + fn as_mut(&mut self) -> &mut T { + self + } +} + +/* Nota bene + * + * We could have chosen not to add this impl, and instead have written a + * function of Pin> to Pin. Such a function would not be sound, + * because Box implements Unpin even when T does not, as a result of + * this impl. + * + * We chose this API instead of the alternative for a few reasons: + * - Logically, it is helpful to understand pinning in regard to the + * memory region being pointed to. For this reason none of the + * standard library pointer types support projecting through a pin + * (Box is the only pointer type in std for which this would be + * safe.) + * - It is in practice very useful to have Box be unconditionally + * Unpin because of trait objects, for which the structural auto + * trait functionality does not apply (e.g., Box would + * otherwise not be Unpin). + * + * Another type with the same semantics as Box but only a conditional + * implementation of `Unpin` (where `T: Unpin`) would be valid/safe, and + * could have a method to project a Pin from it. + */ +impl Unpin for Box where A: 'static {} + +impl Future for Box +where + A: 'static, +{ + type Output = F::Output; + + #[inline(always)] + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + F::poll(Pin::new(&mut *self), cx) + } +} + +#[cfg(feature = "std")] +mod error { + use std::error::Error; + + use super::Box; + + #[cfg(not(no_global_oom_handling))] + impl<'a, E: Error + 'a> From for Box { + /// Converts a type of [`Error`] into a box of dyn [`Error`]. + /// + /// # Examples + /// + /// ``` + /// use std::error::Error; + /// use std::fmt; + /// use std::mem; + /// + /// #[derive(Debug)] + /// struct AnError; + /// + /// impl fmt::Display for AnError { + /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + /// write!(f, "An error") + /// } + /// } + /// + /// impl Error for AnError {} + /// + /// let an_error = AnError; + /// assert!(0 == mem::size_of_val(&an_error)); + /// let a_boxed_error = Box::::from(an_error); + /// assert!(mem::size_of::>() == mem::size_of_val(&a_boxed_error)) + /// ``` + #[inline(always)] + fn from(err: E) -> Box { + unsafe { Box::from_raw(Box::leak(Box::new(err))) } + } + } + + #[cfg(not(no_global_oom_handling))] + impl<'a, E: Error + Send + Sync + 'a> From for Box { + /// Converts a type of [`Error`] + [`Send`] + [`Sync`] into a box of + /// dyn [`Error`] + [`Send`] + [`Sync`]. + /// + /// # Examples + /// + /// ``` + /// use std::error::Error; + /// use std::fmt; + /// use std::mem; + /// + /// #[derive(Debug)] + /// struct AnError; + /// + /// impl fmt::Display for AnError { + /// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + /// write!(f, "An error") + /// } + /// } + /// + /// impl Error for AnError {} + /// + /// unsafe impl Send for AnError {} + /// + /// unsafe impl Sync for AnError {} + /// + /// let an_error = AnError; + /// assert!(0 == mem::size_of_val(&an_error)); + /// let a_boxed_error = Box::::from(an_error); + /// assert!( + /// mem::size_of::>() == mem::size_of_val(&a_boxed_error)) + /// ``` + #[inline(always)] + fn from(err: E) -> Box { + unsafe { Box::from_raw(Box::leak(Box::new(err))) } + } + } + + impl Error for Box { + #[inline(always)] + fn source(&self) -> Option<&(dyn Error + 'static)> { + Error::source(&**self) + } + } +} + +#[cfg(feature = "std")] +impl std::io::Read for Box { + #[inline] + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + (**self).read(buf) + } + + #[inline] + fn read_to_end(&mut self, buf: &mut std::vec::Vec) -> std::io::Result { + (**self).read_to_end(buf) + } + + #[inline] + fn read_to_string(&mut self, buf: &mut String) -> std::io::Result { + (**self).read_to_string(buf) + } + + #[inline] + fn read_exact(&mut self, buf: &mut [u8]) -> std::io::Result<()> { + (**self).read_exact(buf) + } +} + +#[cfg(feature = "std")] +impl std::io::Write for Box { + #[inline] + fn write(&mut self, buf: &[u8]) -> std::io::Result { + (**self).write(buf) + } + + #[inline] + fn flush(&mut self) -> std::io::Result<()> { + (**self).flush() + } + + #[inline] + fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> { + (**self).write_all(buf) + } + + #[inline] + fn write_fmt(&mut self, fmt: fmt::Arguments<'_>) -> std::io::Result<()> { + (**self).write_fmt(fmt) + } +} + +#[cfg(feature = "std")] +impl std::io::Seek for Box { + #[inline] + fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result { + (**self).seek(pos) + } + + #[inline] + fn stream_position(&mut self) -> std::io::Result { + (**self).stream_position() + } +} + +#[cfg(feature = "std")] +impl std::io::BufRead for Box { + #[inline] + fn fill_buf(&mut self) -> std::io::Result<&[u8]> { + (**self).fill_buf() + } + + #[inline] + fn consume(&mut self, amt: usize) { + (**self).consume(amt) + } + + #[inline] + fn read_until(&mut self, byte: u8, buf: &mut std::vec::Vec) -> std::io::Result { + (**self).read_until(byte, buf) + } + + #[inline] + fn read_line(&mut self, buf: &mut std::string::String) -> std::io::Result { + (**self).read_line(buf) + } +} + +#[cfg(feature = "alloc")] +impl Extend> for alloc_crate::string::String { + fn extend>>(&mut self, iter: I) { + iter.into_iter().for_each(move |s| self.push_str(&s)); + } +} + +#[cfg(not(no_global_oom_handling))] +#[cfg(feature = "std")] +impl Clone for Box { + #[inline] + fn clone(&self) -> Self { + (**self).into() + } +} + +#[cfg(not(no_global_oom_handling))] +#[cfg(feature = "std")] +impl From<&std::ffi::CStr> for Box { + /// Converts a `&CStr` into a `Box`, + /// by copying the contents into a newly allocated [`Box`]. + fn from(s: &std::ffi::CStr) -> Box { + let boxed: Box<[u8]> = Box::from(s.to_bytes_with_nul()); + unsafe { Box::from_raw(Box::into_raw(boxed) as *mut std::ffi::CStr) } + } +} + +#[cfg(not(no_global_oom_handling))] +#[cfg(feature = "fresh-rust")] +impl Clone for Box { + #[inline] + fn clone(&self) -> Self { + (**self).into() + } +} + +#[cfg(not(no_global_oom_handling))] +#[cfg(feature = "fresh-rust")] +impl From<&core::ffi::CStr> for Box { + /// Converts a `&CStr` into a `Box`, + /// by copying the contents into a newly allocated [`Box`]. + fn from(s: &core::ffi::CStr) -> Box { + let boxed: Box<[u8]> = Box::from(s.to_bytes_with_nul()); + unsafe { Box::from_raw(Box::into_raw(boxed) as *mut core::ffi::CStr) } + } +} + +#[cfg(feature = "serde")] +impl serde::Serialize for Box +where + T: serde::Serialize, + A: Allocator, +{ + #[inline(always)] + fn serialize(&self, serializer: S) -> Result { + (**self).serialize(serializer) + } +} + +#[cfg(feature = "serde")] +impl<'de, T, A> serde::Deserialize<'de> for Box +where + T: serde::Deserialize<'de>, + A: Allocator + Default, +{ + #[inline(always)] + fn deserialize>(deserializer: D) -> Result { + let value = T::deserialize(deserializer)?; + Ok(Box::new_in(value, A::default())) + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/macros.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/macros.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/macros.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/macros.rs 2025-10-09 15:35:45.000000000 +0000 @@ -1,87 +1,83 @@ -/// Creates a [`Vec`] containing the arguments. -/// -/// `vec!` allows `Vec`s to be defined with the same syntax as array expressions. -/// There are two forms of this macro: -/// -/// - Create a [`Vec`] containing a given list of elements: -/// -/// ``` -/// use allocator_api2::vec; -/// let v = vec![1, 2, 3]; -/// assert_eq!(v[0], 1); -/// assert_eq!(v[1], 2); -/// assert_eq!(v[2], 3); -/// ``` -/// -/// -/// ``` -/// use allocator_api2::{vec, alloc::Global}; -/// let v = vec![in Global; 1, 2, 3]; -/// assert_eq!(v[0], 1); -/// assert_eq!(v[1], 2); -/// assert_eq!(v[2], 3); -/// ``` -/// -/// - Create a [`Vec`] from a given element and size: -/// -/// ``` -/// use allocator_api2::vec; -/// let v = vec![1; 3]; -/// assert_eq!(v, [1, 1, 1]); -/// ``` -/// -/// ``` -/// use allocator_api2::{vec, alloc::Global}; -/// let v = vec![in Global; 1; 3]; -/// assert_eq!(v, [1, 1, 1]); -/// ``` -/// -/// Note that unlike array expressions this syntax supports all elements -/// which implement [`Clone`] and the number of elements doesn't have to be -/// a constant. -/// -/// This will use `clone` to duplicate an expression, so one should be careful -/// using this with types having a nonstandard `Clone` implementation. For -/// example, `vec![Rc::new(1); 5]` will create a vector of five references -/// to the same boxed integer value, not five references pointing to independently -/// boxed integers. -/// -/// Also, note that `vec![expr; 0]` is allowed, and produces an empty vector. -/// This will still evaluate `expr`, however, and immediately drop the resulting value, so -/// be mindful of side effects. -/// -/// [`Vec`]: crate::vec::Vec -#[cfg(not(no_global_oom_handling))] -#[macro_export] -macro_rules! vec { - (in $alloc:expr $(;)?) => ( - $crate::vec::Vec::new_in($alloc) - ); - (in $alloc:expr; $elem:expr; $n:expr) => ( - $crate::vec::from_elem_in($elem, $n, $alloc) - ); -/* - (in $alloc:expr; $($x:expr),+ $(,)?) => ( - $crate::boxed::Box::<[_]>::into_vec( - $crate::boxed::Box::slice( - $crate::boxed::Box::new_in([$($x),+], $alloc) - ) - ) - ); -*/ - () => ( - $crate::vec::Vec::new() - ); - ($elem:expr; $n:expr) => ( - $crate::vec::from_elem($elem, $n) - ); -/* - ($($x:expr),+ $(,)?) => ( - $crate::boxed::Box::<[_]>::into_vec( - $crate::boxed::Box::slice( - $crate::boxed::Box::new([$($x),+]) - ) - ) - ); -*/ -} +/// Creates a [`Vec`] containing the arguments. +/// +/// `vec!` allows `Vec`s to be defined with the same syntax as array expressions. +/// There are two forms of this macro: +/// +/// - Create a [`Vec`] containing a given list of elements: +/// +/// ``` +/// use allocator_api2::vec; +/// let v = vec![1, 2, 3]; +/// assert_eq!(v[0], 1); +/// assert_eq!(v[1], 2); +/// assert_eq!(v[2], 3); +/// ``` +/// +/// +/// ``` +/// use allocator_api2::{vec, alloc::Global}; +/// let v = vec![in Global; 1, 2, 3]; +/// assert_eq!(v[0], 1); +/// assert_eq!(v[1], 2); +/// assert_eq!(v[2], 3); +/// ``` +/// +/// - Create a [`Vec`] from a given element and size: +/// +/// ``` +/// use allocator_api2::vec; +/// let v = vec![1; 3]; +/// assert_eq!(v, [1, 1, 1]); +/// ``` +/// +/// ``` +/// use allocator_api2::{vec, alloc::Global}; +/// let v = vec![in Global; 1; 3]; +/// assert_eq!(v, [1, 1, 1]); +/// ``` +/// +/// Note that unlike array expressions this syntax supports all elements +/// which implement [`Clone`] and the number of elements doesn't have to be +/// a constant. +/// +/// This will use `clone` to duplicate an expression, so one should be careful +/// using this with types having a nonstandard `Clone` implementation. For +/// example, `vec![Rc::new(1); 5]` will create a vector of five references +/// to the same boxed integer value, not five references pointing to independently +/// boxed integers. +/// +/// Also, note that `vec![expr; 0]` is allowed, and produces an empty vector. +/// This will still evaluate `expr`, however, and immediately drop the resulting value, so +/// be mindful of side effects. +/// +/// [`Vec`]: crate::vec::Vec +#[cfg(not(no_global_oom_handling))] +#[macro_export] +macro_rules! vec { + (in $alloc:expr $(;)?) => ( + $crate::vec::Vec::new_in($alloc) + ); + (in $alloc:expr; $elem:expr; $n:expr) => ( + $crate::vec::from_elem_in($elem, $n, $alloc) + ); + (in $alloc:expr; $($x:expr),+ $(,)?) => ( + $crate::boxed::Box::<[_]>::into_vec( + $crate::boxed::Box::slice( + $crate::boxed::Box::new_in([$($x),+], $alloc) + ) + ) + ); + () => ( + $crate::vec::Vec::new() + ); + ($elem:expr; $n:expr) => ( + $crate::vec::from_elem($elem, $n) + ); + ($($x:expr),+ $(,)?) => ( + $crate::boxed::Box::<[_]>::into_vec( + $crate::boxed::Box::slice( + $crate::boxed::Box::new([$($x),+]) + ) + ) + ); +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/mod.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/mod.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/mod.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/mod.rs 2025-10-09 15:35:45.000000000 +0000 @@ -1,62 +1,105 @@ -#![deny(unsafe_op_in_unsafe_fn)] -#![allow(clippy::needless_doctest_main, clippy::partialeq_ne_impl)] - -#[cfg(feature = "alloc")] -pub use self::slice::SliceExt; - -pub mod alloc; - -#[cfg(feature = "alloc")] -pub(crate) mod boxed; - -#[cfg(feature = "alloc")] -mod raw_vec; - -#[cfg(feature = "alloc")] -pub mod vec; - -#[cfg(feature = "alloc")] -mod macros; - -#[cfg(feature = "alloc")] -mod slice; - -#[cfg(feature = "alloc")] -#[track_caller] -#[inline(always)] -#[cfg(debug_assertions)] -unsafe fn assume(v: bool) { - if !v { - core::unreachable!() - } -} - -#[cfg(feature = "alloc")] -#[track_caller] -#[inline(always)] -#[cfg(not(debug_assertions))] -unsafe fn assume(v: bool) { - if !v { - unsafe { - core::hint::unreachable_unchecked(); - } - } -} - -#[cfg(feature = "alloc")] -#[inline(always)] -fn addr(x: *const T) -> usize { - #[allow(clippy::useless_transmute, clippy::transmutes_expressible_as_ptr_casts)] - unsafe { - core::mem::transmute(x) - } -} - -#[cfg(feature = "alloc")] -#[inline(always)] -fn invalid_mut(addr: usize) -> *mut T { - #[allow(clippy::useless_transmute, clippy::transmutes_expressible_as_ptr_casts)] - unsafe { - core::mem::transmute(addr) - } -} +#![deny(unsafe_op_in_unsafe_fn)] +#![allow(clippy::needless_doctest_main, clippy::partialeq_ne_impl)] + +#[cfg(feature = "alloc")] +pub use self::slice::SliceExt; + +pub mod alloc; + +#[cfg(feature = "alloc")] +pub mod boxed; + +#[cfg(feature = "alloc")] +mod raw_vec; + +#[cfg(feature = "alloc")] +pub mod vec; + +#[cfg(feature = "alloc")] +mod macros; + +#[cfg(feature = "alloc")] +mod slice; + +#[cfg(feature = "alloc")] +mod unique; + +/// Allows turning a [`Box`][boxed::Box] into a [`Box`][boxed::Box] where `T` can be unsizing-coerced into a `U`. +/// +/// This is the only way to create an `allocator_api2::boxed::Box` of an unsized type on stable. +/// +/// With the standard library's `alloc::boxed::Box`, this is done automatically using the unstable unsize traits, but this crate's Box +/// can't take advantage of that machinery on stable. So, we need to use type inference and the fact that you *can* +/// still coerce the inner pointer of a box to get the compiler to help us unsize it using this macro. +/// +/// # Example +/// +/// ``` +/// use allocator_api2::unsize_box; +/// use allocator_api2::boxed::Box; +/// use core::any::Any; +/// +/// let sized_box: Box = Box::new(0); +/// let unsized_box: Box = unsize_box!(sized_box); +/// ``` +#[macro_export] +#[cfg(feature = "alloc")] +macro_rules! unsize_box {( $boxed:expr $(,)? ) => ({ + let (ptr, allocator) = ::allocator_api2::boxed::Box::into_raw_with_allocator($boxed); + // we don't want to allow casting to arbitrary type U, but we do want to allow unsize coercion to happen. + // that's exactly what's happening here -- this is *not* a pointer cast ptr as *mut _, but the compiler + // *will* allow an unsizing coercion to happen into the `ptr` place, if one is available. And we use _ so that the user can + // fill in what they want the unsized type to be by annotating the type of the variable this macro will + // assign its result to. + let ptr: *mut _ = ptr; + // SAFETY: see above for why ptr's type can only be something that can be safely coerced. + // also, ptr just came from a properly allocated box in the same allocator. + unsafe { + ::allocator_api2::boxed::Box::from_raw_in(ptr, allocator) + } +})} + +#[cfg(feature = "alloc")] +pub mod collections { + pub use super::raw_vec::{TryReserveError, TryReserveErrorKind}; +} + +#[cfg(feature = "alloc")] +#[track_caller] +#[inline(always)] +#[cfg(debug_assertions)] +unsafe fn assume(v: bool) { + if !v { + core::unreachable!() + } +} + +#[cfg(feature = "alloc")] +#[track_caller] +#[inline(always)] +#[cfg(not(debug_assertions))] +unsafe fn assume(v: bool) { + if !v { + unsafe { + core::hint::unreachable_unchecked(); + } + } +} + +#[cfg(feature = "alloc")] +#[inline(always)] +fn addr(x: *const T) -> usize { + #[allow(clippy::useless_transmute, clippy::transmutes_expressible_as_ptr_casts)] + unsafe { + core::mem::transmute(x) + } +} + +#[cfg(feature = "alloc")] +#[inline(always)] +fn invalid_mut(addr: usize) -> *mut T { + #[allow(clippy::useless_transmute, clippy::transmutes_expressible_as_ptr_casts)] + unsafe { + core::mem::transmute(addr) + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/raw_vec.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/raw_vec.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/raw_vec.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/raw_vec.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,642 +1,642 @@ -use core::alloc::LayoutError; -use core::mem::{self, ManuallyDrop, MaybeUninit}; -use core::ops::Drop; -use core::ptr::{self, NonNull}; -use core::slice; -use core::{cmp, fmt}; - -use super::{ - alloc::{Allocator, Global, Layout}, - assume, - boxed::Box, -}; - -#[cfg(not(no_global_oom_handling))] -use super::alloc::handle_alloc_error; - -/// The error type for `try_reserve` methods. -#[derive(Clone, PartialEq, Eq, Debug)] -pub struct TryReserveError { - kind: TryReserveErrorKind, -} - -impl TryReserveError { - /// Details about the allocation that caused the error - pub fn kind(&self) -> TryReserveErrorKind { - self.kind.clone() - } -} - -/// Details of the allocation that caused a `TryReserveError` -#[derive(Clone, PartialEq, Eq, Debug)] -pub enum TryReserveErrorKind { - /// Error due to the computed capacity exceeding the collection's maximum - /// (usually `isize::MAX` bytes). - CapacityOverflow, - - /// The memory allocator returned an error - AllocError { - /// The layout of allocation request that failed - layout: Layout, - - #[doc(hidden)] - non_exhaustive: (), - }, -} - -use TryReserveErrorKind::*; - -impl From for TryReserveError { - #[inline(always)] - fn from(kind: TryReserveErrorKind) -> Self { - Self { kind } - } -} - -impl From for TryReserveErrorKind { - /// Always evaluates to [`TryReserveErrorKind::CapacityOverflow`]. - #[inline(always)] - fn from(_: LayoutError) -> Self { - TryReserveErrorKind::CapacityOverflow - } -} - -impl fmt::Display for TryReserveError { - fn fmt( - &self, - fmt: &mut core::fmt::Formatter<'_>, - ) -> core::result::Result<(), core::fmt::Error> { - fmt.write_str("memory allocation failed")?; - let reason = match self.kind { - TryReserveErrorKind::CapacityOverflow => { - " because the computed capacity exceeded the collection's maximum" - } - TryReserveErrorKind::AllocError { .. } => { - " because the memory allocator returned an error" - } - }; - fmt.write_str(reason) - } -} - -#[cfg(feature = "std")] -impl std::error::Error for TryReserveError {} - -#[cfg(not(no_global_oom_handling))] -enum AllocInit { - /// The contents of the new memory are uninitialized. - Uninitialized, - /// The new memory is guaranteed to be zeroed. - Zeroed, -} - -/// A low-level utility for more ergonomically allocating, reallocating, and deallocating -/// a buffer of memory on the heap without having to worry about all the corner cases -/// involved. This type is excellent for building your own data structures like Vec and VecDeque. -/// In particular: -/// -/// * Produces `NonNull::dangling()` on zero-sized types. -/// * Produces `NonNull::dangling()` on zero-length allocations. -/// * Avoids freeing `NonNull::dangling()`. -/// * Catches all overflows in capacity computations (promotes them to "capacity overflow" panics). -/// * Guards against 32-bit systems allocating more than isize::MAX bytes. -/// * Guards against overflowing your length. -/// * Calls `handle_alloc_error` for fallible allocations. -/// * Contains a `ptr::NonNull` and thus endows the user with all related benefits. -/// * Uses the excess returned from the allocator to use the largest available capacity. -/// -/// This type does not in anyway inspect the memory that it manages. When dropped it *will* -/// free its memory, but it *won't* try to drop its contents. It is up to the user of `RawVec` -/// to handle the actual things *stored* inside of a `RawVec`. -/// -/// Note that the excess of a zero-sized types is always infinite, so `capacity()` always returns -/// `usize::MAX`. This means that you need to be careful when round-tripping this type with a -/// `Box<[T]>`, since `capacity()` won't yield the length. -#[allow(missing_debug_implementations)] -pub(crate) struct RawVec { - ptr: NonNull, - cap: usize, - alloc: A, -} - -// Safety: RawVec owns both T and A, so sending is safe if -// sending is safe for T and A. -unsafe impl Send for RawVec -where - T: Send, - A: Send, -{ -} - -// Safety: RawVec owns both T and A, so sharing is safe if -// sharing is safe for T and A. -unsafe impl Sync for RawVec -where - T: Sync, - A: Sync, -{ -} - -impl RawVec { - /// Creates the biggest possible `RawVec` (on the system heap) - /// without allocating. If `T` has positive size, then this makes a - /// `RawVec` with capacity `0`. If `T` is zero-sized, then it makes a - /// `RawVec` with capacity `usize::MAX`. Useful for implementing - /// delayed allocation. - #[must_use] - pub const fn new() -> Self { - Self::new_in(Global) - } - - /// Creates a `RawVec` (on the system heap) with exactly the - /// capacity and alignment requirements for a `[T; capacity]`. This is - /// equivalent to calling `RawVec::new` when `capacity` is `0` or `T` is - /// zero-sized. Note that if `T` is zero-sized this means you will - /// *not* get a `RawVec` with the requested capacity. - /// - /// # Panics - /// - /// Panics if the requested capacity exceeds `isize::MAX` bytes. - /// - /// # Aborts - /// - /// Aborts on OOM. - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn with_capacity(capacity: usize) -> Self { - Self::with_capacity_in(capacity, Global) - } - - /// Like `with_capacity`, but guarantees the buffer is zeroed. - #[cfg(not(no_global_oom_handling))] - #[must_use] - #[inline(always)] - pub fn with_capacity_zeroed(capacity: usize) -> Self { - Self::with_capacity_zeroed_in(capacity, Global) - } -} - -impl RawVec { - // Tiny Vecs are dumb. Skip to: - // - 8 if the element size is 1, because any heap allocators is likely - // to round up a request of less than 8 bytes to at least 8 bytes. - // - 4 if elements are moderate-sized (<= 1 KiB). - // - 1 otherwise, to avoid wasting too much space for very short Vecs. - pub(crate) const MIN_NON_ZERO_CAP: usize = if mem::size_of::() == 1 { - 8 - } else if mem::size_of::() <= 1024 { - 4 - } else { - 1 - }; - - /// Like `new`, but parameterized over the choice of allocator for - /// the returned `RawVec`. - #[inline(always)] - pub const fn new_in(alloc: A) -> Self { - // `cap: 0` means "unallocated". zero-sized types are ignored. - Self { - ptr: NonNull::dangling(), - cap: 0, - alloc, - } - } - - /// Like `with_capacity`, but parameterized over the choice of - /// allocator for the returned `RawVec`. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn with_capacity_in(capacity: usize, alloc: A) -> Self { - Self::allocate_in(capacity, AllocInit::Uninitialized, alloc) - } - - /// Like `with_capacity_zeroed`, but parameterized over the choice - /// of allocator for the returned `RawVec`. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn with_capacity_zeroed_in(capacity: usize, alloc: A) -> Self { - Self::allocate_in(capacity, AllocInit::Zeroed, alloc) - } - - /// Converts the entire buffer into `Box<[MaybeUninit]>` with the specified `len`. - /// - /// Note that this will correctly reconstitute any `cap` changes - /// that may have been performed. (See description of type for details.) - /// - /// # Safety - /// - /// * `len` must be greater than or equal to the most recently requested capacity, and - /// * `len` must be less than or equal to `self.capacity()`. - /// - /// Note, that the requested capacity and `self.capacity()` could differ, as - /// an allocator could overallocate and return a greater memory block than requested. - #[inline(always)] - pub(crate) unsafe fn into_box(self, len: usize) -> Box<[MaybeUninit], A> { - // Sanity-check one half of the safety requirement (we cannot check the other half). - debug_assert!( - len <= self.capacity(), - "`len` must be smaller than or equal to `self.capacity()`" - ); - - let me = ManuallyDrop::new(self); - unsafe { - let slice = slice::from_raw_parts_mut(me.ptr() as *mut MaybeUninit, len); - Box::from_raw_in(slice, ptr::read(&me.alloc)) - } - } - - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - fn allocate_in(capacity: usize, init: AllocInit, alloc: A) -> Self { - // Don't allocate here because `Drop` will not deallocate when `capacity` is 0. - if mem::size_of::() == 0 || capacity == 0 { - Self::new_in(alloc) - } else { - // We avoid `unwrap_or_else` here because it bloats the amount of - // LLVM IR generated. - let layout = match Layout::array::(capacity) { - Ok(layout) => layout, - Err(_) => capacity_overflow(), - }; - match alloc_guard(layout.size()) { - Ok(_) => {} - Err(_) => capacity_overflow(), - } - let result = match init { - AllocInit::Uninitialized => alloc.allocate(layout), - AllocInit::Zeroed => alloc.allocate_zeroed(layout), - }; - let ptr = match result { - Ok(ptr) => ptr, - Err(_) => handle_alloc_error(layout), - }; - - // Allocators currently return a `NonNull<[u8]>` whose length - // matches the size requested. If that ever changes, the capacity - // here should change to `ptr.len() / mem::size_of::()`. - Self { - ptr: unsafe { NonNull::new_unchecked(ptr.cast().as_ptr()) }, - cap: capacity, - alloc, - } - } - } - - /// Reconstitutes a `RawVec` from a pointer, capacity, and allocator. - /// - /// # Safety - /// - /// The `ptr` must be allocated (via the given allocator `alloc`), and with the given - /// `capacity`. - /// The `capacity` cannot exceed `isize::MAX` for sized types. (only a concern on 32-bit - /// systems). ZST vectors may have a capacity up to `usize::MAX`. - /// If the `ptr` and `capacity` come from a `RawVec` created via `alloc`, then this is - /// guaranteed. - #[inline(always)] - pub unsafe fn from_raw_parts_in(ptr: *mut T, capacity: usize, alloc: A) -> Self { - Self { - ptr: unsafe { NonNull::new_unchecked(ptr) }, - cap: capacity, - alloc, - } - } - - /// Gets a raw pointer to the start of the allocation. Note that this is - /// `NonNull::dangling()` if `capacity == 0` or `T` is zero-sized. In the former case, you must - /// be careful. - #[inline(always)] - pub fn ptr(&self) -> *mut T { - self.ptr.as_ptr() - } - - /// Gets the capacity of the allocation. - /// - /// This will always be `usize::MAX` if `T` is zero-sized. - #[inline(always)] - pub fn capacity(&self) -> usize { - if mem::size_of::() == 0 { - usize::MAX - } else { - self.cap - } - } - - /// Returns a shared reference to the allocator backing this `RawVec`. - #[inline(always)] - pub fn allocator(&self) -> &A { - &self.alloc - } - - #[inline(always)] - fn current_memory(&self) -> Option<(NonNull, Layout)> { - if mem::size_of::() == 0 || self.cap == 0 { - None - } else { - // We have an allocated chunk of memory, so we can bypass runtime - // checks to get our current layout. - unsafe { - let layout = Layout::array::(self.cap).unwrap_unchecked(); - Some((self.ptr.cast(), layout)) - } - } - } - - /// Ensures that the buffer contains at least enough space to hold `len + - /// additional` elements. If it doesn't already have enough capacity, will - /// reallocate enough space plus comfortable slack space to get amortized - /// *O*(1) behavior. Will limit this behavior if it would needlessly cause - /// itself to panic. - /// - /// If `len` exceeds `self.capacity()`, this may fail to actually allocate - /// the requested space. This is not really unsafe, but the unsafe - /// code *you* write that relies on the behavior of this function may break. - /// - /// This is ideal for implementing a bulk-push operation like `extend`. - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Aborts - /// - /// Aborts on OOM. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn reserve(&mut self, len: usize, additional: usize) { - // Callers expect this function to be very cheap when there is already sufficient capacity. - // Therefore, we move all the resizing and error-handling logic from grow_amortized and - // handle_reserve behind a call, while making sure that this function is likely to be - // inlined as just a comparison and a call if the comparison fails. - #[cold] - #[inline(always)] - fn do_reserve_and_handle( - slf: &mut RawVec, - len: usize, - additional: usize, - ) { - handle_reserve(slf.grow_amortized(len, additional)); - } - - if self.needs_to_grow(len, additional) { - do_reserve_and_handle(self, len, additional); - } - } - - /// A specialized version of `reserve()` used only by the hot and - /// oft-instantiated `Vec::push()`, which does its own capacity check. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn reserve_for_push(&mut self, len: usize) { - handle_reserve(self.grow_amortized(len, 1)); - } - - /// The same as `reserve`, but returns on errors instead of panicking or aborting. - #[inline(always)] - pub fn try_reserve(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> { - if self.needs_to_grow(len, additional) { - self.grow_amortized(len, additional) - } else { - Ok(()) - } - } - - /// Ensures that the buffer contains at least enough space to hold `len + - /// additional` elements. If it doesn't already, will reallocate the - /// minimum possible amount of memory necessary. Generally this will be - /// exactly the amount of memory necessary, but in principle the allocator - /// is free to give back more than we asked for. - /// - /// If `len` exceeds `self.capacity()`, this may fail to actually allocate - /// the requested space. This is not really unsafe, but the unsafe code - /// *you* write that relies on the behavior of this function may break. - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Aborts - /// - /// Aborts on OOM. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn reserve_exact(&mut self, len: usize, additional: usize) { - handle_reserve(self.try_reserve_exact(len, additional)); - } - - /// The same as `reserve_exact`, but returns on errors instead of panicking or aborting. - #[inline(always)] - pub fn try_reserve_exact( - &mut self, - len: usize, - additional: usize, - ) -> Result<(), TryReserveError> { - if self.needs_to_grow(len, additional) { - self.grow_exact(len, additional) - } else { - Ok(()) - } - } - - /// Shrinks the buffer down to the specified capacity. If the given amount - /// is 0, actually completely deallocates. - /// - /// # Panics - /// - /// Panics if the given amount is *larger* than the current capacity. - /// - /// # Aborts - /// - /// Aborts on OOM. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn shrink_to_fit(&mut self, cap: usize) { - handle_reserve(self.shrink(cap)); - } -} - -impl RawVec { - /// Returns if the buffer needs to grow to fulfill the needed extra capacity. - /// Mainly used to make inlining reserve-calls possible without inlining `grow`. - #[inline(always)] - fn needs_to_grow(&self, len: usize, additional: usize) -> bool { - additional > self.capacity().wrapping_sub(len) - } - - #[inline(always)] - fn set_ptr_and_cap(&mut self, ptr: NonNull<[u8]>, cap: usize) { - // Allocators currently return a `NonNull<[u8]>` whose length matches - // the size requested. If that ever changes, the capacity here should - // change to `ptr.len() / mem::size_of::()`. - self.ptr = unsafe { NonNull::new_unchecked(ptr.cast().as_ptr()) }; - self.cap = cap; - } - - // This method is usually instantiated many times. So we want it to be as - // small as possible, to improve compile times. But we also want as much of - // its contents to be statically computable as possible, to make the - // generated code run faster. Therefore, this method is carefully written - // so that all of the code that depends on `T` is within it, while as much - // of the code that doesn't depend on `T` as possible is in functions that - // are non-generic over `T`. - #[inline(always)] - fn grow_amortized(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> { - // This is ensured by the calling contexts. - debug_assert!(additional > 0); - - if mem::size_of::() == 0 { - // Since we return a capacity of `usize::MAX` when `elem_size` is - // 0, getting to here necessarily means the `RawVec` is overfull. - return Err(CapacityOverflow.into()); - } - - // Nothing we can really do about these checks, sadly. - let required_cap = len.checked_add(additional).ok_or(CapacityOverflow)?; - - // This guarantees exponential growth. The doubling cannot overflow - // because `cap <= isize::MAX` and the type of `cap` is `usize`. - let cap = cmp::max(self.cap * 2, required_cap); - let cap = cmp::max(Self::MIN_NON_ZERO_CAP, cap); - - let new_layout = Layout::array::(cap); - - // `finish_grow` is non-generic over `T`. - let ptr = finish_grow(new_layout, self.current_memory(), &mut self.alloc)?; - self.set_ptr_and_cap(ptr, cap); - Ok(()) - } - - // The constraints on this method are much the same as those on - // `grow_amortized`, but this method is usually instantiated less often so - // it's less critical. - #[inline(always)] - fn grow_exact(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> { - if mem::size_of::() == 0 { - // Since we return a capacity of `usize::MAX` when the type size is - // 0, getting to here necessarily means the `RawVec` is overfull. - return Err(CapacityOverflow.into()); - } - - let cap = len.checked_add(additional).ok_or(CapacityOverflow)?; - let new_layout = Layout::array::(cap); - - // `finish_grow` is non-generic over `T`. - let ptr = finish_grow(new_layout, self.current_memory(), &mut self.alloc)?; - self.set_ptr_and_cap(ptr, cap); - Ok(()) - } - - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - fn shrink(&mut self, cap: usize) -> Result<(), TryReserveError> { - assert!( - cap <= self.capacity(), - "Tried to shrink to a larger capacity" - ); - - let (ptr, layout) = if let Some(mem) = self.current_memory() { - mem - } else { - return Ok(()); - }; - - let ptr = unsafe { - // `Layout::array` cannot overflow here because it would have - // overflowed earlier when capacity was larger. - let new_layout = Layout::array::(cap).unwrap_unchecked(); - self.alloc - .shrink(ptr, layout, new_layout) - .map_err(|_| AllocError { - layout: new_layout, - non_exhaustive: (), - })? - }; - self.set_ptr_and_cap(ptr, cap); - Ok(()) - } -} - -// This function is outside `RawVec` to minimize compile times. See the comment -// above `RawVec::grow_amortized` for details. (The `A` parameter isn't -// significant, because the number of different `A` types seen in practice is -// much smaller than the number of `T` types.) -#[inline(always)] -fn finish_grow( - new_layout: Result, - current_memory: Option<(NonNull, Layout)>, - alloc: &mut A, -) -> Result, TryReserveError> -where - A: Allocator, -{ - // Check for the error here to minimize the size of `RawVec::grow_*`. - let new_layout = new_layout.map_err(|_| CapacityOverflow)?; - - alloc_guard(new_layout.size())?; - - let memory = if let Some((ptr, old_layout)) = current_memory { - debug_assert_eq!(old_layout.align(), new_layout.align()); - unsafe { - // The allocator checks for alignment equality - assume(old_layout.align() == new_layout.align()); - alloc.grow(ptr, old_layout, new_layout) - } - } else { - alloc.allocate(new_layout) - }; - - memory.map_err(|_| { - AllocError { - layout: new_layout, - non_exhaustive: (), - } - .into() - }) -} - -impl Drop for RawVec { - /// Frees the memory owned by the `RawVec` *without* trying to drop its contents. - #[inline(always)] - fn drop(&mut self) { - if let Some((ptr, layout)) = self.current_memory() { - unsafe { self.alloc.deallocate(ptr, layout) } - } - } -} - -// Central function for reserve error handling. -#[cfg(not(no_global_oom_handling))] -#[inline(always)] -fn handle_reserve(result: Result<(), TryReserveError>) { - match result.map_err(|e| e.kind()) { - Err(CapacityOverflow) => capacity_overflow(), - Err(AllocError { layout, .. }) => handle_alloc_error(layout), - Ok(()) => { /* yay */ } - } -} - -// We need to guarantee the following: -// * We don't ever allocate `> isize::MAX` byte-size objects. -// * We don't overflow `usize::MAX` and actually allocate too little. -// -// On 64-bit we just need to check for overflow since trying to allocate -// `> isize::MAX` bytes will surely fail. On 32-bit and 16-bit we need to add -// an extra guard for this in case we're running on a platform which can use -// all 4GB in user-space, e.g., PAE or x32. - -#[inline(always)] -fn alloc_guard(alloc_size: usize) -> Result<(), TryReserveError> { - if usize::BITS < 64 && alloc_size > isize::MAX as usize { - Err(CapacityOverflow.into()) - } else { - Ok(()) - } -} - -// One central function responsible for reporting capacity overflows. This'll -// ensure that the code generation related to these panics is minimal as there's -// only one location which panics rather than a bunch throughout the module. -#[cfg(not(no_global_oom_handling))] -fn capacity_overflow() -> ! { - panic!("capacity overflow"); -} +use core::alloc::LayoutError; +use core::mem::{self, ManuallyDrop, MaybeUninit}; +use core::ops::Drop; +use core::ptr::{self, NonNull}; +use core::slice; +use core::{cmp, fmt}; + +use super::{ + alloc::{Allocator, Global, Layout}, + assume, + boxed::Box, +}; + +#[cfg(not(no_global_oom_handling))] +use super::alloc::handle_alloc_error; + +/// The error type for `try_reserve` methods. +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct TryReserveError { + kind: TryReserveErrorKind, +} + +impl TryReserveError { + /// Details about the allocation that caused the error + pub fn kind(&self) -> TryReserveErrorKind { + self.kind.clone() + } +} + +/// Details of the allocation that caused a `TryReserveError` +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum TryReserveErrorKind { + /// Error due to the computed capacity exceeding the collection's maximum + /// (usually `isize::MAX` bytes). + CapacityOverflow, + + /// The memory allocator returned an error + AllocError { + /// The layout of allocation request that failed + layout: Layout, + + #[doc(hidden)] + non_exhaustive: (), + }, +} + +use TryReserveErrorKind::*; + +impl From for TryReserveError { + #[inline(always)] + fn from(kind: TryReserveErrorKind) -> Self { + Self { kind } + } +} + +impl From for TryReserveErrorKind { + /// Always evaluates to [`TryReserveErrorKind::CapacityOverflow`]. + #[inline(always)] + fn from(_: LayoutError) -> Self { + TryReserveErrorKind::CapacityOverflow + } +} + +impl fmt::Display for TryReserveError { + fn fmt( + &self, + fmt: &mut core::fmt::Formatter<'_>, + ) -> core::result::Result<(), core::fmt::Error> { + fmt.write_str("memory allocation failed")?; + let reason = match self.kind { + TryReserveErrorKind::CapacityOverflow => { + " because the computed capacity exceeded the collection's maximum" + } + TryReserveErrorKind::AllocError { .. } => { + " because the memory allocator returned an error" + } + }; + fmt.write_str(reason) + } +} + +#[cfg(feature = "std")] +impl std::error::Error for TryReserveError {} + +#[cfg(not(no_global_oom_handling))] +enum AllocInit { + /// The contents of the new memory are uninitialized. + Uninitialized, + /// The new memory is guaranteed to be zeroed. + Zeroed, +} + +/// A low-level utility for more ergonomically allocating, reallocating, and deallocating +/// a buffer of memory on the heap without having to worry about all the corner cases +/// involved. This type is excellent for building your own data structures like Vec and VecDeque. +/// In particular: +/// +/// * Produces `NonNull::dangling()` on zero-sized types. +/// * Produces `NonNull::dangling()` on zero-length allocations. +/// * Avoids freeing `NonNull::dangling()`. +/// * Catches all overflows in capacity computations (promotes them to "capacity overflow" panics). +/// * Guards against 32-bit systems allocating more than isize::MAX bytes. +/// * Guards against overflowing your length. +/// * Calls `handle_alloc_error` for fallible allocations. +/// * Contains a `ptr::NonNull` and thus endows the user with all related benefits. +/// * Uses the excess returned from the allocator to use the largest available capacity. +/// +/// This type does not in anyway inspect the memory that it manages. When dropped it *will* +/// free its memory, but it *won't* try to drop its contents. It is up to the user of `RawVec` +/// to handle the actual things *stored* inside of a `RawVec`. +/// +/// Note that the excess of a zero-sized types is always infinite, so `capacity()` always returns +/// `usize::MAX`. This means that you need to be careful when round-tripping this type with a +/// `Box<[T]>`, since `capacity()` won't yield the length. +#[allow(missing_debug_implementations)] +pub(crate) struct RawVec { + ptr: NonNull, + cap: usize, + alloc: A, +} + +// Safety: RawVec owns both T and A, so sending is safe if +// sending is safe for T and A. +unsafe impl Send for RawVec +where + T: Send, + A: Send, +{ +} + +// Safety: RawVec owns both T and A, so sharing is safe if +// sharing is safe for T and A. +unsafe impl Sync for RawVec +where + T: Sync, + A: Sync, +{ +} + +impl RawVec { + /// Creates the biggest possible `RawVec` (on the system heap) + /// without allocating. If `T` has positive size, then this makes a + /// `RawVec` with capacity `0`. If `T` is zero-sized, then it makes a + /// `RawVec` with capacity `usize::MAX`. Useful for implementing + /// delayed allocation. + #[must_use] + pub const fn new() -> Self { + Self::new_in(Global) + } + + /// Creates a `RawVec` (on the system heap) with exactly the + /// capacity and alignment requirements for a `[T; capacity]`. This is + /// equivalent to calling `RawVec::new` when `capacity` is `0` or `T` is + /// zero-sized. Note that if `T` is zero-sized this means you will + /// *not* get a `RawVec` with the requested capacity. + /// + /// # Panics + /// + /// Panics if the requested capacity exceeds `isize::MAX` bytes. + /// + /// # Aborts + /// + /// Aborts on OOM. + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn with_capacity(capacity: usize) -> Self { + Self::with_capacity_in(capacity, Global) + } + + /// Like `with_capacity`, but guarantees the buffer is zeroed. + #[cfg(not(no_global_oom_handling))] + #[must_use] + #[inline(always)] + pub fn with_capacity_zeroed(capacity: usize) -> Self { + Self::with_capacity_zeroed_in(capacity, Global) + } +} + +impl RawVec { + // Tiny Vecs are dumb. Skip to: + // - 8 if the element size is 1, because any heap allocators is likely + // to round up a request of less than 8 bytes to at least 8 bytes. + // - 4 if elements are moderate-sized (<= 1 KiB). + // - 1 otherwise, to avoid wasting too much space for very short Vecs. + pub(crate) const MIN_NON_ZERO_CAP: usize = if mem::size_of::() == 1 { + 8 + } else if mem::size_of::() <= 1024 { + 4 + } else { + 1 + }; + + /// Like `new`, but parameterized over the choice of allocator for + /// the returned `RawVec`. + #[inline(always)] + pub const fn new_in(alloc: A) -> Self { + // `cap: 0` means "unallocated". zero-sized types are ignored. + Self { + ptr: NonNull::dangling(), + cap: 0, + alloc, + } + } + + /// Like `with_capacity`, but parameterized over the choice of + /// allocator for the returned `RawVec`. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn with_capacity_in(capacity: usize, alloc: A) -> Self { + Self::allocate_in(capacity, AllocInit::Uninitialized, alloc) + } + + /// Like `with_capacity_zeroed`, but parameterized over the choice + /// of allocator for the returned `RawVec`. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn with_capacity_zeroed_in(capacity: usize, alloc: A) -> Self { + Self::allocate_in(capacity, AllocInit::Zeroed, alloc) + } + + /// Converts the entire buffer into `Box<[MaybeUninit]>` with the specified `len`. + /// + /// Note that this will correctly reconstitute any `cap` changes + /// that may have been performed. (See description of type for details.) + /// + /// # Safety + /// + /// * `len` must be greater than or equal to the most recently requested capacity, and + /// * `len` must be less than or equal to `self.capacity()`. + /// + /// Note, that the requested capacity and `self.capacity()` could differ, as + /// an allocator could overallocate and return a greater memory block than requested. + #[inline(always)] + pub unsafe fn into_box(self, len: usize) -> Box<[MaybeUninit], A> { + // Sanity-check one half of the safety requirement (we cannot check the other half). + debug_assert!( + len <= self.capacity(), + "`len` must be smaller than or equal to `self.capacity()`" + ); + + let me = ManuallyDrop::new(self); + unsafe { + let slice = slice::from_raw_parts_mut(me.ptr() as *mut MaybeUninit, len); + Box::<[MaybeUninit], A>::from_raw_in(slice, ptr::read(&me.alloc)) + } + } + + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + fn allocate_in(capacity: usize, init: AllocInit, alloc: A) -> Self { + // Don't allocate here because `Drop` will not deallocate when `capacity` is 0. + if mem::size_of::() == 0 || capacity == 0 { + Self::new_in(alloc) + } else { + // We avoid `unwrap_or_else` here because it bloats the amount of + // LLVM IR generated. + let layout = match Layout::array::(capacity) { + Ok(layout) => layout, + Err(_) => capacity_overflow(), + }; + match alloc_guard(layout.size()) { + Ok(_) => {} + Err(_) => capacity_overflow(), + } + let result = match init { + AllocInit::Uninitialized => alloc.allocate(layout), + AllocInit::Zeroed => alloc.allocate_zeroed(layout), + }; + let ptr = match result { + Ok(ptr) => ptr, + Err(_) => handle_alloc_error(layout), + }; + + // Allocators currently return a `NonNull<[u8]>` whose length + // matches the size requested. If that ever changes, the capacity + // here should change to `ptr.len() / mem::size_of::()`. + Self { + ptr: unsafe { NonNull::new_unchecked(ptr.cast().as_ptr()) }, + cap: capacity, + alloc, + } + } + } + + /// Reconstitutes a `RawVec` from a pointer, capacity, and allocator. + /// + /// # Safety + /// + /// The `ptr` must be allocated (via the given allocator `alloc`), and with the given + /// `capacity`. + /// The `capacity` cannot exceed `isize::MAX` for sized types. (only a concern on 32-bit + /// systems). ZST vectors may have a capacity up to `usize::MAX`. + /// If the `ptr` and `capacity` come from a `RawVec` created via `alloc`, then this is + /// guaranteed. + #[inline(always)] + pub unsafe fn from_raw_parts_in(ptr: *mut T, capacity: usize, alloc: A) -> Self { + Self { + ptr: unsafe { NonNull::new_unchecked(ptr) }, + cap: capacity, + alloc, + } + } + + /// Gets a raw pointer to the start of the allocation. Note that this is + /// `NonNull::dangling()` if `capacity == 0` or `T` is zero-sized. In the former case, you must + /// be careful. + #[inline(always)] + pub fn ptr(&self) -> *mut T { + self.ptr.as_ptr() + } + + /// Gets the capacity of the allocation. + /// + /// This will always be `usize::MAX` if `T` is zero-sized. + #[inline(always)] + pub fn capacity(&self) -> usize { + if mem::size_of::() == 0 { + usize::MAX + } else { + self.cap + } + } + + /// Returns a shared reference to the allocator backing this `RawVec`. + #[inline(always)] + pub fn allocator(&self) -> &A { + &self.alloc + } + + #[inline(always)] + fn current_memory(&self) -> Option<(NonNull, Layout)> { + if mem::size_of::() == 0 || self.cap == 0 { + None + } else { + // We have an allocated chunk of memory, so we can bypass runtime + // checks to get our current layout. + unsafe { + let layout = Layout::array::(self.cap).unwrap_unchecked(); + Some((self.ptr.cast(), layout)) + } + } + } + + /// Ensures that the buffer contains at least enough space to hold `len + + /// additional` elements. If it doesn't already have enough capacity, will + /// reallocate enough space plus comfortable slack space to get amortized + /// *O*(1) behavior. Will limit this behavior if it would needlessly cause + /// itself to panic. + /// + /// If `len` exceeds `self.capacity()`, this may fail to actually allocate + /// the requested space. This is not really unsafe, but the unsafe + /// code *you* write that relies on the behavior of this function may break. + /// + /// This is ideal for implementing a bulk-push operation like `extend`. + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Aborts + /// + /// Aborts on OOM. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn reserve(&mut self, len: usize, additional: usize) { + // Callers expect this function to be very cheap when there is already sufficient capacity. + // Therefore, we move all the resizing and error-handling logic from grow_amortized and + // handle_reserve behind a call, while making sure that this function is likely to be + // inlined as just a comparison and a call if the comparison fails. + #[cold] + #[inline(always)] + fn do_reserve_and_handle( + slf: &mut RawVec, + len: usize, + additional: usize, + ) { + handle_reserve(slf.grow_amortized(len, additional)); + } + + if self.needs_to_grow(len, additional) { + do_reserve_and_handle(self, len, additional); + } + } + + /// A specialized version of `reserve()` used only by the hot and + /// oft-instantiated `Vec::push()`, which does its own capacity check. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn reserve_for_push(&mut self, len: usize) { + handle_reserve(self.grow_amortized(len, 1)); + } + + /// The same as `reserve`, but returns on errors instead of panicking or aborting. + #[inline(always)] + pub fn try_reserve(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> { + if self.needs_to_grow(len, additional) { + self.grow_amortized(len, additional) + } else { + Ok(()) + } + } + + /// Ensures that the buffer contains at least enough space to hold `len + + /// additional` elements. If it doesn't already, will reallocate the + /// minimum possible amount of memory necessary. Generally this will be + /// exactly the amount of memory necessary, but in principle the allocator + /// is free to give back more than we asked for. + /// + /// If `len` exceeds `self.capacity()`, this may fail to actually allocate + /// the requested space. This is not really unsafe, but the unsafe code + /// *you* write that relies on the behavior of this function may break. + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Aborts + /// + /// Aborts on OOM. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn reserve_exact(&mut self, len: usize, additional: usize) { + handle_reserve(self.try_reserve_exact(len, additional)); + } + + /// The same as `reserve_exact`, but returns on errors instead of panicking or aborting. + #[inline(always)] + pub fn try_reserve_exact( + &mut self, + len: usize, + additional: usize, + ) -> Result<(), TryReserveError> { + if self.needs_to_grow(len, additional) { + self.grow_exact(len, additional) + } else { + Ok(()) + } + } + + /// Shrinks the buffer down to the specified capacity. If the given amount + /// is 0, actually completely deallocates. + /// + /// # Panics + /// + /// Panics if the given amount is *larger* than the current capacity. + /// + /// # Aborts + /// + /// Aborts on OOM. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn shrink_to_fit(&mut self, cap: usize) { + handle_reserve(self.shrink(cap)); + } +} + +impl RawVec { + /// Returns if the buffer needs to grow to fulfill the needed extra capacity. + /// Mainly used to make inlining reserve-calls possible without inlining `grow`. + #[inline(always)] + fn needs_to_grow(&self, len: usize, additional: usize) -> bool { + additional > self.capacity().wrapping_sub(len) + } + + #[inline(always)] + fn set_ptr_and_cap(&mut self, ptr: NonNull<[u8]>, cap: usize) { + // Allocators currently return a `NonNull<[u8]>` whose length matches + // the size requested. If that ever changes, the capacity here should + // change to `ptr.len() / mem::size_of::()`. + self.ptr = unsafe { NonNull::new_unchecked(ptr.cast().as_ptr()) }; + self.cap = cap; + } + + // This method is usually instantiated many times. So we want it to be as + // small as possible, to improve compile times. But we also want as much of + // its contents to be statically computable as possible, to make the + // generated code run faster. Therefore, this method is carefully written + // so that all of the code that depends on `T` is within it, while as much + // of the code that doesn't depend on `T` as possible is in functions that + // are non-generic over `T`. + #[inline(always)] + fn grow_amortized(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> { + // This is ensured by the calling contexts. + debug_assert!(additional > 0); + + if mem::size_of::() == 0 { + // Since we return a capacity of `usize::MAX` when `elem_size` is + // 0, getting to here necessarily means the `RawVec` is overfull. + return Err(CapacityOverflow.into()); + } + + // Nothing we can really do about these checks, sadly. + let required_cap = len.checked_add(additional).ok_or(CapacityOverflow)?; + + // This guarantees exponential growth. The doubling cannot overflow + // because `cap <= isize::MAX` and the type of `cap` is `usize`. + let cap = cmp::max(self.cap * 2, required_cap); + let cap = cmp::max(Self::MIN_NON_ZERO_CAP, cap); + + let new_layout = Layout::array::(cap); + + // `finish_grow` is non-generic over `T`. + let ptr = finish_grow(new_layout, self.current_memory(), &mut self.alloc)?; + self.set_ptr_and_cap(ptr, cap); + Ok(()) + } + + // The constraints on this method are much the same as those on + // `grow_amortized`, but this method is usually instantiated less often so + // it's less critical. + #[inline(always)] + fn grow_exact(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> { + if mem::size_of::() == 0 { + // Since we return a capacity of `usize::MAX` when the type size is + // 0, getting to here necessarily means the `RawVec` is overfull. + return Err(CapacityOverflow.into()); + } + + let cap = len.checked_add(additional).ok_or(CapacityOverflow)?; + let new_layout = Layout::array::(cap); + + // `finish_grow` is non-generic over `T`. + let ptr = finish_grow(new_layout, self.current_memory(), &mut self.alloc)?; + self.set_ptr_and_cap(ptr, cap); + Ok(()) + } + + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + fn shrink(&mut self, cap: usize) -> Result<(), TryReserveError> { + assert!( + cap <= self.capacity(), + "Tried to shrink to a larger capacity" + ); + + let (ptr, layout) = if let Some(mem) = self.current_memory() { + mem + } else { + return Ok(()); + }; + + let ptr = unsafe { + // `Layout::array` cannot overflow here because it would have + // overflowed earlier when capacity was larger. + let new_layout = Layout::array::(cap).unwrap_unchecked(); + self.alloc + .shrink(ptr, layout, new_layout) + .map_err(|_| AllocError { + layout: new_layout, + non_exhaustive: (), + })? + }; + self.set_ptr_and_cap(ptr, cap); + Ok(()) + } +} + +// This function is outside `RawVec` to minimize compile times. See the comment +// above `RawVec::grow_amortized` for details. (The `A` parameter isn't +// significant, because the number of different `A` types seen in practice is +// much smaller than the number of `T` types.) +#[inline(always)] +fn finish_grow( + new_layout: Result, + current_memory: Option<(NonNull, Layout)>, + alloc: &mut A, +) -> Result, TryReserveError> +where + A: Allocator, +{ + // Check for the error here to minimize the size of `RawVec::grow_*`. + let new_layout = new_layout.map_err(|_| CapacityOverflow)?; + + alloc_guard(new_layout.size())?; + + let memory = if let Some((ptr, old_layout)) = current_memory { + debug_assert_eq!(old_layout.align(), new_layout.align()); + unsafe { + // The allocator checks for alignment equality + assume(old_layout.align() == new_layout.align()); + alloc.grow(ptr, old_layout, new_layout) + } + } else { + alloc.allocate(new_layout) + }; + + memory.map_err(|_| { + AllocError { + layout: new_layout, + non_exhaustive: (), + } + .into() + }) +} + +impl Drop for RawVec { + /// Frees the memory owned by the `RawVec` *without* trying to drop its contents. + #[inline(always)] + fn drop(&mut self) { + if let Some((ptr, layout)) = self.current_memory() { + unsafe { self.alloc.deallocate(ptr, layout) } + } + } +} + +// Central function for reserve error handling. +#[cfg(not(no_global_oom_handling))] +#[inline(always)] +fn handle_reserve(result: Result<(), TryReserveError>) { + match result.map_err(|e| e.kind()) { + Err(CapacityOverflow) => capacity_overflow(), + Err(AllocError { layout, .. }) => handle_alloc_error(layout), + Ok(()) => { /* yay */ } + } +} + +// We need to guarantee the following: +// * We don't ever allocate `> isize::MAX` byte-size objects. +// * We don't overflow `usize::MAX` and actually allocate too little. +// +// On 64-bit we just need to check for overflow since trying to allocate +// `> isize::MAX` bytes will surely fail. On 32-bit and 16-bit we need to add +// an extra guard for this in case we're running on a platform which can use +// all 4GB in user-space, e.g., PAE or x32. + +#[inline(always)] +fn alloc_guard(alloc_size: usize) -> Result<(), TryReserveError> { + if usize::BITS < 64 && alloc_size > isize::MAX as usize { + Err(CapacityOverflow.into()) + } else { + Ok(()) + } +} + +// One central function responsible for reporting capacity overflows. This'll +// ensure that the code generation related to these panics is minimal as there's +// only one location which panics rather than a bunch throughout the module. +#[cfg(not(no_global_oom_handling))] +fn capacity_overflow() -> ! { + panic!("capacity overflow"); +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/slice.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/slice.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/slice.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/slice.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,171 +1,171 @@ -use crate::{ - alloc::{Allocator, Global}, - vec::Vec, -}; - -/// Slice methods that use `Box` and `Vec` from this crate. -pub trait SliceExt { - /// Copies `self` into a new `Vec`. - /// - /// # Examples - /// - /// ``` - /// let s = [10, 40, 30]; - /// let x = s.to_vec(); - /// // Here, `s` and `x` can be modified independently. - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - fn to_vec(&self) -> Vec - where - T: Clone, - { - self.to_vec_in(Global) - } - - /// Copies `self` into a new `Vec` with an allocator. - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api)] - /// - /// use std::alloc::System; - /// - /// let s = [10, 40, 30]; - /// let x = s.to_vec_in(System); - /// // Here, `s` and `x` can be modified independently. - /// ``` - #[cfg(not(no_global_oom_handling))] - fn to_vec_in(&self, alloc: A) -> Vec - where - T: Clone; - - /// Creates a vector by copying a slice `n` times. - /// - /// # Panics - /// - /// This function will panic if the capacity would overflow. - /// - /// # Examples - /// - /// Basic usage: - /// - /// ``` - /// assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]); - /// ``` - /// - /// A panic upon overflow: - /// - /// ```should_panic - /// // this will panic at runtime - /// b"0123456789abcdef".repeat(usize::MAX); - /// ``` - fn repeat(&self, n: usize) -> Vec - where - T: Copy; -} - -impl SliceExt for [T] { - #[cfg(not(no_global_oom_handling))] - #[inline] - fn to_vec_in(&self, alloc: A) -> Vec - where - T: Clone, - { - struct DropGuard<'a, T, A: Allocator> { - vec: &'a mut Vec, - num_init: usize, - } - impl<'a, T, A: Allocator> Drop for DropGuard<'a, T, A> { - #[inline] - fn drop(&mut self) { - // SAFETY: - // items were marked initialized in the loop below - unsafe { - self.vec.set_len(self.num_init); - } - } - } - - let mut vec = Vec::with_capacity_in(self.len(), alloc); - let mut guard = DropGuard { - vec: &mut vec, - num_init: 0, - }; - let slots = guard.vec.spare_capacity_mut(); - // .take(slots.len()) is necessary for LLVM to remove bounds checks - // and has better codegen than zip. - for (i, b) in self.iter().enumerate().take(slots.len()) { - guard.num_init = i; - slots[i].write(b.clone()); - } - core::mem::forget(guard); - // SAFETY: - // the vec was allocated and initialized above to at least this length. - unsafe { - vec.set_len(self.len()); - } - vec - } - - #[cfg(not(no_global_oom_handling))] - #[inline] - fn repeat(&self, n: usize) -> Vec - where - T: Copy, - { - if n == 0 { - return Vec::new(); - } - - // If `n` is larger than zero, it can be split as - // `n = 2^expn + rem (2^expn > rem, expn >= 0, rem >= 0)`. - // `2^expn` is the number represented by the leftmost '1' bit of `n`, - // and `rem` is the remaining part of `n`. - - // Using `Vec` to access `set_len()`. - let capacity = self.len().checked_mul(n).expect("capacity overflow"); - let mut buf = Vec::with_capacity(capacity); - - // `2^expn` repetition is done by doubling `buf` `expn`-times. - buf.extend(self); - { - let mut m = n >> 1; - // If `m > 0`, there are remaining bits up to the leftmost '1'. - while m > 0 { - // `buf.extend(buf)`: - unsafe { - core::ptr::copy_nonoverlapping( - buf.as_ptr(), - (buf.as_mut_ptr() as *mut T).add(buf.len()), - buf.len(), - ); - // `buf` has capacity of `self.len() * n`. - let buf_len = buf.len(); - buf.set_len(buf_len * 2); - } - - m >>= 1; - } - } - - // `rem` (`= n - 2^expn`) repetition is done by copying - // first `rem` repetitions from `buf` itself. - let rem_len = capacity - buf.len(); // `self.len() * rem` - if rem_len > 0 { - // `buf.extend(buf[0 .. rem_len])`: - unsafe { - // This is non-overlapping since `2^expn > rem`. - core::ptr::copy_nonoverlapping( - buf.as_ptr(), - (buf.as_mut_ptr() as *mut T).add(buf.len()), - rem_len, - ); - // `buf.len() + rem_len` equals to `buf.capacity()` (`= self.len() * n`). - buf.set_len(capacity); - } - } - buf - } -} +use crate::{ + alloc::{Allocator, Global}, + vec::Vec, +}; + +/// Slice methods that use `Box` and `Vec` from this crate. +pub trait SliceExt { + /// Copies `self` into a new `Vec`. + /// + /// # Examples + /// + /// ``` + /// let s = [10, 40, 30]; + /// let x = s.to_vec(); + /// // Here, `s` and `x` can be modified independently. + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + fn to_vec(&self) -> Vec + where + T: Clone, + { + self.to_vec_in(Global) + } + + /// Copies `self` into a new `Vec` with an allocator. + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api)] + /// + /// use std::alloc::System; + /// + /// let s = [10, 40, 30]; + /// let x = s.to_vec_in(System); + /// // Here, `s` and `x` can be modified independently. + /// ``` + #[cfg(not(no_global_oom_handling))] + fn to_vec_in(&self, alloc: A) -> Vec + where + T: Clone; + + /// Creates a vector by copying a slice `n` times. + /// + /// # Panics + /// + /// This function will panic if the capacity would overflow. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ``` + /// assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]); + /// ``` + /// + /// A panic upon overflow: + /// + /// ```should_panic + /// // this will panic at runtime + /// b"0123456789abcdef".repeat(usize::MAX); + /// ``` + fn repeat(&self, n: usize) -> Vec + where + T: Copy; +} + +impl SliceExt for [T] { + #[cfg(not(no_global_oom_handling))] + #[inline] + fn to_vec_in(&self, alloc: A) -> Vec + where + T: Clone, + { + struct DropGuard<'a, T, A: Allocator> { + vec: &'a mut Vec, + num_init: usize, + } + impl<'a, T, A: Allocator> Drop for DropGuard<'a, T, A> { + #[inline] + fn drop(&mut self) { + // SAFETY: + // items were marked initialized in the loop below + unsafe { + self.vec.set_len(self.num_init); + } + } + } + + let mut vec = Vec::with_capacity_in(self.len(), alloc); + let mut guard = DropGuard { + vec: &mut vec, + num_init: 0, + }; + let slots = guard.vec.spare_capacity_mut(); + // .take(slots.len()) is necessary for LLVM to remove bounds checks + // and has better codegen than zip. + for (i, b) in self.iter().enumerate().take(slots.len()) { + guard.num_init = i; + slots[i].write(b.clone()); + } + core::mem::forget(guard); + // SAFETY: + // the vec was allocated and initialized above to at least this length. + unsafe { + vec.set_len(self.len()); + } + vec + } + + #[cfg(not(no_global_oom_handling))] + #[inline] + fn repeat(&self, n: usize) -> Vec + where + T: Copy, + { + if n == 0 { + return Vec::new(); + } + + // If `n` is larger than zero, it can be split as + // `n = 2^expn + rem (2^expn > rem, expn >= 0, rem >= 0)`. + // `2^expn` is the number represented by the leftmost '1' bit of `n`, + // and `rem` is the remaining part of `n`. + + // Using `Vec` to access `set_len()`. + let capacity = self.len().checked_mul(n).expect("capacity overflow"); + let mut buf = Vec::with_capacity(capacity); + + // `2^expn` repetition is done by doubling `buf` `expn`-times. + buf.extend(self); + { + let mut m = n >> 1; + // If `m > 0`, there are remaining bits up to the leftmost '1'. + while m > 0 { + // `buf.extend(buf)`: + unsafe { + core::ptr::copy_nonoverlapping( + buf.as_ptr(), + (buf.as_mut_ptr() as *mut T).add(buf.len()), + buf.len(), + ); + // `buf` has capacity of `self.len() * n`. + let buf_len = buf.len(); + buf.set_len(buf_len * 2); + } + + m >>= 1; + } + } + + // `rem` (`= n - 2^expn`) repetition is done by copying + // first `rem` repetitions from `buf` itself. + let rem_len = capacity - buf.len(); // `self.len() * rem` + if rem_len > 0 { + // `buf.extend(buf[0 .. rem_len])`: + unsafe { + // This is non-overlapping since `2^expn > rem`. + core::ptr::copy_nonoverlapping( + buf.as_ptr(), + (buf.as_mut_ptr() as *mut T).add(buf.len()), + rem_len, + ); + // `buf.len() + rem_len` equals to `buf.capacity()` (`= self.len() * n`). + buf.set_len(capacity); + } + } + buf + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/unique.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/unique.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/unique.rs 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/unique.rs 2025-10-09 15:35:44.000000000 +0000 @@ -0,0 +1,106 @@ +/// A wrapper around a raw non-null `*mut T` that indicates that the possessor +/// of this wrapper owns the referent. Useful for building abstractions like +/// `Box`, `Vec`, `String`, and `HashMap`. +/// +/// Unlike `*mut T`, `Unique` behaves "as if" it were an instance of `T`. +/// It implements `Send`/`Sync` if `T` is `Send`/`Sync`. It also implies +/// the kind of strong aliasing guarantees an instance of `T` can expect: +/// the referent of the pointer should not be modified without a unique path to +/// its owning Unique. +/// +/// If you're uncertain of whether it's correct to use `Unique` for your purposes, +/// consider using `NonNull`, which has weaker semantics. +/// +/// Unlike `*mut T`, the pointer must always be non-null, even if the pointer +/// is never dereferenced. This is so that enums may use this forbidden value +/// as a discriminant -- `Option>` has the same size as `Unique`. +/// However the pointer may still dangle if it isn't dereferenced. +/// +/// Unlike `*mut T`, `Unique` is covariant over `T`. This should always be correct +/// for any type which upholds Unique's aliasing requirements. +#[repr(transparent)] +pub(crate) struct Unique { + pointer: NonNull, + _marker: PhantomData, +} + +/// `Unique` pointers are `Send` if `T` is `Send` because the data they +/// reference is unaliased. Note that this aliasing invariant is +/// unenforced by the type system; the abstraction using the +/// `Unique` must enforce it. +unsafe impl Send for Unique {} + +/// `Unique` pointers are `Sync` if `T` is `Sync` because the data they +/// reference is unaliased. Note that this aliasing invariant is +/// unenforced by the type system; the abstraction using the +/// `Unique` must enforce it. +unsafe impl Sync for Unique {} + +impl Unique { + /// Creates a new `Unique`. + /// + /// # Safety + /// + /// `ptr` must be non-null. + #[inline] + pub const unsafe fn new_unchecked(ptr: *mut T) -> Self { + // SAFETY: the caller must guarantee that `ptr` is non-null. + unsafe { + Unique { + pointer: NonNull::new_unchecked(ptr), + _marker: PhantomData, + } + } + } + + /// Acquires the underlying `*mut` pointer. + #[must_use = "`self` will be dropped if the result is not used"] + #[inline] + pub const fn as_ptr(self) -> *mut T { + self.pointer.as_ptr() + } + + /// Acquires the underlying `*mut` pointer. + #[must_use = "`self` will be dropped if the result is not used"] + #[inline] + pub const fn as_non_null_ptr(self) -> NonNull { + self.pointer + } + + /// Dereferences the content. + /// + /// The resulting lifetime is bound to self so this behaves "as if" + /// it were actually an instance of T that is getting borrowed. If a longer + /// (unbound) lifetime is needed, use `&*my_ptr.as_ptr()`. + #[must_use] + #[inline] + pub const unsafe fn as_ref(&self) -> &T { + // SAFETY: the caller must guarantee that `self` meets all the + // requirements for a reference. + unsafe { &*(self.as_ptr() as *const T) } + } + + /// Mutably dereferences the content. + /// + /// The resulting lifetime is bound to self so this behaves "as if" + /// it were actually an instance of T that is getting borrowed. If a longer + /// (unbound) lifetime is needed, use `&mut *my_ptr.as_ptr()`. + #[must_use] + #[inline] + pub unsafe fn as_mut(&mut self) -> &mut T { + // SAFETY: the caller must guarantee that `self` meets all the + // requirements for a mutable reference. + unsafe { self.pointer.as_mut() } + } +} + +impl Clone for Unique { + #[inline] + fn clone(&self) -> Self { + *self + } +} + +impl Copy for Unique {} + +use core::{marker::PhantomData, ptr::NonNull}; diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/drain.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/drain.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/drain.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/drain.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,242 +1,242 @@ -use core::fmt; -use core::iter::FusedIterator; -use core::mem::{self, size_of, ManuallyDrop}; -use core::ptr::{self, NonNull}; -use core::slice::{self}; - -use crate::stable::alloc::{Allocator, Global}; - -use super::Vec; - -/// A draining iterator for `Vec`. -/// -/// This `struct` is created by [`Vec::drain`]. -/// See its documentation for more. -/// -/// # Example -/// -/// ``` -/// let mut v = vec![0, 1, 2]; -/// let iter: std::vec::Drain<_> = v.drain(..); -/// ``` -pub struct Drain<'a, T: 'a, A: Allocator + 'a = Global> { - /// Index of tail to preserve - pub(super) tail_start: usize, - /// Length of tail - pub(super) tail_len: usize, - /// Current remaining range to remove - pub(super) iter: slice::Iter<'a, T>, - pub(super) vec: NonNull>, -} - -impl fmt::Debug for Drain<'_, T, A> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_tuple("Drain").field(&self.iter.as_slice()).finish() - } -} - -impl<'a, T, A: Allocator> Drain<'a, T, A> { - /// Returns the remaining items of this iterator as a slice. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec!['a', 'b', 'c']; - /// let mut drain = vec.drain(..); - /// assert_eq!(drain.as_slice(), &['a', 'b', 'c']); - /// let _ = drain.next().unwrap(); - /// assert_eq!(drain.as_slice(), &['b', 'c']); - /// ``` - #[must_use] - #[inline(always)] - pub fn as_slice(&self) -> &[T] { - self.iter.as_slice() - } - - /// Returns a reference to the underlying allocator. - #[must_use] - #[inline(always)] - pub fn allocator(&self) -> &A { - unsafe { self.vec.as_ref().allocator() } - } - - /// Keep unyielded elements in the source `Vec`. - /// - /// # Examples - /// - /// ``` - /// #![feature(drain_keep_rest)] - /// - /// let mut vec = vec!['a', 'b', 'c']; - /// let mut drain = vec.drain(..); - /// - /// assert_eq!(drain.next().unwrap(), 'a'); - /// - /// // This call keeps 'b' and 'c' in the vec. - /// drain.keep_rest(); - /// - /// // If we wouldn't call `keep_rest()`, - /// // `vec` would be empty. - /// assert_eq!(vec, ['b', 'c']); - /// ``` - #[inline(always)] - pub fn keep_rest(self) { - // At this moment layout looks like this: - // - // [head] [yielded by next] [unyielded] [yielded by next_back] [tail] - // ^-- start \_________/-- unyielded_len \____/-- self.tail_len - // ^-- unyielded_ptr ^-- tail - // - // Normally `Drop` impl would drop [unyielded] and then move [tail] to the `start`. - // Here we want to - // 1. Move [unyielded] to `start` - // 2. Move [tail] to a new start at `start + len(unyielded)` - // 3. Update length of the original vec to `len(head) + len(unyielded) + len(tail)` - // a. In case of ZST, this is the only thing we want to do - // 4. Do *not* drop self, as everything is put in a consistent state already, there is nothing to do - let mut this = ManuallyDrop::new(self); - - unsafe { - let source_vec = this.vec.as_mut(); - - let start = source_vec.len(); - let tail = this.tail_start; - - let unyielded_len = this.iter.len(); - let unyielded_ptr = this.iter.as_slice().as_ptr(); - - // ZSTs have no identity, so we don't need to move them around. - let needs_move = mem::size_of::() != 0; - - if needs_move { - let start_ptr = source_vec.as_mut_ptr().add(start); - - // memmove back unyielded elements - if unyielded_ptr != start_ptr { - let src = unyielded_ptr; - let dst = start_ptr; - - ptr::copy(src, dst, unyielded_len); - } - - // memmove back untouched tail - if tail != (start + unyielded_len) { - let src = source_vec.as_ptr().add(tail); - let dst = start_ptr.add(unyielded_len); - ptr::copy(src, dst, this.tail_len); - } - } - - source_vec.set_len(start + unyielded_len + this.tail_len); - } - } -} - -impl<'a, T, A: Allocator> AsRef<[T]> for Drain<'a, T, A> { - #[inline(always)] - fn as_ref(&self) -> &[T] { - self.as_slice() - } -} - -unsafe impl Sync for Drain<'_, T, A> {} - -unsafe impl Send for Drain<'_, T, A> {} - -impl Iterator for Drain<'_, T, A> { - type Item = T; - - #[inline(always)] - fn next(&mut self) -> Option { - self.iter - .next() - .map(|elt| unsafe { ptr::read(elt as *const _) }) - } - - #[inline(always)] - fn size_hint(&self) -> (usize, Option) { - self.iter.size_hint() - } -} - -impl DoubleEndedIterator for Drain<'_, T, A> { - #[inline(always)] - fn next_back(&mut self) -> Option { - self.iter - .next_back() - .map(|elt| unsafe { ptr::read(elt as *const _) }) - } -} - -impl Drop for Drain<'_, T, A> { - #[inline] - fn drop(&mut self) { - /// Moves back the un-`Drain`ed elements to restore the original `Vec`. - struct DropGuard<'r, 'a, T, A: Allocator>(&'r mut Drain<'a, T, A>); - - impl<'r, 'a, T, A: Allocator> Drop for DropGuard<'r, 'a, T, A> { - fn drop(&mut self) { - if self.0.tail_len > 0 { - unsafe { - let source_vec = self.0.vec.as_mut(); - // memmove back untouched tail, update to new length - let start = source_vec.len(); - let tail = self.0.tail_start; - if tail != start { - let src = source_vec.as_ptr().add(tail); - let dst = source_vec.as_mut_ptr().add(start); - ptr::copy(src, dst, self.0.tail_len); - } - source_vec.set_len(start + self.0.tail_len); - } - } - } - } - - let iter = mem::replace(&mut self.iter, [].iter()); - let drop_len = iter.len(); - - let mut vec = self.vec; - - if size_of::() == 0 { - // ZSTs have no identity, so we don't need to move them around, we only need to drop the correct amount. - // this can be achieved by manipulating the Vec length instead of moving values out from `iter`. - unsafe { - let vec = vec.as_mut(); - let old_len = vec.len(); - vec.set_len(old_len + drop_len + self.tail_len); - vec.truncate(old_len + self.tail_len); - } - - return; - } - - // ensure elements are moved back into their appropriate places, even when drop_in_place panics - let _guard = DropGuard(self); - - if drop_len == 0 { - return; - } - - // as_slice() must only be called when iter.len() is > 0 because - // vec::Splice modifies vec::Drain fields and may grow the vec which would invalidate - // the iterator's internal pointers. Creating a reference to deallocated memory - // is invalid even when it is zero-length - let drop_ptr = iter.as_slice().as_ptr(); - - unsafe { - // drop_ptr comes from a slice::Iter which only gives us a &[T] but for drop_in_place - // a pointer with mutable provenance is necessary. Therefore we must reconstruct - // it from the original vec but also avoid creating a &mut to the front since that could - // invalidate raw pointers to it which some unsafe code might rely on. - let vec_ptr = vec.as_mut().as_mut_ptr(); - let drop_offset = drop_ptr.offset_from(vec_ptr) as usize; - let to_drop = ptr::slice_from_raw_parts_mut(vec_ptr.add(drop_offset), drop_len); - ptr::drop_in_place(to_drop); - } - } -} - -impl ExactSizeIterator for Drain<'_, T, A> {} - -impl FusedIterator for Drain<'_, T, A> {} +use core::fmt; +use core::iter::FusedIterator; +use core::mem::{self, size_of, ManuallyDrop}; +use core::ptr::{self, NonNull}; +use core::slice::{self}; + +use crate::stable::alloc::{Allocator, Global}; + +use super::Vec; + +/// A draining iterator for `Vec`. +/// +/// This `struct` is created by [`Vec::drain`]. +/// See its documentation for more. +/// +/// # Example +/// +/// ``` +/// let mut v = vec![0, 1, 2]; +/// let iter: std::vec::Drain<_> = v.drain(..); +/// ``` +pub struct Drain<'a, T: 'a, A: Allocator + 'a = Global> { + /// Index of tail to preserve + pub(super) tail_start: usize, + /// Length of tail + pub(super) tail_len: usize, + /// Current remaining range to remove + pub(super) iter: slice::Iter<'a, T>, + pub(super) vec: NonNull>, +} + +impl fmt::Debug for Drain<'_, T, A> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_tuple("Drain").field(&self.iter.as_slice()).finish() + } +} + +impl<'a, T, A: Allocator> Drain<'a, T, A> { + /// Returns the remaining items of this iterator as a slice. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec!['a', 'b', 'c']; + /// let mut drain = vec.drain(..); + /// assert_eq!(drain.as_slice(), &['a', 'b', 'c']); + /// let _ = drain.next().unwrap(); + /// assert_eq!(drain.as_slice(), &['b', 'c']); + /// ``` + #[must_use] + #[inline(always)] + pub fn as_slice(&self) -> &[T] { + self.iter.as_slice() + } + + /// Returns a reference to the underlying allocator. + #[must_use] + #[inline(always)] + pub fn allocator(&self) -> &A { + unsafe { self.vec.as_ref().allocator() } + } + + /// Keep unyielded elements in the source `Vec`. + /// + /// # Examples + /// + /// ``` + /// #![feature(drain_keep_rest)] + /// + /// let mut vec = vec!['a', 'b', 'c']; + /// let mut drain = vec.drain(..); + /// + /// assert_eq!(drain.next().unwrap(), 'a'); + /// + /// // This call keeps 'b' and 'c' in the vec. + /// drain.keep_rest(); + /// + /// // If we wouldn't call `keep_rest()`, + /// // `vec` would be empty. + /// assert_eq!(vec, ['b', 'c']); + /// ``` + #[inline(always)] + pub fn keep_rest(self) { + // At this moment layout looks like this: + // + // [head] [yielded by next] [unyielded] [yielded by next_back] [tail] + // ^-- start \_________/-- unyielded_len \____/-- self.tail_len + // ^-- unyielded_ptr ^-- tail + // + // Normally `Drop` impl would drop [unyielded] and then move [tail] to the `start`. + // Here we want to + // 1. Move [unyielded] to `start` + // 2. Move [tail] to a new start at `start + len(unyielded)` + // 3. Update length of the original vec to `len(head) + len(unyielded) + len(tail)` + // a. In case of ZST, this is the only thing we want to do + // 4. Do *not* drop self, as everything is put in a consistent state already, there is nothing to do + let mut this = ManuallyDrop::new(self); + + unsafe { + let source_vec = this.vec.as_mut(); + + let start = source_vec.len(); + let tail = this.tail_start; + + let unyielded_len = this.iter.len(); + let unyielded_ptr = this.iter.as_slice().as_ptr(); + + // ZSTs have no identity, so we don't need to move them around. + let needs_move = mem::size_of::() != 0; + + if needs_move { + let start_ptr = source_vec.as_mut_ptr().add(start); + + // memmove back unyielded elements + if unyielded_ptr != start_ptr { + let src = unyielded_ptr; + let dst = start_ptr; + + ptr::copy(src, dst, unyielded_len); + } + + // memmove back untouched tail + if tail != (start + unyielded_len) { + let src = source_vec.as_ptr().add(tail); + let dst = start_ptr.add(unyielded_len); + ptr::copy(src, dst, this.tail_len); + } + } + + source_vec.set_len(start + unyielded_len + this.tail_len); + } + } +} + +impl<'a, T, A: Allocator> AsRef<[T]> for Drain<'a, T, A> { + #[inline(always)] + fn as_ref(&self) -> &[T] { + self.as_slice() + } +} + +unsafe impl Sync for Drain<'_, T, A> {} + +unsafe impl Send for Drain<'_, T, A> {} + +impl Iterator for Drain<'_, T, A> { + type Item = T; + + #[inline(always)] + fn next(&mut self) -> Option { + self.iter + .next() + .map(|elt| unsafe { ptr::read(elt as *const _) }) + } + + #[inline(always)] + fn size_hint(&self) -> (usize, Option) { + self.iter.size_hint() + } +} + +impl DoubleEndedIterator for Drain<'_, T, A> { + #[inline(always)] + fn next_back(&mut self) -> Option { + self.iter + .next_back() + .map(|elt| unsafe { ptr::read(elt as *const _) }) + } +} + +impl Drop for Drain<'_, T, A> { + #[inline] + fn drop(&mut self) { + /// Moves back the un-`Drain`ed elements to restore the original `Vec`. + struct DropGuard<'r, 'a, T, A: Allocator>(&'r mut Drain<'a, T, A>); + + impl<'r, 'a, T, A: Allocator> Drop for DropGuard<'r, 'a, T, A> { + fn drop(&mut self) { + if self.0.tail_len > 0 { + unsafe { + let source_vec = self.0.vec.as_mut(); + // memmove back untouched tail, update to new length + let start = source_vec.len(); + let tail = self.0.tail_start; + if tail != start { + let src = source_vec.as_ptr().add(tail); + let dst = source_vec.as_mut_ptr().add(start); + ptr::copy(src, dst, self.0.tail_len); + } + source_vec.set_len(start + self.0.tail_len); + } + } + } + } + + let iter = mem::replace(&mut self.iter, [].iter()); + let drop_len = iter.len(); + + let mut vec = self.vec; + + if size_of::() == 0 { + // ZSTs have no identity, so we don't need to move them around, we only need to drop the correct amount. + // this can be achieved by manipulating the Vec length instead of moving values out from `iter`. + unsafe { + let vec = vec.as_mut(); + let old_len = vec.len(); + vec.set_len(old_len + drop_len + self.tail_len); + vec.truncate(old_len + self.tail_len); + } + + return; + } + + // ensure elements are moved back into their appropriate places, even when drop_in_place panics + let _guard = DropGuard(self); + + if drop_len == 0 { + return; + } + + // as_slice() must only be called when iter.len() is > 0 because + // vec::Splice modifies vec::Drain fields and may grow the vec which would invalidate + // the iterator's internal pointers. Creating a reference to deallocated memory + // is invalid even when it is zero-length + let drop_ptr = iter.as_slice().as_ptr(); + + unsafe { + // drop_ptr comes from a slice::Iter which only gives us a &[T] but for drop_in_place + // a pointer with mutable provenance is necessary. Therefore we must reconstruct + // it from the original vec but also avoid creating a &mut to the front since that could + // invalidate raw pointers to it which some unsafe code might rely on. + let vec_ptr = vec.as_mut().as_mut_ptr(); + let drop_offset = drop_ptr.offset_from(vec_ptr) as usize; + let to_drop = ptr::slice_from_raw_parts_mut(vec_ptr.add(drop_offset), drop_len); + ptr::drop_in_place(to_drop); + } + } +} + +impl ExactSizeIterator for Drain<'_, T, A> {} + +impl FusedIterator for Drain<'_, T, A> {} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/into_iter.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/into_iter.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/into_iter.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/into_iter.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,198 +1,191 @@ -use core::fmt; -use core::iter::FusedIterator; -use core::marker::PhantomData; -use core::mem::{self, size_of, ManuallyDrop}; - -use core::ptr::{self, NonNull}; -use core::slice::{self}; - -use crate::stable::addr; - -use super::{Allocator, Global, RawVec}; - -#[cfg(not(no_global_oom_handling))] -use super::Vec; - -/// An iterator that moves out of a vector. -/// -/// This `struct` is created by the `into_iter` method on [`Vec`](super::Vec) -/// (provided by the [`IntoIterator`] trait). -/// -/// # Example -/// -/// ``` -/// let v = vec![0, 1, 2]; -/// let iter: std::vec::IntoIter<_> = v.into_iter(); -/// ``` -pub struct IntoIter { - pub(super) buf: NonNull, - pub(super) phantom: PhantomData, - pub(super) cap: usize, - // the drop impl reconstructs a RawVec from buf, cap and alloc - // to avoid dropping the allocator twice we need to wrap it into ManuallyDrop - pub(super) alloc: ManuallyDrop, - pub(super) ptr: *const T, - pub(super) end: *const T, -} - -impl fmt::Debug for IntoIter { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_tuple("IntoIter").field(&self.as_slice()).finish() - } -} - -impl IntoIter { - /// Returns the remaining items of this iterator as a slice. - /// - /// # Examples - /// - /// ``` - /// let vec = vec!['a', 'b', 'c']; - /// let mut into_iter = vec.into_iter(); - /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']); - /// let _ = into_iter.next().unwrap(); - /// assert_eq!(into_iter.as_slice(), &['b', 'c']); - /// ``` - pub fn as_slice(&self) -> &[T] { - unsafe { slice::from_raw_parts(self.ptr, self.len()) } - } - - /// Returns the remaining items of this iterator as a mutable slice. - /// - /// # Examples - /// - /// ``` - /// let vec = vec!['a', 'b', 'c']; - /// let mut into_iter = vec.into_iter(); - /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']); - /// into_iter.as_mut_slice()[2] = 'z'; - /// assert_eq!(into_iter.next().unwrap(), 'a'); - /// assert_eq!(into_iter.next().unwrap(), 'b'); - /// assert_eq!(into_iter.next().unwrap(), 'z'); - /// ``` - pub fn as_mut_slice(&mut self) -> &mut [T] { - unsafe { &mut *self.as_raw_mut_slice() } - } - - /// Returns a reference to the underlying allocator. - #[inline(always)] - pub fn allocator(&self) -> &A { - &self.alloc - } - - fn as_raw_mut_slice(&mut self) -> *mut [T] { - ptr::slice_from_raw_parts_mut(self.ptr as *mut T, self.len()) - } -} - -impl AsRef<[T]> for IntoIter { - fn as_ref(&self) -> &[T] { - self.as_slice() - } -} - -unsafe impl Send for IntoIter {} - -unsafe impl Sync for IntoIter {} - -impl Iterator for IntoIter { - type Item = T; - - #[inline(always)] - fn next(&mut self) -> Option { - if self.ptr == self.end { - None - } else if size_of::() == 0 { - // purposefully don't use 'ptr.offset' because for - // vectors with 0-size elements this would return the - // same pointer. - self.ptr = self.ptr.cast::().wrapping_add(1).cast(); - - // Make up a value of this ZST. - Some(unsafe { mem::zeroed() }) - } else { - let old = self.ptr; - self.ptr = unsafe { self.ptr.add(1) }; - - Some(unsafe { ptr::read(old) }) - } - } - - #[inline(always)] - fn size_hint(&self) -> (usize, Option) { - let exact = if size_of::() == 0 { - addr(self.end).wrapping_sub(addr(self.ptr)) - } else { - unsafe { self.end.offset_from(self.ptr) as usize } - }; - (exact, Some(exact)) - } - - #[inline(always)] - fn count(self) -> usize { - self.len() - } -} - -impl DoubleEndedIterator for IntoIter { - #[inline(always)] - fn next_back(&mut self) -> Option { - if self.end == self.ptr { - None - } else if size_of::() == 0 { - // See above for why 'ptr.offset' isn't used - self.end = self.end.cast::().wrapping_add(1).cast(); - - // Make up a value of this ZST. - Some(unsafe { mem::zeroed() }) - } else { - self.end = unsafe { self.end.sub(1) }; - - Some(unsafe { ptr::read(self.end) }) - } - } -} - -impl ExactSizeIterator for IntoIter {} - -impl FusedIterator for IntoIter {} - -#[doc(hidden)] -pub trait NonDrop {} - -// T: Copy as approximation for !Drop since get_unchecked does not advance self.ptr -// and thus we can't implement drop-handling -impl NonDrop for T {} - -#[cfg(not(no_global_oom_handling))] -impl Clone for IntoIter { - fn clone(&self) -> Self { - let mut vec = Vec::::with_capacity_in(self.len(), (*self.alloc).clone()); - vec.extend(self.as_slice().iter().cloned()); - vec.into_iter() - } -} - -impl Drop for IntoIter { - fn drop(&mut self) { - struct DropGuard<'a, T, A: Allocator>(&'a mut IntoIter); - - impl Drop for DropGuard<'_, T, A> { - fn drop(&mut self) { - unsafe { - // `IntoIter::alloc` is not used anymore after this and will be dropped by RawVec - let alloc = ManuallyDrop::take(&mut self.0.alloc); - // RawVec handles deallocation - let _ = RawVec::from_raw_parts_in(self.0.buf.as_ptr(), self.0.cap, alloc); - } - } - } - - let guard = DropGuard(self); - // destroy the remaining elements - unsafe { - ptr::drop_in_place(guard.0.as_raw_mut_slice()); - } - // now `guard` will be dropped and do the rest - } -} +use core::fmt; +use core::iter::FusedIterator; +use core::marker::PhantomData; +use core::mem::{self, size_of, ManuallyDrop}; + +use core::ptr::{self, NonNull}; +use core::slice::{self}; + +use crate::stable::addr; + +use super::{Allocator, Global, RawVec}; + +#[cfg(not(no_global_oom_handling))] +use super::Vec; + +/// An iterator that moves out of a vector. +/// +/// This `struct` is created by the `into_iter` method on [`Vec`](super::Vec) +/// (provided by the [`IntoIterator`] trait). +/// +/// # Example +/// +/// ``` +/// let v = vec![0, 1, 2]; +/// let iter: std::vec::IntoIter<_> = v.into_iter(); +/// ``` +pub struct IntoIter { + pub(super) buf: NonNull, + pub(super) phantom: PhantomData, + pub(super) cap: usize, + // the drop impl reconstructs a RawVec from buf, cap and alloc + // to avoid dropping the allocator twice we need to wrap it into ManuallyDrop + pub(super) alloc: ManuallyDrop, + pub(super) ptr: *const T, + pub(super) end: *const T, +} + +impl fmt::Debug for IntoIter { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_tuple("IntoIter").field(&self.as_slice()).finish() + } +} + +impl IntoIter { + /// Returns the remaining items of this iterator as a slice. + /// + /// # Examples + /// + /// ``` + /// let vec = vec!['a', 'b', 'c']; + /// let mut into_iter = vec.into_iter(); + /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']); + /// let _ = into_iter.next().unwrap(); + /// assert_eq!(into_iter.as_slice(), &['b', 'c']); + /// ``` + pub fn as_slice(&self) -> &[T] { + unsafe { slice::from_raw_parts(self.ptr, self.len()) } + } + + /// Returns the remaining items of this iterator as a mutable slice. + /// + /// # Examples + /// + /// ``` + /// let vec = vec!['a', 'b', 'c']; + /// let mut into_iter = vec.into_iter(); + /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']); + /// into_iter.as_mut_slice()[2] = 'z'; + /// assert_eq!(into_iter.next().unwrap(), 'a'); + /// assert_eq!(into_iter.next().unwrap(), 'b'); + /// assert_eq!(into_iter.next().unwrap(), 'z'); + /// ``` + pub fn as_mut_slice(&mut self) -> &mut [T] { + unsafe { &mut *self.as_raw_mut_slice() } + } + + /// Returns a reference to the underlying allocator. + #[inline(always)] + pub fn allocator(&self) -> &A { + &self.alloc + } + + fn as_raw_mut_slice(&mut self) -> *mut [T] { + ptr::slice_from_raw_parts_mut(self.ptr as *mut T, self.len()) + } +} + +impl AsRef<[T]> for IntoIter { + fn as_ref(&self) -> &[T] { + self.as_slice() + } +} + +unsafe impl Send for IntoIter {} + +unsafe impl Sync for IntoIter {} + +impl Iterator for IntoIter { + type Item = T; + + #[inline(always)] + fn next(&mut self) -> Option { + if self.ptr == self.end { + None + } else if size_of::() == 0 { + // purposefully don't use 'ptr.offset' because for + // vectors with 0-size elements this would return the + // same pointer. + self.ptr = self.ptr.cast::().wrapping_add(1).cast(); + + // Make up a value of this ZST. + Some(unsafe { mem::zeroed() }) + } else { + let old = self.ptr; + self.ptr = unsafe { self.ptr.add(1) }; + + Some(unsafe { ptr::read(old) }) + } + } + + #[inline(always)] + fn size_hint(&self) -> (usize, Option) { + let exact = if size_of::() == 0 { + addr(self.end).wrapping_sub(addr(self.ptr)) + } else { + unsafe { self.end.offset_from(self.ptr) as usize } + }; + (exact, Some(exact)) + } + + #[inline(always)] + fn count(self) -> usize { + self.len() + } +} + +impl DoubleEndedIterator for IntoIter { + #[inline(always)] + fn next_back(&mut self) -> Option { + if self.end == self.ptr { + None + } else if size_of::() == 0 { + // See above for why 'ptr.offset' isn't used + self.end = self.end.cast::().wrapping_add(1).cast(); + + // Make up a value of this ZST. + Some(unsafe { mem::zeroed() }) + } else { + self.end = unsafe { self.end.sub(1) }; + + Some(unsafe { ptr::read(self.end) }) + } + } +} + +impl ExactSizeIterator for IntoIter {} + +impl FusedIterator for IntoIter {} + +#[cfg(not(no_global_oom_handling))] +impl Clone for IntoIter { + fn clone(&self) -> Self { + let mut vec = Vec::::with_capacity_in(self.len(), (*self.alloc).clone()); + vec.extend(self.as_slice().iter().cloned()); + vec.into_iter() + } +} + +impl Drop for IntoIter { + fn drop(&mut self) { + struct DropGuard<'a, T, A: Allocator>(&'a mut IntoIter); + + impl Drop for DropGuard<'_, T, A> { + fn drop(&mut self) { + unsafe { + // `IntoIter::alloc` is not used anymore after this and will be dropped by RawVec + let alloc = ManuallyDrop::take(&mut self.0.alloc); + // RawVec handles deallocation + let _ = RawVec::from_raw_parts_in(self.0.buf.as_ptr(), self.0.cap, alloc); + } + } + } + + let guard = DropGuard(self); + // destroy the remaining elements + unsafe { + ptr::drop_in_place(guard.0.as_raw_mut_slice()); + } + // now `guard` will be dropped and do the rest + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/mod.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/mod.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/mod.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/mod.rs 2025-10-09 15:35:45.000000000 +0000 @@ -1,3288 +1,3232 @@ -//! A contiguous growable array type with heap-allocated contents, written -//! `Vec`. -//! -//! Vectors have *O*(1) indexing, amortized *O*(1) push (to the end) and -//! *O*(1) pop (from the end). -//! -//! Vectors ensure they never allocate more than `isize::MAX` bytes. -//! -//! # Examples -//! -//! You can explicitly create a [`Vec`] with [`Vec::new`]: -//! -//! ``` -//! let v: Vec = Vec::new(); -//! ``` -//! -//! ...or by using the [`vec!`] macro: -//! -//! ``` -//! let v: Vec = vec![]; -//! -//! let v = vec![1, 2, 3, 4, 5]; -//! -//! let v = vec![0; 10]; // ten zeroes -//! ``` -//! -//! You can [`push`] values onto the end of a vector (which will grow the vector -//! as needed): -//! -//! ``` -//! let mut v = vec![1, 2]; -//! -//! v.push(3); -//! ``` -//! -//! Popping values works in much the same way: -//! -//! ``` -//! let mut v = vec![1, 2]; -//! -//! let two = v.pop(); -//! ``` -//! -//! Vectors also support indexing (through the [`Index`] and [`IndexMut`] traits): -//! -//! ``` -//! let mut v = vec![1, 2, 3]; -//! let three = v[2]; -//! v[1] = v[1] + 5; -//! ``` -//! -//! [`push`]: Vec::push - -#[cfg(not(no_global_oom_handling))] -use core::cmp; -use core::cmp::Ordering; -use core::convert::TryFrom; -use core::fmt; -use core::hash::{Hash, Hasher}; -#[cfg(not(no_global_oom_handling))] -use core::iter; -#[cfg(not(no_global_oom_handling))] -use core::iter::FromIterator; -use core::marker::PhantomData; -use core::mem::{self, size_of, ManuallyDrop, MaybeUninit}; -use core::ops::{self, Bound, Index, IndexMut, Range, RangeBounds}; -use core::ptr::{self, NonNull}; -use core::slice::{self, SliceIndex}; - -#[cfg(feature = "std")] -use std::io; - -use super::{ - alloc::{Allocator, Global}, - assume, - boxed::Box, - raw_vec::{RawVec, TryReserveError}, -}; - -#[cfg(not(no_global_oom_handling))] -pub use self::splice::Splice; - -#[cfg(not(no_global_oom_handling))] -mod splice; - -pub use self::drain::Drain; - -mod drain; - -pub use self::into_iter::IntoIter; - -mod into_iter; - -mod partial_eq; - -#[cfg(not(no_global_oom_handling))] -mod set_len_on_drop; - -#[cfg(not(no_global_oom_handling))] -use self::set_len_on_drop::SetLenOnDrop; - -/// A contiguous growable array type, written as `Vec`, short for 'vector'. -/// -/// # Examples -/// -/// ``` -/// let mut vec = Vec::new(); -/// vec.push(1); -/// vec.push(2); -/// -/// assert_eq!(vec.len(), 2); -/// assert_eq!(vec[0], 1); -/// -/// assert_eq!(vec.pop(), Some(2)); -/// assert_eq!(vec.len(), 1); -/// -/// vec[0] = 7; -/// assert_eq!(vec[0], 7); -/// -/// vec.extend([1, 2, 3].iter().copied()); -/// -/// for x in &vec { -/// println!("{x}"); -/// } -/// assert_eq!(vec, [7, 1, 2, 3]); -/// ``` -/// -/// The [`vec!`] macro is provided for convenient initialization: -/// -/// ``` -/// let mut vec1 = vec![1, 2, 3]; -/// vec1.push(4); -/// let vec2 = Vec::from([1, 2, 3, 4]); -/// assert_eq!(vec1, vec2); -/// ``` -/// -/// It can also initialize each element of a `Vec` with a given value. -/// This may be more efficient than performing allocation and initialization -/// in separate steps, especially when initializing a vector of zeros: -/// -/// ``` -/// let vec = vec![0; 5]; -/// assert_eq!(vec, [0, 0, 0, 0, 0]); -/// -/// // The following is equivalent, but potentially slower: -/// let mut vec = Vec::with_capacity(5); -/// vec.resize(5, 0); -/// assert_eq!(vec, [0, 0, 0, 0, 0]); -/// ``` -/// -/// For more information, see -/// [Capacity and Reallocation](#capacity-and-reallocation). -/// -/// Use a `Vec` as an efficient stack: -/// -/// ``` -/// let mut stack = Vec::new(); -/// -/// stack.push(1); -/// stack.push(2); -/// stack.push(3); -/// -/// while let Some(top) = stack.pop() { -/// // Prints 3, 2, 1 -/// println!("{top}"); -/// } -/// ``` -/// -/// # Indexing -/// -/// The `Vec` type allows to access values by index, because it implements the -/// [`Index`] trait. An example will be more explicit: -/// -/// ``` -/// let v = vec![0, 2, 4, 6]; -/// println!("{}", v[1]); // it will display '2' -/// ``` -/// -/// However be careful: if you try to access an index which isn't in the `Vec`, -/// your software will panic! You cannot do this: -/// -/// ```should_panic -/// let v = vec![0, 2, 4, 6]; -/// println!("{}", v[6]); // it will panic! -/// ``` -/// -/// Use [`get`] and [`get_mut`] if you want to check whether the index is in -/// the `Vec`. -/// -/// # Slicing -/// -/// A `Vec` can be mutable. On the other hand, slices are read-only objects. -/// To get a [slice][prim@slice], use [`&`]. Example: -/// -/// ``` -/// fn read_slice(slice: &[usize]) { -/// // ... -/// } -/// -/// let v = vec![0, 1]; -/// read_slice(&v); -/// -/// // ... and that's all! -/// // you can also do it like this: -/// let u: &[usize] = &v; -/// // or like this: -/// let u: &[_] = &v; -/// ``` -/// -/// In Rust, it's more common to pass slices as arguments rather than vectors -/// when you just want to provide read access. The same goes for [`String`] and -/// [`&str`]. -/// -/// # Capacity and reallocation -/// -/// The capacity of a vector is the amount of space allocated for any future -/// elements that will be added onto the vector. This is not to be confused with -/// the *length* of a vector, which specifies the number of actual elements -/// within the vector. If a vector's length exceeds its capacity, its capacity -/// will automatically be increased, but its elements will have to be -/// reallocated. -/// -/// For example, a vector with capacity 10 and length 0 would be an empty vector -/// with space for 10 more elements. Pushing 10 or fewer elements onto the -/// vector will not change its capacity or cause reallocation to occur. However, -/// if the vector's length is increased to 11, it will have to reallocate, which -/// can be slow. For this reason, it is recommended to use [`Vec::with_capacity`] -/// whenever possible to specify how big the vector is expected to get. -/// -/// # Guarantees -/// -/// Due to its incredibly fundamental nature, `Vec` makes a lot of guarantees -/// about its design. This ensures that it's as low-overhead as possible in -/// the general case, and can be correctly manipulated in primitive ways -/// by unsafe code. Note that these guarantees refer to an unqualified `Vec`. -/// If additional type parameters are added (e.g., to support custom allocators), -/// overriding their defaults may change the behavior. -/// -/// Most fundamentally, `Vec` is and always will be a (pointer, capacity, length) -/// triplet. No more, no less. The order of these fields is completely -/// unspecified, and you should use the appropriate methods to modify these. -/// The pointer will never be null, so this type is null-pointer-optimized. -/// -/// However, the pointer might not actually point to allocated memory. In particular, -/// if you construct a `Vec` with capacity 0 via [`Vec::new`], [`vec![]`][`vec!`], -/// [`Vec::with_capacity(0)`][`Vec::with_capacity`], or by calling [`shrink_to_fit`] -/// on an empty Vec, it will not allocate memory. Similarly, if you store zero-sized -/// types inside a `Vec`, it will not allocate space for them. *Note that in this case -/// the `Vec` might not report a [`capacity`] of 0*. `Vec` will allocate if and only -/// if [mem::size_of::\]\() * [capacity]\() > 0. In general, `Vec`'s allocation -/// details are very subtle --- if you intend to allocate memory using a `Vec` -/// and use it for something else (either to pass to unsafe code, or to build your -/// own memory-backed collection), be sure to deallocate this memory by using -/// `from_raw_parts` to recover the `Vec` and then dropping it. -/// -/// If a `Vec` *has* allocated memory, then the memory it points to is on the heap -/// (as defined by the allocator Rust is configured to use by default), and its -/// pointer points to [`len`] initialized, contiguous elements in order (what -/// you would see if you coerced it to a slice), followed by [capacity] - [len] -/// logically uninitialized, contiguous elements. -/// -/// A vector containing the elements `'a'` and `'b'` with capacity 4 can be -/// visualized as below. The top part is the `Vec` struct, it contains a -/// pointer to the head of the allocation in the heap, length and capacity. -/// The bottom part is the allocation on the heap, a contiguous memory block. -/// -/// ```text -/// ptr len capacity -/// +--------+--------+--------+ -/// | 0x0123 | 2 | 4 | -/// +--------+--------+--------+ -/// | -/// v -/// Heap +--------+--------+--------+--------+ -/// | 'a' | 'b' | uninit | uninit | -/// +--------+--------+--------+--------+ -/// ``` -/// -/// - **uninit** represents memory that is not initialized, see [`MaybeUninit`]. -/// - Note: the ABI is not stable and `Vec` makes no guarantees about its memory -/// layout (including the order of fields). -/// -/// `Vec` will never perform a "small optimization" where elements are actually -/// stored on the stack for two reasons: -/// -/// * It would make it more difficult for unsafe code to correctly manipulate -/// a `Vec`. The contents of a `Vec` wouldn't have a stable address if it were -/// only moved, and it would be more difficult to determine if a `Vec` had -/// actually allocated memory. -/// -/// * It would penalize the general case, incurring an additional branch -/// on every access. -/// -/// `Vec` will never automatically shrink itself, even if completely empty. This -/// ensures no unnecessary allocations or deallocations occur. Emptying a `Vec` -/// and then filling it back up to the same [`len`] should incur no calls to -/// the allocator. If you wish to free up unused memory, use -/// [`shrink_to_fit`] or [`shrink_to`]. -/// -/// [`push`] and [`insert`] will never (re)allocate if the reported capacity is -/// sufficient. [`push`] and [`insert`] *will* (re)allocate if -/// [len] == [capacity]. That is, the reported capacity is completely -/// accurate, and can be relied on. It can even be used to manually free the memory -/// allocated by a `Vec` if desired. Bulk insertion methods *may* reallocate, even -/// when not necessary. -/// -/// `Vec` does not guarantee any particular growth strategy when reallocating -/// when full, nor when [`reserve`] is called. The current strategy is basic -/// and it may prove desirable to use a non-constant growth factor. Whatever -/// strategy is used will of course guarantee *O*(1) amortized [`push`]. -/// -/// `vec![x; n]`, `vec![a, b, c, d]`, and -/// [`Vec::with_capacity(n)`][`Vec::with_capacity`], will all produce a `Vec` -/// with exactly the requested capacity. If [len] == [capacity], -/// (as is the case for the [`vec!`] macro), then a `Vec` can be converted to -/// and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements. -/// -/// `Vec` will not specifically overwrite any data that is removed from it, -/// but also won't specifically preserve it. Its uninitialized memory is -/// scratch space that it may use however it wants. It will generally just do -/// whatever is most efficient or otherwise easy to implement. Do not rely on -/// removed data to be erased for security purposes. Even if you drop a `Vec`, its -/// buffer may simply be reused by another allocation. Even if you zero a `Vec`'s memory -/// first, that might not actually happen because the optimizer does not consider -/// this a side-effect that must be preserved. There is one case which we will -/// not break, however: using `unsafe` code to write to the excess capacity, -/// and then increasing the length to match, is always valid. -/// -/// Currently, `Vec` does not guarantee the order in which elements are dropped. -/// The order has changed in the past and may change again. -/// -/// [`get`]: ../../std/vec/struct.Vec.html#method.get -/// [`get_mut`]: ../../std/vec/struct.Vec.html#method.get_mut -/// [`String`]: alloc_crate::string::String -/// [`&str`]: type@str -/// [`shrink_to_fit`]: Vec::shrink_to_fit -/// [`shrink_to`]: Vec::shrink_to -/// [capacity]: Vec::capacity -/// [`capacity`]: Vec::capacity -/// [mem::size_of::\]: core::mem::size_of -/// [len]: Vec::len -/// [`len`]: Vec::len -/// [`push`]: Vec::push -/// [`insert`]: Vec::insert -/// [`reserve`]: Vec::reserve -/// [`MaybeUninit`]: core::mem::MaybeUninit -/// [owned slice]: Box -pub struct Vec { - buf: RawVec, - len: usize, -} - -//////////////////////////////////////////////////////////////////////////////// -// Inherent methods -//////////////////////////////////////////////////////////////////////////////// - -impl Vec { - /// Constructs a new, empty `Vec`. - /// - /// The vector will not allocate until elements are pushed onto it. - /// - /// # Examples - /// - /// ``` - /// # #![allow(unused_mut)] - /// let mut vec: Vec = Vec::new(); - /// ``` - #[inline(always)] - #[must_use] - pub const fn new() -> Self { - Vec { - buf: RawVec::new(), - len: 0, - } - } - - /// Constructs a new, empty `Vec` with at least the specified capacity. - /// - /// The vector will be able to hold at least `capacity` elements without - /// reallocating. This method is allowed to allocate for more elements than - /// `capacity`. If `capacity` is 0, the vector will not allocate. - /// - /// It is important to note that although the returned vector has the - /// minimum *capacity* specified, the vector will have a zero *length*. For - /// an explanation of the difference between length and capacity, see - /// *[Capacity and reallocation]*. - /// - /// If it is important to know the exact allocated capacity of a `Vec`, - /// always use the [`capacity`] method after construction. - /// - /// For `Vec` where `T` is a zero-sized type, there will be no allocation - /// and the capacity will always be `usize::MAX`. - /// - /// [Capacity and reallocation]: #capacity-and-reallocation - /// [`capacity`]: Vec::capacity - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Examples - /// - /// ``` - /// let mut vec = Vec::with_capacity(10); - /// - /// // The vector contains no items, even though it has capacity for more - /// assert_eq!(vec.len(), 0); - /// assert!(vec.capacity() >= 10); - /// - /// // These are all done without reallocating... - /// for i in 0..10 { - /// vec.push(i); - /// } - /// assert_eq!(vec.len(), 10); - /// assert!(vec.capacity() >= 10); - /// - /// // ...but this may make the vector reallocate - /// vec.push(11); - /// assert_eq!(vec.len(), 11); - /// assert!(vec.capacity() >= 11); - /// - /// // A vector of a zero-sized type will always over-allocate, since no - /// // allocation is necessary - /// let vec_units = Vec::<()>::with_capacity(10); - /// assert_eq!(vec_units.capacity(), usize::MAX); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - #[must_use] - pub fn with_capacity(capacity: usize) -> Self { - Self::with_capacity_in(capacity, Global) - } - - /// Creates a `Vec` directly from a pointer, a capacity, and a length. - /// - /// # Safety - /// - /// This is highly unsafe, due to the number of invariants that aren't - /// checked: - /// - /// * `T` needs to have the same alignment as what `ptr` was allocated with. - /// (`T` having a less strict alignment is not sufficient, the alignment really - /// needs to be equal to satisfy the [`dealloc`] requirement that memory must be - /// allocated and deallocated with the same layout.) - /// * The size of `T` times the `capacity` (ie. the allocated size in bytes) needs - /// to be the same size as the pointer was allocated with. (Because similar to - /// alignment, [`dealloc`] must be called with the same layout `size`.) - /// * `length` needs to be less than or equal to `capacity`. - /// * The first `length` values must be properly initialized values of type `T`. - /// * `capacity` needs to be the capacity that the pointer was allocated with. - /// * The allocated size in bytes must be no larger than `isize::MAX`. - /// See the safety documentation of [`pointer::offset`](https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.offset). - /// - /// These requirements are always upheld by any `ptr` that has been allocated - /// via `Vec`. Other allocation sources are allowed if the invariants are - /// upheld. - /// - /// Violating these may cause problems like corrupting the allocator's - /// internal data structures. For example it is normally **not** safe - /// to build a `Vec` from a pointer to a C `char` array with length - /// `size_t`, doing so is only safe if the array was initially allocated by - /// a `Vec` or `String`. - /// It's also not safe to build one from a `Vec` and its length, because - /// the allocator cares about the alignment, and these two types have different - /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after - /// turning it into a `Vec` it'll be deallocated with alignment 1. To avoid - /// these issues, it is often preferable to do casting/transmuting using - /// [`slice::from_raw_parts`] instead. - /// - /// The ownership of `ptr` is effectively transferred to the - /// `Vec` which may then deallocate, reallocate or change the - /// contents of memory pointed to by the pointer at will. Ensure - /// that nothing else uses the pointer after calling this - /// function. - /// - /// [`String`]: alloc_crate::string::String - /// [`dealloc`]: crate::alloc::GlobalAlloc::dealloc - /// - /// # Examples - /// - /// ``` - /// use std::ptr; - /// use std::mem; - /// - /// let v = vec![1, 2, 3]; - /// - // FIXME Update this when vec_into_raw_parts is stabilized - /// // Prevent running `v`'s destructor so we are in complete control - /// // of the allocation. - /// let mut v = mem::ManuallyDrop::new(v); - /// - /// // Pull out the various important pieces of information about `v` - /// let p = v.as_mut_ptr(); - /// let len = v.len(); - /// let cap = v.capacity(); - /// - /// unsafe { - /// // Overwrite memory with 4, 5, 6 - /// for i in 0..len { - /// ptr::write(p.add(i), 4 + i); - /// } - /// - /// // Put everything back together into a Vec - /// let rebuilt = Vec::from_raw_parts(p, len, cap); - /// assert_eq!(rebuilt, [4, 5, 6]); - /// } - /// ``` - /// - /// Using memory that was allocated elsewhere: - /// - /// ```rust - /// #![feature(allocator_api)] - /// - /// use std::alloc::{AllocError, Allocator, Global, Layout}; - /// - /// fn main() { - /// let layout = Layout::array::(16).expect("overflow cannot happen"); - /// - /// let vec = unsafe { - /// let mem = match Global.allocate(layout) { - /// Ok(mem) => mem.cast::().as_ptr(), - /// Err(AllocError) => return, - /// }; - /// - /// mem.write(1_000_000); - /// - /// Vec::from_raw_parts_in(mem, 1, 16, Global) - /// }; - /// - /// assert_eq!(vec, &[1_000_000]); - /// assert_eq!(vec.capacity(), 16); - /// } - /// ``` - #[inline(always)] - pub unsafe fn from_raw_parts(ptr: *mut T, length: usize, capacity: usize) -> Self { - unsafe { Self::from_raw_parts_in(ptr, length, capacity, Global) } - } -} - -impl Vec { - /// Constructs a new, empty `Vec`. - /// - /// The vector will not allocate until elements are pushed onto it. - /// - /// # Examples - /// - /// ``` - /// use std::alloc::System; - /// - /// # #[allow(unused_mut)] - /// let mut vec: Vec = Vec::new_in(System); - /// ``` - #[inline(always)] - pub const fn new_in(alloc: A) -> Self { - Vec { - buf: RawVec::new_in(alloc), - len: 0, - } - } - - /// Constructs a new, empty `Vec` with at least the specified capacity - /// with the provided allocator. - /// - /// The vector will be able to hold at least `capacity` elements without - /// reallocating. This method is allowed to allocate for more elements than - /// `capacity`. If `capacity` is 0, the vector will not allocate. - /// - /// It is important to note that although the returned vector has the - /// minimum *capacity* specified, the vector will have a zero *length*. For - /// an explanation of the difference between length and capacity, see - /// *[Capacity and reallocation]*. - /// - /// If it is important to know the exact allocated capacity of a `Vec`, - /// always use the [`capacity`] method after construction. - /// - /// For `Vec` where `T` is a zero-sized type, there will be no allocation - /// and the capacity will always be `usize::MAX`. - /// - /// [Capacity and reallocation]: #capacity-and-reallocation - /// [`capacity`]: Vec::capacity - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Examples - /// - /// ``` - /// use std::alloc::System; - /// - /// let mut vec = Vec::with_capacity_in(10, System); - /// - /// // The vector contains no items, even though it has capacity for more - /// assert_eq!(vec.len(), 0); - /// assert_eq!(vec.capacity(), 10); - /// - /// // These are all done without reallocating... - /// for i in 0..10 { - /// vec.push(i); - /// } - /// assert_eq!(vec.len(), 10); - /// assert_eq!(vec.capacity(), 10); - /// - /// // ...but this may make the vector reallocate - /// vec.push(11); - /// assert_eq!(vec.len(), 11); - /// assert!(vec.capacity() >= 11); - /// - /// // A vector of a zero-sized type will always over-allocate, since no - /// // allocation is necessary - /// let vec_units = Vec::<(), System>::with_capacity_in(10, System); - /// assert_eq!(vec_units.capacity(), usize::MAX); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn with_capacity_in(capacity: usize, alloc: A) -> Self { - Vec { - buf: RawVec::with_capacity_in(capacity, alloc), - len: 0, - } - } - - /// Creates a `Vec` directly from a pointer, a capacity, a length, - /// and an allocator. - /// - /// # Safety - /// - /// This is highly unsafe, due to the number of invariants that aren't - /// checked: - /// - /// * `T` needs to have the same alignment as what `ptr` was allocated with. - /// (`T` having a less strict alignment is not sufficient, the alignment really - /// needs to be equal to satisfy the [`dealloc`] requirement that memory must be - /// allocated and deallocated with the same layout.) - /// * The size of `T` times the `capacity` (ie. the allocated size in bytes) needs - /// to be the same size as the pointer was allocated with. (Because similar to - /// alignment, [`dealloc`] must be called with the same layout `size`.) - /// * `length` needs to be less than or equal to `capacity`. - /// * The first `length` values must be properly initialized values of type `T`. - /// * `capacity` needs to [*fit*] the layout size that the pointer was allocated with. - /// * The allocated size in bytes must be no larger than `isize::MAX`. - /// See the safety documentation of [`pointer::offset`](https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.offset). - /// - /// These requirements are always upheld by any `ptr` that has been allocated - /// via `Vec`. Other allocation sources are allowed if the invariants are - /// upheld. - /// - /// Violating these may cause problems like corrupting the allocator's - /// internal data structures. For example it is **not** safe - /// to build a `Vec` from a pointer to a C `char` array with length `size_t`. - /// It's also not safe to build one from a `Vec` and its length, because - /// the allocator cares about the alignment, and these two types have different - /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after - /// turning it into a `Vec` it'll be deallocated with alignment 1. - /// - /// The ownership of `ptr` is effectively transferred to the - /// `Vec` which may then deallocate, reallocate or change the - /// contents of memory pointed to by the pointer at will. Ensure - /// that nothing else uses the pointer after calling this - /// function. - /// - /// [`String`]: alloc_crate::string::String - /// [`dealloc`]: crate::alloc::GlobalAlloc::dealloc - /// [*fit*]: crate::alloc::Allocator#memory-fitting - /// - /// # Examples - /// - /// ``` - /// use std::alloc::System; - /// - /// use std::ptr; - /// use std::mem; - /// - /// - /// # use allocator_api2::vec::Vec; - /// let mut v = Vec::with_capacity_in(3, System); - /// v.push(1); - /// v.push(2); - /// v.push(3); - /// - // FIXME Update this when vec_into_raw_parts is stabilized - /// // Prevent running `v`'s destructor so we are in complete control - /// // of the allocation. - /// let mut v = mem::ManuallyDrop::new(v); - /// - /// // Pull out the various important pieces of information about `v` - /// let p = v.as_mut_ptr(); - /// let len = v.len(); - /// let cap = v.capacity(); - /// let alloc = v.allocator(); - /// - /// unsafe { - /// // Overwrite memory with 4, 5, 6 - /// for i in 0..len { - /// ptr::write(p.add(i), 4 + i); - /// } - /// - /// // Put everything back together into a Vec - /// let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone()); - /// assert_eq!(rebuilt, [4, 5, 6]); - /// } - /// ``` - /// - /// Using memory that was allocated elsewhere: - /// - /// ```rust - /// use std::alloc::{alloc, Layout}; - /// - /// fn main() { - /// let layout = Layout::array::(16).expect("overflow cannot happen"); - /// let vec = unsafe { - /// let mem = alloc(layout).cast::(); - /// if mem.is_null() { - /// return; - /// } - /// - /// mem.write(1_000_000); - /// - /// Vec::from_raw_parts(mem, 1, 16) - /// }; - /// - /// assert_eq!(vec, &[1_000_000]); - /// assert_eq!(vec.capacity(), 16); - /// } - /// ``` - #[inline(always)] - pub unsafe fn from_raw_parts_in(ptr: *mut T, length: usize, capacity: usize, alloc: A) -> Self { - unsafe { - Vec { - buf: RawVec::from_raw_parts_in(ptr, capacity, alloc), - len: length, - } - } - } - - /// Decomposes a `Vec` into its raw components. - /// - /// Returns the raw pointer to the underlying data, the length of - /// the vector (in elements), and the allocated capacity of the - /// data (in elements). These are the same arguments in the same - /// order as the arguments to [`from_raw_parts`]. - /// - /// After calling this function, the caller is responsible for the - /// memory previously managed by the `Vec`. The only way to do - /// this is to convert the raw pointer, length, and capacity back - /// into a `Vec` with the [`from_raw_parts`] function, allowing - /// the destructor to perform the cleanup. - /// - /// [`from_raw_parts`]: Vec::from_raw_parts - /// - /// # Examples - /// - /// ``` - /// #![feature(vec_into_raw_parts)] - /// let v: Vec = vec![-1, 0, 1]; - /// - /// let (ptr, len, cap) = v.into_raw_parts(); - /// - /// let rebuilt = unsafe { - /// // We can now make changes to the components, such as - /// // transmuting the raw pointer to a compatible type. - /// let ptr = ptr as *mut u32; - /// - /// Vec::from_raw_parts(ptr, len, cap) - /// }; - /// assert_eq!(rebuilt, [4294967295, 0, 1]); - /// ``` - pub fn into_raw_parts(self) -> (*mut T, usize, usize) { - let mut me = ManuallyDrop::new(self); - (me.as_mut_ptr(), me.len(), me.capacity()) - } - - /// Decomposes a `Vec` into its raw components. - /// - /// Returns the raw pointer to the underlying data, the length of the vector (in elements), - /// the allocated capacity of the data (in elements), and the allocator. These are the same - /// arguments in the same order as the arguments to [`from_raw_parts_in`]. - /// - /// After calling this function, the caller is responsible for the - /// memory previously managed by the `Vec`. The only way to do - /// this is to convert the raw pointer, length, and capacity back - /// into a `Vec` with the [`from_raw_parts_in`] function, allowing - /// the destructor to perform the cleanup. - /// - /// [`from_raw_parts_in`]: Vec::from_raw_parts_in - /// - /// # Examples - /// - /// ``` - /// #![feature(allocator_api, vec_into_raw_parts)] - /// - /// use std::alloc::System; - /// - /// let mut v: Vec = Vec::new_in(System); - /// v.push(-1); - /// v.push(0); - /// v.push(1); - /// - /// let (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc(); - /// - /// let rebuilt = unsafe { - /// // We can now make changes to the components, such as - /// // transmuting the raw pointer to a compatible type. - /// let ptr = ptr as *mut u32; - /// - /// Vec::from_raw_parts_in(ptr, len, cap, alloc) - /// }; - /// assert_eq!(rebuilt, [4294967295, 0, 1]); - /// ``` - // #[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")] - pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A) { - let mut me = ManuallyDrop::new(self); - let len = me.len(); - let capacity = me.capacity(); - let ptr = me.as_mut_ptr(); - let alloc = unsafe { ptr::read(me.allocator()) }; - (ptr, len, capacity, alloc) - } - - /// Returns the total number of elements the vector can hold without - /// reallocating. - /// - /// # Examples - /// - /// ``` - /// let mut vec: Vec = Vec::with_capacity(10); - /// vec.push(42); - /// assert_eq!(vec.capacity(), 10); - /// ``` - #[inline(always)] - pub fn capacity(&self) -> usize { - self.buf.capacity() - } - - /// Reserves capacity for at least `additional` more elements to be inserted - /// in the given `Vec`. The collection may reserve more space to - /// speculatively avoid frequent reallocations. After calling `reserve`, - /// capacity will be greater than or equal to `self.len() + additional`. - /// Does nothing if capacity is already sufficient. - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1]; - /// vec.reserve(10); - /// assert!(vec.capacity() >= 11); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn reserve(&mut self, additional: usize) { - self.buf.reserve(self.len, additional); - } - - /// Reserves the minimum capacity for at least `additional` more elements to - /// be inserted in the given `Vec`. Unlike [`reserve`], this will not - /// deliberately over-allocate to speculatively avoid frequent allocations. - /// After calling `reserve_exact`, capacity will be greater than or equal to - /// `self.len() + additional`. Does nothing if the capacity is already - /// sufficient. - /// - /// Note that the allocator may give the collection more space than it - /// requests. Therefore, capacity can not be relied upon to be precisely - /// minimal. Prefer [`reserve`] if future insertions are expected. - /// - /// [`reserve`]: Vec::reserve - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1]; - /// vec.reserve_exact(10); - /// assert!(vec.capacity() >= 11); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn reserve_exact(&mut self, additional: usize) { - self.buf.reserve_exact(self.len, additional); - } - - /// Tries to reserve capacity for at least `additional` more elements to be inserted - /// in the given `Vec`. The collection may reserve more space to speculatively avoid - /// frequent reallocations. After calling `try_reserve`, capacity will be - /// greater than or equal to `self.len() + additional` if it returns - /// `Ok(())`. Does nothing if capacity is already sufficient. This method - /// preserves the contents even if an error occurs. - /// - /// # Errors - /// - /// If the capacity overflows, or the allocator reports a failure, then an error - /// is returned. - /// - /// # Examples - /// - /// ``` - /// use std::collections::TryReserveError; - /// - /// fn process_data(data: &[u32]) -> Result, TryReserveError> { - /// let mut output = Vec::new(); - /// - /// // Pre-reserve the memory, exiting if we can't - /// output.try_reserve(data.len())?; - /// - /// // Now we know this can't OOM in the middle of our complex work - /// output.extend(data.iter().map(|&val| { - /// val * 2 + 5 // very complicated - /// })); - /// - /// Ok(output) - /// } - /// # process_data(&[1, 2, 3]).expect("why is the test harness OOMing on 12 bytes?"); - /// ``` - #[inline(always)] - pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { - self.buf.try_reserve(self.len, additional) - } - - /// Tries to reserve the minimum capacity for at least `additional` - /// elements to be inserted in the given `Vec`. Unlike [`try_reserve`], - /// this will not deliberately over-allocate to speculatively avoid frequent - /// allocations. After calling `try_reserve_exact`, capacity will be greater - /// than or equal to `self.len() + additional` if it returns `Ok(())`. - /// Does nothing if the capacity is already sufficient. - /// - /// Note that the allocator may give the collection more space than it - /// requests. Therefore, capacity can not be relied upon to be precisely - /// minimal. Prefer [`try_reserve`] if future insertions are expected. - /// - /// [`try_reserve`]: Vec::try_reserve - /// - /// # Errors - /// - /// If the capacity overflows, or the allocator reports a failure, then an error - /// is returned. - /// - /// # Examples - /// - /// ``` - /// use std::collections::TryReserveError; - /// - /// fn process_data(data: &[u32]) -> Result, TryReserveError> { - /// let mut output = Vec::new(); - /// - /// // Pre-reserve the memory, exiting if we can't - /// output.try_reserve_exact(data.len())?; - /// - /// // Now we know this can't OOM in the middle of our complex work - /// output.extend(data.iter().map(|&val| { - /// val * 2 + 5 // very complicated - /// })); - /// - /// Ok(output) - /// } - /// # process_data(&[1, 2, 3]).expect("why is the test harness OOMing on 12 bytes?"); - /// ``` - #[inline(always)] - pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { - self.buf.try_reserve_exact(self.len, additional) - } - - /// Shrinks the capacity of the vector as much as possible. - /// - /// It will drop down as close as possible to the length but the allocator - /// may still inform the vector that there is space for a few more elements. - /// - /// # Examples - /// - /// ``` - /// let mut vec = Vec::with_capacity(10); - /// vec.extend([1, 2, 3]); - /// assert_eq!(vec.capacity(), 10); - /// vec.shrink_to_fit(); - /// assert!(vec.capacity() >= 3); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn shrink_to_fit(&mut self) { - // The capacity is never less than the length, and there's nothing to do when - // they are equal, so we can avoid the panic case in `RawVec::shrink_to_fit` - // by only calling it with a greater capacity. - if self.capacity() > self.len { - self.buf.shrink_to_fit(self.len); - } - } - - /// Shrinks the capacity of the vector with a lower bound. - /// - /// The capacity will remain at least as large as both the length - /// and the supplied value. - /// - /// If the current capacity is less than the lower limit, this is a no-op. - /// - /// # Examples - /// - /// ``` - /// let mut vec = Vec::with_capacity(10); - /// vec.extend([1, 2, 3]); - /// assert_eq!(vec.capacity(), 10); - /// vec.shrink_to(4); - /// assert!(vec.capacity() >= 4); - /// vec.shrink_to(0); - /// assert!(vec.capacity() >= 3); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn shrink_to(&mut self, min_capacity: usize) { - if self.capacity() > min_capacity { - self.buf.shrink_to_fit(cmp::max(self.len, min_capacity)); - } - } - - /// Converts the vector into [`Box<[T]>`][owned slice]. - /// - /// If the vector has excess capacity, its items will be moved into a - /// newly-allocated buffer with exactly the right capacity. - /// - /// [owned slice]: Box - /// - /// # Examples - /// - /// ``` - /// let v = vec![1, 2, 3]; - /// - /// let slice = v.into_boxed_slice(); - /// ``` - /// - /// Any excess capacity is removed: - /// - /// ``` - /// let mut vec = Vec::with_capacity(10); - /// vec.extend([1, 2, 3]); - /// - /// assert_eq!(vec.capacity(), 10); - /// let slice = vec.into_boxed_slice(); - /// assert_eq!(slice.into_vec().capacity(), 3); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub(crate) fn into_boxed_slice(mut self) -> Box<[T], A> { - unsafe { - self.shrink_to_fit(); - let me = ManuallyDrop::new(self); - let buf = ptr::read(&me.buf); - let len = me.len(); - buf.into_box(len).assume_init() - } - } - - /// Shortens the vector, keeping the first `len` elements and dropping - /// the rest. - /// - /// If `len` is greater than the vector's current length, this has no - /// effect. - /// - /// The [`drain`] method can emulate `truncate`, but causes the excess - /// elements to be returned instead of dropped. - /// - /// Note that this method has no effect on the allocated capacity - /// of the vector. - /// - /// # Examples - /// - /// Truncating a five element vector to two elements: - /// - /// ``` - /// let mut vec = vec![1, 2, 3, 4, 5]; - /// vec.truncate(2); - /// assert_eq!(vec, [1, 2]); - /// ``` - /// - /// No truncation occurs when `len` is greater than the vector's current - /// length: - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// vec.truncate(8); - /// assert_eq!(vec, [1, 2, 3]); - /// ``` - /// - /// Truncating when `len == 0` is equivalent to calling the [`clear`] - /// method. - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// vec.truncate(0); - /// assert_eq!(vec, []); - /// ``` - /// - /// [`clear`]: Vec::clear - /// [`drain`]: Vec::drain - #[inline(always)] - pub fn truncate(&mut self, len: usize) { - // This is safe because: - // - // * the slice passed to `drop_in_place` is valid; the `len > self.len` - // case avoids creating an invalid slice, and - // * the `len` of the vector is shrunk before calling `drop_in_place`, - // such that no value will be dropped twice in case `drop_in_place` - // were to panic once (if it panics twice, the program aborts). - unsafe { - // Note: It's intentional that this is `>` and not `>=`. - // Changing it to `>=` has negative performance - // implications in some cases. See #78884 for more. - if len > self.len { - return; - } - let remaining_len = self.len - len; - let s = ptr::slice_from_raw_parts_mut(self.as_mut_ptr().add(len), remaining_len); - self.len = len; - ptr::drop_in_place(s); - } - } - - /// Extracts a slice containing the entire vector. - /// - /// Equivalent to `&s[..]`. - /// - /// # Examples - /// - /// ``` - /// use std::io::{self, Write}; - /// let buffer = vec![1, 2, 3, 5, 8]; - /// io::sink().write(buffer.as_slice()).unwrap(); - /// ``` - #[inline(always)] - pub fn as_slice(&self) -> &[T] { - self - } - - /// Extracts a mutable slice of the entire vector. - /// - /// Equivalent to `&mut s[..]`. - /// - /// # Examples - /// - /// ``` - /// use std::io::{self, Read}; - /// let mut buffer = vec![0; 3]; - /// io::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap(); - /// ``` - #[inline(always)] - pub fn as_mut_slice(&mut self) -> &mut [T] { - self - } - - /// Returns a raw pointer to the vector's buffer, or a dangling raw pointer - /// valid for zero sized reads if the vector didn't allocate. - /// - /// The caller must ensure that the vector outlives the pointer this - /// function returns, or else it will end up pointing to garbage. - /// Modifying the vector may cause its buffer to be reallocated, - /// which would also make any pointers to it invalid. - /// - /// The caller must also ensure that the memory the pointer (non-transitively) points to - /// is never written to (except inside an `UnsafeCell`) using this pointer or any pointer - /// derived from it. If you need to mutate the contents of the slice, use [`as_mut_ptr`]. - /// - /// # Examples - /// - /// ``` - /// let x = vec![1, 2, 4]; - /// let x_ptr = x.as_ptr(); - /// - /// unsafe { - /// for i in 0..x.len() { - /// assert_eq!(*x_ptr.add(i), 1 << i); - /// } - /// } - /// ``` - /// - /// [`as_mut_ptr`]: Vec::as_mut_ptr - #[inline(always)] - pub fn as_ptr(&self) -> *const T { - // We shadow the slice method of the same name to avoid going through - // `deref`, which creates an intermediate reference. - let ptr = self.buf.ptr(); - unsafe { - assume(!ptr.is_null()); - } - ptr - } - - /// Returns an unsafe mutable pointer to the vector's buffer, or a dangling - /// raw pointer valid for zero sized reads if the vector didn't allocate. - /// - /// The caller must ensure that the vector outlives the pointer this - /// function returns, or else it will end up pointing to garbage. - /// Modifying the vector may cause its buffer to be reallocated, - /// which would also make any pointers to it invalid. - /// - /// # Examples - /// - /// ``` - /// // Allocate vector big enough for 4 elements. - /// let size = 4; - /// let mut x: Vec = Vec::with_capacity(size); - /// let x_ptr = x.as_mut_ptr(); - /// - /// // Initialize elements via raw pointer writes, then set length. - /// unsafe { - /// for i in 0..size { - /// *x_ptr.add(i) = i as i32; - /// } - /// x.set_len(size); - /// } - /// assert_eq!(&*x, &[0, 1, 2, 3]); - /// ``` - #[inline(always)] - pub fn as_mut_ptr(&mut self) -> *mut T { - // We shadow the slice method of the same name to avoid going through - // `deref_mut`, which creates an intermediate reference. - let ptr = self.buf.ptr(); - unsafe { - assume(!ptr.is_null()); - } - ptr - } - - /// Returns a reference to the underlying allocator. - #[inline(always)] - pub fn allocator(&self) -> &A { - self.buf.allocator() - } - - /// Forces the length of the vector to `new_len`. - /// - /// This is a low-level operation that maintains none of the normal - /// invariants of the type. Normally changing the length of a vector - /// is done using one of the safe operations instead, such as - /// [`truncate`], [`resize`], [`extend`], or [`clear`]. - /// - /// [`truncate`]: Vec::truncate - /// [`resize`]: Vec::resize - /// [`extend`]: Extend::extend - /// [`clear`]: Vec::clear - /// - /// # Safety - /// - /// - `new_len` must be less than or equal to [`capacity()`]. - /// - The elements at `old_len..new_len` must be initialized. - /// - /// [`capacity()`]: Vec::capacity - /// - /// # Examples - /// - /// This method can be useful for situations in which the vector - /// is serving as a buffer for other code, particularly over FFI: - /// - /// ```no_run - /// # #![allow(dead_code)] - /// # // This is just a minimal skeleton for the doc example; - /// # // don't use this as a starting point for a real library. - /// # pub struct StreamWrapper { strm: *mut std::ffi::c_void } - /// # const Z_OK: i32 = 0; - /// # extern "C" { - /// # fn deflateGetDictionary( - /// # strm: *mut std::ffi::c_void, - /// # dictionary: *mut u8, - /// # dictLength: *mut usize, - /// # ) -> i32; - /// # } - /// # impl StreamWrapper { - /// pub fn get_dictionary(&self) -> Option> { - /// // Per the FFI method's docs, "32768 bytes is always enough". - /// let mut dict = Vec::with_capacity(32_768); - /// let mut dict_length = 0; - /// // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that: - /// // 1. `dict_length` elements were initialized. - /// // 2. `dict_length` <= the capacity (32_768) - /// // which makes `set_len` safe to call. - /// unsafe { - /// // Make the FFI call... - /// let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length); - /// if r == Z_OK { - /// // ...and update the length to what was initialized. - /// dict.set_len(dict_length); - /// Some(dict) - /// } else { - /// None - /// } - /// } - /// } - /// # } - /// ``` - /// - /// While the following example is sound, there is a memory leak since - /// the inner vectors were not freed prior to the `set_len` call: - /// - /// ``` - /// let mut vec = vec![vec![1, 0, 0], - /// vec![0, 1, 0], - /// vec![0, 0, 1]]; - /// // SAFETY: - /// // 1. `old_len..0` is empty so no elements need to be initialized. - /// // 2. `0 <= capacity` always holds whatever `capacity` is. - /// unsafe { - /// vec.set_len(0); - /// } - /// ``` - /// - /// Normally, here, one would use [`clear`] instead to correctly drop - /// the contents and thus not leak memory. - #[inline(always)] - pub unsafe fn set_len(&mut self, new_len: usize) { - debug_assert!(new_len <= self.capacity()); - - self.len = new_len; - } - - /// Removes an element from the vector and returns it. - /// - /// The removed element is replaced by the last element of the vector. - /// - /// This does not preserve ordering, but is *O*(1). - /// If you need to preserve the element order, use [`remove`] instead. - /// - /// [`remove`]: Vec::remove - /// - /// # Panics - /// - /// Panics if `index` is out of bounds. - /// - /// # Examples - /// - /// ``` - /// let mut v = vec!["foo", "bar", "baz", "qux"]; - /// - /// assert_eq!(v.swap_remove(1), "bar"); - /// assert_eq!(v, ["foo", "qux", "baz"]); - /// - /// assert_eq!(v.swap_remove(0), "foo"); - /// assert_eq!(v, ["baz", "qux"]); - /// ``` - #[inline(always)] - pub fn swap_remove(&mut self, index: usize) -> T { - #[cold] - #[inline(never)] - fn assert_failed(index: usize, len: usize) -> ! { - panic!( - "swap_remove index (is {}) should be < len (is {})", - index, len - ); - } - - let len = self.len(); - if index >= len { - assert_failed(index, len); - } - unsafe { - // We replace self[index] with the last element. Note that if the - // bounds check above succeeds there must be a last element (which - // can be self[index] itself). - let value = ptr::read(self.as_ptr().add(index)); - let base_ptr = self.as_mut_ptr(); - ptr::copy(base_ptr.add(len - 1), base_ptr.add(index), 1); - self.set_len(len - 1); - value - } - } - - /// Inserts an element at position `index` within the vector, shifting all - /// elements after it to the right. - /// - /// # Panics - /// - /// Panics if `index > len`. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// vec.insert(1, 4); - /// assert_eq!(vec, [1, 4, 2, 3]); - /// vec.insert(4, 5); - /// assert_eq!(vec, [1, 4, 2, 3, 5]); - /// ``` - #[cfg(not(no_global_oom_handling))] - pub fn insert(&mut self, index: usize, element: T) { - #[cold] - #[inline(never)] - fn assert_failed(index: usize, len: usize) -> ! { - panic!( - "insertion index (is {}) should be <= len (is {})", - index, len - ); - } - - let len = self.len(); - - // space for the new element - if len == self.buf.capacity() { - self.reserve(1); - } - - unsafe { - // infallible - // The spot to put the new value - { - let p = self.as_mut_ptr().add(index); - match cmp::Ord::cmp(&index, &len) { - Ordering::Less => { - // Shift everything over to make space. (Duplicating the - // `index`th element into two consecutive places.) - ptr::copy(p, p.add(1), len - index); - } - Ordering::Equal => { - // No elements need shifting. - } - Ordering::Greater => { - assert_failed(index, len); - } - } - // Write it in, overwriting the first copy of the `index`th - // element. - ptr::write(p, element); - } - self.set_len(len + 1); - } - } - - /// Removes and returns the element at position `index` within the vector, - /// shifting all elements after it to the left. - /// - /// Note: Because this shifts over the remaining elements, it has a - /// worst-case performance of *O*(*n*). If you don't need the order of elements - /// to be preserved, use [`swap_remove`] instead. If you'd like to remove - /// elements from the beginning of the `Vec`, consider using - /// [`VecDeque::pop_front`] instead. - /// - /// [`swap_remove`]: Vec::swap_remove - /// [`VecDeque::pop_front`]: alloc_crate::collections::VecDeque::pop_front - /// - /// # Panics - /// - /// Panics if `index` is out of bounds. - /// - /// # Examples - /// - /// ``` - /// let mut v = vec![1, 2, 3]; - /// assert_eq!(v.remove(1), 2); - /// assert_eq!(v, [1, 3]); - /// ``` - #[track_caller] - #[inline(always)] - pub fn remove(&mut self, index: usize) -> T { - #[cold] - #[inline(never)] - #[track_caller] - fn assert_failed(index: usize, len: usize) -> ! { - panic!("removal index (is {}) should be < len (is {})", index, len); - } - - let len = self.len(); - if index >= len { - assert_failed(index, len); - } - unsafe { - // infallible - let ret; - { - // the place we are taking from. - let ptr = self.as_mut_ptr().add(index); - // copy it out, unsafely having a copy of the value on - // the stack and in the vector at the same time. - ret = ptr::read(ptr); - - // Shift everything down to fill in that spot. - ptr::copy(ptr.add(1), ptr, len - index - 1); - } - self.set_len(len - 1); - ret - } - } - - /// Retains only the elements specified by the predicate. - /// - /// In other words, remove all elements `e` for which `f(&e)` returns `false`. - /// This method operates in place, visiting each element exactly once in the - /// original order, and preserves the order of the retained elements. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3, 4]; - /// vec.retain(|&x| x % 2 == 0); - /// assert_eq!(vec, [2, 4]); - /// ``` - /// - /// Because the elements are visited exactly once in the original order, - /// external state may be used to decide which elements to keep. - /// - /// ``` - /// let mut vec = vec![1, 2, 3, 4, 5]; - /// let keep = [false, true, true, false, true]; - /// let mut iter = keep.iter(); - /// vec.retain(|_| *iter.next().unwrap()); - /// assert_eq!(vec, [2, 3, 5]); - /// ``` - #[inline(always)] - pub fn retain(&mut self, mut f: F) - where - F: FnMut(&T) -> bool, - { - self.retain_mut(|elem| f(elem)); - } - - /// Retains only the elements specified by the predicate, passing a mutable reference to it. - /// - /// In other words, remove all elements `e` such that `f(&mut e)` returns `false`. - /// This method operates in place, visiting each element exactly once in the - /// original order, and preserves the order of the retained elements. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3, 4]; - /// vec.retain_mut(|x| if *x <= 3 { - /// *x += 1; - /// true - /// } else { - /// false - /// }); - /// assert_eq!(vec, [2, 3, 4]); - /// ``` - #[inline] - pub fn retain_mut(&mut self, mut f: F) - where - F: FnMut(&mut T) -> bool, - { - let original_len = self.len(); - // Avoid double drop if the drop guard is not executed, - // since we may make some holes during the process. - unsafe { self.set_len(0) }; - - // Vec: [Kept, Kept, Hole, Hole, Hole, Hole, Unchecked, Unchecked] - // |<- processed len ->| ^- next to check - // |<- deleted cnt ->| - // |<- original_len ->| - // Kept: Elements which predicate returns true on. - // Hole: Moved or dropped element slot. - // Unchecked: Unchecked valid elements. - // - // This drop guard will be invoked when predicate or `drop` of element panicked. - // It shifts unchecked elements to cover holes and `set_len` to the correct length. - // In cases when predicate and `drop` never panick, it will be optimized out. - struct BackshiftOnDrop<'a, T, A: Allocator> { - v: &'a mut Vec, - processed_len: usize, - deleted_cnt: usize, - original_len: usize, - } - - impl Drop for BackshiftOnDrop<'_, T, A> { - fn drop(&mut self) { - if self.deleted_cnt > 0 { - // SAFETY: Trailing unchecked items must be valid since we never touch them. - unsafe { - ptr::copy( - self.v.as_ptr().add(self.processed_len), - self.v - .as_mut_ptr() - .add(self.processed_len - self.deleted_cnt), - self.original_len - self.processed_len, - ); - } - } - // SAFETY: After filling holes, all items are in contiguous memory. - unsafe { - self.v.set_len(self.original_len - self.deleted_cnt); - } - } - } - - let mut g = BackshiftOnDrop { - v: self, - processed_len: 0, - deleted_cnt: 0, - original_len, - }; - - fn process_loop( - original_len: usize, - f: &mut F, - g: &mut BackshiftOnDrop<'_, T, A>, - ) where - F: FnMut(&mut T) -> bool, - { - while g.processed_len != original_len { - // SAFETY: Unchecked element must be valid. - let cur = unsafe { &mut *g.v.as_mut_ptr().add(g.processed_len) }; - if !f(cur) { - // Advance early to avoid double drop if `drop_in_place` panicked. - g.processed_len += 1; - g.deleted_cnt += 1; - // SAFETY: We never touch this element again after dropped. - unsafe { ptr::drop_in_place(cur) }; - // We already advanced the counter. - if DELETED { - continue; - } else { - break; - } - } - if DELETED { - // SAFETY: `deleted_cnt` > 0, so the hole slot must not overlap with current element. - // We use copy for move, and never touch this element again. - unsafe { - let hole_slot = g.v.as_mut_ptr().add(g.processed_len - g.deleted_cnt); - ptr::copy_nonoverlapping(cur, hole_slot, 1); - } - } - g.processed_len += 1; - } - } - - // Stage 1: Nothing was deleted. - process_loop::(original_len, &mut f, &mut g); - - // Stage 2: Some elements were deleted. - process_loop::(original_len, &mut f, &mut g); - - // All item are processed. This can be optimized to `set_len` by LLVM. - drop(g); - } - - /// Removes all but the first of consecutive elements in the vector that resolve to the same - /// key. - /// - /// If the vector is sorted, this removes all duplicates. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![10, 20, 21, 30, 20]; - /// - /// vec.dedup_by_key(|i| *i / 10); - /// - /// assert_eq!(vec, [10, 20, 30, 20]); - /// ``` - #[inline(always)] - pub fn dedup_by_key(&mut self, mut key: F) - where - F: FnMut(&mut T) -> K, - K: PartialEq, - { - self.dedup_by(|a, b| key(a) == key(b)) - } - - /// Removes all but the first of consecutive elements in the vector satisfying a given equality - /// relation. - /// - /// The `same_bucket` function is passed references to two elements from the vector and - /// must determine if the elements compare equal. The elements are passed in opposite order - /// from their order in the slice, so if `same_bucket(a, b)` returns `true`, `a` is removed. - /// - /// If the vector is sorted, this removes all duplicates. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec!["foo", "bar", "Bar", "baz", "bar"]; - /// - /// vec.dedup_by(|a, b| a.eq_ignore_ascii_case(b)); - /// - /// assert_eq!(vec, ["foo", "bar", "baz", "bar"]); - /// ``` - #[inline] - pub fn dedup_by(&mut self, mut same_bucket: F) - where - F: FnMut(&mut T, &mut T) -> bool, - { - let len = self.len(); - if len <= 1 { - return; - } - - /* INVARIANT: vec.len() > read >= write > write-1 >= 0 */ - struct FillGapOnDrop<'a, T, A: Allocator> { - /* Offset of the element we want to check if it is duplicate */ - read: usize, - - /* Offset of the place where we want to place the non-duplicate - * when we find it. */ - write: usize, - - /* The Vec that would need correction if `same_bucket` panicked */ - vec: &'a mut Vec, - } - - impl<'a, T, A: Allocator> Drop for FillGapOnDrop<'a, T, A> { - fn drop(&mut self) { - /* This code gets executed when `same_bucket` panics */ - - /* SAFETY: invariant guarantees that `read - write` - * and `len - read` never overflow and that the copy is always - * in-bounds. */ - unsafe { - let ptr = self.vec.as_mut_ptr(); - let len = self.vec.len(); - - /* How many items were left when `same_bucket` panicked. - * Basically vec[read..].len() */ - let items_left = len.wrapping_sub(self.read); - - /* Pointer to first item in vec[write..write+items_left] slice */ - let dropped_ptr = ptr.add(self.write); - /* Pointer to first item in vec[read..] slice */ - let valid_ptr = ptr.add(self.read); - - /* Copy `vec[read..]` to `vec[write..write+items_left]`. - * The slices can overlap, so `copy_nonoverlapping` cannot be used */ - ptr::copy(valid_ptr, dropped_ptr, items_left); - - /* How many items have been already dropped - * Basically vec[read..write].len() */ - let dropped = self.read.wrapping_sub(self.write); - - self.vec.set_len(len - dropped); - } - } - } - - let mut gap = FillGapOnDrop { - read: 1, - write: 1, - vec: self, - }; - let ptr = gap.vec.as_mut_ptr(); - - /* Drop items while going through Vec, it should be more efficient than - * doing slice partition_dedup + truncate */ - - /* SAFETY: Because of the invariant, read_ptr, prev_ptr and write_ptr - * are always in-bounds and read_ptr never aliases prev_ptr */ - unsafe { - while gap.read < len { - let read_ptr = ptr.add(gap.read); - let prev_ptr = ptr.add(gap.write.wrapping_sub(1)); - - if same_bucket(&mut *read_ptr, &mut *prev_ptr) { - // Increase `gap.read` now since the drop may panic. - gap.read += 1; - /* We have found duplicate, drop it in-place */ - ptr::drop_in_place(read_ptr); - } else { - let write_ptr = ptr.add(gap.write); - - /* Because `read_ptr` can be equal to `write_ptr`, we either - * have to use `copy` or conditional `copy_nonoverlapping`. - * Looks like the first option is faster. */ - ptr::copy(read_ptr, write_ptr, 1); - - /* We have filled that place, so go further */ - gap.write += 1; - gap.read += 1; - } - } - - /* Technically we could let `gap` clean up with its Drop, but - * when `same_bucket` is guaranteed to not panic, this bloats a little - * the codegen, so we just do it manually */ - gap.vec.set_len(gap.write); - mem::forget(gap); - } - } - - /// Appends an element to the back of a collection. - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2]; - /// vec.push(3); - /// assert_eq!(vec, [1, 2, 3]); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn push(&mut self, value: T) { - // This will panic or abort if we would allocate > isize::MAX bytes - // or if the length increment would overflow for zero-sized types. - if self.len == self.buf.capacity() { - self.buf.reserve_for_push(self.len); - } - unsafe { - let end = self.as_mut_ptr().add(self.len); - ptr::write(end, value); - self.len += 1; - } - } - - /// Appends an element if there is sufficient spare capacity, otherwise an error is returned - /// with the element. - /// - /// Unlike [`push`] this method will not reallocate when there's insufficient capacity. - /// The caller should use [`reserve`] or [`try_reserve`] to ensure that there is enough capacity. - /// - /// [`push`]: Vec::push - /// [`reserve`]: Vec::reserve - /// [`try_reserve`]: Vec::try_reserve - /// - /// # Examples - /// - /// A manual, panic-free alternative to [`FromIterator`]: - /// - /// ``` - /// #![feature(vec_push_within_capacity)] - /// - /// use std::collections::TryReserveError; - /// fn from_iter_fallible(iter: impl Iterator) -> Result, TryReserveError> { - /// let mut vec = Vec::new(); - /// for value in iter { - /// if let Err(value) = vec.push_within_capacity(value) { - /// vec.try_reserve(1)?; - /// // this cannot fail, the previous line either returned or added at least 1 free slot - /// let _ = vec.push_within_capacity(value); - /// } - /// } - /// Ok(vec) - /// } - /// assert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100))); - /// ``` - #[inline(always)] - pub fn push_within_capacity(&mut self, value: T) -> Result<(), T> { - if self.len == self.buf.capacity() { - return Err(value); - } - unsafe { - let end = self.as_mut_ptr().add(self.len); - ptr::write(end, value); - self.len += 1; - } - Ok(()) - } - - /// Removes the last element from a vector and returns it, or [`None`] if it - /// is empty. - /// - /// If you'd like to pop the first element, consider using - /// [`VecDeque::pop_front`] instead. - /// - /// [`VecDeque::pop_front`]: alloc_crate::collections::VecDeque::pop_front - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// assert_eq!(vec.pop(), Some(3)); - /// assert_eq!(vec, [1, 2]); - /// ``` - #[inline(always)] - pub fn pop(&mut self) -> Option { - if self.len == 0 { - None - } else { - unsafe { - self.len -= 1; - Some(ptr::read(self.as_ptr().add(self.len()))) - } - } - } - - /// Moves all the elements of `other` into `self`, leaving `other` empty. - /// - /// # Panics - /// - /// Panics if the new capacity exceeds `isize::MAX` bytes. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// let mut vec2 = vec![4, 5, 6]; - /// vec.append(&mut vec2); - /// assert_eq!(vec, [1, 2, 3, 4, 5, 6]); - /// assert_eq!(vec2, []); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn append(&mut self, other: &mut Self) { - unsafe { - self.append_elements(other.as_slice() as _); - other.set_len(0); - } - } - - /// Appends elements to `self` from other buffer. - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - unsafe fn append_elements(&mut self, other: *const [T]) { - let count = unsafe { (*other).len() }; - self.reserve(count); - let len = self.len(); - unsafe { ptr::copy_nonoverlapping(other as *const T, self.as_mut_ptr().add(len), count) }; - self.len += count; - } - - /// Removes the specified range from the vector in bulk, returning all - /// removed elements as an iterator. If the iterator is dropped before - /// being fully consumed, it drops the remaining removed elements. - /// - /// The returned iterator keeps a mutable borrow on the vector to optimize - /// its implementation. - /// - /// # Panics - /// - /// Panics if the starting point is greater than the end point or if - /// the end point is greater than the length of the vector. - /// - /// # Leaking - /// - /// If the returned iterator goes out of scope without being dropped (due to - /// [`mem::forget`], for example), the vector may have lost and leaked - /// elements arbitrarily, including elements outside the range. - /// - /// # Examples - /// - /// ``` - /// let mut v = vec![1, 2, 3]; - /// let u: Vec<_> = v.drain(1..).collect(); - /// assert_eq!(v, &[1]); - /// assert_eq!(u, &[2, 3]); - /// - /// // A full range clears the vector, like `clear()` does - /// v.drain(..); - /// assert_eq!(v, &[]); - /// ``` - #[inline(always)] - pub fn drain(&mut self, range: R) -> Drain<'_, T, A> - where - R: RangeBounds, - { - // Memory safety - // - // When the Drain is first created, it shortens the length of - // the source vector to make sure no uninitialized or moved-from elements - // are accessible at all if the Drain's destructor never gets to run. - // - // Drain will ptr::read out the values to remove. - // When finished, remaining tail of the vec is copied back to cover - // the hole, and the vector length is restored to the new length. - // - let len = self.len(); - - // Replaced by code below - // let Range { start, end } = slice::range(range, ..len); - - // Panics if range is out of bounds - let _ = &self.as_slice()[(range.start_bound().cloned(), range.end_bound().cloned())]; - - let start = match range.start_bound() { - Bound::Included(&n) => n, - Bound::Excluded(&n) => n + 1, - Bound::Unbounded => 0, - }; - let end = match range.end_bound() { - Bound::Included(&n) => n + 1, - Bound::Excluded(&n) => n, - Bound::Unbounded => len, - }; - - unsafe { - // set self.vec length's to start, to be safe in case Drain is leaked - self.set_len(start); - let range_slice = slice::from_raw_parts(self.as_ptr().add(start), end - start); - Drain { - tail_start: end, - tail_len: len - end, - iter: range_slice.iter(), - vec: NonNull::from(self), - } - } - } - - /// Clears the vector, removing all values. - /// - /// Note that this method has no effect on the allocated capacity - /// of the vector. - /// - /// # Examples - /// - /// ``` - /// let mut v = vec![1, 2, 3]; - /// - /// v.clear(); - /// - /// assert!(v.is_empty()); - /// ``` - #[inline(always)] - pub fn clear(&mut self) { - let elems: *mut [T] = self.as_mut_slice(); - - // SAFETY: - // - `elems` comes directly from `as_mut_slice` and is therefore valid. - // - Setting `self.len` before calling `drop_in_place` means that, - // if an element's `Drop` impl panics, the vector's `Drop` impl will - // do nothing (leaking the rest of the elements) instead of dropping - // some twice. - unsafe { - self.len = 0; - ptr::drop_in_place(elems); - } - } - - /// Returns the number of elements in the vector, also referred to - /// as its 'length'. - /// - /// # Examples - /// - /// ``` - /// let a = vec![1, 2, 3]; - /// assert_eq!(a.len(), 3); - /// ``` - #[inline(always)] - pub fn len(&self) -> usize { - self.len - } - - /// Returns `true` if the vector contains no elements. - /// - /// # Examples - /// - /// ``` - /// let mut v = Vec::new(); - /// assert!(v.is_empty()); - /// - /// v.push(1); - /// assert!(!v.is_empty()); - /// ``` - #[inline(always)] - pub fn is_empty(&self) -> bool { - self.len() == 0 - } - - /// Splits the collection into two at the given index. - /// - /// Returns a newly allocated vector containing the elements in the range - /// `[at, len)`. After the call, the original vector will be left containing - /// the elements `[0, at)` with its previous capacity unchanged. - /// - /// # Panics - /// - /// Panics if `at > len`. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// let vec2 = vec.split_off(1); - /// assert_eq!(vec, [1]); - /// assert_eq!(vec2, [2, 3]); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - #[must_use = "use `.truncate()` if you don't need the other half"] - pub fn split_off(&mut self, at: usize) -> Self - where - A: Clone, - { - #[cold] - #[inline(never)] - fn assert_failed(at: usize, len: usize) -> ! { - panic!("`at` split index (is {}) should be <= len (is {})", at, len); - } - - if at > self.len() { - assert_failed(at, self.len()); - } - - if at == 0 { - // the new vector can take over the original buffer and avoid the copy - return mem::replace( - self, - Vec::with_capacity_in(self.capacity(), self.allocator().clone()), - ); - } - - let other_len = self.len - at; - let mut other = Vec::with_capacity_in(other_len, self.allocator().clone()); - - // Unsafely `set_len` and copy items to `other`. - unsafe { - self.set_len(at); - other.set_len(other_len); - - ptr::copy_nonoverlapping(self.as_ptr().add(at), other.as_mut_ptr(), other.len()); - } - other - } - - /// Resizes the `Vec` in-place so that `len` is equal to `new_len`. - /// - /// If `new_len` is greater than `len`, the `Vec` is extended by the - /// difference, with each additional slot filled with the result of - /// calling the closure `f`. The return values from `f` will end up - /// in the `Vec` in the order they have been generated. - /// - /// If `new_len` is less than `len`, the `Vec` is simply truncated. - /// - /// This method uses a closure to create new values on every push. If - /// you'd rather [`Clone`] a given value, use [`Vec::resize`]. If you - /// want to use the [`Default`] trait to generate values, you can - /// pass [`Default::default`] as the second argument. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 3]; - /// vec.resize_with(5, Default::default); - /// assert_eq!(vec, [1, 2, 3, 0, 0]); - /// - /// let mut vec = vec![]; - /// let mut p = 1; - /// vec.resize_with(4, || { p *= 2; p }); - /// assert_eq!(vec, [2, 4, 8, 16]); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn resize_with(&mut self, new_len: usize, f: F) - where - F: FnMut() -> T, - { - let len = self.len(); - if new_len > len { - self.extend(iter::repeat_with(f).take(new_len - len)); - } else { - self.truncate(new_len); - } - } - - /// Consumes and leaks the `Vec`, returning a mutable reference to the contents, - /// `&'a mut [T]`. Note that the type `T` must outlive the chosen lifetime - /// `'a`. If the type has only static references, or none at all, then this - /// may be chosen to be `'static`. - /// - /// As of Rust 1.57, this method does not reallocate or shrink the `Vec`, - /// so the leaked allocation may include unused capacity that is not part - /// of the returned slice. - /// - /// This function is mainly useful for data that lives for the remainder of - /// the program's life. Dropping the returned reference will cause a memory - /// leak. - /// - /// # Examples - /// - /// Simple usage: - /// - /// ``` - /// let x = vec![1, 2, 3]; - /// let static_ref: &'static mut [usize] = x.leak(); - /// static_ref[0] += 1; - /// assert_eq!(static_ref, &[2, 2, 3]); - /// ``` - #[inline(always)] - pub fn leak<'a>(self) -> &'a mut [T] - where - A: 'a, - { - let mut me = ManuallyDrop::new(self); - unsafe { slice::from_raw_parts_mut(me.as_mut_ptr(), me.len) } - } - - /// Returns the remaining spare capacity of the vector as a slice of - /// `MaybeUninit`. - /// - /// The returned slice can be used to fill the vector with data (e.g. by - /// reading from a file) before marking the data as initialized using the - /// [`set_len`] method. - /// - /// [`set_len`]: Vec::set_len - /// - /// # Examples - /// - /// ``` - /// // Allocate vector big enough for 10 elements. - /// let mut v = Vec::with_capacity(10); - /// - /// // Fill in the first 3 elements. - /// let uninit = v.spare_capacity_mut(); - /// uninit[0].write(0); - /// uninit[1].write(1); - /// uninit[2].write(2); - /// - /// // Mark the first 3 elements of the vector as being initialized. - /// unsafe { - /// v.set_len(3); - /// } - /// - /// assert_eq!(&v, &[0, 1, 2]); - /// ``` - #[inline(always)] - pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit] { - // Note: - // This method is not implemented in terms of `split_at_spare_mut`, - // to prevent invalidation of pointers to the buffer. - unsafe { - slice::from_raw_parts_mut( - self.as_mut_ptr().add(self.len) as *mut MaybeUninit, - self.buf.capacity() - self.len, - ) - } - } - - /// Returns vector content as a slice of `T`, along with the remaining spare - /// capacity of the vector as a slice of `MaybeUninit`. - /// - /// The returned spare capacity slice can be used to fill the vector with data - /// (e.g. by reading from a file) before marking the data as initialized using - /// the [`set_len`] method. - /// - /// [`set_len`]: Vec::set_len - /// - /// Note that this is a low-level API, which should be used with care for - /// optimization purposes. If you need to append data to a `Vec` - /// you can use [`push`], [`extend`], [`extend_from_slice`], - /// [`extend_from_within`], [`insert`], [`append`], [`resize`] or - /// [`resize_with`], depending on your exact needs. - /// - /// [`push`]: Vec::push - /// [`extend`]: Vec::extend - /// [`extend_from_slice`]: Vec::extend_from_slice - /// [`extend_from_within`]: Vec::extend_from_within - /// [`insert`]: Vec::insert - /// [`append`]: Vec::append - /// [`resize`]: Vec::resize - /// [`resize_with`]: Vec::resize_with - /// - /// # Examples - /// - /// ``` - /// #![feature(vec_split_at_spare)] - /// - /// let mut v = vec![1, 1, 2]; - /// - /// // Reserve additional space big enough for 10 elements. - /// v.reserve(10); - /// - /// let (init, uninit) = v.split_at_spare_mut(); - /// let sum = init.iter().copied().sum::(); - /// - /// // Fill in the next 4 elements. - /// uninit[0].write(sum); - /// uninit[1].write(sum * 2); - /// uninit[2].write(sum * 3); - /// uninit[3].write(sum * 4); - /// - /// // Mark the 4 elements of the vector as being initialized. - /// unsafe { - /// let len = v.len(); - /// v.set_len(len + 4); - /// } - /// - /// assert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]); - /// ``` - #[inline(always)] - pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit]) { - // SAFETY: - // - len is ignored and so never changed - let (init, spare, _) = unsafe { self.split_at_spare_mut_with_len() }; - (init, spare) - } - - /// Safety: changing returned .2 (&mut usize) is considered the same as calling `.set_len(_)`. - /// - /// This method provides unique access to all vec parts at once in `extend_from_within`. - unsafe fn split_at_spare_mut_with_len( - &mut self, - ) -> (&mut [T], &mut [MaybeUninit], &mut usize) { - let ptr = self.as_mut_ptr(); - // SAFETY: - // - `ptr` is guaranteed to be valid for `self.len` elements - // - but the allocation extends out to `self.buf.capacity()` elements, possibly - // uninitialized - let spare_ptr = unsafe { ptr.add(self.len) }; - let spare_ptr = spare_ptr.cast::>(); - let spare_len = self.buf.capacity() - self.len; - - // SAFETY: - // - `ptr` is guaranteed to be valid for `self.len` elements - // - `spare_ptr` is pointing one element past the buffer, so it doesn't overlap with `initialized` - unsafe { - let initialized = slice::from_raw_parts_mut(ptr, self.len); - let spare = slice::from_raw_parts_mut(spare_ptr, spare_len); - - (initialized, spare, &mut self.len) - } - } -} - -impl Vec { - /// Resizes the `Vec` in-place so that `len` is equal to `new_len`. - /// - /// If `new_len` is greater than `len`, the `Vec` is extended by the - /// difference, with each additional slot filled with `value`. - /// If `new_len` is less than `len`, the `Vec` is simply truncated. - /// - /// This method requires `T` to implement [`Clone`], - /// in order to be able to clone the passed value. - /// If you need more flexibility (or want to rely on [`Default`] instead of - /// [`Clone`]), use [`Vec::resize_with`]. - /// If you only need to resize to a smaller size, use [`Vec::truncate`]. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec!["hello"]; - /// vec.resize(3, "world"); - /// assert_eq!(vec, ["hello", "world", "world"]); - /// - /// let mut vec = vec![1, 2, 3, 4]; - /// vec.resize(2, 0); - /// assert_eq!(vec, [1, 2]); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn resize(&mut self, new_len: usize, value: T) { - let len = self.len(); - - if new_len > len { - self.extend_with(new_len - len, ExtendElement(value)) - } else { - self.truncate(new_len); - } - } - - /// Clones and appends all elements in a slice to the `Vec`. - /// - /// Iterates over the slice `other`, clones each element, and then appends - /// it to this `Vec`. The `other` slice is traversed in-order. - /// - /// Note that this function is same as [`extend`] except that it is - /// specialized to work with slices instead. If and when Rust gets - /// specialization this function will likely be deprecated (but still - /// available). - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1]; - /// vec.extend_from_slice(&[2, 3, 4]); - /// assert_eq!(vec, [1, 2, 3, 4]); - /// ``` - /// - /// [`extend`]: Vec::extend - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn extend_from_slice(&mut self, other: &[T]) { - self.extend(other.iter().cloned()) - } - - /// Copies elements from `src` range to the end of the vector. - /// - /// # Panics - /// - /// Panics if the starting point is greater than the end point or if - /// the end point is greater than the length of the vector. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![0, 1, 2, 3, 4]; - /// - /// vec.extend_from_within(2..); - /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]); - /// - /// vec.extend_from_within(..2); - /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]); - /// - /// vec.extend_from_within(4..8); - /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn extend_from_within(&mut self, src: R) - where - R: RangeBounds, - { - // let range = slice::range(src, ..self.len()); - - let _ = &self.as_slice()[(src.start_bound().cloned(), src.end_bound().cloned())]; - - let len = self.len(); - - let start: ops::Bound<&usize> = src.start_bound(); - let start = match start { - ops::Bound::Included(&start) => start, - ops::Bound::Excluded(start) => start + 1, - ops::Bound::Unbounded => 0, - }; - - let end: ops::Bound<&usize> = src.end_bound(); - let end = match end { - ops::Bound::Included(end) => end + 1, - ops::Bound::Excluded(&end) => end, - ops::Bound::Unbounded => len, - }; - - let range = start..end; - - self.reserve(range.len()); - - // SAFETY: - // - len is increased only after initializing elements - let (this, spare, len) = unsafe { self.split_at_spare_mut_with_len() }; - - // SAFETY: - // - caller guarantees that src is a valid index - let to_clone = unsafe { this.get_unchecked(range) }; - - iter::zip(to_clone, spare) - .map(|(src, dst)| dst.write(src.clone())) - // Note: - // - Element was just initialized with `MaybeUninit::write`, so it's ok to increase len - // - len is increased after each element to prevent leaks (see issue #82533) - .for_each(|_| *len += 1); - } -} - -impl Vec<[T; N], A> { - /// Takes a `Vec<[T; N]>` and flattens it into a `Vec`. - /// - /// # Panics - /// - /// Panics if the length of the resulting vector would overflow a `usize`. - /// - /// This is only possible when flattening a vector of arrays of zero-sized - /// types, and thus tends to be irrelevant in practice. If - /// `size_of::() > 0`, this will never panic. - /// - /// # Examples - /// - /// ``` - /// #![feature(slice_flatten)] - /// - /// let mut vec = vec![[1, 2, 3], [4, 5, 6], [7, 8, 9]]; - /// assert_eq!(vec.pop(), Some([7, 8, 9])); - /// - /// let mut flattened = vec.into_flattened(); - /// assert_eq!(flattened.pop(), Some(6)); - /// ``` - #[inline(always)] - pub fn into_flattened(self) -> Vec { - let (ptr, len, cap, alloc) = self.into_raw_parts_with_alloc(); - let (new_len, new_cap) = if size_of::() == 0 { - (len.checked_mul(N).expect("vec len overflow"), usize::MAX) - } else { - // SAFETY: - // - `cap * N` cannot overflow because the allocation is already in - // the address space. - // - Each `[T; N]` has `N` valid elements, so there are `len * N` - // valid elements in the allocation. - (len * N, cap * N) - }; - // SAFETY: - // - `ptr` was allocated by `self` - // - `ptr` is well-aligned because `[T; N]` has the same alignment as `T`. - // - `new_cap` refers to the same sized allocation as `cap` because - // `new_cap * size_of::()` == `cap * size_of::<[T; N]>()` - // - `len` <= `cap`, so `len * N` <= `cap * N`. - unsafe { Vec::::from_raw_parts_in(ptr.cast(), new_len, new_cap, alloc) } - } -} - -// This code generalizes `extend_with_{element,default}`. -trait ExtendWith { - fn next(&mut self) -> T; - fn last(self) -> T; -} - -struct ExtendElement(T); -impl ExtendWith for ExtendElement { - #[inline(always)] - fn next(&mut self) -> T { - self.0.clone() - } - - #[inline(always)] - fn last(self) -> T { - self.0 - } -} - -impl Vec { - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - /// Extend the vector by `n` values, using the given generator. - fn extend_with>(&mut self, n: usize, mut value: E) { - self.reserve(n); - - unsafe { - let mut ptr = self.as_mut_ptr().add(self.len()); - // Use SetLenOnDrop to work around bug where compiler - // might not realize the store through `ptr` through self.set_len() - // don't alias. - let mut local_len = SetLenOnDrop::new(&mut self.len); - - // Write all elements except the last one - for _ in 1..n { - ptr::write(ptr, value.next()); - ptr = ptr.add(1); - // Increment the length in every step in case next() panics - local_len.increment_len(1); - } - - if n > 0 { - // We can write the last element directly without cloning needlessly - ptr::write(ptr, value.last()); - local_len.increment_len(1); - } - - // len set by scope guard - } - } -} - -impl Vec { - /// Removes consecutive repeated elements in the vector according to the - /// [`PartialEq`] trait implementation. - /// - /// If the vector is sorted, this removes all duplicates. - /// - /// # Examples - /// - /// ``` - /// let mut vec = vec![1, 2, 2, 3, 2]; - /// - /// vec.dedup(); - /// - /// assert_eq!(vec, [1, 2, 3, 2]); - /// ``` - #[inline(always)] - pub fn dedup(&mut self) { - self.dedup_by(|a, b| a == b) - } -} - -trait ExtendFromWithinSpec { - /// # Safety - /// - /// - `src` needs to be valid index - /// - `self.capacity() - self.len()` must be `>= src.len()` - unsafe fn spec_extend_from_within(&mut self, src: Range); -} - -// impl ExtendFromWithinSpec for Vec { -// default unsafe fn spec_extend_from_within(&mut self, src: Range) { -// // SAFETY: -// // - len is increased only after initializing elements -// let (this, spare, len) = unsafe { self.split_at_spare_mut_with_len() }; - -// // SAFETY: -// // - caller guarantees that src is a valid index -// let to_clone = unsafe { this.get_unchecked(src) }; - -// iter::zip(to_clone, spare) -// .map(|(src, dst)| dst.write(src.clone())) -// // Note: -// // - Element was just initialized with `MaybeUninit::write`, so it's ok to increase len -// // - len is increased after each element to prevent leaks (see issue #82533) -// .for_each(|_| *len += 1); -// } -// } - -impl ExtendFromWithinSpec for Vec { - #[inline(always)] - unsafe fn spec_extend_from_within(&mut self, src: Range) { - let count = src.len(); - { - let (init, spare) = self.split_at_spare_mut(); - - // SAFETY: - // - caller guarantees that `src` is a valid index - let source = unsafe { init.get_unchecked(src) }; - - // SAFETY: - // - Both pointers are created from unique slice references (`&mut [_]`) - // so they are valid and do not overlap. - // - Elements are :Copy so it's OK to copy them, without doing - // anything with the original values - // - `count` is equal to the len of `source`, so source is valid for - // `count` reads - // - `.reserve(count)` guarantees that `spare.len() >= count` so spare - // is valid for `count` writes - unsafe { ptr::copy_nonoverlapping(source.as_ptr(), spare.as_mut_ptr() as _, count) }; - } - - // SAFETY: - // - The elements were just initialized by `copy_nonoverlapping` - self.len += count; - } -} - -//////////////////////////////////////////////////////////////////////////////// -// Common trait implementations for Vec -//////////////////////////////////////////////////////////////////////////////// - -impl ops::Deref for Vec { - type Target = [T]; - - #[inline(always)] - fn deref(&self) -> &[T] { - unsafe { slice::from_raw_parts(self.as_ptr(), self.len) } - } -} - -impl ops::DerefMut for Vec { - #[inline(always)] - fn deref_mut(&mut self) -> &mut [T] { - unsafe { slice::from_raw_parts_mut(self.as_mut_ptr(), self.len) } - } -} - -#[cfg(not(no_global_oom_handling))] -impl Clone for Vec { - #[inline(always)] - fn clone(&self) -> Self { - let alloc = self.allocator().clone(); - let mut vec = Vec::with_capacity_in(self.len(), alloc); - vec.extend_from_slice(self); - vec - } - - #[inline(always)] - fn clone_from(&mut self, other: &Self) { - // drop anything that will not be overwritten - self.truncate(other.len()); - - // self.len <= other.len due to the truncate above, so the - // slices here are always in-bounds. - let (init, tail) = other.split_at(self.len()); - - // reuse the contained values' allocations/resources. - self.clone_from_slice(init); - self.extend_from_slice(tail); - } -} - -/// The hash of a vector is the same as that of the corresponding slice, -/// as required by the `core::borrow::Borrow` implementation. -/// -/// ``` -/// #![feature(build_hasher_simple_hash_one)] -/// use std::hash::BuildHasher; -/// -/// let b = std::collections::hash_map::RandomState::new(); -/// let v: Vec = vec![0xa8, 0x3c, 0x09]; -/// let s: &[u8] = &[0xa8, 0x3c, 0x09]; -/// assert_eq!(b.hash_one(v), b.hash_one(s)); -/// ``` -impl Hash for Vec { - #[inline(always)] - fn hash(&self, state: &mut H) { - Hash::hash(&**self, state) - } -} - -impl, A: Allocator> Index for Vec { - type Output = I::Output; - - #[inline(always)] - fn index(&self, index: I) -> &Self::Output { - Index::index(&**self, index) - } -} - -impl, A: Allocator> IndexMut for Vec { - #[inline(always)] - fn index_mut(&mut self, index: I) -> &mut Self::Output { - IndexMut::index_mut(&mut **self, index) - } -} - -#[cfg(not(no_global_oom_handling))] -impl FromIterator for Vec { - #[inline(always)] - fn from_iter>(iter: I) -> Vec { - let mut vec = Vec::new(); - vec.extend(iter); - vec - } -} - -impl IntoIterator for Vec { - type Item = T; - type IntoIter = IntoIter; - - /// Creates a consuming iterator, that is, one that moves each value out of - /// the vector (from start to end). The vector cannot be used after calling - /// this. - /// - /// # Examples - /// - /// ``` - /// let v = vec!["a".to_string(), "b".to_string()]; - /// let mut v_iter = v.into_iter(); - /// - /// let first_element: Option = v_iter.next(); - /// - /// assert_eq!(first_element, Some("a".to_string())); - /// assert_eq!(v_iter.next(), Some("b".to_string())); - /// assert_eq!(v_iter.next(), None); - /// ``` - #[inline(always)] - fn into_iter(self) -> Self::IntoIter { - unsafe { - let mut me = ManuallyDrop::new(self); - let alloc = ManuallyDrop::new(ptr::read(me.allocator())); - let begin = me.as_mut_ptr(); - let end = if size_of::() == 0 { - begin.cast::().wrapping_add(me.len()).cast() - } else { - begin.add(me.len()) as *const T - }; - let cap = me.buf.capacity(); - IntoIter { - buf: NonNull::new_unchecked(begin), - phantom: PhantomData, - cap, - alloc, - ptr: begin, - end, - } - } - } -} - -impl<'a, T, A: Allocator> IntoIterator for &'a Vec { - type Item = &'a T; - type IntoIter = slice::Iter<'a, T>; - - #[inline(always)] - fn into_iter(self) -> Self::IntoIter { - self.iter() - } -} - -impl<'a, T, A: Allocator> IntoIterator for &'a mut Vec { - type Item = &'a mut T; - type IntoIter = slice::IterMut<'a, T>; - - fn into_iter(self) -> Self::IntoIter { - self.iter_mut() - } -} - -#[cfg(not(no_global_oom_handling))] -impl Extend for Vec { - #[inline(always)] - fn extend>(&mut self, iter: I) { - // This is the case for a general iter. - // - // This function should be the moral equivalent of: - // - // for item in iter { - // self.push(item); - // } - - let mut iter = iter.into_iter(); - while let Some(element) = iter.next() { - let len = self.len(); - if len == self.capacity() { - let (lower, _) = iter.size_hint(); - self.reserve(lower.saturating_add(1)); - } - unsafe { - ptr::write(self.as_mut_ptr().add(len), element); - // Since next() executes user code which can panic we have to bump the length - // after each step. - // NB can't overflow since we would have had to alloc the address space - self.set_len(len + 1); - } - } - } -} - -impl Vec { - /// Creates a splicing iterator that replaces the specified range in the vector - /// with the given `replace_with` iterator and yields the removed items. - /// `replace_with` does not need to be the same length as `range`. - /// - /// `range` is removed even if the iterator is not consumed until the end. - /// - /// It is unspecified how many elements are removed from the vector - /// if the `Splice` value is leaked. - /// - /// The input iterator `replace_with` is only consumed when the `Splice` value is dropped. - /// - /// This is optimal if: - /// - /// * The tail (elements in the vector after `range`) is empty, - /// * or `replace_with` yields fewer or equal elements than `range`’s length - /// * or the lower bound of its `size_hint()` is exact. - /// - /// Otherwise, a temporary vector is allocated and the tail is moved twice. - /// - /// # Panics - /// - /// Panics if the starting point is greater than the end point or if - /// the end point is greater than the length of the vector. - /// - /// # Examples - /// - /// ``` - /// let mut v = vec![1, 2, 3, 4]; - /// let new = [7, 8, 9]; - /// let u: Vec<_> = v.splice(1..3, new).collect(); - /// assert_eq!(v, &[1, 7, 8, 9, 4]); - /// assert_eq!(u, &[2, 3]); - /// ``` - #[cfg(not(no_global_oom_handling))] - #[inline(always)] - pub fn splice(&mut self, range: R, replace_with: I) -> Splice<'_, I::IntoIter, A> - where - R: RangeBounds, - I: IntoIterator, - { - Splice { - drain: self.drain(range), - replace_with: replace_with.into_iter(), - } - } -} - -/// Extend implementation that copies elements out of references before pushing them onto the Vec. -/// -/// This implementation is specialized for slice iterators, where it uses [`copy_from_slice`] to -/// append the entire slice at once. -/// -/// [`copy_from_slice`]: slice::copy_from_slice -#[cfg(not(no_global_oom_handling))] -impl<'a, T: Copy + 'a, A: Allocator + 'a> Extend<&'a T> for Vec { - #[inline(always)] - fn extend>(&mut self, iter: I) { - let mut iter = iter.into_iter(); - while let Some(element) = iter.next() { - let len = self.len(); - if len == self.capacity() { - let (lower, _) = iter.size_hint(); - self.reserve(lower.saturating_add(1)); - } - unsafe { - ptr::write(self.as_mut_ptr().add(len), *element); - // Since next() executes user code which can panic we have to bump the length - // after each step. - // NB can't overflow since we would have had to alloc the address space - self.set_len(len + 1); - } - } - } -} - -/// Implements comparison of vectors, [lexicographically](core::cmp::Ord#lexicographical-comparison). -impl PartialOrd for Vec { - #[inline(always)] - fn partial_cmp(&self, other: &Self) -> Option { - PartialOrd::partial_cmp(&**self, &**other) - } -} - -impl Eq for Vec {} - -/// Implements ordering of vectors, [lexicographically](core::cmp::Ord#lexicographical-comparison). -impl Ord for Vec { - #[inline(always)] - fn cmp(&self, other: &Self) -> Ordering { - Ord::cmp(&**self, &**other) - } -} - -impl Drop for Vec { - #[inline(always)] - fn drop(&mut self) { - unsafe { - // use drop for [T] - // use a raw slice to refer to the elements of the vector as weakest necessary type; - // could avoid questions of validity in certain cases - ptr::drop_in_place(ptr::slice_from_raw_parts_mut(self.as_mut_ptr(), self.len)) - } - // RawVec handles deallocation - } -} - -impl Default for Vec { - /// Creates an empty `Vec`. - /// - /// The vector will not allocate until elements are pushed onto it. - #[inline(always)] - fn default() -> Vec { - Vec::new() - } -} - -impl fmt::Debug for Vec { - #[inline(always)] - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Debug::fmt(&**self, f) - } -} - -impl AsRef> for Vec { - #[inline(always)] - fn as_ref(&self) -> &Vec { - self - } -} - -impl AsMut> for Vec { - #[inline(always)] - fn as_mut(&mut self) -> &mut Vec { - self - } -} - -impl AsRef<[T]> for Vec { - #[inline(always)] - fn as_ref(&self) -> &[T] { - self - } -} - -impl AsMut<[T]> for Vec { - #[inline(always)] - fn as_mut(&mut self) -> &mut [T] { - self - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<&[T]> for Vec { - /// Allocate a `Vec` and fill it by cloning `s`'s items. - /// - /// # Examples - /// - /// ``` - /// assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]); - /// ``` - #[inline(always)] - fn from(s: &[T]) -> Vec { - let mut vec = Vec::with_capacity(s.len()); - vec.extend_from_slice(s); - vec - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<&mut [T]> for Vec { - /// Allocate a `Vec` and fill it by cloning `s`'s items. - /// - /// # Examples - /// - /// ``` - /// assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]); - /// ``` - #[inline(always)] - fn from(s: &mut [T]) -> Vec { - let mut vec = Vec::with_capacity(s.len()); - vec.extend_from_slice(s); - vec - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<[T; N]> for Vec { - #[inline(always)] - fn from(s: [T; N]) -> Vec { - Box::slice(Box::new(s)).into_vec() - } -} - -impl From> for Vec { - /// Convert a boxed slice into a vector by transferring ownership of - /// the existing heap allocation. - /// - /// # Examples - /// - /// ``` - /// let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice(); - /// assert_eq!(Vec::from(b), vec![1, 2, 3]); - /// ``` - #[inline(always)] - fn from(s: Box<[T], A>) -> Self { - s.into_vec() - } -} - -impl From> for Vec { - /// Convert a boxed array into a vector by transferring ownership of - /// the existing heap allocation. - /// - /// # Examples - /// - /// ``` - /// let b: Box<[i32; 3]> = Box::new([1, 2, 3]); - /// assert_eq!(Vec::from(b), vec![1, 2, 3]); - /// ``` - #[inline(always)] - fn from(s: Box<[T; N], A>) -> Self { - s.into_vec() - } -} - -// note: test pulls in libstd, which causes errors here -#[cfg(not(no_global_oom_handling))] -impl From> for Box<[T], A> { - /// Convert a vector into a boxed slice. - /// - /// If `v` has excess capacity, its items will be moved into a - /// newly-allocated buffer with exactly the right capacity. - /// - /// # Examples - /// - /// ``` - /// assert_eq!(Box::from(vec![1, 2, 3]), vec![1, 2, 3].into_boxed_slice()); - /// ``` - /// - /// Any excess capacity is removed: - /// ``` - /// let mut vec = Vec::with_capacity(10); - /// vec.extend([1, 2, 3]); - /// - /// assert_eq!(Box::from(vec), vec![1, 2, 3].into_boxed_slice()); - /// ``` - #[inline(always)] - fn from(v: Vec) -> Self { - v.into_boxed_slice() - } -} - -#[cfg(not(no_global_oom_handling))] -impl From<&str> for Vec { - /// Allocate a `Vec` and fill it with a UTF-8 string. - /// - /// # Examples - /// - /// ``` - /// assert_eq!(Vec::from("123"), vec![b'1', b'2', b'3']); - /// ``` - #[inline(always)] - fn from(s: &str) -> Vec { - From::from(s.as_bytes()) - } -} - -impl TryFrom> for [T; N] { - type Error = Vec; - - /// Gets the entire contents of the `Vec` as an array, - /// if its size exactly matches that of the requested array. - /// - /// # Examples - /// - /// ``` - /// assert_eq!(vec![1, 2, 3].try_into(), Ok([1, 2, 3])); - /// assert_eq!(>::new().try_into(), Ok([])); - /// ``` - /// - /// If the length doesn't match, the input comes back in `Err`: - /// ``` - /// let r: Result<[i32; 4], _> = (0..10).collect::>().try_into(); - /// assert_eq!(r, Err(vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9])); - /// ``` - /// - /// If you're fine with just getting a prefix of the `Vec`, - /// you can call [`.truncate(N)`](Vec::truncate) first. - /// ``` - /// let mut v = String::from("hello world").into_bytes(); - /// v.sort(); - /// v.truncate(2); - /// let [a, b]: [_; 2] = v.try_into().unwrap(); - /// assert_eq!(a, b' '); - /// assert_eq!(b, b'd'); - /// ``` - #[inline(always)] - fn try_from(mut vec: Vec) -> Result<[T; N], Vec> { - if vec.len() != N { - return Err(vec); - } - - // SAFETY: `.set_len(0)` is always sound. - unsafe { vec.set_len(0) }; - - // SAFETY: A `Vec`'s pointer is always aligned properly, and - // the alignment the array needs is the same as the items. - // We checked earlier that we have sufficient items. - // The items will not double-drop as the `set_len` - // tells the `Vec` not to also drop them. - let array = unsafe { ptr::read(vec.as_ptr() as *const [T; N]) }; - Ok(array) - } -} - -#[inline(always)] -#[cfg(not(no_global_oom_handling))] -#[doc(hidden)] -pub fn from_elem_in(elem: T, n: usize, alloc: A) -> Vec { - let mut v = Vec::with_capacity_in(n, alloc); - v.extend_with(n, ExtendElement(elem)); - v -} - -#[inline(always)] -#[cfg(not(no_global_oom_handling))] -#[doc(hidden)] -pub fn from_elem(elem: T, n: usize) -> Vec { - let mut v = Vec::with_capacity(n); - v.extend_with(n, ExtendElement(elem)); - v -} - -/// Write is implemented for `Vec` by appending to the vector. -/// The vector will grow as needed. -#[cfg(feature = "std")] -impl io::Write for Vec { - #[inline] - fn write(&mut self, buf: &[u8]) -> io::Result { - self.extend_from_slice(buf); - Ok(buf.len()) - } - - #[inline] - fn write_vectored(&mut self, bufs: &[io::IoSlice<'_>]) -> io::Result { - let len = bufs.iter().map(|b| b.len()).sum(); - self.reserve(len); - for buf in bufs { - self.extend_from_slice(buf); - } - Ok(len) - } - - #[inline] - fn write_all(&mut self, buf: &[u8]) -> io::Result<()> { - self.extend_from_slice(buf); - Ok(()) - } - - #[inline] - fn flush(&mut self) -> io::Result<()> { - Ok(()) - } -} - -#[cfg(feature = "serde")] -impl serde::Serialize for Vec -where - T: serde::Serialize, - A: Allocator, -{ - #[inline(always)] - fn serialize(&self, serializer: S) -> Result - where - S: serde::ser::Serializer, - { - serializer.collect_seq(self) - } -} - -#[cfg(feature = "serde")] -impl<'de, T, A> serde::de::Deserialize<'de> for Vec -where - T: serde::de::Deserialize<'de>, - A: Allocator + Default, -{ - #[inline(always)] - fn deserialize(deserializer: D) -> Result - where - D: serde::de::Deserializer<'de>, - { - struct VecVisitor { - marker: PhantomData<(T, A)>, - } - - impl<'de, T, A> serde::de::Visitor<'de> for VecVisitor - where - T: serde::de::Deserialize<'de>, - A: Allocator + Default, - { - type Value = Vec; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a sequence") - } - - fn visit_seq(self, mut seq: S) -> Result - where - S: serde::de::SeqAccess<'de>, - { - let mut values = Vec::with_capacity_in(cautious(seq.size_hint()), A::default()); - - while let Some(value) = seq.next_element()? { - values.push(value); - } - - Ok(values) - } - } - - let visitor = VecVisitor { - marker: PhantomData, - }; - deserializer.deserialize_seq(visitor) - } - - #[inline(always)] - fn deserialize_in_place(deserializer: D, place: &mut Self) -> Result<(), D::Error> - where - D: serde::de::Deserializer<'de>, - { - struct VecInPlaceVisitor<'a, T: 'a, A: Allocator + 'a>(&'a mut Vec); - - impl<'a, 'de, T, A> serde::de::Visitor<'de> for VecInPlaceVisitor<'a, T, A> - where - T: serde::de::Deserialize<'de>, - A: Allocator + Default, - { - type Value = (); - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a sequence") - } - - fn visit_seq(self, mut seq: S) -> Result - where - S: serde::de::SeqAccess<'de>, - { - let hint = cautious(seq.size_hint()); - if let Some(additional) = hint.checked_sub(self.0.len()) { - self.0.reserve(additional); - } - - for i in 0..self.0.len() { - let next = { - let next_place = InPlaceSeed(&mut self.0[i]); - seq.next_element_seed(next_place)? - }; - if next.is_none() { - self.0.truncate(i); - return Ok(()); - } - } - - while let Some(value) = seq.next_element()? { - self.0.push(value); - } - - Ok(()) - } - } - - deserializer.deserialize_seq(VecInPlaceVisitor(place)) - } -} - -#[cfg(feature = "serde")] -pub fn cautious(hint: Option) -> usize { - cmp::min(hint.unwrap_or(0), 4096) -} - -/// A DeserializeSeed helper for implementing deserialize_in_place Visitors. -/// -/// Wraps a mutable reference and calls deserialize_in_place on it. - -#[cfg(feature = "serde")] -pub struct InPlaceSeed<'a, T: 'a>(pub &'a mut T); - -#[cfg(feature = "serde")] -impl<'a, 'de, T> serde::de::DeserializeSeed<'de> for InPlaceSeed<'a, T> -where - T: serde::de::Deserialize<'de>, -{ - type Value = (); - fn deserialize(self, deserializer: D) -> Result - where - D: serde::de::Deserializer<'de>, - { - T::deserialize_in_place(deserializer, self.0) - } -} +//! A contiguous growable array type with heap-allocated contents, written +//! `Vec`. +//! +//! Vectors have *O*(1) indexing, amortized *O*(1) push (to the end) and +//! *O*(1) pop (from the end). +//! +//! Vectors ensure they never allocate more than `isize::MAX` bytes. +//! +//! # Examples +//! +//! You can explicitly create a [`Vec`] with [`Vec::new`]: +//! +//! ``` +//! let v: Vec = Vec::new(); +//! ``` +//! +//! ...or by using the [`vec!`] macro: +//! +//! ``` +//! let v: Vec = vec![]; +//! +//! let v = vec![1, 2, 3, 4, 5]; +//! +//! let v = vec![0; 10]; // ten zeroes +//! ``` +//! +//! You can [`push`] values onto the end of a vector (which will grow the vector +//! as needed): +//! +//! ``` +//! let mut v = vec![1, 2]; +//! +//! v.push(3); +//! ``` +//! +//! Popping values works in much the same way: +//! +//! ``` +//! let mut v = vec![1, 2]; +//! +//! let two = v.pop(); +//! ``` +//! +//! Vectors also support indexing (through the [`Index`] and [`IndexMut`] traits): +//! +//! ``` +//! let mut v = vec![1, 2, 3]; +//! let three = v[2]; +//! v[1] = v[1] + 5; +//! ``` +//! +//! [`push`]: Vec::push + +#[cfg(not(no_global_oom_handling))] +use core::cmp; +use core::cmp::Ordering; +use core::convert::TryFrom; +use core::fmt; +use core::hash::{Hash, Hasher}; +#[cfg(not(no_global_oom_handling))] +use core::iter; +#[cfg(not(no_global_oom_handling))] +use core::iter::FromIterator; +use core::marker::PhantomData; +use core::mem::{self, size_of, ManuallyDrop, MaybeUninit}; +use core::ops::{self, Bound, Index, IndexMut, RangeBounds}; +use core::ptr::{self, NonNull}; +use core::slice::{self, SliceIndex}; + +#[cfg(feature = "std")] +use std::io; + +use super::{ + alloc::{Allocator, Global}, + assume, + boxed::Box, + raw_vec::{RawVec, TryReserveError}, +}; + +#[cfg(not(no_global_oom_handling))] +pub use self::splice::Splice; + +#[cfg(not(no_global_oom_handling))] +mod splice; + +pub use self::drain::Drain; + +mod drain; + +pub use self::into_iter::IntoIter; + +mod into_iter; + +mod partial_eq; + +#[cfg(not(no_global_oom_handling))] +mod set_len_on_drop; + +#[cfg(not(no_global_oom_handling))] +use self::set_len_on_drop::SetLenOnDrop; + +/// A contiguous growable array type, written as `Vec`, short for 'vector'. +/// +/// # Examples +/// +/// ``` +/// let mut vec = Vec::new(); +/// vec.push(1); +/// vec.push(2); +/// +/// assert_eq!(vec.len(), 2); +/// assert_eq!(vec[0], 1); +/// +/// assert_eq!(vec.pop(), Some(2)); +/// assert_eq!(vec.len(), 1); +/// +/// vec[0] = 7; +/// assert_eq!(vec[0], 7); +/// +/// vec.extend([1, 2, 3].iter().copied()); +/// +/// for x in &vec { +/// println!("{x}"); +/// } +/// assert_eq!(vec, [7, 1, 2, 3]); +/// ``` +/// +/// The [`vec!`] macro is provided for convenient initialization: +/// +/// ``` +/// let mut vec1 = vec![1, 2, 3]; +/// vec1.push(4); +/// let vec2 = Vec::from([1, 2, 3, 4]); +/// assert_eq!(vec1, vec2); +/// ``` +/// +/// It can also initialize each element of a `Vec` with a given value. +/// This may be more efficient than performing allocation and initialization +/// in separate steps, especially when initializing a vector of zeros: +/// +/// ``` +/// let vec = vec![0; 5]; +/// assert_eq!(vec, [0, 0, 0, 0, 0]); +/// +/// // The following is equivalent, but potentially slower: +/// let mut vec = Vec::with_capacity(5); +/// vec.resize(5, 0); +/// assert_eq!(vec, [0, 0, 0, 0, 0]); +/// ``` +/// +/// For more information, see +/// [Capacity and Reallocation](#capacity-and-reallocation). +/// +/// Use a `Vec` as an efficient stack: +/// +/// ``` +/// let mut stack = Vec::new(); +/// +/// stack.push(1); +/// stack.push(2); +/// stack.push(3); +/// +/// while let Some(top) = stack.pop() { +/// // Prints 3, 2, 1 +/// println!("{top}"); +/// } +/// ``` +/// +/// # Indexing +/// +/// The `Vec` type allows to access values by index, because it implements the +/// [`Index`] trait. An example will be more explicit: +/// +/// ``` +/// let v = vec![0, 2, 4, 6]; +/// println!("{}", v[1]); // it will display '2' +/// ``` +/// +/// However be careful: if you try to access an index which isn't in the `Vec`, +/// your software will panic! You cannot do this: +/// +/// ```should_panic +/// let v = vec![0, 2, 4, 6]; +/// println!("{}", v[6]); // it will panic! +/// ``` +/// +/// Use [`get`] and [`get_mut`] if you want to check whether the index is in +/// the `Vec`. +/// +/// # Slicing +/// +/// A `Vec` can be mutable. On the other hand, slices are read-only objects. +/// To get a [slice][prim@slice], use [`&`]. Example: +/// +/// ``` +/// fn read_slice(slice: &[usize]) { +/// // ... +/// } +/// +/// let v = vec![0, 1]; +/// read_slice(&v); +/// +/// // ... and that's all! +/// // you can also do it like this: +/// let u: &[usize] = &v; +/// // or like this: +/// let u: &[_] = &v; +/// ``` +/// +/// In Rust, it's more common to pass slices as arguments rather than vectors +/// when you just want to provide read access. The same goes for [`String`] and +/// [`&str`]. +/// +/// # Capacity and reallocation +/// +/// The capacity of a vector is the amount of space allocated for any future +/// elements that will be added onto the vector. This is not to be confused with +/// the *length* of a vector, which specifies the number of actual elements +/// within the vector. If a vector's length exceeds its capacity, its capacity +/// will automatically be increased, but its elements will have to be +/// reallocated. +/// +/// For example, a vector with capacity 10 and length 0 would be an empty vector +/// with space for 10 more elements. Pushing 10 or fewer elements onto the +/// vector will not change its capacity or cause reallocation to occur. However, +/// if the vector's length is increased to 11, it will have to reallocate, which +/// can be slow. For this reason, it is recommended to use [`Vec::with_capacity`] +/// whenever possible to specify how big the vector is expected to get. +/// +/// # Guarantees +/// +/// Due to its incredibly fundamental nature, `Vec` makes a lot of guarantees +/// about its design. This ensures that it's as low-overhead as possible in +/// the general case, and can be correctly manipulated in primitive ways +/// by unsafe code. Note that these guarantees refer to an unqualified `Vec`. +/// If additional type parameters are added (e.g., to support custom allocators), +/// overriding their defaults may change the behavior. +/// +/// Most fundamentally, `Vec` is and always will be a (pointer, capacity, length) +/// triplet. No more, no less. The order of these fields is completely +/// unspecified, and you should use the appropriate methods to modify these. +/// The pointer will never be null, so this type is null-pointer-optimized. +/// +/// However, the pointer might not actually point to allocated memory. In particular, +/// if you construct a `Vec` with capacity 0 via [`Vec::new`], [`vec![]`][`vec!`], +/// [`Vec::with_capacity(0)`][`Vec::with_capacity`], or by calling [`shrink_to_fit`] +/// on an empty Vec, it will not allocate memory. Similarly, if you store zero-sized +/// types inside a `Vec`, it will not allocate space for them. *Note that in this case +/// the `Vec` might not report a [`capacity`] of 0*. `Vec` will allocate if and only +/// if [mem::size_of::\]\() * [capacity]\() > 0. In general, `Vec`'s allocation +/// details are very subtle --- if you intend to allocate memory using a `Vec` +/// and use it for something else (either to pass to unsafe code, or to build your +/// own memory-backed collection), be sure to deallocate this memory by using +/// `from_raw_parts` to recover the `Vec` and then dropping it. +/// +/// If a `Vec` *has* allocated memory, then the memory it points to is on the heap +/// (as defined by the allocator Rust is configured to use by default), and its +/// pointer points to [`len`] initialized, contiguous elements in order (what +/// you would see if you coerced it to a slice), followed by [capacity] - [len] +/// logically uninitialized, contiguous elements. +/// +/// A vector containing the elements `'a'` and `'b'` with capacity 4 can be +/// visualized as below. The top part is the `Vec` struct, it contains a +/// pointer to the head of the allocation in the heap, length and capacity. +/// The bottom part is the allocation on the heap, a contiguous memory block. +/// +/// ```text +/// ptr len capacity +/// +--------+--------+--------+ +/// | 0x0123 | 2 | 4 | +/// +--------+--------+--------+ +/// | +/// v +/// Heap +--------+--------+--------+--------+ +/// | 'a' | 'b' | uninit | uninit | +/// +--------+--------+--------+--------+ +/// ``` +/// +/// - **uninit** represents memory that is not initialized, see [`MaybeUninit`]. +/// - Note: the ABI is not stable and `Vec` makes no guarantees about its memory +/// layout (including the order of fields). +/// +/// `Vec` will never perform a "small optimization" where elements are actually +/// stored on the stack for two reasons: +/// +/// * It would make it more difficult for unsafe code to correctly manipulate +/// a `Vec`. The contents of a `Vec` wouldn't have a stable address if it were +/// only moved, and it would be more difficult to determine if a `Vec` had +/// actually allocated memory. +/// +/// * It would penalize the general case, incurring an additional branch +/// on every access. +/// +/// `Vec` will never automatically shrink itself, even if completely empty. This +/// ensures no unnecessary allocations or deallocations occur. Emptying a `Vec` +/// and then filling it back up to the same [`len`] should incur no calls to +/// the allocator. If you wish to free up unused memory, use +/// [`shrink_to_fit`] or [`shrink_to`]. +/// +/// [`push`] and [`insert`] will never (re)allocate if the reported capacity is +/// sufficient. [`push`] and [`insert`] *will* (re)allocate if +/// [len] == [capacity]. That is, the reported capacity is completely +/// accurate, and can be relied on. It can even be used to manually free the memory +/// allocated by a `Vec` if desired. Bulk insertion methods *may* reallocate, even +/// when not necessary. +/// +/// `Vec` does not guarantee any particular growth strategy when reallocating +/// when full, nor when [`reserve`] is called. The current strategy is basic +/// and it may prove desirable to use a non-constant growth factor. Whatever +/// strategy is used will of course guarantee *O*(1) amortized [`push`]. +/// +/// `vec![x; n]`, `vec![a, b, c, d]`, and +/// [`Vec::with_capacity(n)`][`Vec::with_capacity`], will all produce a `Vec` +/// with exactly the requested capacity. If [len] == [capacity], +/// (as is the case for the [`vec!`] macro), then a `Vec` can be converted to +/// and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements. +/// +/// `Vec` will not specifically overwrite any data that is removed from it, +/// but also won't specifically preserve it. Its uninitialized memory is +/// scratch space that it may use however it wants. It will generally just do +/// whatever is most efficient or otherwise easy to implement. Do not rely on +/// removed data to be erased for security purposes. Even if you drop a `Vec`, its +/// buffer may simply be reused by another allocation. Even if you zero a `Vec`'s memory +/// first, that might not actually happen because the optimizer does not consider +/// this a side-effect that must be preserved. There is one case which we will +/// not break, however: using `unsafe` code to write to the excess capacity, +/// and then increasing the length to match, is always valid. +/// +/// Currently, `Vec` does not guarantee the order in which elements are dropped. +/// The order has changed in the past and may change again. +/// +/// [`get`]: ../../std/vec/struct.Vec.html#method.get +/// [`get_mut`]: ../../std/vec/struct.Vec.html#method.get_mut +/// [`String`]: alloc_crate::string::String +/// [`&str`]: type@str +/// [`shrink_to_fit`]: Vec::shrink_to_fit +/// [`shrink_to`]: Vec::shrink_to +/// [capacity]: Vec::capacity +/// [`capacity`]: Vec::capacity +/// [mem::size_of::\]: core::mem::size_of +/// [len]: Vec::len +/// [`len`]: Vec::len +/// [`push`]: Vec::push +/// [`insert`]: Vec::insert +/// [`reserve`]: Vec::reserve +/// [`MaybeUninit`]: core::mem::MaybeUninit +/// [owned slice]: Box +pub struct Vec { + buf: RawVec, + len: usize, +} + +//////////////////////////////////////////////////////////////////////////////// +// Inherent methods +//////////////////////////////////////////////////////////////////////////////// + +impl Vec { + /// Constructs a new, empty `Vec`. + /// + /// The vector will not allocate until elements are pushed onto it. + /// + /// # Examples + /// + /// ``` + /// # #![allow(unused_mut)] + /// let mut vec: Vec = Vec::new(); + /// ``` + #[inline(always)] + #[must_use] + pub const fn new() -> Self { + Vec { + buf: RawVec::new(), + len: 0, + } + } + + /// Constructs a new, empty `Vec` with at least the specified capacity. + /// + /// The vector will be able to hold at least `capacity` elements without + /// reallocating. This method is allowed to allocate for more elements than + /// `capacity`. If `capacity` is 0, the vector will not allocate. + /// + /// It is important to note that although the returned vector has the + /// minimum *capacity* specified, the vector will have a zero *length*. For + /// an explanation of the difference between length and capacity, see + /// *[Capacity and reallocation]*. + /// + /// If it is important to know the exact allocated capacity of a `Vec`, + /// always use the [`capacity`] method after construction. + /// + /// For `Vec` where `T` is a zero-sized type, there will be no allocation + /// and the capacity will always be `usize::MAX`. + /// + /// [Capacity and reallocation]: #capacity-and-reallocation + /// [`capacity`]: Vec::capacity + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Examples + /// + /// ``` + /// let mut vec = Vec::with_capacity(10); + /// + /// // The vector contains no items, even though it has capacity for more + /// assert_eq!(vec.len(), 0); + /// assert!(vec.capacity() >= 10); + /// + /// // These are all done without reallocating... + /// for i in 0..10 { + /// vec.push(i); + /// } + /// assert_eq!(vec.len(), 10); + /// assert!(vec.capacity() >= 10); + /// + /// // ...but this may make the vector reallocate + /// vec.push(11); + /// assert_eq!(vec.len(), 11); + /// assert!(vec.capacity() >= 11); + /// + /// // A vector of a zero-sized type will always over-allocate, since no + /// // allocation is necessary + /// let vec_units = Vec::<()>::with_capacity(10); + /// assert_eq!(vec_units.capacity(), usize::MAX); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + #[must_use] + pub fn with_capacity(capacity: usize) -> Self { + Self::with_capacity_in(capacity, Global) + } + + /// Creates a `Vec` directly from a pointer, a capacity, and a length. + /// + /// # Safety + /// + /// This is highly unsafe, due to the number of invariants that aren't + /// checked: + /// + /// * `T` needs to have the same alignment as what `ptr` was allocated with. + /// (`T` having a less strict alignment is not sufficient, the alignment really + /// needs to be equal to satisfy the [`dealloc`] requirement that memory must be + /// allocated and deallocated with the same layout.) + /// * The size of `T` times the `capacity` (ie. the allocated size in bytes) needs + /// to be the same size as the pointer was allocated with. (Because similar to + /// alignment, [`dealloc`] must be called with the same layout `size`.) + /// * `length` needs to be less than or equal to `capacity`. + /// * The first `length` values must be properly initialized values of type `T`. + /// * `capacity` needs to be the capacity that the pointer was allocated with. + /// * The allocated size in bytes must be no larger than `isize::MAX`. + /// See the safety documentation of [`pointer::offset`](https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.offset). + /// + /// These requirements are always upheld by any `ptr` that has been allocated + /// via `Vec`. Other allocation sources are allowed if the invariants are + /// upheld. + /// + /// Violating these may cause problems like corrupting the allocator's + /// internal data structures. For example it is normally **not** safe + /// to build a `Vec` from a pointer to a C `char` array with length + /// `size_t`, doing so is only safe if the array was initially allocated by + /// a `Vec` or `String`. + /// It's also not safe to build one from a `Vec` and its length, because + /// the allocator cares about the alignment, and these two types have different + /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after + /// turning it into a `Vec` it'll be deallocated with alignment 1. To avoid + /// these issues, it is often preferable to do casting/transmuting using + /// [`slice::from_raw_parts`] instead. + /// + /// The ownership of `ptr` is effectively transferred to the + /// `Vec` which may then deallocate, reallocate or change the + /// contents of memory pointed to by the pointer at will. Ensure + /// that nothing else uses the pointer after calling this + /// function. + /// + /// [`String`]: alloc_crate::string::String + /// [`dealloc`]: crate::alloc::GlobalAlloc::dealloc + /// + /// # Examples + /// + /// ``` + /// use std::ptr; + /// use std::mem; + /// + /// let v = vec![1, 2, 3]; + /// + // FIXME Update this when vec_into_raw_parts is stabilized + /// // Prevent running `v`'s destructor so we are in complete control + /// // of the allocation. + /// let mut v = mem::ManuallyDrop::new(v); + /// + /// // Pull out the various important pieces of information about `v` + /// let p = v.as_mut_ptr(); + /// let len = v.len(); + /// let cap = v.capacity(); + /// + /// unsafe { + /// // Overwrite memory with 4, 5, 6 + /// for i in 0..len { + /// ptr::write(p.add(i), 4 + i); + /// } + /// + /// // Put everything back together into a Vec + /// let rebuilt = Vec::from_raw_parts(p, len, cap); + /// assert_eq!(rebuilt, [4, 5, 6]); + /// } + /// ``` + /// + /// Using memory that was allocated elsewhere: + /// + /// ```rust + /// #![feature(allocator_api)] + /// + /// use std::alloc::{AllocError, Allocator, Global, Layout}; + /// + /// fn main() { + /// let layout = Layout::array::(16).expect("overflow cannot happen"); + /// + /// let vec = unsafe { + /// let mem = match Global.allocate(layout) { + /// Ok(mem) => mem.cast::().as_ptr(), + /// Err(AllocError) => return, + /// }; + /// + /// mem.write(1_000_000); + /// + /// Vec::from_raw_parts_in(mem, 1, 16, Global) + /// }; + /// + /// assert_eq!(vec, &[1_000_000]); + /// assert_eq!(vec.capacity(), 16); + /// } + /// ``` + #[inline(always)] + pub unsafe fn from_raw_parts(ptr: *mut T, length: usize, capacity: usize) -> Self { + unsafe { Self::from_raw_parts_in(ptr, length, capacity, Global) } + } +} + +impl Vec { + /// Constructs a new, empty `Vec`. + /// + /// The vector will not allocate until elements are pushed onto it. + /// + /// # Examples + /// + /// ``` + /// use std::alloc::System; + /// + /// # #[allow(unused_mut)] + /// let mut vec: Vec = Vec::new_in(System); + /// ``` + #[inline(always)] + pub const fn new_in(alloc: A) -> Self { + Vec { + buf: RawVec::new_in(alloc), + len: 0, + } + } + + /// Constructs a new, empty `Vec` with at least the specified capacity + /// with the provided allocator. + /// + /// The vector will be able to hold at least `capacity` elements without + /// reallocating. This method is allowed to allocate for more elements than + /// `capacity`. If `capacity` is 0, the vector will not allocate. + /// + /// It is important to note that although the returned vector has the + /// minimum *capacity* specified, the vector will have a zero *length*. For + /// an explanation of the difference between length and capacity, see + /// *[Capacity and reallocation]*. + /// + /// If it is important to know the exact allocated capacity of a `Vec`, + /// always use the [`capacity`] method after construction. + /// + /// For `Vec` where `T` is a zero-sized type, there will be no allocation + /// and the capacity will always be `usize::MAX`. + /// + /// [Capacity and reallocation]: #capacity-and-reallocation + /// [`capacity`]: Vec::capacity + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Examples + /// + /// ``` + /// use std::alloc::System; + /// + /// let mut vec = Vec::with_capacity_in(10, System); + /// + /// // The vector contains no items, even though it has capacity for more + /// assert_eq!(vec.len(), 0); + /// assert_eq!(vec.capacity(), 10); + /// + /// // These are all done without reallocating... + /// for i in 0..10 { + /// vec.push(i); + /// } + /// assert_eq!(vec.len(), 10); + /// assert_eq!(vec.capacity(), 10); + /// + /// // ...but this may make the vector reallocate + /// vec.push(11); + /// assert_eq!(vec.len(), 11); + /// assert!(vec.capacity() >= 11); + /// + /// // A vector of a zero-sized type will always over-allocate, since no + /// // allocation is necessary + /// let vec_units = Vec::<(), System>::with_capacity_in(10, System); + /// assert_eq!(vec_units.capacity(), usize::MAX); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn with_capacity_in(capacity: usize, alloc: A) -> Self { + Vec { + buf: RawVec::with_capacity_in(capacity, alloc), + len: 0, + } + } + + /// Creates a `Vec` directly from a pointer, a capacity, a length, + /// and an allocator. + /// + /// # Safety + /// + /// This is highly unsafe, due to the number of invariants that aren't + /// checked: + /// + /// * `T` needs to have the same alignment as what `ptr` was allocated with. + /// (`T` having a less strict alignment is not sufficient, the alignment really + /// needs to be equal to satisfy the [`dealloc`] requirement that memory must be + /// allocated and deallocated with the same layout.) + /// * The size of `T` times the `capacity` (ie. the allocated size in bytes) needs + /// to be the same size as the pointer was allocated with. (Because similar to + /// alignment, [`dealloc`] must be called with the same layout `size`.) + /// * `length` needs to be less than or equal to `capacity`. + /// * The first `length` values must be properly initialized values of type `T`. + /// * `capacity` needs to [*fit*] the layout size that the pointer was allocated with. + /// * The allocated size in bytes must be no larger than `isize::MAX`. + /// See the safety documentation of [`pointer::offset`](https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.offset). + /// + /// These requirements are always upheld by any `ptr` that has been allocated + /// via `Vec`. Other allocation sources are allowed if the invariants are + /// upheld. + /// + /// Violating these may cause problems like corrupting the allocator's + /// internal data structures. For example it is **not** safe + /// to build a `Vec` from a pointer to a C `char` array with length `size_t`. + /// It's also not safe to build one from a `Vec` and its length, because + /// the allocator cares about the alignment, and these two types have different + /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after + /// turning it into a `Vec` it'll be deallocated with alignment 1. + /// + /// The ownership of `ptr` is effectively transferred to the + /// `Vec` which may then deallocate, reallocate or change the + /// contents of memory pointed to by the pointer at will. Ensure + /// that nothing else uses the pointer after calling this + /// function. + /// + /// [`String`]: alloc_crate::string::String + /// [`dealloc`]: crate::alloc::GlobalAlloc::dealloc + /// [*fit*]: crate::alloc::Allocator#memory-fitting + /// + /// # Examples + /// + /// ``` + /// use std::alloc::System; + /// + /// use std::ptr; + /// use std::mem; + /// + /// + /// # use allocator_api2::vec::Vec; + /// let mut v = Vec::with_capacity_in(3, System); + /// v.push(1); + /// v.push(2); + /// v.push(3); + /// + // FIXME Update this when vec_into_raw_parts is stabilized + /// // Prevent running `v`'s destructor so we are in complete control + /// // of the allocation. + /// let mut v = mem::ManuallyDrop::new(v); + /// + /// // Pull out the various important pieces of information about `v` + /// let p = v.as_mut_ptr(); + /// let len = v.len(); + /// let cap = v.capacity(); + /// let alloc = v.allocator(); + /// + /// unsafe { + /// // Overwrite memory with 4, 5, 6 + /// for i in 0..len { + /// ptr::write(p.add(i), 4 + i); + /// } + /// + /// // Put everything back together into a Vec + /// let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone()); + /// assert_eq!(rebuilt, [4, 5, 6]); + /// } + /// ``` + /// + /// Using memory that was allocated elsewhere: + /// + /// ```rust + /// use std::alloc::{alloc, Layout}; + /// + /// fn main() { + /// let layout = Layout::array::(16).expect("overflow cannot happen"); + /// let vec = unsafe { + /// let mem = alloc(layout).cast::(); + /// if mem.is_null() { + /// return; + /// } + /// + /// mem.write(1_000_000); + /// + /// Vec::from_raw_parts(mem, 1, 16) + /// }; + /// + /// assert_eq!(vec, &[1_000_000]); + /// assert_eq!(vec.capacity(), 16); + /// } + /// ``` + #[inline(always)] + pub unsafe fn from_raw_parts_in(ptr: *mut T, length: usize, capacity: usize, alloc: A) -> Self { + unsafe { + Vec { + buf: RawVec::from_raw_parts_in(ptr, capacity, alloc), + len: length, + } + } + } + + /// Decomposes a `Vec` into its raw components. + /// + /// Returns the raw pointer to the underlying data, the length of + /// the vector (in elements), and the allocated capacity of the + /// data (in elements). These are the same arguments in the same + /// order as the arguments to [`from_raw_parts`]. + /// + /// After calling this function, the caller is responsible for the + /// memory previously managed by the `Vec`. The only way to do + /// this is to convert the raw pointer, length, and capacity back + /// into a `Vec` with the [`from_raw_parts`] function, allowing + /// the destructor to perform the cleanup. + /// + /// [`from_raw_parts`]: Vec::from_raw_parts + /// + /// # Examples + /// + /// ``` + /// #![feature(vec_into_raw_parts)] + /// let v: Vec = vec![-1, 0, 1]; + /// + /// let (ptr, len, cap) = v.into_raw_parts(); + /// + /// let rebuilt = unsafe { + /// // We can now make changes to the components, such as + /// // transmuting the raw pointer to a compatible type. + /// let ptr = ptr as *mut u32; + /// + /// Vec::from_raw_parts(ptr, len, cap) + /// }; + /// assert_eq!(rebuilt, [4294967295, 0, 1]); + /// ``` + pub fn into_raw_parts(self) -> (*mut T, usize, usize) { + let mut me = ManuallyDrop::new(self); + (me.as_mut_ptr(), me.len(), me.capacity()) + } + + /// Decomposes a `Vec` into its raw components. + /// + /// Returns the raw pointer to the underlying data, the length of the vector (in elements), + /// the allocated capacity of the data (in elements), and the allocator. These are the same + /// arguments in the same order as the arguments to [`from_raw_parts_in`]. + /// + /// After calling this function, the caller is responsible for the + /// memory previously managed by the `Vec`. The only way to do + /// this is to convert the raw pointer, length, and capacity back + /// into a `Vec` with the [`from_raw_parts_in`] function, allowing + /// the destructor to perform the cleanup. + /// + /// [`from_raw_parts_in`]: Vec::from_raw_parts_in + /// + /// # Examples + /// + /// ``` + /// #![feature(allocator_api, vec_into_raw_parts)] + /// + /// use std::alloc::System; + /// + /// let mut v: Vec = Vec::new_in(System); + /// v.push(-1); + /// v.push(0); + /// v.push(1); + /// + /// let (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc(); + /// + /// let rebuilt = unsafe { + /// // We can now make changes to the components, such as + /// // transmuting the raw pointer to a compatible type. + /// let ptr = ptr as *mut u32; + /// + /// Vec::from_raw_parts_in(ptr, len, cap, alloc) + /// }; + /// assert_eq!(rebuilt, [4294967295, 0, 1]); + /// ``` + // #[unstable(feature = "vec_into_raw_parts", reason = "new API", issue = "65816")] + pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A) { + let mut me = ManuallyDrop::new(self); + let len = me.len(); + let capacity = me.capacity(); + let ptr = me.as_mut_ptr(); + let alloc = unsafe { ptr::read(me.allocator()) }; + (ptr, len, capacity, alloc) + } + + /// Returns the total number of elements the vector can hold without + /// reallocating. + /// + /// # Examples + /// + /// ``` + /// let mut vec: Vec = Vec::with_capacity(10); + /// vec.push(42); + /// assert_eq!(vec.capacity(), 10); + /// ``` + #[inline(always)] + pub fn capacity(&self) -> usize { + self.buf.capacity() + } + + /// Reserves capacity for at least `additional` more elements to be inserted + /// in the given `Vec`. The collection may reserve more space to + /// speculatively avoid frequent reallocations. After calling `reserve`, + /// capacity will be greater than or equal to `self.len() + additional`. + /// Does nothing if capacity is already sufficient. + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1]; + /// vec.reserve(10); + /// assert!(vec.capacity() >= 11); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn reserve(&mut self, additional: usize) { + self.buf.reserve(self.len, additional); + } + + /// Reserves the minimum capacity for at least `additional` more elements to + /// be inserted in the given `Vec`. Unlike [`reserve`], this will not + /// deliberately over-allocate to speculatively avoid frequent allocations. + /// After calling `reserve_exact`, capacity will be greater than or equal to + /// `self.len() + additional`. Does nothing if the capacity is already + /// sufficient. + /// + /// Note that the allocator may give the collection more space than it + /// requests. Therefore, capacity can not be relied upon to be precisely + /// minimal. Prefer [`reserve`] if future insertions are expected. + /// + /// [`reserve`]: Vec::reserve + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1]; + /// vec.reserve_exact(10); + /// assert!(vec.capacity() >= 11); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn reserve_exact(&mut self, additional: usize) { + self.buf.reserve_exact(self.len, additional); + } + + /// Tries to reserve capacity for at least `additional` more elements to be inserted + /// in the given `Vec`. The collection may reserve more space to speculatively avoid + /// frequent reallocations. After calling `try_reserve`, capacity will be + /// greater than or equal to `self.len() + additional` if it returns + /// `Ok(())`. Does nothing if capacity is already sufficient. This method + /// preserves the contents even if an error occurs. + /// + /// # Errors + /// + /// If the capacity overflows, or the allocator reports a failure, then an error + /// is returned. + /// + /// # Examples + /// + /// ``` + /// use allocator_api2::collections::TryReserveError; + /// + /// fn process_data(data: &[u32]) -> Result, TryReserveError> { + /// let mut output = Vec::new(); + /// + /// // Pre-reserve the memory, exiting if we can't + /// output.try_reserve(data.len())?; + /// + /// // Now we know this can't OOM in the middle of our complex work + /// output.extend(data.iter().map(|&val| { + /// val * 2 + 5 // very complicated + /// })); + /// + /// Ok(output) + /// } + /// # process_data(&[1, 2, 3]).expect("why is the test harness OOMing on 12 bytes?"); + /// ``` + #[inline(always)] + pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { + self.buf.try_reserve(self.len, additional) + } + + /// Tries to reserve the minimum capacity for at least `additional` + /// elements to be inserted in the given `Vec`. Unlike [`try_reserve`], + /// this will not deliberately over-allocate to speculatively avoid frequent + /// allocations. After calling `try_reserve_exact`, capacity will be greater + /// than or equal to `self.len() + additional` if it returns `Ok(())`. + /// Does nothing if the capacity is already sufficient. + /// + /// Note that the allocator may give the collection more space than it + /// requests. Therefore, capacity can not be relied upon to be precisely + /// minimal. Prefer [`try_reserve`] if future insertions are expected. + /// + /// [`try_reserve`]: Vec::try_reserve + /// + /// # Errors + /// + /// If the capacity overflows, or the allocator reports a failure, then an error + /// is returned. + /// + /// # Examples + /// + /// ``` + /// use allocator_api2::collections::TryReserveError; + /// + /// fn process_data(data: &[u32]) -> Result, TryReserveError> { + /// let mut output = Vec::new(); + /// + /// // Pre-reserve the memory, exiting if we can't + /// output.try_reserve_exact(data.len())?; + /// + /// // Now we know this can't OOM in the middle of our complex work + /// output.extend(data.iter().map(|&val| { + /// val * 2 + 5 // very complicated + /// })); + /// + /// Ok(output) + /// } + /// # process_data(&[1, 2, 3]).expect("why is the test harness OOMing on 12 bytes?"); + /// ``` + #[inline(always)] + pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { + self.buf.try_reserve_exact(self.len, additional) + } + + /// Shrinks the capacity of the vector as much as possible. + /// + /// It will drop down as close as possible to the length but the allocator + /// may still inform the vector that there is space for a few more elements. + /// + /// # Examples + /// + /// ``` + /// let mut vec = Vec::with_capacity(10); + /// vec.extend([1, 2, 3]); + /// assert_eq!(vec.capacity(), 10); + /// vec.shrink_to_fit(); + /// assert!(vec.capacity() >= 3); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn shrink_to_fit(&mut self) { + // The capacity is never less than the length, and there's nothing to do when + // they are equal, so we can avoid the panic case in `RawVec::shrink_to_fit` + // by only calling it with a greater capacity. + if self.capacity() > self.len { + self.buf.shrink_to_fit(self.len); + } + } + + /// Shrinks the capacity of the vector with a lower bound. + /// + /// The capacity will remain at least as large as both the length + /// and the supplied value. + /// + /// If the current capacity is less than the lower limit, this is a no-op. + /// + /// # Examples + /// + /// ``` + /// let mut vec = Vec::with_capacity(10); + /// vec.extend([1, 2, 3]); + /// assert_eq!(vec.capacity(), 10); + /// vec.shrink_to(4); + /// assert!(vec.capacity() >= 4); + /// vec.shrink_to(0); + /// assert!(vec.capacity() >= 3); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn shrink_to(&mut self, min_capacity: usize) { + if self.capacity() > min_capacity { + self.buf.shrink_to_fit(cmp::max(self.len, min_capacity)); + } + } + + /// Converts the vector into [`Box<[T]>`][owned slice]. + /// + /// If the vector has excess capacity, its items will be moved into a + /// newly-allocated buffer with exactly the right capacity. + /// + /// [owned slice]: Box + /// + /// # Examples + /// + /// ``` + /// let v = vec![1, 2, 3]; + /// + /// let slice = v.into_boxed_slice(); + /// ``` + /// + /// Any excess capacity is removed: + /// + /// ``` + /// let mut vec = Vec::with_capacity(10); + /// vec.extend([1, 2, 3]); + /// + /// assert_eq!(vec.capacity(), 10); + /// let slice = vec.into_boxed_slice(); + /// assert_eq!(slice.into_vec().capacity(), 3); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn into_boxed_slice(mut self) -> Box<[T], A> { + unsafe { + self.shrink_to_fit(); + let me = ManuallyDrop::new(self); + let buf = ptr::read(&me.buf); + let len = me.len(); + Box::<[mem::MaybeUninit], A>::assume_init(buf.into_box(len)) + } + } + + /// Shortens the vector, keeping the first `len` elements and dropping + /// the rest. + /// + /// If `len` is greater than the vector's current length, this has no + /// effect. + /// + /// The [`drain`] method can emulate `truncate`, but causes the excess + /// elements to be returned instead of dropped. + /// + /// Note that this method has no effect on the allocated capacity + /// of the vector. + /// + /// # Examples + /// + /// Truncating a five element vector to two elements: + /// + /// ``` + /// let mut vec = vec![1, 2, 3, 4, 5]; + /// vec.truncate(2); + /// assert_eq!(vec, [1, 2]); + /// ``` + /// + /// No truncation occurs when `len` is greater than the vector's current + /// length: + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// vec.truncate(8); + /// assert_eq!(vec, [1, 2, 3]); + /// ``` + /// + /// Truncating when `len == 0` is equivalent to calling the [`clear`] + /// method. + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// vec.truncate(0); + /// assert_eq!(vec, []); + /// ``` + /// + /// [`clear`]: Vec::clear + /// [`drain`]: Vec::drain + #[inline(always)] + pub fn truncate(&mut self, len: usize) { + // This is safe because: + // + // * the slice passed to `drop_in_place` is valid; the `len > self.len` + // case avoids creating an invalid slice, and + // * the `len` of the vector is shrunk before calling `drop_in_place`, + // such that no value will be dropped twice in case `drop_in_place` + // were to panic once (if it panics twice, the program aborts). + unsafe { + // Note: It's intentional that this is `>` and not `>=`. + // Changing it to `>=` has negative performance + // implications in some cases. See #78884 for more. + if len > self.len { + return; + } + let remaining_len = self.len - len; + let s = ptr::slice_from_raw_parts_mut(self.as_mut_ptr().add(len), remaining_len); + self.len = len; + ptr::drop_in_place(s); + } + } + + /// Extracts a slice containing the entire vector. + /// + /// Equivalent to `&s[..]`. + /// + /// # Examples + /// + /// ``` + /// use std::io::{self, Write}; + /// let buffer = vec![1, 2, 3, 5, 8]; + /// io::sink().write(buffer.as_slice()).unwrap(); + /// ``` + #[inline(always)] + pub fn as_slice(&self) -> &[T] { + self + } + + /// Extracts a mutable slice of the entire vector. + /// + /// Equivalent to `&mut s[..]`. + /// + /// # Examples + /// + /// ``` + /// use std::io::{self, Read}; + /// let mut buffer = vec![0; 3]; + /// io::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap(); + /// ``` + #[inline(always)] + pub fn as_mut_slice(&mut self) -> &mut [T] { + self + } + + /// Returns a raw pointer to the vector's buffer, or a dangling raw pointer + /// valid for zero sized reads if the vector didn't allocate. + /// + /// The caller must ensure that the vector outlives the pointer this + /// function returns, or else it will end up pointing to garbage. + /// Modifying the vector may cause its buffer to be reallocated, + /// which would also make any pointers to it invalid. + /// + /// The caller must also ensure that the memory the pointer (non-transitively) points to + /// is never written to (except inside an `UnsafeCell`) using this pointer or any pointer + /// derived from it. If you need to mutate the contents of the slice, use [`as_mut_ptr`]. + /// + /// # Examples + /// + /// ``` + /// let x = vec![1, 2, 4]; + /// let x_ptr = x.as_ptr(); + /// + /// unsafe { + /// for i in 0..x.len() { + /// assert_eq!(*x_ptr.add(i), 1 << i); + /// } + /// } + /// ``` + /// + /// [`as_mut_ptr`]: Vec::as_mut_ptr + #[inline(always)] + pub fn as_ptr(&self) -> *const T { + // We shadow the slice method of the same name to avoid going through + // `deref`, which creates an intermediate reference. + let ptr = self.buf.ptr(); + unsafe { + assume(!ptr.is_null()); + } + ptr + } + + /// Returns an unsafe mutable pointer to the vector's buffer, or a dangling + /// raw pointer valid for zero sized reads if the vector didn't allocate. + /// + /// The caller must ensure that the vector outlives the pointer this + /// function returns, or else it will end up pointing to garbage. + /// Modifying the vector may cause its buffer to be reallocated, + /// which would also make any pointers to it invalid. + /// + /// # Examples + /// + /// ``` + /// // Allocate vector big enough for 4 elements. + /// let size = 4; + /// let mut x: Vec = Vec::with_capacity(size); + /// let x_ptr = x.as_mut_ptr(); + /// + /// // Initialize elements via raw pointer writes, then set length. + /// unsafe { + /// for i in 0..size { + /// *x_ptr.add(i) = i as i32; + /// } + /// x.set_len(size); + /// } + /// assert_eq!(&*x, &[0, 1, 2, 3]); + /// ``` + #[inline(always)] + pub fn as_mut_ptr(&mut self) -> *mut T { + // We shadow the slice method of the same name to avoid going through + // `deref_mut`, which creates an intermediate reference. + let ptr = self.buf.ptr(); + unsafe { + assume(!ptr.is_null()); + } + ptr + } + + /// Returns a reference to the underlying allocator. + #[inline(always)] + pub fn allocator(&self) -> &A { + self.buf.allocator() + } + + /// Forces the length of the vector to `new_len`. + /// + /// This is a low-level operation that maintains none of the normal + /// invariants of the type. Normally changing the length of a vector + /// is done using one of the safe operations instead, such as + /// [`truncate`], [`resize`], [`extend`], or [`clear`]. + /// + /// [`truncate`]: Vec::truncate + /// [`resize`]: Vec::resize + /// [`extend`]: Extend::extend + /// [`clear`]: Vec::clear + /// + /// # Safety + /// + /// - `new_len` must be less than or equal to [`capacity()`]. + /// - The elements at `old_len..new_len` must be initialized. + /// + /// [`capacity()`]: Vec::capacity + /// + /// # Examples + /// + /// This method can be useful for situations in which the vector + /// is serving as a buffer for other code, particularly over FFI: + /// + /// ```no_run + /// # #![allow(dead_code)] + /// # // This is just a minimal skeleton for the doc example; + /// # // don't use this as a starting point for a real library. + /// # pub struct StreamWrapper { strm: *mut std::ffi::c_void } + /// # const Z_OK: i32 = 0; + /// # extern "C" { + /// # fn deflateGetDictionary( + /// # strm: *mut std::ffi::c_void, + /// # dictionary: *mut u8, + /// # dictLength: *mut usize, + /// # ) -> i32; + /// # } + /// # impl StreamWrapper { + /// pub fn get_dictionary(&self) -> Option> { + /// // Per the FFI method's docs, "32768 bytes is always enough". + /// let mut dict = Vec::with_capacity(32_768); + /// let mut dict_length = 0; + /// // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that: + /// // 1. `dict_length` elements were initialized. + /// // 2. `dict_length` <= the capacity (32_768) + /// // which makes `set_len` safe to call. + /// unsafe { + /// // Make the FFI call... + /// let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length); + /// if r == Z_OK { + /// // ...and update the length to what was initialized. + /// dict.set_len(dict_length); + /// Some(dict) + /// } else { + /// None + /// } + /// } + /// } + /// # } + /// ``` + /// + /// While the following example is sound, there is a memory leak since + /// the inner vectors were not freed prior to the `set_len` call: + /// + /// ``` + /// let mut vec = vec![vec![1, 0, 0], + /// vec![0, 1, 0], + /// vec![0, 0, 1]]; + /// // SAFETY: + /// // 1. `old_len..0` is empty so no elements need to be initialized. + /// // 2. `0 <= capacity` always holds whatever `capacity` is. + /// unsafe { + /// vec.set_len(0); + /// } + /// ``` + /// + /// Normally, here, one would use [`clear`] instead to correctly drop + /// the contents and thus not leak memory. + #[inline(always)] + pub unsafe fn set_len(&mut self, new_len: usize) { + debug_assert!(new_len <= self.capacity()); + + self.len = new_len; + } + + /// Removes an element from the vector and returns it. + /// + /// The removed element is replaced by the last element of the vector. + /// + /// This does not preserve ordering, but is *O*(1). + /// If you need to preserve the element order, use [`remove`] instead. + /// + /// [`remove`]: Vec::remove + /// + /// # Panics + /// + /// Panics if `index` is out of bounds. + /// + /// # Examples + /// + /// ``` + /// let mut v = vec!["foo", "bar", "baz", "qux"]; + /// + /// assert_eq!(v.swap_remove(1), "bar"); + /// assert_eq!(v, ["foo", "qux", "baz"]); + /// + /// assert_eq!(v.swap_remove(0), "foo"); + /// assert_eq!(v, ["baz", "qux"]); + /// ``` + #[inline(always)] + pub fn swap_remove(&mut self, index: usize) -> T { + #[cold] + #[inline(never)] + fn assert_failed(index: usize, len: usize) -> ! { + panic!( + "swap_remove index (is {}) should be < len (is {})", + index, len + ); + } + + let len = self.len(); + if index >= len { + assert_failed(index, len); + } + unsafe { + // We replace self[index] with the last element. Note that if the + // bounds check above succeeds there must be a last element (which + // can be self[index] itself). + let value = ptr::read(self.as_ptr().add(index)); + let base_ptr = self.as_mut_ptr(); + ptr::copy(base_ptr.add(len - 1), base_ptr.add(index), 1); + self.set_len(len - 1); + value + } + } + + /// Inserts an element at position `index` within the vector, shifting all + /// elements after it to the right. + /// + /// # Panics + /// + /// Panics if `index > len`. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// vec.insert(1, 4); + /// assert_eq!(vec, [1, 4, 2, 3]); + /// vec.insert(4, 5); + /// assert_eq!(vec, [1, 4, 2, 3, 5]); + /// ``` + #[cfg(not(no_global_oom_handling))] + pub fn insert(&mut self, index: usize, element: T) { + #[cold] + #[inline(never)] + fn assert_failed(index: usize, len: usize) -> ! { + panic!( + "insertion index (is {}) should be <= len (is {})", + index, len + ); + } + + let len = self.len(); + + // space for the new element + if len == self.buf.capacity() { + self.reserve(1); + } + + unsafe { + // infallible + // The spot to put the new value + { + let p = self.as_mut_ptr().add(index); + match cmp::Ord::cmp(&index, &len) { + Ordering::Less => { + // Shift everything over to make space. (Duplicating the + // `index`th element into two consecutive places.) + ptr::copy(p, p.add(1), len - index); + } + Ordering::Equal => { + // No elements need shifting. + } + Ordering::Greater => { + assert_failed(index, len); + } + } + // Write it in, overwriting the first copy of the `index`th + // element. + ptr::write(p, element); + } + self.set_len(len + 1); + } + } + + /// Removes and returns the element at position `index` within the vector, + /// shifting all elements after it to the left. + /// + /// Note: Because this shifts over the remaining elements, it has a + /// worst-case performance of *O*(*n*). If you don't need the order of elements + /// to be preserved, use [`swap_remove`] instead. If you'd like to remove + /// elements from the beginning of the `Vec`, consider using + /// [`VecDeque::pop_front`] instead. + /// + /// [`swap_remove`]: Vec::swap_remove + /// [`VecDeque::pop_front`]: alloc_crate::collections::VecDeque::pop_front + /// + /// # Panics + /// + /// Panics if `index` is out of bounds. + /// + /// # Examples + /// + /// ``` + /// let mut v = vec![1, 2, 3]; + /// assert_eq!(v.remove(1), 2); + /// assert_eq!(v, [1, 3]); + /// ``` + #[track_caller] + #[inline(always)] + pub fn remove(&mut self, index: usize) -> T { + #[cold] + #[inline(never)] + #[track_caller] + fn assert_failed(index: usize, len: usize) -> ! { + panic!("removal index (is {}) should be < len (is {})", index, len); + } + + let len = self.len(); + if index >= len { + assert_failed(index, len); + } + unsafe { + // infallible + let ret; + { + // the place we are taking from. + let ptr = self.as_mut_ptr().add(index); + // copy it out, unsafely having a copy of the value on + // the stack and in the vector at the same time. + ret = ptr::read(ptr); + + // Shift everything down to fill in that spot. + ptr::copy(ptr.add(1), ptr, len - index - 1); + } + self.set_len(len - 1); + ret + } + } + + /// Retains only the elements specified by the predicate. + /// + /// In other words, remove all elements `e` for which `f(&e)` returns `false`. + /// This method operates in place, visiting each element exactly once in the + /// original order, and preserves the order of the retained elements. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3, 4]; + /// vec.retain(|&x| x % 2 == 0); + /// assert_eq!(vec, [2, 4]); + /// ``` + /// + /// Because the elements are visited exactly once in the original order, + /// external state may be used to decide which elements to keep. + /// + /// ``` + /// let mut vec = vec![1, 2, 3, 4, 5]; + /// let keep = [false, true, true, false, true]; + /// let mut iter = keep.iter(); + /// vec.retain(|_| *iter.next().unwrap()); + /// assert_eq!(vec, [2, 3, 5]); + /// ``` + #[inline(always)] + pub fn retain(&mut self, mut f: F) + where + F: FnMut(&T) -> bool, + { + self.retain_mut(|elem| f(elem)); + } + + /// Retains only the elements specified by the predicate, passing a mutable reference to it. + /// + /// In other words, remove all elements `e` such that `f(&mut e)` returns `false`. + /// This method operates in place, visiting each element exactly once in the + /// original order, and preserves the order of the retained elements. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3, 4]; + /// vec.retain_mut(|x| if *x <= 3 { + /// *x += 1; + /// true + /// } else { + /// false + /// }); + /// assert_eq!(vec, [2, 3, 4]); + /// ``` + #[inline] + pub fn retain_mut(&mut self, mut f: F) + where + F: FnMut(&mut T) -> bool, + { + let original_len = self.len(); + // Avoid double drop if the drop guard is not executed, + // since we may make some holes during the process. + unsafe { self.set_len(0) }; + + // Vec: [Kept, Kept, Hole, Hole, Hole, Hole, Unchecked, Unchecked] + // |<- processed len ->| ^- next to check + // |<- deleted cnt ->| + // |<- original_len ->| + // Kept: Elements which predicate returns true on. + // Hole: Moved or dropped element slot. + // Unchecked: Unchecked valid elements. + // + // This drop guard will be invoked when predicate or `drop` of element panicked. + // It shifts unchecked elements to cover holes and `set_len` to the correct length. + // In cases when predicate and `drop` never panick, it will be optimized out. + struct BackshiftOnDrop<'a, T, A: Allocator> { + v: &'a mut Vec, + processed_len: usize, + deleted_cnt: usize, + original_len: usize, + } + + impl Drop for BackshiftOnDrop<'_, T, A> { + fn drop(&mut self) { + if self.deleted_cnt > 0 { + // SAFETY: Trailing unchecked items must be valid since we never touch them. + unsafe { + ptr::copy( + self.v.as_ptr().add(self.processed_len), + self.v + .as_mut_ptr() + .add(self.processed_len - self.deleted_cnt), + self.original_len - self.processed_len, + ); + } + } + // SAFETY: After filling holes, all items are in contiguous memory. + unsafe { + self.v.set_len(self.original_len - self.deleted_cnt); + } + } + } + + let mut g = BackshiftOnDrop { + v: self, + processed_len: 0, + deleted_cnt: 0, + original_len, + }; + + fn process_loop( + original_len: usize, + f: &mut F, + g: &mut BackshiftOnDrop<'_, T, A>, + ) where + F: FnMut(&mut T) -> bool, + { + while g.processed_len != original_len { + // SAFETY: Unchecked element must be valid. + let cur = unsafe { &mut *g.v.as_mut_ptr().add(g.processed_len) }; + if !f(cur) { + // Advance early to avoid double drop if `drop_in_place` panicked. + g.processed_len += 1; + g.deleted_cnt += 1; + // SAFETY: We never touch this element again after dropped. + unsafe { ptr::drop_in_place(cur) }; + // We already advanced the counter. + if DELETED { + continue; + } else { + break; + } + } + if DELETED { + // SAFETY: `deleted_cnt` > 0, so the hole slot must not overlap with current element. + // We use copy for move, and never touch this element again. + unsafe { + let hole_slot = g.v.as_mut_ptr().add(g.processed_len - g.deleted_cnt); + ptr::copy_nonoverlapping(cur, hole_slot, 1); + } + } + g.processed_len += 1; + } + } + + // Stage 1: Nothing was deleted. + process_loop::(original_len, &mut f, &mut g); + + // Stage 2: Some elements were deleted. + process_loop::(original_len, &mut f, &mut g); + + // All item are processed. This can be optimized to `set_len` by LLVM. + drop(g); + } + + /// Removes all but the first of consecutive elements in the vector that resolve to the same + /// key. + /// + /// If the vector is sorted, this removes all duplicates. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![10, 20, 21, 30, 20]; + /// + /// vec.dedup_by_key(|i| *i / 10); + /// + /// assert_eq!(vec, [10, 20, 30, 20]); + /// ``` + #[inline(always)] + pub fn dedup_by_key(&mut self, mut key: F) + where + F: FnMut(&mut T) -> K, + K: PartialEq, + { + self.dedup_by(|a, b| key(a) == key(b)) + } + + /// Removes all but the first of consecutive elements in the vector satisfying a given equality + /// relation. + /// + /// The `same_bucket` function is passed references to two elements from the vector and + /// must determine if the elements compare equal. The elements are passed in opposite order + /// from their order in the slice, so if `same_bucket(a, b)` returns `true`, `a` is removed. + /// + /// If the vector is sorted, this removes all duplicates. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec!["foo", "bar", "Bar", "baz", "bar"]; + /// + /// vec.dedup_by(|a, b| a.eq_ignore_ascii_case(b)); + /// + /// assert_eq!(vec, ["foo", "bar", "baz", "bar"]); + /// ``` + #[inline] + pub fn dedup_by(&mut self, mut same_bucket: F) + where + F: FnMut(&mut T, &mut T) -> bool, + { + let len = self.len(); + if len <= 1 { + return; + } + + /* INVARIANT: vec.len() > read >= write > write-1 >= 0 */ + struct FillGapOnDrop<'a, T, A: Allocator> { + /* Offset of the element we want to check if it is duplicate */ + read: usize, + + /* Offset of the place where we want to place the non-duplicate + * when we find it. */ + write: usize, + + /* The Vec that would need correction if `same_bucket` panicked */ + vec: &'a mut Vec, + } + + impl<'a, T, A: Allocator> Drop for FillGapOnDrop<'a, T, A> { + fn drop(&mut self) { + /* This code gets executed when `same_bucket` panics */ + + /* SAFETY: invariant guarantees that `read - write` + * and `len - read` never overflow and that the copy is always + * in-bounds. */ + unsafe { + let ptr = self.vec.as_mut_ptr(); + let len = self.vec.len(); + + /* How many items were left when `same_bucket` panicked. + * Basically vec[read..].len() */ + let items_left = len.wrapping_sub(self.read); + + /* Pointer to first item in vec[write..write+items_left] slice */ + let dropped_ptr = ptr.add(self.write); + /* Pointer to first item in vec[read..] slice */ + let valid_ptr = ptr.add(self.read); + + /* Copy `vec[read..]` to `vec[write..write+items_left]`. + * The slices can overlap, so `copy_nonoverlapping` cannot be used */ + ptr::copy(valid_ptr, dropped_ptr, items_left); + + /* How many items have been already dropped + * Basically vec[read..write].len() */ + let dropped = self.read.wrapping_sub(self.write); + + self.vec.set_len(len - dropped); + } + } + } + + let mut gap = FillGapOnDrop { + read: 1, + write: 1, + vec: self, + }; + let ptr = gap.vec.as_mut_ptr(); + + /* Drop items while going through Vec, it should be more efficient than + * doing slice partition_dedup + truncate */ + + /* SAFETY: Because of the invariant, read_ptr, prev_ptr and write_ptr + * are always in-bounds and read_ptr never aliases prev_ptr */ + unsafe { + while gap.read < len { + let read_ptr = ptr.add(gap.read); + let prev_ptr = ptr.add(gap.write.wrapping_sub(1)); + + if same_bucket(&mut *read_ptr, &mut *prev_ptr) { + // Increase `gap.read` now since the drop may panic. + gap.read += 1; + /* We have found duplicate, drop it in-place */ + ptr::drop_in_place(read_ptr); + } else { + let write_ptr = ptr.add(gap.write); + + /* Because `read_ptr` can be equal to `write_ptr`, we either + * have to use `copy` or conditional `copy_nonoverlapping`. + * Looks like the first option is faster. */ + ptr::copy(read_ptr, write_ptr, 1); + + /* We have filled that place, so go further */ + gap.write += 1; + gap.read += 1; + } + } + + /* Technically we could let `gap` clean up with its Drop, but + * when `same_bucket` is guaranteed to not panic, this bloats a little + * the codegen, so we just do it manually */ + gap.vec.set_len(gap.write); + mem::forget(gap); + } + } + + /// Appends an element to the back of a collection. + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2]; + /// vec.push(3); + /// assert_eq!(vec, [1, 2, 3]); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn push(&mut self, value: T) { + // This will panic or abort if we would allocate > isize::MAX bytes + // or if the length increment would overflow for zero-sized types. + if self.len == self.buf.capacity() { + self.buf.reserve_for_push(self.len); + } + unsafe { + let end = self.as_mut_ptr().add(self.len); + ptr::write(end, value); + self.len += 1; + } + } + + /// Appends an element if there is sufficient spare capacity, otherwise an error is returned + /// with the element. + /// + /// Unlike [`push`] this method will not reallocate when there's insufficient capacity. + /// The caller should use [`reserve`] or [`try_reserve`] to ensure that there is enough capacity. + /// + /// [`push`]: Vec::push + /// [`reserve`]: Vec::reserve + /// [`try_reserve`]: Vec::try_reserve + /// + /// # Examples + /// + /// A manual, panic-free alternative to [`FromIterator`]: + /// + /// ``` + /// #![feature(vec_push_within_capacity)] + /// + /// use std::collections::TryReserveError; + /// fn from_iter_fallible(iter: impl Iterator) -> Result, TryReserveError> { + /// let mut vec = Vec::new(); + /// for value in iter { + /// if let Err(value) = vec.push_within_capacity(value) { + /// vec.try_reserve(1)?; + /// // this cannot fail, the previous line either returned or added at least 1 free slot + /// let _ = vec.push_within_capacity(value); + /// } + /// } + /// Ok(vec) + /// } + /// assert_eq!(from_iter_fallible(0..100), Ok(Vec::from_iter(0..100))); + /// ``` + #[inline(always)] + pub fn push_within_capacity(&mut self, value: T) -> Result<(), T> { + if self.len == self.buf.capacity() { + return Err(value); + } + unsafe { + let end = self.as_mut_ptr().add(self.len); + ptr::write(end, value); + self.len += 1; + } + Ok(()) + } + + /// Removes the last element from a vector and returns it, or [`None`] if it + /// is empty. + /// + /// If you'd like to pop the first element, consider using + /// [`VecDeque::pop_front`] instead. + /// + /// [`VecDeque::pop_front`]: alloc_crate::collections::VecDeque::pop_front + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// assert_eq!(vec.pop(), Some(3)); + /// assert_eq!(vec, [1, 2]); + /// ``` + #[inline(always)] + pub fn pop(&mut self) -> Option { + if self.len == 0 { + None + } else { + unsafe { + self.len -= 1; + Some(ptr::read(self.as_ptr().add(self.len()))) + } + } + } + + /// Moves all the elements of `other` into `self`, leaving `other` empty. + /// + /// # Panics + /// + /// Panics if the new capacity exceeds `isize::MAX` bytes. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// let mut vec2 = vec![4, 5, 6]; + /// vec.append(&mut vec2); + /// assert_eq!(vec, [1, 2, 3, 4, 5, 6]); + /// assert_eq!(vec2, []); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn append(&mut self, other: &mut Self) { + unsafe { + self.append_elements(other.as_slice() as _); + other.set_len(0); + } + } + + /// Appends elements to `self` from other buffer. + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + unsafe fn append_elements(&mut self, other: *const [T]) { + let count = unsafe { (&(*other)).len() }; + self.reserve(count); + let len = self.len(); + unsafe { ptr::copy_nonoverlapping(other as *const T, self.as_mut_ptr().add(len), count) }; + self.len += count; + } + + /// Removes the specified range from the vector in bulk, returning all + /// removed elements as an iterator. If the iterator is dropped before + /// being fully consumed, it drops the remaining removed elements. + /// + /// The returned iterator keeps a mutable borrow on the vector to optimize + /// its implementation. + /// + /// # Panics + /// + /// Panics if the starting point is greater than the end point or if + /// the end point is greater than the length of the vector. + /// + /// # Leaking + /// + /// If the returned iterator goes out of scope without being dropped (due to + /// [`mem::forget`], for example), the vector may have lost and leaked + /// elements arbitrarily, including elements outside the range. + /// + /// # Examples + /// + /// ``` + /// let mut v = vec![1, 2, 3]; + /// let u: Vec<_> = v.drain(1..).collect(); + /// assert_eq!(v, &[1]); + /// assert_eq!(u, &[2, 3]); + /// + /// // A full range clears the vector, like `clear()` does + /// v.drain(..); + /// assert_eq!(v, &[]); + /// ``` + #[inline(always)] + pub fn drain(&mut self, range: R) -> Drain<'_, T, A> + where + R: RangeBounds, + { + // Memory safety + // + // When the Drain is first created, it shortens the length of + // the source vector to make sure no uninitialized or moved-from elements + // are accessible at all if the Drain's destructor never gets to run. + // + // Drain will ptr::read out the values to remove. + // When finished, remaining tail of the vec is copied back to cover + // the hole, and the vector length is restored to the new length. + // + let len = self.len(); + + // Replaced by code below + // let Range { start, end } = slice::range(range, ..len); + + // Panics if range is out of bounds + let _ = &self.as_slice()[(range.start_bound().cloned(), range.end_bound().cloned())]; + + let start = match range.start_bound() { + Bound::Included(&n) => n, + Bound::Excluded(&n) => n + 1, + Bound::Unbounded => 0, + }; + let end = match range.end_bound() { + Bound::Included(&n) => n + 1, + Bound::Excluded(&n) => n, + Bound::Unbounded => len, + }; + + unsafe { + // set self.vec length's to start, to be safe in case Drain is leaked + self.set_len(start); + let range_slice = slice::from_raw_parts(self.as_ptr().add(start), end - start); + Drain { + tail_start: end, + tail_len: len - end, + iter: range_slice.iter(), + vec: NonNull::from(self), + } + } + } + + /// Clears the vector, removing all values. + /// + /// Note that this method has no effect on the allocated capacity + /// of the vector. + /// + /// # Examples + /// + /// ``` + /// let mut v = vec![1, 2, 3]; + /// + /// v.clear(); + /// + /// assert!(v.is_empty()); + /// ``` + #[inline(always)] + pub fn clear(&mut self) { + let elems: *mut [T] = self.as_mut_slice(); + + // SAFETY: + // - `elems` comes directly from `as_mut_slice` and is therefore valid. + // - Setting `self.len` before calling `drop_in_place` means that, + // if an element's `Drop` impl panics, the vector's `Drop` impl will + // do nothing (leaking the rest of the elements) instead of dropping + // some twice. + unsafe { + self.len = 0; + ptr::drop_in_place(elems); + } + } + + /// Returns the number of elements in the vector, also referred to + /// as its 'length'. + /// + /// # Examples + /// + /// ``` + /// let a = vec![1, 2, 3]; + /// assert_eq!(a.len(), 3); + /// ``` + #[inline(always)] + pub fn len(&self) -> usize { + self.len + } + + /// Returns `true` if the vector contains no elements. + /// + /// # Examples + /// + /// ``` + /// let mut v = Vec::new(); + /// assert!(v.is_empty()); + /// + /// v.push(1); + /// assert!(!v.is_empty()); + /// ``` + #[inline(always)] + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + + /// Splits the collection into two at the given index. + /// + /// Returns a newly allocated vector containing the elements in the range + /// `[at, len)`. After the call, the original vector will be left containing + /// the elements `[0, at)` with its previous capacity unchanged. + /// + /// # Panics + /// + /// Panics if `at > len`. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// let vec2 = vec.split_off(1); + /// assert_eq!(vec, [1]); + /// assert_eq!(vec2, [2, 3]); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + #[must_use = "use `.truncate()` if you don't need the other half"] + pub fn split_off(&mut self, at: usize) -> Self + where + A: Clone, + { + #[cold] + #[inline(never)] + fn assert_failed(at: usize, len: usize) -> ! { + panic!("`at` split index (is {}) should be <= len (is {})", at, len); + } + + if at > self.len() { + assert_failed(at, self.len()); + } + + if at == 0 { + // the new vector can take over the original buffer and avoid the copy + return mem::replace( + self, + Vec::with_capacity_in(self.capacity(), self.allocator().clone()), + ); + } + + let other_len = self.len - at; + let mut other = Vec::with_capacity_in(other_len, self.allocator().clone()); + + // Unsafely `set_len` and copy items to `other`. + unsafe { + self.set_len(at); + other.set_len(other_len); + + ptr::copy_nonoverlapping(self.as_ptr().add(at), other.as_mut_ptr(), other.len()); + } + other + } + + /// Resizes the `Vec` in-place so that `len` is equal to `new_len`. + /// + /// If `new_len` is greater than `len`, the `Vec` is extended by the + /// difference, with each additional slot filled with the result of + /// calling the closure `f`. The return values from `f` will end up + /// in the `Vec` in the order they have been generated. + /// + /// If `new_len` is less than `len`, the `Vec` is simply truncated. + /// + /// This method uses a closure to create new values on every push. If + /// you'd rather [`Clone`] a given value, use [`Vec::resize`]. If you + /// want to use the [`Default`] trait to generate values, you can + /// pass [`Default::default`] as the second argument. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 3]; + /// vec.resize_with(5, Default::default); + /// assert_eq!(vec, [1, 2, 3, 0, 0]); + /// + /// let mut vec = vec![]; + /// let mut p = 1; + /// vec.resize_with(4, || { p *= 2; p }); + /// assert_eq!(vec, [2, 4, 8, 16]); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn resize_with(&mut self, new_len: usize, f: F) + where + F: FnMut() -> T, + { + let len = self.len(); + if new_len > len { + self.extend(iter::repeat_with(f).take(new_len - len)); + } else { + self.truncate(new_len); + } + } + + /// Consumes and leaks the `Vec`, returning a mutable reference to the contents, + /// `&'a mut [T]`. Note that the type `T` must outlive the chosen lifetime + /// `'a`. If the type has only static references, or none at all, then this + /// may be chosen to be `'static`. + /// + /// As of Rust 1.57, this method does not reallocate or shrink the `Vec`, + /// so the leaked allocation may include unused capacity that is not part + /// of the returned slice. + /// + /// This function is mainly useful for data that lives for the remainder of + /// the program's life. Dropping the returned reference will cause a memory + /// leak. + /// + /// # Examples + /// + /// Simple usage: + /// + /// ``` + /// let x = vec![1, 2, 3]; + /// let static_ref: &'static mut [usize] = x.leak(); + /// static_ref[0] += 1; + /// assert_eq!(static_ref, &[2, 2, 3]); + /// ``` + #[inline(always)] + pub fn leak<'a>(self) -> &'a mut [T] + where + A: 'a, + { + let mut me = ManuallyDrop::new(self); + unsafe { slice::from_raw_parts_mut(me.as_mut_ptr(), me.len) } + } + + /// Returns the remaining spare capacity of the vector as a slice of + /// `MaybeUninit`. + /// + /// The returned slice can be used to fill the vector with data (e.g. by + /// reading from a file) before marking the data as initialized using the + /// [`set_len`] method. + /// + /// [`set_len`]: Vec::set_len + /// + /// # Examples + /// + /// ``` + /// // Allocate vector big enough for 10 elements. + /// let mut v = Vec::with_capacity(10); + /// + /// // Fill in the first 3 elements. + /// let uninit = v.spare_capacity_mut(); + /// uninit[0].write(0); + /// uninit[1].write(1); + /// uninit[2].write(2); + /// + /// // Mark the first 3 elements of the vector as being initialized. + /// unsafe { + /// v.set_len(3); + /// } + /// + /// assert_eq!(&v, &[0, 1, 2]); + /// ``` + #[inline(always)] + pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit] { + // Note: + // This method is not implemented in terms of `split_at_spare_mut`, + // to prevent invalidation of pointers to the buffer. + unsafe { + slice::from_raw_parts_mut( + self.as_mut_ptr().add(self.len) as *mut MaybeUninit, + self.buf.capacity() - self.len, + ) + } + } + + /// Returns vector content as a slice of `T`, along with the remaining spare + /// capacity of the vector as a slice of `MaybeUninit`. + /// + /// The returned spare capacity slice can be used to fill the vector with data + /// (e.g. by reading from a file) before marking the data as initialized using + /// the [`set_len`] method. + /// + /// [`set_len`]: Vec::set_len + /// + /// Note that this is a low-level API, which should be used with care for + /// optimization purposes. If you need to append data to a `Vec` + /// you can use [`push`], [`extend`], [`extend_from_slice`], + /// [`extend_from_within`], [`insert`], [`append`], [`resize`] or + /// [`resize_with`], depending on your exact needs. + /// + /// [`push`]: Vec::push + /// [`extend`]: Vec::extend + /// [`extend_from_slice`]: Vec::extend_from_slice + /// [`extend_from_within`]: Vec::extend_from_within + /// [`insert`]: Vec::insert + /// [`append`]: Vec::append + /// [`resize`]: Vec::resize + /// [`resize_with`]: Vec::resize_with + /// + /// # Examples + /// + /// ``` + /// #![feature(vec_split_at_spare)] + /// + /// let mut v = vec![1, 1, 2]; + /// + /// // Reserve additional space big enough for 10 elements. + /// v.reserve(10); + /// + /// let (init, uninit) = v.split_at_spare_mut(); + /// let sum = init.iter().copied().sum::(); + /// + /// // Fill in the next 4 elements. + /// uninit[0].write(sum); + /// uninit[1].write(sum * 2); + /// uninit[2].write(sum * 3); + /// uninit[3].write(sum * 4); + /// + /// // Mark the 4 elements of the vector as being initialized. + /// unsafe { + /// let len = v.len(); + /// v.set_len(len + 4); + /// } + /// + /// assert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]); + /// ``` + #[inline(always)] + pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit]) { + // SAFETY: + // - len is ignored and so never changed + let (init, spare, _) = unsafe { self.split_at_spare_mut_with_len() }; + (init, spare) + } + + /// Safety: changing returned .2 (&mut usize) is considered the same as calling `.set_len(_)`. + /// + /// This method provides unique access to all vec parts at once in `extend_from_within`. + unsafe fn split_at_spare_mut_with_len( + &mut self, + ) -> (&mut [T], &mut [MaybeUninit], &mut usize) { + let ptr = self.as_mut_ptr(); + // SAFETY: + // - `ptr` is guaranteed to be valid for `self.len` elements + // - but the allocation extends out to `self.buf.capacity()` elements, possibly + // uninitialized + let spare_ptr = unsafe { ptr.add(self.len) }; + let spare_ptr = spare_ptr.cast::>(); + let spare_len = self.buf.capacity() - self.len; + + // SAFETY: + // - `ptr` is guaranteed to be valid for `self.len` elements + // - `spare_ptr` is pointing one element past the buffer, so it doesn't overlap with `initialized` + unsafe { + let initialized = slice::from_raw_parts_mut(ptr, self.len); + let spare = slice::from_raw_parts_mut(spare_ptr, spare_len); + + (initialized, spare, &mut self.len) + } + } +} + +impl Vec { + /// Resizes the `Vec` in-place so that `len` is equal to `new_len`. + /// + /// If `new_len` is greater than `len`, the `Vec` is extended by the + /// difference, with each additional slot filled with `value`. + /// If `new_len` is less than `len`, the `Vec` is simply truncated. + /// + /// This method requires `T` to implement [`Clone`], + /// in order to be able to clone the passed value. + /// If you need more flexibility (or want to rely on [`Default`] instead of + /// [`Clone`]), use [`Vec::resize_with`]. + /// If you only need to resize to a smaller size, use [`Vec::truncate`]. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec!["hello"]; + /// vec.resize(3, "world"); + /// assert_eq!(vec, ["hello", "world", "world"]); + /// + /// let mut vec = vec![1, 2, 3, 4]; + /// vec.resize(2, 0); + /// assert_eq!(vec, [1, 2]); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn resize(&mut self, new_len: usize, value: T) { + let len = self.len(); + + if new_len > len { + self.extend_with(new_len - len, ExtendElement(value)) + } else { + self.truncate(new_len); + } + } + + /// Clones and appends all elements in a slice to the `Vec`. + /// + /// Iterates over the slice `other`, clones each element, and then appends + /// it to this `Vec`. The `other` slice is traversed in-order. + /// + /// Note that this function is same as [`extend`] except that it is + /// specialized to work with slices instead. If and when Rust gets + /// specialization this function will likely be deprecated (but still + /// available). + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1]; + /// vec.extend_from_slice(&[2, 3, 4]); + /// assert_eq!(vec, [1, 2, 3, 4]); + /// ``` + /// + /// [`extend`]: Vec::extend + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn extend_from_slice(&mut self, other: &[T]) { + self.extend(other.iter().cloned()) + } + + /// Copies elements from `src` range to the end of the vector. + /// + /// # Panics + /// + /// Panics if the starting point is greater than the end point or if + /// the end point is greater than the length of the vector. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![0, 1, 2, 3, 4]; + /// + /// vec.extend_from_within(2..); + /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]); + /// + /// vec.extend_from_within(..2); + /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]); + /// + /// vec.extend_from_within(4..8); + /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn extend_from_within(&mut self, src: R) + where + R: RangeBounds, + { + // let range = slice::range(src, ..self.len()); + + let _ = &self.as_slice()[(src.start_bound().cloned(), src.end_bound().cloned())]; + + let len = self.len(); + + let start: ops::Bound<&usize> = src.start_bound(); + let start = match start { + ops::Bound::Included(&start) => start, + ops::Bound::Excluded(start) => start + 1, + ops::Bound::Unbounded => 0, + }; + + let end: ops::Bound<&usize> = src.end_bound(); + let end = match end { + ops::Bound::Included(end) => end + 1, + ops::Bound::Excluded(&end) => end, + ops::Bound::Unbounded => len, + }; + + let range = start..end; + + self.reserve(range.len()); + + // SAFETY: + // - len is increased only after initializing elements + let (this, spare, len) = unsafe { self.split_at_spare_mut_with_len() }; + + // SAFETY: + // - caller guarantees that src is a valid index + let to_clone = unsafe { this.get_unchecked(range) }; + + iter::zip(to_clone, spare) + .map(|(src, dst)| dst.write(src.clone())) + // Note: + // - Element was just initialized with `MaybeUninit::write`, so it's ok to increase len + // - len is increased after each element to prevent leaks (see issue #82533) + .for_each(|_| *len += 1); + } +} + +impl Vec<[T; N], A> { + /// Takes a `Vec<[T; N]>` and flattens it into a `Vec`. + /// + /// # Panics + /// + /// Panics if the length of the resulting vector would overflow a `usize`. + /// + /// This is only possible when flattening a vector of arrays of zero-sized + /// types, and thus tends to be irrelevant in practice. If + /// `size_of::() > 0`, this will never panic. + /// + /// # Examples + /// + /// ``` + /// #![feature(slice_flatten)] + /// + /// let mut vec = vec![[1, 2, 3], [4, 5, 6], [7, 8, 9]]; + /// assert_eq!(vec.pop(), Some([7, 8, 9])); + /// + /// let mut flattened = vec.into_flattened(); + /// assert_eq!(flattened.pop(), Some(6)); + /// ``` + #[inline(always)] + pub fn into_flattened(self) -> Vec { + let (ptr, len, cap, alloc) = self.into_raw_parts_with_alloc(); + let (new_len, new_cap) = if size_of::() == 0 { + (len.checked_mul(N).expect("vec len overflow"), usize::MAX) + } else { + // SAFETY: + // - `cap * N` cannot overflow because the allocation is already in + // the address space. + // - Each `[T; N]` has `N` valid elements, so there are `len * N` + // valid elements in the allocation. + (len * N, cap * N) + }; + // SAFETY: + // - `ptr` was allocated by `self` + // - `ptr` is well-aligned because `[T; N]` has the same alignment as `T`. + // - `new_cap` refers to the same sized allocation as `cap` because + // `new_cap * size_of::()` == `cap * size_of::<[T; N]>()` + // - `len` <= `cap`, so `len * N` <= `cap * N`. + unsafe { Vec::::from_raw_parts_in(ptr.cast(), new_len, new_cap, alloc) } + } +} + +// This code generalizes `extend_with_{element,default}`. +trait ExtendWith { + fn next(&mut self) -> T; + fn last(self) -> T; +} + +struct ExtendElement(T); +impl ExtendWith for ExtendElement { + #[inline(always)] + fn next(&mut self) -> T { + self.0.clone() + } + + #[inline(always)] + fn last(self) -> T { + self.0 + } +} + +impl Vec { + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + /// Extend the vector by `n` values, using the given generator. + fn extend_with>(&mut self, n: usize, mut value: E) { + self.reserve(n); + + unsafe { + let mut ptr = self.as_mut_ptr().add(self.len()); + // Use SetLenOnDrop to work around bug where compiler + // might not realize the store through `ptr` through self.set_len() + // don't alias. + let mut local_len = SetLenOnDrop::new(&mut self.len); + + // Write all elements except the last one + for _ in 1..n { + ptr::write(ptr, value.next()); + ptr = ptr.add(1); + // Increment the length in every step in case next() panics + local_len.increment_len(1); + } + + if n > 0 { + // We can write the last element directly without cloning needlessly + ptr::write(ptr, value.last()); + local_len.increment_len(1); + } + + // len set by scope guard + } + } +} + +impl Vec { + /// Removes consecutive repeated elements in the vector according to the + /// [`PartialEq`] trait implementation. + /// + /// If the vector is sorted, this removes all duplicates. + /// + /// # Examples + /// + /// ``` + /// let mut vec = vec![1, 2, 2, 3, 2]; + /// + /// vec.dedup(); + /// + /// assert_eq!(vec, [1, 2, 3, 2]); + /// ``` + #[inline(always)] + pub fn dedup(&mut self) { + self.dedup_by(|a, b| a == b) + } +} + +//////////////////////////////////////////////////////////////////////////////// +// Common trait implementations for Vec +//////////////////////////////////////////////////////////////////////////////// + +impl ops::Deref for Vec { + type Target = [T]; + + #[inline(always)] + fn deref(&self) -> &[T] { + unsafe { slice::from_raw_parts(self.as_ptr(), self.len) } + } +} + +impl ops::DerefMut for Vec { + #[inline(always)] + fn deref_mut(&mut self) -> &mut [T] { + unsafe { slice::from_raw_parts_mut(self.as_mut_ptr(), self.len) } + } +} + +#[cfg(not(no_global_oom_handling))] +impl Clone for Vec { + #[inline(always)] + fn clone(&self) -> Self { + let alloc = self.allocator().clone(); + let mut vec = Vec::with_capacity_in(self.len(), alloc); + vec.extend_from_slice(self); + vec + } + + #[inline(always)] + fn clone_from(&mut self, other: &Self) { + // drop anything that will not be overwritten + self.truncate(other.len()); + + // self.len <= other.len due to the truncate above, so the + // slices here are always in-bounds. + let (init, tail) = other.split_at(self.len()); + + // reuse the contained values' allocations/resources. + self.clone_from_slice(init); + self.extend_from_slice(tail); + } +} + +/// The hash of a vector is the same as that of the corresponding slice, +/// as required by the `core::borrow::Borrow` implementation. +/// +/// ``` +/// #![feature(build_hasher_simple_hash_one)] +/// use std::hash::BuildHasher; +/// +/// let b = std::collections::hash_map::RandomState::new(); +/// let v: Vec = vec![0xa8, 0x3c, 0x09]; +/// let s: &[u8] = &[0xa8, 0x3c, 0x09]; +/// assert_eq!(b.hash_one(v), b.hash_one(s)); +/// ``` +impl Hash for Vec { + #[inline(always)] + fn hash(&self, state: &mut H) { + Hash::hash(&**self, state) + } +} + +impl, A: Allocator> Index for Vec { + type Output = I::Output; + + #[inline(always)] + fn index(&self, index: I) -> &Self::Output { + Index::index(&**self, index) + } +} + +impl, A: Allocator> IndexMut for Vec { + #[inline(always)] + fn index_mut(&mut self, index: I) -> &mut Self::Output { + IndexMut::index_mut(&mut **self, index) + } +} + +#[cfg(not(no_global_oom_handling))] +impl FromIterator for Vec { + #[inline(always)] + fn from_iter>(iter: I) -> Vec { + let mut vec = Vec::new(); + vec.extend(iter); + vec + } +} + +impl IntoIterator for Vec { + type Item = T; + type IntoIter = IntoIter; + + /// Creates a consuming iterator, that is, one that moves each value out of + /// the vector (from start to end). The vector cannot be used after calling + /// this. + /// + /// # Examples + /// + /// ``` + /// let v = vec!["a".to_string(), "b".to_string()]; + /// let mut v_iter = v.into_iter(); + /// + /// let first_element: Option = v_iter.next(); + /// + /// assert_eq!(first_element, Some("a".to_string())); + /// assert_eq!(v_iter.next(), Some("b".to_string())); + /// assert_eq!(v_iter.next(), None); + /// ``` + #[inline(always)] + fn into_iter(self) -> Self::IntoIter { + unsafe { + let mut me = ManuallyDrop::new(self); + let alloc = ManuallyDrop::new(ptr::read(me.allocator())); + let begin = me.as_mut_ptr(); + let end = if size_of::() == 0 { + begin.cast::().wrapping_add(me.len()).cast() + } else { + begin.add(me.len()) as *const T + }; + let cap = me.buf.capacity(); + IntoIter { + buf: NonNull::new_unchecked(begin), + phantom: PhantomData, + cap, + alloc, + ptr: begin, + end, + } + } + } +} + +impl<'a, T, A: Allocator> IntoIterator for &'a Vec { + type Item = &'a T; + type IntoIter = slice::Iter<'a, T>; + + #[inline(always)] + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +impl<'a, T, A: Allocator> IntoIterator for &'a mut Vec { + type Item = &'a mut T; + type IntoIter = slice::IterMut<'a, T>; + + fn into_iter(self) -> Self::IntoIter { + self.iter_mut() + } +} + +#[cfg(not(no_global_oom_handling))] +impl Extend for Vec { + #[inline(always)] + fn extend>(&mut self, iter: I) { + // This is the case for a general iter. + // + // This function should be the moral equivalent of: + // + // for item in iter { + // self.push(item); + // } + + let mut iter = iter.into_iter(); + while let Some(element) = iter.next() { + let len = self.len(); + if len == self.capacity() { + let (lower, _) = iter.size_hint(); + self.reserve(lower.saturating_add(1)); + } + unsafe { + ptr::write(self.as_mut_ptr().add(len), element); + // Since next() executes user code which can panic we have to bump the length + // after each step. + // NB can't overflow since we would have had to alloc the address space + self.set_len(len + 1); + } + } + } +} + +impl Vec { + /// Creates a splicing iterator that replaces the specified range in the vector + /// with the given `replace_with` iterator and yields the removed items. + /// `replace_with` does not need to be the same length as `range`. + /// + /// `range` is removed even if the iterator is not consumed until the end. + /// + /// It is unspecified how many elements are removed from the vector + /// if the `Splice` value is leaked. + /// + /// The input iterator `replace_with` is only consumed when the `Splice` value is dropped. + /// + /// This is optimal if: + /// + /// * The tail (elements in the vector after `range`) is empty, + /// * or `replace_with` yields fewer or equal elements than `range`’s length + /// * or the lower bound of its `size_hint()` is exact. + /// + /// Otherwise, a temporary vector is allocated and the tail is moved twice. + /// + /// # Panics + /// + /// Panics if the starting point is greater than the end point or if + /// the end point is greater than the length of the vector. + /// + /// # Examples + /// + /// ``` + /// let mut v = vec![1, 2, 3, 4]; + /// let new = [7, 8, 9]; + /// let u: Vec<_> = v.splice(1..3, new).collect(); + /// assert_eq!(v, &[1, 7, 8, 9, 4]); + /// assert_eq!(u, &[2, 3]); + /// ``` + #[cfg(not(no_global_oom_handling))] + #[inline(always)] + pub fn splice(&mut self, range: R, replace_with: I) -> Splice<'_, I::IntoIter, A> + where + R: RangeBounds, + I: IntoIterator, + { + Splice { + drain: self.drain(range), + replace_with: replace_with.into_iter(), + } + } +} + +/// Extend implementation that copies elements out of references before pushing them onto the Vec. +/// +/// This implementation is specialized for slice iterators, where it uses [`copy_from_slice`] to +/// append the entire slice at once. +/// +/// [`copy_from_slice`]: slice::copy_from_slice +#[cfg(not(no_global_oom_handling))] +impl<'a, T: Copy + 'a, A: Allocator + 'a> Extend<&'a T> for Vec { + #[inline(always)] + fn extend>(&mut self, iter: I) { + let mut iter = iter.into_iter(); + while let Some(element) = iter.next() { + let len = self.len(); + if len == self.capacity() { + let (lower, _) = iter.size_hint(); + self.reserve(lower.saturating_add(1)); + } + unsafe { + ptr::write(self.as_mut_ptr().add(len), *element); + // Since next() executes user code which can panic we have to bump the length + // after each step. + // NB can't overflow since we would have had to alloc the address space + self.set_len(len + 1); + } + } + } +} + +/// Implements comparison of vectors, [lexicographically](core::cmp::Ord#lexicographical-comparison). +impl PartialOrd for Vec { + #[inline(always)] + fn partial_cmp(&self, other: &Self) -> Option { + PartialOrd::partial_cmp(&**self, &**other) + } +} + +impl Eq for Vec {} + +/// Implements ordering of vectors, [lexicographically](core::cmp::Ord#lexicographical-comparison). +impl Ord for Vec { + #[inline(always)] + fn cmp(&self, other: &Self) -> Ordering { + Ord::cmp(&**self, &**other) + } +} + +impl Drop for Vec { + #[inline(always)] + fn drop(&mut self) { + unsafe { + // use drop for [T] + // use a raw slice to refer to the elements of the vector as weakest necessary type; + // could avoid questions of validity in certain cases + ptr::drop_in_place(ptr::slice_from_raw_parts_mut(self.as_mut_ptr(), self.len)) + } + // RawVec handles deallocation + } +} + +impl Default for Vec { + /// Creates an empty `Vec`. + /// + /// The vector will not allocate until elements are pushed onto it. + #[inline(always)] + fn default() -> Vec { + Vec::new() + } +} + +impl fmt::Debug for Vec { + #[inline(always)] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&**self, f) + } +} + +impl AsRef> for Vec { + #[inline(always)] + fn as_ref(&self) -> &Vec { + self + } +} + +impl AsMut> for Vec { + #[inline(always)] + fn as_mut(&mut self) -> &mut Vec { + self + } +} + +impl AsRef<[T]> for Vec { + #[inline(always)] + fn as_ref(&self) -> &[T] { + self + } +} + +impl AsMut<[T]> for Vec { + #[inline(always)] + fn as_mut(&mut self) -> &mut [T] { + self + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<&[T]> for Vec { + /// Allocate a `Vec` and fill it by cloning `s`'s items. + /// + /// # Examples + /// + /// ``` + /// assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]); + /// ``` + #[inline(always)] + fn from(s: &[T]) -> Vec { + let mut vec = Vec::with_capacity(s.len()); + vec.extend_from_slice(s); + vec + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<&mut [T]> for Vec { + /// Allocate a `Vec` and fill it by cloning `s`'s items. + /// + /// # Examples + /// + /// ``` + /// assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]); + /// ``` + #[inline(always)] + fn from(s: &mut [T]) -> Vec { + let mut vec = Vec::with_capacity(s.len()); + vec.extend_from_slice(s); + vec + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<[T; N]> for Vec { + #[inline(always)] + fn from(s: [T; N]) -> Vec { + Box::slice(Box::new(s)).into_vec() + } +} + +impl From> for Vec { + /// Convert a boxed slice into a vector by transferring ownership of + /// the existing heap allocation. + /// + /// # Examples + /// + /// ``` + /// let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice(); + /// assert_eq!(Vec::from(b), vec![1, 2, 3]); + /// ``` + #[inline(always)] + fn from(s: Box<[T], A>) -> Self { + s.into_vec() + } +} + +impl From> for Vec { + /// Convert a boxed array into a vector by transferring ownership of + /// the existing heap allocation. + /// + /// # Examples + /// + /// ``` + /// let b: Box<[i32; 3]> = Box::new([1, 2, 3]); + /// assert_eq!(Vec::from(b), vec![1, 2, 3]); + /// ``` + #[inline(always)] + fn from(s: Box<[T; N], A>) -> Self { + s.into_vec() + } +} + +// note: test pulls in libstd, which causes errors here +#[cfg(not(no_global_oom_handling))] +impl From> for Box<[T], A> { + /// Convert a vector into a boxed slice. + /// + /// If `v` has excess capacity, its items will be moved into a + /// newly-allocated buffer with exactly the right capacity. + /// + /// # Examples + /// + /// ``` + /// assert_eq!(Box::from(vec![1, 2, 3]), vec![1, 2, 3].into_boxed_slice()); + /// ``` + /// + /// Any excess capacity is removed: + /// ``` + /// let mut vec = Vec::with_capacity(10); + /// vec.extend([1, 2, 3]); + /// + /// assert_eq!(Box::from(vec), vec![1, 2, 3].into_boxed_slice()); + /// ``` + #[inline(always)] + fn from(v: Vec) -> Self { + v.into_boxed_slice() + } +} + +#[cfg(not(no_global_oom_handling))] +impl From<&str> for Vec { + /// Allocate a `Vec` and fill it with a UTF-8 string. + /// + /// # Examples + /// + /// ``` + /// assert_eq!(Vec::from("123"), vec![b'1', b'2', b'3']); + /// ``` + #[inline(always)] + fn from(s: &str) -> Vec { + From::from(s.as_bytes()) + } +} + +impl TryFrom> for [T; N] { + type Error = Vec; + + /// Gets the entire contents of the `Vec` as an array, + /// if its size exactly matches that of the requested array. + /// + /// # Examples + /// + /// ``` + /// assert_eq!(vec![1, 2, 3].try_into(), Ok([1, 2, 3])); + /// assert_eq!(>::new().try_into(), Ok([])); + /// ``` + /// + /// If the length doesn't match, the input comes back in `Err`: + /// ``` + /// let r: Result<[i32; 4], _> = (0..10).collect::>().try_into(); + /// assert_eq!(r, Err(vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9])); + /// ``` + /// + /// If you're fine with just getting a prefix of the `Vec`, + /// you can call [`.truncate(N)`](Vec::truncate) first. + /// ``` + /// let mut v = String::from("hello world").into_bytes(); + /// v.sort(); + /// v.truncate(2); + /// let [a, b]: [_; 2] = v.try_into().unwrap(); + /// assert_eq!(a, b' '); + /// assert_eq!(b, b'd'); + /// ``` + #[inline(always)] + fn try_from(mut vec: Vec) -> Result<[T; N], Vec> { + if vec.len() != N { + return Err(vec); + } + + // SAFETY: `.set_len(0)` is always sound. + unsafe { vec.set_len(0) }; + + // SAFETY: A `Vec`'s pointer is always aligned properly, and + // the alignment the array needs is the same as the items. + // We checked earlier that we have sufficient items. + // The items will not double-drop as the `set_len` + // tells the `Vec` not to also drop them. + let array = unsafe { ptr::read(vec.as_ptr() as *const [T; N]) }; + Ok(array) + } +} + +#[inline(always)] +#[cfg(not(no_global_oom_handling))] +#[doc(hidden)] +pub fn from_elem_in(elem: T, n: usize, alloc: A) -> Vec { + let mut v = Vec::with_capacity_in(n, alloc); + v.extend_with(n, ExtendElement(elem)); + v +} + +#[inline(always)] +#[cfg(not(no_global_oom_handling))] +#[doc(hidden)] +pub fn from_elem(elem: T, n: usize) -> Vec { + let mut v = Vec::with_capacity(n); + v.extend_with(n, ExtendElement(elem)); + v +} + +/// Write is implemented for `Vec` by appending to the vector. +/// The vector will grow as needed. +#[cfg(feature = "std")] +impl io::Write for Vec { + #[inline] + fn write(&mut self, buf: &[u8]) -> io::Result { + self.extend_from_slice(buf); + Ok(buf.len()) + } + + #[inline] + fn write_vectored(&mut self, bufs: &[io::IoSlice<'_>]) -> io::Result { + let len = bufs.iter().map(|b| b.len()).sum(); + self.reserve(len); + for buf in bufs { + self.extend_from_slice(buf); + } + Ok(len) + } + + #[inline] + fn write_all(&mut self, buf: &[u8]) -> io::Result<()> { + self.extend_from_slice(buf); + Ok(()) + } + + #[inline] + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } +} + +#[cfg(feature = "serde")] +impl serde::Serialize for Vec +where + T: serde::Serialize, + A: Allocator, +{ + #[inline(always)] + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + serializer.collect_seq(self) + } +} + +#[cfg(feature = "serde")] +impl<'de, T, A> serde::de::Deserialize<'de> for Vec +where + T: serde::de::Deserialize<'de>, + A: Allocator + Default, +{ + #[inline(always)] + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + struct VecVisitor { + marker: PhantomData<(T, A)>, + } + + impl<'de, T, A> serde::de::Visitor<'de> for VecVisitor + where + T: serde::de::Deserialize<'de>, + A: Allocator + Default, + { + type Value = Vec; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a sequence") + } + + fn visit_seq(self, mut seq: S) -> Result + where + S: serde::de::SeqAccess<'de>, + { + let mut values = Vec::with_capacity_in(cautious(seq.size_hint()), A::default()); + + while let Some(value) = seq.next_element()? { + values.push(value); + } + + Ok(values) + } + } + + let visitor = VecVisitor { + marker: PhantomData, + }; + deserializer.deserialize_seq(visitor) + } + + #[inline(always)] + fn deserialize_in_place(deserializer: D, place: &mut Self) -> Result<(), D::Error> + where + D: serde::de::Deserializer<'de>, + { + struct VecInPlaceVisitor<'a, T: 'a, A: Allocator + 'a>(&'a mut Vec); + + impl<'a, 'de, T, A> serde::de::Visitor<'de> for VecInPlaceVisitor<'a, T, A> + where + T: serde::de::Deserialize<'de>, + A: Allocator + Default, + { + type Value = (); + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a sequence") + } + + fn visit_seq(self, mut seq: S) -> Result + where + S: serde::de::SeqAccess<'de>, + { + let hint = cautious(seq.size_hint()); + if let Some(additional) = hint.checked_sub(self.0.len()) { + self.0.reserve(additional); + } + + for i in 0..self.0.len() { + let next = { + let next_place = InPlaceSeed(&mut self.0[i]); + seq.next_element_seed(next_place)? + }; + if next.is_none() { + self.0.truncate(i); + return Ok(()); + } + } + + while let Some(value) = seq.next_element()? { + self.0.push(value); + } + + Ok(()) + } + } + + deserializer.deserialize_seq(VecInPlaceVisitor(place)) + } +} + +#[cfg(feature = "serde")] +pub fn cautious(hint: Option) -> usize { + cmp::min(hint.unwrap_or(0), 4096) +} + +/// A DeserializeSeed helper for implementing deserialize_in_place Visitors. +/// +/// Wraps a mutable reference and calls deserialize_in_place on it. + +#[cfg(feature = "serde")] +pub struct InPlaceSeed<'a, T: 'a>(pub &'a mut T); + +#[cfg(feature = "serde")] +impl<'a, 'de, T> serde::de::DeserializeSeed<'de> for InPlaceSeed<'a, T> +where + T: serde::de::Deserialize<'de>, +{ + type Value = (); + fn deserialize(self, deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + T::deserialize_in_place(deserializer, self.0) + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/partial_eq.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/partial_eq.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/partial_eq.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/partial_eq.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,43 +1,43 @@ -#[cfg(not(no_global_oom_handling))] -use alloc_crate::borrow::Cow; - -use crate::stable::alloc::Allocator; - -use super::Vec; - -macro_rules! __impl_slice_eq1 { - ([$($vars:tt)*] $lhs:ty, $rhs:ty $(where $ty:ty: $bound:ident)?) => { - impl PartialEq<$rhs> for $lhs - where - T: PartialEq, - $($ty: $bound)? - { - #[inline(always)] - fn eq(&self, other: &$rhs) -> bool { self[..] == other[..] } - #[inline(always)] - fn ne(&self, other: &$rhs) -> bool { self[..] != other[..] } - } - } -} - -__impl_slice_eq1! { [A1: Allocator, A2: Allocator] Vec, Vec } -__impl_slice_eq1! { [A: Allocator] Vec, &[U] } -__impl_slice_eq1! { [A: Allocator] Vec, &mut [U] } -__impl_slice_eq1! { [A: Allocator] &[T], Vec } -__impl_slice_eq1! { [A: Allocator] &mut [T], Vec } -__impl_slice_eq1! { [A: Allocator] Vec, [U] } -__impl_slice_eq1! { [A: Allocator] [T], Vec } -#[cfg(not(no_global_oom_handling))] -__impl_slice_eq1! { [A: Allocator] Cow<'_, [T]>, Vec where T: Clone } -__impl_slice_eq1! { [A: Allocator, const N: usize] Vec, [U; N] } -__impl_slice_eq1! { [A: Allocator, const N: usize] Vec, &[U; N] } - -// NOTE: some less important impls are omitted to reduce code bloat -// FIXME(Centril): Reconsider this? -//__impl_slice_eq1! { [const N: usize] Vec, &mut [B; N], } -//__impl_slice_eq1! { [const N: usize] [A; N], Vec, } -//__impl_slice_eq1! { [const N: usize] &[A; N], Vec, } -//__impl_slice_eq1! { [const N: usize] &mut [A; N], Vec, } -//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, [B; N], } -//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &[B; N], } -//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &mut [B; N], } +#[cfg(not(no_global_oom_handling))] +use alloc_crate::borrow::Cow; + +use crate::stable::alloc::Allocator; + +use super::Vec; + +macro_rules! __impl_slice_eq1 { + ([$($vars:tt)*] $lhs:ty, $rhs:ty $(where $ty:ty: $bound:ident)?) => { + impl PartialEq<$rhs> for $lhs + where + T: PartialEq, + $($ty: $bound)? + { + #[inline(always)] + fn eq(&self, other: &$rhs) -> bool { self[..] == other[..] } + #[inline(always)] + fn ne(&self, other: &$rhs) -> bool { self[..] != other[..] } + } + } +} + +__impl_slice_eq1! { [A1: Allocator, A2: Allocator] Vec, Vec } +__impl_slice_eq1! { [A: Allocator] Vec, &[U] } +__impl_slice_eq1! { [A: Allocator] Vec, &mut [U] } +__impl_slice_eq1! { [A: Allocator] &[T], Vec } +__impl_slice_eq1! { [A: Allocator] &mut [T], Vec } +__impl_slice_eq1! { [A: Allocator] Vec, [U] } +__impl_slice_eq1! { [A: Allocator] [T], Vec } +#[cfg(not(no_global_oom_handling))] +__impl_slice_eq1! { [A: Allocator] Cow<'_, [T]>, Vec where T: Clone } +__impl_slice_eq1! { [A: Allocator, const N: usize] Vec, [U; N] } +__impl_slice_eq1! { [A: Allocator, const N: usize] Vec, &[U; N] } + +// NOTE: some less important impls are omitted to reduce code bloat +// FIXME(Centril): Reconsider this? +//__impl_slice_eq1! { [const N: usize] Vec, &mut [B; N], } +//__impl_slice_eq1! { [const N: usize] [A; N], Vec, } +//__impl_slice_eq1! { [const N: usize] &[A; N], Vec, } +//__impl_slice_eq1! { [const N: usize] &mut [A; N], Vec, } +//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, [B; N], } +//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &[B; N], } +//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &mut [B; N], } diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/set_len_on_drop.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/set_len_on_drop.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/set_len_on_drop.rs 2025-09-22 21:16:23.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/set_len_on_drop.rs 2025-10-09 15:35:45.000000000 +0000 @@ -1,31 +1,31 @@ -// Set the length of the vec when the `SetLenOnDrop` value goes out of scope. -// -// The idea is: The length field in SetLenOnDrop is a local variable -// that the optimizer will see does not alias with any stores through the Vec's data -// pointer. This is a workaround for alias analysis issue #32155 -pub(super) struct SetLenOnDrop<'a> { - len: &'a mut usize, - local_len: usize, -} - -impl<'a> SetLenOnDrop<'a> { - #[inline(always)] - pub(super) fn new(len: &'a mut usize) -> Self { - SetLenOnDrop { - local_len: *len, - len, - } - } - - #[inline(always)] - pub(super) fn increment_len(&mut self, increment: usize) { - self.local_len += increment; - } -} - -impl Drop for SetLenOnDrop<'_> { - #[inline(always)] - fn drop(&mut self) { - *self.len = self.local_len; - } -} +// Set the length of the vec when the `SetLenOnDrop` value goes out of scope. +// +// The idea is: The length field in SetLenOnDrop is a local variable +// that the optimizer will see does not alias with any stores through the Vec's data +// pointer. This is a workaround for alias analysis issue #32155 +pub(super) struct SetLenOnDrop<'a> { + len: &'a mut usize, + local_len: usize, +} + +impl<'a> SetLenOnDrop<'a> { + #[inline(always)] + pub(super) fn new(len: &'a mut usize) -> Self { + SetLenOnDrop { + local_len: *len, + len, + } + } + + #[inline(always)] + pub(super) fn increment_len(&mut self, increment: usize) { + self.local_len += increment; + } +} + +impl Drop for SetLenOnDrop<'_> { + #[inline(always)] + fn drop(&mut self) { + *self.len = self.local_len; + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/splice.rs firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/splice.rs --- firefox-esr-140.3.1esr/third_party/rust/allocator-api2/src/stable/vec/splice.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/allocator-api2/src/stable/vec/splice.rs 2025-10-09 15:35:44.000000000 +0000 @@ -1,135 +1,135 @@ -use core::ptr::{self}; -use core::slice::{self}; - -use crate::stable::alloc::{Allocator, Global}; - -use super::{Drain, Vec}; - -/// A splicing iterator for `Vec`. -/// -/// This struct is created by [`Vec::splice()`]. -/// See its documentation for more. -/// -/// # Example -/// -/// ``` -/// let mut v = vec![0, 1, 2]; -/// let new = [7, 8]; -/// let iter: std::vec::Splice<_> = v.splice(1.., new); -/// ``` -#[derive(Debug)] -pub struct Splice<'a, I: Iterator + 'a, A: Allocator + 'a = Global> { - pub(super) drain: Drain<'a, I::Item, A>, - pub(super) replace_with: I, -} - -impl Iterator for Splice<'_, I, A> { - type Item = I::Item; - - #[inline(always)] - fn next(&mut self) -> Option { - self.drain.next() - } - - #[inline(always)] - fn size_hint(&self) -> (usize, Option) { - self.drain.size_hint() - } -} - -impl DoubleEndedIterator for Splice<'_, I, A> { - #[inline(always)] - fn next_back(&mut self) -> Option { - self.drain.next_back() - } -} - -impl ExactSizeIterator for Splice<'_, I, A> {} - -impl Drop for Splice<'_, I, A> { - #[inline] - fn drop(&mut self) { - self.drain.by_ref().for_each(drop); - - unsafe { - if self.drain.tail_len == 0 { - self.drain.vec.as_mut().extend(self.replace_with.by_ref()); - return; - } - - // First fill the range left by drain(). - if !self.drain.fill(&mut self.replace_with) { - return; - } - - // There may be more elements. Use the lower bound as an estimate. - // FIXME: Is the upper bound a better guess? Or something else? - let (lower_bound, _upper_bound) = self.replace_with.size_hint(); - if lower_bound > 0 { - self.drain.move_tail(lower_bound); - if !self.drain.fill(&mut self.replace_with) { - return; - } - } - - // Collect any remaining elements. - // This is a zero-length vector which does not allocate if `lower_bound` was exact. - let mut collected = self - .replace_with - .by_ref() - .collect::>() - .into_iter(); - // Now we have an exact count. - if collected.len() > 0 { - self.drain.move_tail(collected.len()); - let filled = self.drain.fill(&mut collected); - debug_assert!(filled); - debug_assert_eq!(collected.len(), 0); - } - } - // Let `Drain::drop` move the tail back if necessary and restore `vec.len`. - } -} - -/// Private helper methods for `Splice::drop` -impl Drain<'_, T, A> { - /// The range from `self.vec.len` to `self.tail_start` contains elements - /// that have been moved out. - /// Fill that range as much as possible with new elements from the `replace_with` iterator. - /// Returns `true` if we filled the entire range. (`replace_with.next()` didn’t return `None`.) - #[inline(always)] - unsafe fn fill>(&mut self, replace_with: &mut I) -> bool { - let vec = unsafe { self.vec.as_mut() }; - let range_start = vec.len; - let range_end = self.tail_start; - let range_slice = unsafe { - slice::from_raw_parts_mut(vec.as_mut_ptr().add(range_start), range_end - range_start) - }; - - for place in range_slice { - if let Some(new_item) = replace_with.next() { - unsafe { ptr::write(place, new_item) }; - vec.len += 1; - } else { - return false; - } - } - true - } - - /// Makes room for inserting more elements before the tail. - #[inline(always)] - unsafe fn move_tail(&mut self, additional: usize) { - let vec = unsafe { self.vec.as_mut() }; - let len = self.tail_start + self.tail_len; - vec.buf.reserve(len, additional); - - let new_tail_start = self.tail_start + additional; - unsafe { - let src = vec.as_ptr().add(self.tail_start); - let dst = vec.as_mut_ptr().add(new_tail_start); - ptr::copy(src, dst, self.tail_len); - } - self.tail_start = new_tail_start; - } -} +use core::ptr::{self}; +use core::slice::{self}; + +use crate::stable::alloc::{Allocator, Global}; + +use super::{Drain, Vec}; + +/// A splicing iterator for `Vec`. +/// +/// This struct is created by [`Vec::splice()`]. +/// See its documentation for more. +/// +/// # Example +/// +/// ``` +/// let mut v = vec![0, 1, 2]; +/// let new = [7, 8]; +/// let iter: std::vec::Splice<_> = v.splice(1.., new); +/// ``` +#[derive(Debug)] +pub struct Splice<'a, I: Iterator + 'a, A: Allocator + 'a = Global> { + pub(super) drain: Drain<'a, I::Item, A>, + pub(super) replace_with: I, +} + +impl Iterator for Splice<'_, I, A> { + type Item = I::Item; + + #[inline(always)] + fn next(&mut self) -> Option { + self.drain.next() + } + + #[inline(always)] + fn size_hint(&self) -> (usize, Option) { + self.drain.size_hint() + } +} + +impl DoubleEndedIterator for Splice<'_, I, A> { + #[inline(always)] + fn next_back(&mut self) -> Option { + self.drain.next_back() + } +} + +impl ExactSizeIterator for Splice<'_, I, A> {} + +impl Drop for Splice<'_, I, A> { + #[inline] + fn drop(&mut self) { + self.drain.by_ref().for_each(drop); + + unsafe { + if self.drain.tail_len == 0 { + self.drain.vec.as_mut().extend(self.replace_with.by_ref()); + return; + } + + // First fill the range left by drain(). + if !self.drain.fill(&mut self.replace_with) { + return; + } + + // There may be more elements. Use the lower bound as an estimate. + // FIXME: Is the upper bound a better guess? Or something else? + let (lower_bound, _upper_bound) = self.replace_with.size_hint(); + if lower_bound > 0 { + self.drain.move_tail(lower_bound); + if !self.drain.fill(&mut self.replace_with) { + return; + } + } + + // Collect any remaining elements. + // This is a zero-length vector which does not allocate if `lower_bound` was exact. + let mut collected = self + .replace_with + .by_ref() + .collect::>() + .into_iter(); + // Now we have an exact count. + if collected.len() > 0 { + self.drain.move_tail(collected.len()); + let filled = self.drain.fill(&mut collected); + debug_assert!(filled); + debug_assert_eq!(collected.len(), 0); + } + } + // Let `Drain::drop` move the tail back if necessary and restore `vec.len`. + } +} + +/// Private helper methods for `Splice::drop` +impl Drain<'_, T, A> { + /// The range from `self.vec.len` to `self.tail_start` contains elements + /// that have been moved out. + /// Fill that range as much as possible with new elements from the `replace_with` iterator. + /// Returns `true` if we filled the entire range. (`replace_with.next()` didn’t return `None`.) + #[inline(always)] + unsafe fn fill>(&mut self, replace_with: &mut I) -> bool { + let vec = unsafe { self.vec.as_mut() }; + let range_start = vec.len; + let range_end = self.tail_start; + let range_slice = unsafe { + slice::from_raw_parts_mut(vec.as_mut_ptr().add(range_start), range_end - range_start) + }; + + for place in range_slice { + if let Some(new_item) = replace_with.next() { + unsafe { ptr::write(place, new_item) }; + vec.len += 1; + } else { + return false; + } + } + true + } + + /// Makes room for inserting more elements before the tail. + #[inline(always)] + unsafe fn move_tail(&mut self, additional: usize) { + let vec = unsafe { self.vec.as_mut() }; + let len = self.tail_start + self.tail_len; + vec.buf.reserve(len, additional); + + let new_tail_start = self.tail_start + additional; + unsafe { + let src = vec.as_ptr().add(self.tail_start); + let dst = vec.as_mut_ptr().add(new_tail_start); + ptr::copy(src, dst, self.tail_len); + } + self.tail_start = new_tail_start; + } +} diff -Nru firefox-esr-140.3.1esr/third_party/rust/webext-storage/.cargo-checksum.json firefox-esr-140.4.0esr/third_party/rust/webext-storage/.cargo-checksum.json --- firefox-esr-140.3.1esr/third_party/rust/webext-storage/.cargo-checksum.json 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/webext-storage/.cargo-checksum.json 2025-10-09 15:35:45.000000000 +0000 @@ -1 +1 @@ -{"files":{"Cargo.toml":"3dabddc8c56828528ac713fcaf2dc2f4f275571d119615cf652e698d64ff92e9","README.md":"821cac7eb5b963fc3f3fe21dd890427ab2bbf335cb25cbae89b713b3350687c5","build.rs":"f4ff15cd54890d3e3636e77a0458ba9a8882f271ccb0056a0bbae1975cdd75d5","sql/create_schema.sql":"a17311a407ec10e033886b7125da4c8b84bc6d761f6b28edc9594de430e1d964","sql/create_sync_temp_tables.sql":"860ede362c94feb47d85522553fa2852f9bdb9f9b025d6438dd5dee3d4acd527","sql/tests/create_schema_v1.sql":"77cf0c90eaac3e1aea626537147e1b8ec349b68d6076c92fa7ae402aac613050","src/api.rs":"f257b7ad208af1274b679d953bc3425f72b66c65037ab57e822a520892b273c2","src/db.rs":"b24a68226889cf84f0020142dddfdecf84949f47e4582c2e0c7b62d4e2883a9d","src/error.rs":"4a37ff2221551ebf53a835085b3e21f9de3f86a74711ddd5903975c7110333a1","src/ffi.rs":"f66a81393bebe7a4b7e7960cb426df106ff1f02bfebcaa6e335b4b8b56c5c936","src/lib.rs":"e00636eb57498ab015387b08ffe64618dca31e95977e60be624aa259d7dfe4b5","src/migration.rs":"7f09887df071e15f34be5bd24116f43b786410e935e1f1d7e49471877629dd19","src/schema.rs":"0a668212a6db65cf5c59a786eaa342707583d580c1d374c81374335301f758bc","src/store.rs":"a092586b65a6ebfa36c62cb45859ba7626631a699e1a2445c8cfb54fec9bb44a","src/sync/bridge.rs":"14d095bc67e511297b833e279912f61dd67993a877be941cc058afe9017cb058","src/sync/incoming.rs":"8b7cd75463aae7bc08e87d5feb2b125ae68b512bcb712483457d2837c4b0086a","src/sync/mod.rs":"5e6ae17f5a0fe0e278ed1fe552cea4fb7993280811333c36ac40599cde4059d6","src/sync/outgoing.rs":"3a6227d0cabc672917ba52e041bee2ac4b61dc0c2bc8c7cd57458d36891ce950","src/sync/sync_tests.rs":"c5490abbaed5cffc2afa397bdd8386762c30b28b7d95a30ce0825678a72e56b3","src/webext-storage.udl":"a37a5c796bcdc71b61dbb189a8801bbff9e67bf81aebb489db0e7fcafc58521d","uniffi.toml":"beeec89c2f877eb89be0090dc304dbc7c74e787385e7459bad78c6165bb66791"},"package":null} \ No newline at end of file +{"files":{"Cargo.toml":"3dabddc8c56828528ac713fcaf2dc2f4f275571d119615cf652e698d64ff92e9","README.md":"821cac7eb5b963fc3f3fe21dd890427ab2bbf335cb25cbae89b713b3350687c5","build.rs":"f4ff15cd54890d3e3636e77a0458ba9a8882f271ccb0056a0bbae1975cdd75d5","sql/create_schema.sql":"a17311a407ec10e033886b7125da4c8b84bc6d761f6b28edc9594de430e1d964","sql/create_sync_temp_tables.sql":"860ede362c94feb47d85522553fa2852f9bdb9f9b025d6438dd5dee3d4acd527","sql/tests/create_schema_v1.sql":"77cf0c90eaac3e1aea626537147e1b8ec349b68d6076c92fa7ae402aac613050","src/api.rs":"f257b7ad208af1274b679d953bc3425f72b66c65037ab57e822a520892b273c2","src/db.rs":"b24a68226889cf84f0020142dddfdecf84949f47e4582c2e0c7b62d4e2883a9d","src/error.rs":"4a37ff2221551ebf53a835085b3e21f9de3f86a74711ddd5903975c7110333a1","src/ffi.rs":"f66a81393bebe7a4b7e7960cb426df106ff1f02bfebcaa6e335b4b8b56c5c936","src/lib.rs":"78d0388e4a21ab39ecd8e6f653e97d181ca0fa9c57b92050c7946b543d828a05","src/migration.rs":"7f09887df071e15f34be5bd24116f43b786410e935e1f1d7e49471877629dd19","src/schema.rs":"0a668212a6db65cf5c59a786eaa342707583d580c1d374c81374335301f758bc","src/store.rs":"a092586b65a6ebfa36c62cb45859ba7626631a699e1a2445c8cfb54fec9bb44a","src/sync/bridge.rs":"14d095bc67e511297b833e279912f61dd67993a877be941cc058afe9017cb058","src/sync/incoming.rs":"8b7cd75463aae7bc08e87d5feb2b125ae68b512bcb712483457d2837c4b0086a","src/sync/mod.rs":"5e6ae17f5a0fe0e278ed1fe552cea4fb7993280811333c36ac40599cde4059d6","src/sync/outgoing.rs":"3a6227d0cabc672917ba52e041bee2ac4b61dc0c2bc8c7cd57458d36891ce950","src/sync/sync_tests.rs":"c5490abbaed5cffc2afa397bdd8386762c30b28b7d95a30ce0825678a72e56b3","src/webext-storage.udl":"a37a5c796bcdc71b61dbb189a8801bbff9e67bf81aebb489db0e7fcafc58521d","uniffi.toml":"beeec89c2f877eb89be0090dc304dbc7c74e787385e7459bad78c6165bb66791"},"package":null} \ No newline at end of file diff -Nru firefox-esr-140.3.1esr/third_party/rust/webext-storage/src/lib.rs firefox-esr-140.4.0esr/third_party/rust/webext-storage/src/lib.rs --- firefox-esr-140.3.1esr/third_party/rust/webext-storage/src/lib.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/third_party/rust/webext-storage/src/lib.rs 2025-10-09 15:35:45.000000000 +0000 @@ -35,7 +35,7 @@ uniffi::custom_type!(JsonValue, String, { remote, - try_lift: |val| Ok(serde_json::from_str(val.as_str()).unwrap()), + try_lift: |val| Ok(serde_json::from_str(val.as_str())?), lower: |obj| obj.to_string(), }); diff -Nru firefox-esr-140.3.1esr/toolkit/components/extensions/Extension.sys.mjs firefox-esr-140.4.0esr/toolkit/components/extensions/Extension.sys.mjs --- firefox-esr-140.3.1esr/toolkit/components/extensions/Extension.sys.mjs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/components/extensions/Extension.sys.mjs 2025-10-09 15:35:46.000000000 +0000 @@ -1467,7 +1467,7 @@ ), data_collection: newPermissions.data_collection.filter( perm => - !oldPermissions.data_collection.includes(perm) && perm !== "none" + !oldPermissions.data_collection?.includes(perm) && perm !== "none" ), }; } diff -Nru firefox-esr-140.3.1esr/toolkit/components/extensions/test/xpcshell/native_messaging.toml firefox-esr-140.4.0esr/toolkit/components/extensions/test/xpcshell/native_messaging.toml --- firefox-esr-140.3.1esr/toolkit/components/extensions/test/xpcshell/native_messaging.toml 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/components/extensions/test/xpcshell/native_messaging.toml 2025-10-09 15:35:45.000000000 +0000 @@ -12,6 +12,8 @@ ["test_ext_native_messaging.js"] run-sequentially = "very high failure rate in parallel" +["test_ext_native_messaging_concurrent.js"] + ["test_ext_native_messaging_perf.js"] skip-if = ["tsan"] # Unreasonably slow, bug 1612707 diff -Nru firefox-esr-140.3.1esr/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging_concurrent.js firefox-esr-140.4.0esr/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging_concurrent.js --- firefox-esr-140.3.1esr/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging_concurrent.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging_concurrent.js 2025-10-09 15:35:45.000000000 +0000 @@ -0,0 +1,107 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +AddonTestUtils.init(this); + +const ECHO_BODY = String.raw` + import struct + import sys + + stdin = getattr(sys.stdin, 'buffer', sys.stdin) + stdout = getattr(sys.stdout, 'buffer', sys.stdout) + + while True: + rawlen = stdin.read(4) + if len(rawlen) == 0: + sys.exit(0) + msglen = struct.unpack('@I', rawlen)[0] + msg = stdin.read(msglen) + + stdout.write(struct.pack('@I', msglen)) + stdout.write(msg) +`; + +const SCRIPTS = [ + { + name: "echo", + description: "a native app that echoes back messages it receives", + script: ECHO_BODY.replace(/^ {2}/gm, ""), + }, +]; + +function loadTestExtension({ background }) { + return ExtensionTestUtils.loadExtension({ + background, + manifest: { + browser_specific_settings: { gecko: { id: ID } }, + permissions: ["nativeMessaging"], + }, + }); +} + +add_setup(async () => { + await ExtensionTestUtils.startAddonManager(); + await setupHosts(SCRIPTS); +}); + +// Regression test for https://bugzilla.mozilla.org/show_bug.cgi?id=1979546 +add_task(async function test_many_connectNative_calls() { + let extension = loadTestExtension({ + async background() { + // Prior to bug 1979546 being fixed, the test got stuck on Windows at 16. + // Let's verify that things run smoothly even if we launch "many" more, + // e.g. 70 (arbitrarily chosen, higher than 64). + const NUMBER_OF_CONCURRENT_NATIVE_MESSAGING_APPS = 70; + + const openPorts = []; + const remainingMsgs = new Set(); + const firstMessagePromises = []; + for (let i = 0; i < NUMBER_OF_CONCURRENT_NATIVE_MESSAGING_APPS; ++i) { + const dummyMsg = `pingpong-${i}`; + const port = browser.runtime.connectNative("echo"); + openPorts[i] = port; + remainingMsgs.add(i); + firstMessagePromises[i] = new Promise(resolve => { + port.onMessage.addListener(msg => { + browser.test.assertEq(dummyMsg, msg, `Echoed back message ${i}`); + remainingMsgs.delete(i); + browser.test.log(`Remaining: ${Array.from(remainingMsgs)}`); + resolve(); + }); + port.onDisconnect.addListener(() => { + if (remainingMsgs.delete(i)) { + // If the program somehow exits before it responded, note the + // failure and continue (do not stay stuck). + browser.test.fail(`onDisconnect fired before onMessage: ${i}`); + resolve(); + } else { + // onDisconnect should not fire when we call port.disconnect() + // below. + browser.test.fail(`Unexpected port.onDisconnect: ${i}`); + } + }); + }); + port.postMessage(dummyMsg); + } + browser.test.log(`Awaiting replies to: ${Array.from(remainingMsgs)}`); + await Promise.all(firstMessagePromises); + + browser.test.log("Now verifying sendNativeMessage behavior"); + browser.test.assertEq( + await browser.runtime.sendNativeMessage("echo", "one_off_msg"), + "one_off_msg", + "sendNativeMessage can still roundtrip after so many connectNative" + ); + for (const port of openPorts) { + port.disconnect(); + } + browser.test.sendMessage("done"); + }, + }); + await extension.startup(); + await extension.awaitMessage("done"); + info("Waiting for all echo processes to have exit"); + await waitForSubprocessExit(); + await extension.unload(); +}); diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper/crashhelper.cpp firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper/crashhelper.cpp --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper/crashhelper.cpp 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper/crashhelper.cpp 2025-10-09 15:35:46.000000000 +0000 @@ -49,16 +49,31 @@ #endif } +#define GET_CLIENT_PID_ARG(arguments) ((arguments)[1]) +#define GET_BREAKPAD_DATA_ARG(arguments) ((arguments)[2]) +#define GET_MINIDUMP_PATH_ARG(arguments) ((arguments)[3]) +#define GET_CONNECTOR_ARG(arguments) ((arguments)[4]) +#ifdef XP_WIN +# define GET_LISTENER_ARG(arguments) ((arguments)[5]) +# define ARG_NUM (6) +#else +static char sDummy[1] = ""; +# define GET_LISTENER_ARG(arguments) (sDummy) +# define ARG_NUM (5) +#endif // XP_WIN + int main(int argc, char* argv[]) { - if (argc < 6) { + if (argc < ARG_NUM) { exit(EXIT_FAILURE); } - Pid client_pid = static_cast(parse_int_or_exit(argv[1])); - BreakpadRawData breakpad_data = parse_breakpad_data(argv[2]); - char* minidump_path = argv[3]; - char* listener = argv[4]; - char* connector = argv[5]; + Pid client_pid = + static_cast(parse_int_or_exit(GET_CLIENT_PID_ARG(argv))); + BreakpadRawData breakpad_data = + parse_breakpad_data(GET_BREAKPAD_DATA_ARG(argv)); + char* minidump_path = GET_MINIDUMP_PATH_ARG(argv); + char* connector = GET_CONNECTOR_ARG(argv); + char* listener = GET_LISTENER_ARG(argv); int res = crash_generator_logic_desktop(client_pid, breakpad_data, minidump_path, listener, connector); diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper/crashhelper_android.cpp firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper/crashhelper_android.cpp --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper/crashhelper_android.cpp 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper/crashhelper_android.cpp 2025-10-09 15:35:46.000000000 +0000 @@ -30,36 +30,10 @@ return true; } -extern "C" JNIEXPORT jboolean JNICALL -Java_org_mozilla_gecko_crashhelper_CrashHelper_bind_1and_1listen( - JNIEnv* jenv, jclass, jint listen_fd) { - struct sockaddr_un addr = { - .sun_family = AF_UNIX, - .sun_path = {}, - }; - - // The address' path deliberately starts with a null byte to inform the - // kernel that this is an abstract address and not an actual file path. - snprintf(addr.sun_path + 1, sizeof(addr.sun_path) - 2, - "gecko-crash-helper-pipe.%d", getpid()); - - int res = bind(listen_fd, (const struct sockaddr*)&addr, sizeof(addr)); - if (res < 0) { - return false; - } - - res = listen(listen_fd, 1); - if (res < 0) { - return false; - } - - return true; -} - extern "C" JNIEXPORT void JNICALL Java_org_mozilla_gecko_crashhelper_CrashHelper_crash_1generator( - JNIEnv* jenv, jclass, jint client_pid, jint breakpad_fd, - jstring minidump_path, jint listen_fd, jint server_fd) { + JNIEnv* jenv, jclass, jint breakpad_fd, jstring minidump_path, + jint server_fd) { // The breakpad server socket needs to be put in non-blocking mode, we do it // here as the Rust code that picks it up won't touch it anymore and just // pass it along to Breakpad. @@ -79,7 +53,6 @@ const char* minidump_path_str = jenv->GetStringUTFChars(minidump_path, nullptr); - crash_generator_logic_android(client_pid, breakpad_fd, minidump_path_str, - listen_fd, server_fd); + crash_generator_logic_android(breakpad_fd, minidump_path_str, server_fd); jenv->ReleaseStringUTFChars(minidump_path, minidump_path_str); } diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_client/src/platform/unix.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_client/src/platform/unix.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_client/src/platform/unix.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_client/src/platform/unix.rs 2025-10-09 15:35:46.000000000 +0000 @@ -3,9 +3,7 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */ use anyhow::Result; -use crash_helper_common::{ - ignore_eintr, BreakpadChar, BreakpadData, IPCChannel, IPCConnector, IPCListener, -}; +use crash_helper_common::{ignore_eintr, BreakpadChar, BreakpadData, IPCChannel, IPCConnector}; use nix::{ spawn::{posix_spawn, PosixSpawnAttr, PosixSpawnFileActions}, sys::wait::waitpid, @@ -25,12 +23,11 @@ minidump_path: *const BreakpadChar, ) -> Result { let channel = IPCChannel::new()?; - let (listener, server_endpoint, client_endpoint) = channel.deconstruct(); + let (_listener, server_endpoint, client_endpoint) = channel.deconstruct(); CrashHelperClient::spawn_crash_helper( program, breakpad_data, minidump_path, - listener, server_endpoint, )?; @@ -45,7 +42,6 @@ program: *const BreakpadChar, breakpad_data: BreakpadData, minidump_path: *const BreakpadChar, - listener: IPCListener, endpoint: IPCConnector, ) -> Result<()> { let parent_pid = getpid().to_string(); @@ -54,7 +50,6 @@ let breakpad_data_arg = unsafe { CString::from_vec_unchecked(breakpad_data.to_string().into_bytes()) }; let minidump_path = unsafe { CStr::from_ptr(minidump_path) }; - let listener_arg = listener.serialize(); let endpoint_arg = endpoint.serialize(); let file_actions = PosixSpawnFileActions::init()?; @@ -74,7 +69,6 @@ &parent_pid_arg, &breakpad_data_arg, minidump_path, - &listener_arg, &endpoint_arg, ], env.as_slice(), diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_client/src/platform/windows.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_client/src/platform/windows.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_client/src/platform/windows.rs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_client/src/platform/windows.rs 2025-10-09 15:35:45.000000000 +0000 @@ -44,8 +44,8 @@ program, breakpad_data, minidump_path, - listener, server_endpoint, + listener, ) }); @@ -60,8 +60,8 @@ program: OsString, breakpad_data: BreakpadData, minidump_path: OsString, - listener: IPCListener, endpoint: IPCConnector, + listener: IPCListener, ) -> Result { // SAFETY: `GetCurrentProcessId()` takes no arguments and should always work let pid = OsString::from(unsafe { GetCurrentProcessId() }.to_string()); @@ -74,9 +74,9 @@ cmd_line.push(" "); cmd_line.push(escape_cmd_line_arg(&minidump_path)); cmd_line.push(" "); - cmd_line.push(escape_cmd_line_arg(&listener.serialize())); - cmd_line.push(" "); cmd_line.push(escape_cmd_line_arg(&endpoint.serialize())); + cmd_line.push(" "); + cmd_line.push(escape_cmd_line_arg(&listener.serialize())); cmd_line.push("\0"); let mut cmd_line: Vec = cmd_line.encode_wide().collect(); diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/ipc_connector/unix.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/ipc_connector/unix.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/ipc_connector/unix.rs 2025-09-22 21:16:26.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/ipc_connector/unix.rs 2025-10-09 15:35:45.000000000 +0000 @@ -4,19 +4,19 @@ #[cfg(any(target_os = "android", target_os = "linux"))] use crate::platform::linux::{ - server_addr, set_socket_cloexec, set_socket_default_flags, unix_socket, + set_socket_cloexec, set_socket_default_flags, }; #[cfg(target_os = "macos")] use crate::platform::macos::{ - server_addr, set_socket_cloexec, set_socket_default_flags, unix_socket, + set_socket_cloexec, set_socket_default_flags, }; -use crate::{ignore_eintr, Pid, ProcessHandle, IO_TIMEOUT}; +use crate::{ignore_eintr, ProcessHandle, IO_TIMEOUT}; use nix::{ cmsg_space, errno::Errno, poll::{poll, PollFd, PollFlags, PollTimeout}, - sys::socket::{connect, recvmsg, sendmsg, ControlMessage, ControlMessageOwned, MsgFlags}, + sys::socket::{recvmsg, sendmsg, ControlMessage, ControlMessageOwned, MsgFlags}, }; use std::{ ffi::{CStr, CString}, @@ -61,40 +61,6 @@ IPCConnector::from_fd(unsafe { OwnedFd::from_raw_fd(ancillary_data) }) } - /// Create a new connector by connecting it to the process specified by - /// `pid`. The `FD_CLOEXEC` flag will be set on the underlying socket and - /// thus it will not be possible to inerhit this connector in a child - /// process. - pub fn connect(pid: Pid) -> Result { - let socket = unix_socket().map_err(IPCError::ConnectionFailure)?; - set_socket_default_flags(socket.as_fd()).map_err(IPCError::ConnectionFailure)?; - set_socket_cloexec(socket.as_fd()).map_err(IPCError::ConnectionFailure)?; - - let server_addr = server_addr(pid).map_err(IPCError::ConnectionFailure)?; - - loop { - let timeout = PollTimeout::from(IO_TIMEOUT); - let res = ignore_eintr!(poll( - &mut [PollFd::new(socket.as_fd(), PollFlags::POLLOUT)], - timeout - )); - match res { - Err(e) => return Err(IPCError::ConnectionFailure(e)), - Ok(_res @ 0) => return Err(IPCError::ConnectionFailure(Errno::ETIMEDOUT)), - Ok(_) => {} - } - - let res = ignore_eintr!(connect(socket.as_raw_fd(), &server_addr)); - match res { - Ok(_) => break, - Err(_e @ Errno::EAGAIN) => continue, // Retry, the helper might not be ready yet - Err(e) => return Err(IPCError::ConnectionFailure(e)), - } - } - - Ok(IPCConnector { socket }) - } - /// Serialize this connector into a string that can be passed on the /// command-line to a child process. This only works for newly /// created connectors because they are explicitly created as inheritable. @@ -131,7 +97,7 @@ Ok(self.raw_fd()) } - pub fn as_raw_ref(&self) -> BorrowedFd { + pub fn as_raw_ref(&self) -> BorrowedFd<'_> { self.socket.as_fd() } diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/ipc_listener/unix.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/ipc_listener/unix.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/ipc_listener/unix.rs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/ipc_listener/unix.rs 2025-10-09 15:35:45.000000000 +0000 @@ -2,77 +2,24 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -#[cfg(any(target_os = "android", target_os = "linux"))] -use crate::platform::linux::{ - server_addr, set_socket_cloexec, set_socket_default_flags, unix_socket, -}; -#[cfg(target_os = "macos")] -use crate::platform::macos::{ - server_addr, set_socket_cloexec, set_socket_default_flags, unix_socket, -}; -use crate::{errors::IPCError, IPCConnector, Pid}; +use std::ffi::CStr; -use nix::sys::socket::{accept, bind, listen, Backlog}; -use std::{ - ffi::{CStr, CString}, - os::fd::{AsFd, AsRawFd, BorrowedFd, FromRawFd, OwnedFd, RawFd}, - str::FromStr, -}; +use crate::{errors::IPCError, Pid}; -pub struct IPCListener { - socket: OwnedFd, -} +pub struct IPCListener {} impl IPCListener { - /// Create a new listener with an address based on `pid`. The underlying - /// socket will not have the `FD_CLOEXEC` flag set and thus can be - /// inherited by child processes. - pub fn new(pid: Pid) -> Result { - let socket = unix_socket().map_err(IPCError::System)?; - set_socket_default_flags(socket.as_fd()).map_err(IPCError::System)?; - - let server_addr = server_addr(pid).map_err(IPCError::System)?; - bind(socket.as_fd().as_raw_fd(), &server_addr).map_err(IPCError::System)?; - listen(&socket, Backlog::new(1).unwrap()).map_err(IPCError::ListenFailed)?; - - Ok(IPCListener { socket }) - } - - /// Create a new listener using an already prepared socket. The listener - /// must have been bound to the appropriate address and should already be - /// listening on incoming connections. This will set the `FD_CLOEXEC` flag - /// on the underlying socket and thus will make this litener not inheritable - /// by child processes. - pub fn from_fd(_pid: Pid, socket: OwnedFd) -> Result { - set_socket_cloexec(socket.as_fd()).map_err(IPCError::System)?; - - Ok(IPCListener { socket }) - } - - /// Serialize this listener into a string that can be passed on the - /// command-line to a child process. This only works for newly - /// created listeners because they are explicitly created as inheritable. - pub fn serialize(&self) -> CString { - CString::new(self.socket.as_raw_fd().to_string()).unwrap() + /// Create a new dummy listener. This is not used on Linux and macOS but + /// we keep the type around so that the shared logic is the same as for + /// Windows where this type is used. + pub fn new(_pid: Pid) -> Result { + Ok(IPCListener {}) } /// Deserialize a listener from an argument passed on the command-line. - /// The resulting listener is ready to accept new connections. - pub fn deserialize(string: &CStr, _pid: Pid) -> Result { - let string = string.to_str().map_err(|_e| IPCError::ParseError)?; - let fd = RawFd::from_str(string).map_err(|_e| IPCError::ParseError)?; - // SAFETY: This is a file descriptor we passed in ourselves. - let socket = unsafe { OwnedFd::from_raw_fd(fd) }; - Ok(IPCListener { socket }) - } - - pub fn accept(&self) -> Result { - let socket = accept(self.socket.as_fd().as_raw_fd()).map_err(IPCError::AcceptFailed)?; - // SAFETY: `socket` is guaranteed to be valid at this point. - IPCConnector::from_fd(unsafe { OwnedFd::from_raw_fd(socket) }) - } - - pub fn as_raw_ref(&self) -> BorrowedFd { - self.socket.as_fd() + /// This produces a dummy listener and is only kept to provide shared logic + /// with Windows. + pub fn deserialize(_string: &CStr, _pid: Pid) -> Result { + Ok(IPCListener {}) } } diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/lib.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/lib.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/lib.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/lib.rs 2025-10-09 15:35:46.000000000 +0000 @@ -20,7 +20,10 @@ pub use crate::ipc_channel::{IPCChannel, IPCClientChannel}; pub use crate::ipc_connector::{AncillaryData, IPCConnector, IPCEvent, INVALID_ANCILLARY_DATA}; pub use crate::ipc_listener::IPCListener; -pub use crate::platform::{server_addr, ProcessHandle}; +pub use crate::platform::ProcessHandle; + +#[cfg(target_os = "windows")] +pub use crate::platform::server_addr; /// OsString extensions to convert from/to C strings. The strings will be /// regular nul-terminated byte strings on most platforms but will use wide diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/platform/linux.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform/linux.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/platform/linux.rs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform/linux.rs 2025-10-09 15:35:46.000000000 +0000 @@ -2,33 +2,21 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use crate::Pid; - use nix::{ fcntl::{ fcntl, FcntlArg::{F_GETFL, F_SETFD, F_SETFL}, FdFlag, OFlag, }, - sys::socket::{socket, socketpair, AddressFamily, SockFlag, SockType, UnixAddr}, + sys::socket::{socketpair, AddressFamily, SockFlag, SockType}, Result, }; use std::{ - env, os::fd::{BorrowedFd, OwnedFd}, }; pub type ProcessHandle = (); -pub(crate) fn unix_socket() -> Result { - socket( - AddressFamily::Unix, - SockType::SeqPacket, - SockFlag::empty(), - None, - ) -} - pub(crate) fn unix_socketpair() -> Result<(OwnedFd, OwnedFd)> { socketpair( AddressFamily::Unix, @@ -47,12 +35,3 @@ pub(crate) fn set_socket_cloexec(socket: BorrowedFd) -> Result<()> { fcntl(socket, F_SETFD(FdFlag::FD_CLOEXEC)).map(|_res| ()) } - -pub fn server_addr(pid: Pid) -> Result { - let server_name = if let Ok(snap_instance_name) = env::var("SNAP_INSTANCE_NAME") { - format!("snap.{snap_instance_name:}.gecko-crash-helper-pipe.{pid:}") - } else { - format!("gecko-crash-helper-pipe.{pid:}") - }; - UnixAddr::new_abstract(server_name.as_bytes()) -} diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/platform/macos.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform/macos.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/platform/macos.rs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform/macos.rs 2025-10-09 15:35:46.000000000 +0000 @@ -2,8 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use crate::Pid; - use nix::{ errno::Errno, fcntl::{ @@ -12,27 +10,16 @@ FdFlag, OFlag, }, libc::{setsockopt, SOL_SOCKET, SO_NOSIGPIPE}, - sys::socket::{socket, socketpair, AddressFamily, SockFlag, SockType, UnixAddr}, + sys::socket::{socketpair, AddressFamily, SockFlag, SockType}, Result, }; use std::{ mem::size_of, os::fd::{AsRawFd, BorrowedFd, OwnedFd}, - path::PathBuf, - str::FromStr, }; pub type ProcessHandle = (); -pub(crate) fn unix_socket() -> Result { - socket( - AddressFamily::Unix, - SockType::Stream, - SockFlag::empty(), - None, - ) -} - pub(crate) fn unix_socketpair() -> Result<(OwnedFd, OwnedFd)> { socketpair( AddressFamily::Unix, @@ -70,11 +57,3 @@ pub(crate) fn set_socket_cloexec(socket: BorrowedFd) -> Result<()> { fcntl(socket, F_SETFD(FdFlag::FD_CLOEXEC)).map(|_res| ()) } - -pub fn server_addr(pid: Pid) -> Result { - // macOS doesn't seem to support abstract paths as addresses for Unix - // protocol sockets, so this needs to be the path of an actual file. - let server_name = format!("/tmp/gecko-crash-helper-pipe.{pid:}"); - let server_path = PathBuf::from_str(&server_name).unwrap(); - UnixAddr::new(&server_path) -} diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/platform.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_common/src/platform.rs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_common/src/platform.rs 2025-10-09 15:35:46.000000000 +0000 @@ -9,13 +9,13 @@ pub(crate) mod windows; #[cfg(any(target_os = "android", target_os = "linux"))] -pub use linux::{server_addr, ProcessHandle}; +pub use linux::ProcessHandle; #[cfg(any(target_os = "android", target_os = "linux"))] pub(crate) mod linux; #[cfg(target_os = "macos")] -pub use macos::{server_addr, ProcessHandle}; +pub use macos::ProcessHandle; #[cfg(target_os = "macos")] pub(crate) mod macos; diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_server/src/ipc_server/unix.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/ipc_server/unix.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_server/src/ipc_server/unix.rs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/ipc_server/unix.rs 2025-10-09 15:35:45.000000000 +0000 @@ -3,17 +3,13 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */ use crash_helper_common::{errors::IPCError, ignore_eintr, IPCEvent}; -use nix::{ - errno::Errno, - poll::{poll, PollFd, PollFlags, PollTimeout}, -}; +use nix::poll::{poll, PollFd, PollFlags, PollTimeout}; use super::IPCServer; impl IPCServer { pub fn wait_for_events(&mut self) -> Result, IPCError> { - let mut pollfds = Vec::with_capacity(1 + self.connections.len()); - pollfds.push(PollFd::new(self.listener.as_raw_ref(), PollFlags::POLLIN)); + let mut pollfds = Vec::with_capacity(self.connections.len()); pollfds.extend( self.connections.iter().map(|connection| { PollFd::new(connection.connector.as_raw_ref(), PollFlags::POLLIN) @@ -31,39 +27,27 @@ let revents = pollfd.revents().unwrap(); if revents.contains(PollFlags::POLLHUP) { - if index > 0 { - events.push(IPCEvent::Disconnect(index - 1)); - // If a process was disconnected then skip all further - // processing of the socket. This wouldn't matter normally, - // but on macOS calling recvmsg() on a hung-up socket seems - // to trigger a kernel panic, one we've already encountered - // in the past. Doing things this way avoids the panic - // while having no real downsides. - continue; - } else { - // This should never happen, unless the listener socket was - // not set up properly or a failure happened during setup. - return Err(IPCError::System(Errno::EFAULT)); - } + events.push(IPCEvent::Disconnect(index)); + // If a process was disconnected then skip all further + // processing of the socket. This wouldn't matter normally, + // but on macOS calling recvmsg() on a hung-up socket seems + // to trigger a kernel panic, one we've already encountered + // in the past. Doing things this way avoids the panic + // while having no real downsides. + continue; } if revents.contains(PollFlags::POLLIN) { - if index == 0 { - if let Ok(connector) = self.listener.accept() { - events.push(IPCEvent::Connect(connector)); - } - } else { - // SAFETY: The index is guaranteed to be >0 and within - // the bounds of the connections array. - let connection = unsafe { self.connections.get_unchecked(index - 1) }; - let header = connection.connector.recv_header(); - if let Ok(header) = header { - // Note that if we encounter a failure we don't propagate - // it, when the socket gets disconnected we'll get a - // POLLHUP event anyway so deal with disconnections there - // instead of here. - events.push(IPCEvent::Header(index - 1, header)); - } + // SAFETY: The index is guaranteed to be >0 and within + // the bounds of the connections array. + let connection = unsafe { self.connections.get_unchecked(index) }; + let header = connection.connector.recv_header(); + if let Ok(header) = header { + // Note that if we encounter a failure we don't propagate + // it, when the socket gets disconnected we'll get a + // POLLHUP event anyway so deal with disconnections there + // instead of here. + events.push(IPCEvent::Header(index, header)); } } diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_server/src/ipc_server.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/ipc_server.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_server/src/ipc_server.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/ipc_server.rs 2025-10-09 15:35:46.000000000 +0000 @@ -32,6 +32,7 @@ } pub(crate) struct IPCServer { + #[cfg_attr(unix, allow(dead_code))] listener: IPCListener, connections: Vec, } diff -Nru firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_server/src/lib.rs firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/lib.rs --- firefox-esr-140.3.1esr/toolkit/crashreporter/crash_helper_server/src/lib.rs 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/crashreporter/crash_helper_server/src/lib.rs 2025-10-09 15:35:46.000000000 +0000 @@ -11,7 +11,9 @@ mod logging; mod phc; -use crash_helper_common::{BreakpadData, BreakpadRawData, IPCConnector, IPCListener, Pid}; +#[cfg(not(target_os = "android"))] +use crash_helper_common::Pid; +use crash_helper_common::{BreakpadData, BreakpadRawData, IPCConnector, IPCListener}; use std::ffi::{c_char, CStr, OsString}; use crash_generation::CrashGenerator; @@ -82,17 +84,14 @@ /// /// # Safety /// -/// `minidump_data` must point to valid, nul-terminated C strings. `listener` -/// and `server_pipe` must be valid file descriptors and `breakpad_data` must -/// also be a valid file descriptor compatible with Breakpad's crash generation -/// server. +/// `minidump_data` must point to valid, nul-terminated C strings. `server_pipe` +/// must be a valid file descriptor and `breakpad_data` must also be a valid +/// file descriptor compatible with Breakpad's crash generation server. #[cfg(target_os = "android")] #[no_mangle] pub unsafe extern "C" fn crash_generator_logic_android( - client_pid: Pid, breakpad_data: BreakpadRawData, minidump_path: *const c_char, - listener: RawFd, pipe: RawFd, ) { logging::init(); @@ -110,12 +109,7 @@ }) .unwrap(); - let listener = unsafe { OwnedFd::from_raw_fd(listener) }; - let listener = IPCListener::from_fd(client_pid, listener) - .map_err(|error| { - log::error!("Could not use the listener (error: {error})"); - }) - .unwrap(); + let listener = IPCListener::new(0).unwrap(); let pipe = unsafe { OwnedFd::from_raw_fd(pipe) }; let connector = IPCConnector::from_fd(pipe) .map_err(|error| { diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_shared_win.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_shared_win.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_shared_win.js 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_shared_win.js 2025-10-09 15:35:46.000000000 +0000 @@ -87,6 +87,9 @@ ERROR_HANDLE_EOF: 38, ERROR_BROKEN_PIPE: 109, ERROR_INSUFFICIENT_BUFFER: 122, + ERROR_ABANDONED_WAIT_0: 735, + ERROR_IO_INCOMPLETE: 996, + ERROR_IO_PENDING: 997, FILE_ATTRIBUTE_NORMAL: 0x00000080, FILE_FLAG_OVERLAPPED: 0x40000000, @@ -108,10 +111,14 @@ PROC_THREAD_ATTRIBUTE_HANDLE_LIST: 0x00020002, + JobObjectAssociateCompletionPortInformation: 7, JobObjectBasicLimitInformation: 2, JobObjectExtendedLimitInformation: 9, JOB_OBJECT_LIMIT_BREAKAWAY_OK: 0x00000800, + JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS: 8, + JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO: 4, + JOB_OBJECT_MSG_EXIT_PROCESS: 7, // These constants are 32-bit unsigned integers, but Windows defines // them as negative integers cast to an unsigned type. @@ -120,7 +127,6 @@ STD_ERROR_HANDLE: -12 + 0x100000000, WAIT_TIMEOUT: 0x00000102, - WAIT_FAILED: 0xffffffff, }); Object.assign(win32, { @@ -150,6 +156,10 @@ }); Object.assign(win32, { + JOBOBJECT_ASSOCIATE_COMPLETION_PORT: new ctypes.StructType( + "JOBOBJECT_ASSOCIATE_COMPLETION_PORT", + [{ CompletionKey: win32.PVOID }, { CompletionPort: win32.HANDLE }] + ), JOBOBJECT_EXTENDED_LIMIT_INFORMATION: new ctypes.StructType( "JOBOBJECT_EXTENDED_LIMIT_INFORMATION", [ @@ -220,16 +230,9 @@ win32.HANDLE /* hProcess */, ], - CloseHandle: [win32.WINAPI, win32.BOOL, win32.HANDLE /* hObject */], + CancelIo: [win32.WINAPI, win32.BOOL, win32.HANDLE /* hFile */], - CreateEventW: [ - win32.WINAPI, - win32.HANDLE, - win32.SECURITY_ATTRIBUTES.ptr /* opt lpEventAttributes */, - win32.BOOL /* bManualReset */, - win32.BOOL /* bInitialState */, - win32.LPWSTR /* lpName */, - ], + CloseHandle: [win32.WINAPI, win32.BOOL, win32.HANDLE /* hObject */], CreateFileW: [ win32.WINAPI, @@ -243,6 +246,15 @@ win32.HANDLE /* opt hTemplateFile */, ], + CreateIoCompletionPort: [ + win32.WINAPI, + win32.HANDLE, + win32.HANDLE /* FileHandle */, + win32.HANDLE /* opt ExistingCompletionPort */, + win32.ULONG_PTR /* CompletionKey */, + win32.DWORD /* NumberOfConcurrentThreads */, + ], + CreateJobObjectW: [ win32.WINAPI, win32.HANDLE, @@ -287,15 +299,6 @@ win32.PROCESS_INFORMATION.ptr /* out lpProcessInformation */, ], - CreateSemaphoreW: [ - win32.WINAPI, - win32.HANDLE, - win32.SECURITY_ATTRIBUTES.ptr /* opt lpSemaphoreAttributes */, - win32.LONG /* lInitialCount */, - win32.LONG /* lMaximumCount */, - win32.LPCWSTR /* opt lpName */, - ], - DeleteProcThreadAttributeList: [ win32.WINAPI, win32.VOID, @@ -342,6 +345,16 @@ win32.BOOL /* bWait */, ], + GetQueuedCompletionStatus: [ + win32.WINAPI, + win32.BOOL, + win32.HANDLE /* CompletionPort */, + win32.LPDWORD /* lpNumberOfBytesTransferred */, + win32.ULONG_PTR.ptr /* out lpCompletionKey */, + win32.OVERLAPPED.ptr.ptr /* out lpOverlapped */, + win32.DWORD /* dwMilliseconds */, + ], + GetStdHandle: [win32.WINAPI, win32.HANDLE, win32.DWORD /* nStdHandle */], InitializeProcThreadAttributeList: [ @@ -353,6 +366,15 @@ win32.PSIZE_T /* in/out lpSize */, ], + PostQueuedCompletionStatus: [ + win32.WINAPI, + win32.BOOL, + win32.HANDLE /* CompletionPort */, + win32.DWORD /* dwNumberOfBytesTransferred */, + win32.ULONG_PTR /* dwCompletionKey */, + win32.OVERLAPPED.ptr /* opt lpOverlapped */, + ], + ReadFile: [ win32.WINAPI, win32.BOOL, @@ -363,14 +385,6 @@ win32.OVERLAPPED.ptr /* opt in/out lpOverlapped */, ], - ReleaseSemaphore: [ - win32.WINAPI, - win32.BOOL, - win32.HANDLE /* hSemaphore */, - win32.LONG /* lReleaseCount */, - win32.LONG.ptr /* opt out lpPreviousCount */, - ], - ResumeThread: [win32.WINAPI, win32.DWORD, win32.HANDLE /* hThread */], SetInformationJobObject: [ @@ -408,23 +422,6 @@ win32.PSIZE_T /* opt lpReturnSize */, ], - WaitForMultipleObjects: [ - win32.WINAPI, - win32.DWORD, - win32.DWORD /* nCount */, - win32.HANDLE.ptr /* hHandles */, - win32.BOOL /* bWaitAll */, - win32.DWORD /* dwMilliseconds */, - ], - - WaitForSingleObject: [ - win32.WINAPI, - win32.DWORD, - win32.HANDLE /* hHandle */, - win32.BOOL /* bWaitAll */, - win32.DWORD /* dwMilliseconds */, - ], - WriteFile: [ win32.WINAPI, win32.BOOL, @@ -436,6 +433,10 @@ ], }); +// Custom constant to use as CompletionKey / dwCompletionKey. +// See also IOCPKeyGenin subprocess_win.worker.js. +win32.IOCP_COMPLETION_KEY_WAKE_WORKER = 1; + let nextNamedPipeId = 0; win32.Handle = function (handle) { diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_win.sys.mjs firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_win.sys.mjs --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_win.sys.mjs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_win.sys.mjs 2025-10-09 15:35:45.000000000 +0000 @@ -31,20 +31,35 @@ constructor(...args) { super(...args); - this.signalEvent = libc.CreateSemaphoreW(null, 0, 32, null); + // Used by the worker thread to block until any I/O completes. Used on this + // side to unblock the worker to receive messages from postMessage below. + const iocp = libc.CreateIoCompletionPort( + win32.INVALID_HANDLE_VALUE, + win32.NULL_HANDLE_VALUE, + 0, + 1 // The worker thread is the only consumer of IOCP. + ); + if (!iocp) { + throw new Error(`Failed to create IOCP: ${ctypes.winLastError}`); + } + // Wrap in Handle to ensure that CloseHandle is called after worker exits. + this.iocpHandle = win32.Handle(iocp); this.call("init", [ { comspec: Services.env.get("COMSPEC"), - signalEvent: String( - ctypes.cast(this.signalEvent, ctypes.uintptr_t).value - ), + iocpCompletionPort: String(ctypes.cast(iocp, ctypes.uintptr_t).value), }, ]); } signalWorker() { - libc.ReleaseSemaphore(this.signalEvent, 1, null); + libc.PostQueuedCompletionStatus( + this.iocpHandle, + 0, + win32.IOCP_COMPLETION_KEY_WAKE_WORKER, + win32.OVERLAPPED.ptr(0) + ); } postMessage(...args) { diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_win.worker.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_win.worker.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_win.worker.js 2025-09-22 21:16:26.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_win.worker.js 2025-10-09 15:35:45.000000000 +0000 @@ -23,9 +23,52 @@ let io; +// We use IOCP to monitor for IO completion on Pipe and process termination: +// - CreateIoCompletionPort with Pipe. +// - JOBOBJECT_ASSOCIATE_COMPLETION_PORT with Process. +// - GetQueuedCompletionStatus to query completion (receives CompletionKey). +// +// The CompletionKey can be an arbitrarily chosen value, used to identify the +// target of the IOCP notification. It is defined as ctypes.uintptr_t, so in +// theory it could be 64 or 32 bit. The number of pipes and processes that we +// create can be represented in fewer than 32 bits. We therefore use the higher +// order bits to tag the ID to distinguish Pipes, Processes and custom IOCP +// messages (e.g. IOCP_COMPLETION_KEY_WAKE_WORKER) from each other. +class IOCPKeyGen { + // The IOCP_KEY_IS_PIPE and IOCP_KEY_IS_PROC bits are mutually exclusive. + static IOCP_KEY_IS_PIPE = 1 << 31; + static IOCP_KEY_IS_PROC = 1 << 30; + + static keyForPipe(pipe) { + // pipe.id starts at 0 (nextPipeId in this file). + return (IOCPKeyGen.IOCP_KEY_IS_PIPE | pipe.id) >>> 0; + } + static keyForProcess(process) { + // process.id starts at 0 (nextProcessId++ in subprocess_worker_common.js). + return (IOCPKeyGen.IOCP_KEY_IS_PROC | process.id) >>> 0; + } + + static isPipeKey(completionKey) { + return !!(IOCPKeyGen.IOCP_KEY_IS_PIPE & completionKey); + } + static isProcessKey(completionKey) { + return !!(IOCPKeyGen.IOCP_KEY_IS_PROC & completionKey); + } + + // Only use this if isPipeKey(completionKey) is true: + static pipeIdFromKey(completionKey) { + return (~IOCPKeyGen.IOCP_KEY_IS_PIPE & completionKey) >>> 0; + } + // Only use this if isProcessKey(completionKey) is true: + static processIdFromKey(completionKey) { + return (~IOCPKeyGen.IOCP_KEY_IS_PROC & completionKey) >>> 0; + } +} + let nextPipeId = 0; class Pipe extends BasePipe { + // origHandle MUST be opened with the FILE_FLAG_OVERLAPPED flag. constructor(process, origHandle) { super(); @@ -49,21 +92,33 @@ this.handle = win32.Handle(handle); - let event = libc.CreateEventW(null, false, false, null); - this.overlapped = win32.OVERLAPPED(); - this.overlapped.hEvent = event; - this._event = win32.Handle(event); + let ok = libc.CreateIoCompletionPort( + handle, + io.iocpCompletionPort, + IOCPKeyGen.keyForPipe(this), + 0 // Ignored. + ); + if (!ok) { + // Truly unexpected. We won't be able to observe IO on this Pipe. + debug(`Failed to associate IOCP: ${ctypes.winLastError}`); + } + // this.buffer is set to an ArrayBuffer, which should not be reused nor + // released until the IO methods (ReadFile or WriteFile) have acknowledged + // completion, or reported an error other than ERROR_IO_PENDING. this.buffer = null; + // Whether this.buffer is part of a pending IO operation. + this.bufferIsPendingIO = false; + // When close(force = true) is called while IO is pending, we notify + // read()/write() callers of completion but internally we await a IOCP + // message for this pipe before closing the pipe for real. + this.awaitingBufferClose = false; } - get event() { - if (this.pending.length) { - return this._event; - } - return null; + hasPendingIO() { + return !!this.pending.length || this.bufferIsPendingIO; } maybeClose() {} @@ -92,11 +147,20 @@ } this.pending.length = 0; + if ((this.bufferIsPendingIO &&= this.#checkIfBufferIsStillPendingIO())) { + // We cannot release the pipe (specifically this.buffer) until the + // pending ReadFile/WriteFile operation on the buffer completed. + this.awaitingBufferClose = true; + let ok = libc.CancelIo(this.handle); + if (!ok) { + debug(`Pipe ${this.id}: Failed to cancel I/O: ${ctypes.winLastError}`); + } + return this.closedPromise; + } this.buffer = null; if (!this.closed) { this.handle.dispose(); - this._event.dispose(); io.pipes.delete(this.id); @@ -116,6 +180,18 @@ onError() { this.close(true); } + + #checkIfBufferIsStillPendingIO() { + let numberOfBytesTransferred = win32.DWORD(); + let ok = libc.GetOverlappedResult( + this.handle, + this.overlapped.address(), + numberOfBytesTransferred.address(), + false + ); + // Ok or error other than ERROR_IO_INCOMPLETE means that I/O completed. + return !ok && ctypes.winLastError === win32.ERROR_IO_INCOMPLETE; + } } class InputPipe extends Pipe { @@ -181,6 +257,7 @@ */ readBuffer(count) { this.buffer = new ArrayBuffer(count); + this.bufferIsPendingIO = true; let ok = libc.ReadFile( this.handle, @@ -190,7 +267,11 @@ this.overlapped.address() ); - if (!ok && (!this.process.handle || libc.winLastError)) { + if ( + !ok && + (!this.process.handle || ctypes.winLastError !== win32.ERROR_IO_PENDING) + ) { + this.bufferIsPendingIO = ctypes.winLastError === win32.ERROR_IO_PENDING; this.onError(); } else { io.updatePollEvents(); @@ -278,6 +359,7 @@ */ writeBuffer(buffer) { this.buffer = buffer; + this.bufferIsPendingIO = true; let ok = libc.WriteFile( this.handle, @@ -287,7 +369,8 @@ this.overlapped.address() ); - if (!ok && libc.winLastError) { + if (!ok && ctypes.winLastError !== win32.ERROR_IO_PENDING) { + this.bufferIsPendingIO = false; this.onError(); } else { io.updatePollEvents(); @@ -327,25 +410,6 @@ } } -class Signal { - constructor(event) { - this.event = event; - } - - cleanup() { - libc.CloseHandle(this.event); - this.event = null; - } - - onError() { - io.shutdown(); - } - - onReady() { - io.messageCount += 1; - } -} - class Process extends BaseProcess { constructor(...args) { super(...args); @@ -354,14 +418,6 @@ } /** - * Returns our process handle for use as an event in a WaitForMultipleObjects - * call. - */ - get event() { - return this.handle; - } - - /** * Forcibly terminates the process. */ kill() { @@ -572,9 +628,29 @@ ctypes.cast(info.address(), ctypes.voidptr_t), info.constructor.size ); - errorMessage = `Failed to set job limits: 0x${( - ctypes.winLastError || 0 - ).toString(16)}`; + if (!ok) { + errorMessage = `Failed to set job limits: 0x${( + ctypes.winLastError || 0 + ).toString(16)}`; + } + } + + if (ok) { + let acp = win32.JOBOBJECT_ASSOCIATE_COMPLETION_PORT(); + acp.CompletionKey = win32.PVOID(IOCPKeyGen.keyForProcess(this)); + acp.CompletionPort = io.iocpCompletionPort; + + ok = libc.SetInformationJobObject( + this.jobHandle, + win32.JobObjectAssociateCompletionPortInformation, + ctypes.cast(acp.address(), ctypes.voidptr_t), + acp.constructor.size + ); + if (!ok) { + errorMessage = `Failed to set IOCP: 0x${( + ctypes.winLastError || 0 + ).toString(16)}`; + } } if (ok) { @@ -644,6 +720,9 @@ this.handle.dispose(); this.handle = null; + // This also terminates all child processes under this process, unless + // the child process was created with the CREATE_BREAKAWAY_FROM_JOB flag, + // in which case it would not be part of our job (and therefore survive). libc.TerminateJobObject(this.jobHandle, TERMINATE_EXIT_CODE); this.jobHandle.dispose(); this.jobHandle = null; @@ -660,8 +739,7 @@ } io = { - events: null, - eventHandlers: null, + iocpCompletionPort: null, pipes: new Map(), @@ -676,11 +754,12 @@ init(details) { this.comspec = details.comspec; - let signalEvent = ctypes.cast( - ctypes.uintptr_t(details.signalEvent), + // Note: not wrapped in win32.Handle - parent thread is responsible for + // releasing the resource when this thread terminates. + this.iocpCompletionPort = ctypes.cast( + ctypes.uintptr_t(details.iocpCompletionPort), win32.HANDLE ); - this.signal = new Signal(signalEvent); this.updatePollEvents(); setTimeout(this.loop.bind(this), 0); @@ -690,9 +769,6 @@ if (this.running) { this.running = false; - this.signal.cleanup(); - this.signal = null; - self.postMessage({ msg: "close" }); self.close(); } @@ -719,28 +795,36 @@ }, updatePollEvents() { - let handlers = [ - this.signal, - ...this.pipes.values(), - ...this.processes.values(), - ]; - - handlers = handlers.filter(handler => handler.event); + let shouldPoll = false; + for (const process of this.processes.values()) { + // As long as the process is alive, it may notify IOCP. + // When the process exits, process.handle is cleared by its wait(), which + // calls updatePollEvents(), but before it is removed from io.processes. + // To ensure that we immediately stop polling if it was the last process, + // check if process.handle is set. + if (process.handle) { + shouldPoll = true; + break; + } + } + if (!shouldPoll) { + for (let pipe of this.pipes.values()) { + if (pipe.hasPendingIO()) { + shouldPoll = true; + break; + } + } + } // Our poll loop is only useful if we've got at least 1 thing to poll other than our own // signal. - if (handlers.length == 1) { + if (!shouldPoll) { this.polling = false; } else if (!this.polling && this.running) { // Restart the poll loop if necessary: setTimeout(this.loop.bind(this), 0); this.polling = true; } - - this.eventHandlers = handlers; - - let handles = handlers.map(handler => handler.event); - this.events = win32.HANDLE.array()(handles); }, loop() { @@ -751,28 +835,109 @@ }, poll() { + // On the first call, wait until any IO signaled. After that, immediately + // process all other IO that have signaled in the meantime. let timeout = this.messageCount > 0 ? 0 : POLL_TIMEOUT; for (; ; timeout = 0) { - let events = this.events; - let handlers = this.eventHandlers; - - let result = libc.WaitForMultipleObjects( - events.length, - events, - false, + let numberOfBytesTransferred = win32.DWORD(); + let completionKeyOut = win32.ULONG_PTR(); + let lpOverlapped = win32.OVERLAPPED.ptr(0); + let ok = libc.GetQueuedCompletionStatus( + io.iocpCompletionPort, + numberOfBytesTransferred.address(), + completionKeyOut.address(), + lpOverlapped.address(), timeout ); - if (result < handlers.length) { + const deqWinErr = ok ? 0 : ctypes.winLastError; + if (!ok) { + if (deqWinErr === win32.WAIT_TIMEOUT) { + // No changes, return (caller may schedule another loop/poll). + break; + } + if (deqWinErr === win32.ERROR_ABANDONED_WAIT_0) { + // iocpCompletionPort was closed. + io.shutdown(); + break; + } + if (lpOverlapped.isNull()) { + // "If *lpOverlapped is NULL, the function did not dequeue a + // completion packet from the completion port." + // No remaining data, return (caller may schedule another loop/poll). + break; + } + // Received completion packet that failed, fall through. + } + let completionKey = parseInt(completionKeyOut.value, 10); + if (completionKey === win32.IOCP_COMPLETION_KEY_WAKE_WORKER) { + // Custom notification from the parent thread. + io.messageCount += 1; + // Continue to process any completed IO, then return (and eventually + // yield to the event loop to allow onmessage to receive messages). + continue; + } + if (IOCPKeyGen.isPipeKey(completionKey)) { + const pipeId = IOCPKeyGen.pipeIdFromKey(completionKey); + const pipe = io.pipes.get(pipeId); + if (!pipe) { + debug(`IOCP notification for unknown pipe: ${pipeId}`); + continue; + } + pipe.bufferIsPendingIO = false; + if (deqWinErr === win32.ERROR_BROKEN_PIPE || pipe.awaitingBufferClose) { + pipe.onError(); + continue; + } try { - handlers[result].onReady(); + pipe.onReady(); } catch (e) { console.error(e); debug(`Worker error: ${e} :: ${e.stack}`); - handlers[result].onError(); + pipe.onError(); + } + } else if (IOCPKeyGen.isProcessKey(completionKey)) { + // This is a notification via JOBOBJECT_ASSOCIATE_COMPLETION_PORT. + // "numberOfBytesTransferred" is any of the JOB_OBJECT_MSG_* values. + // https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_associate_completion_port + const jobMsgId = numberOfBytesTransferred.value; + const processId = IOCPKeyGen.processIdFromKey(completionKey); + + // The job reaching process count zero is a very strong indication that + // the process has exit. We also listen to the other *EXIT_PROCESS + // messages in case the process spawned child processes under the job, + // because that would suppress the JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO + // notification and prevent us from detecting process termination. + const isExit = + jobMsgId === win32.JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS || + jobMsgId === win32.JOB_OBJECT_MSG_EXIT_PROCESS; + const isJobZero = jobMsgId === win32.JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO; + if (!isExit && !isJobZero) { + // Ignore non-exit notifications, such as additional new processes. + continue; + } + const process = io.processes.get(processId); + if (!process) { + // This may happen when isJobZero == true, because we could have + // observed isExit == true before. + continue; + } + if (isExit) { + let realPid = ctypes.cast(lpOverlapped, win32.DWORD).value; + if (process.pid !== realPid) { + // A random child process (spawned by the process) has exited. + continue; + } + } + try { + process.onReady(); + } catch (e) { + // This is really unexpected, but don't break the poll loop. + console.error(e); + debug(`Worker error: ${e} :: ${e.stack}`); } } else { - break; + debug(`Unexpected IOCP CompletionKey: ${completionKey}`); } } }, diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_worker_common.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_worker_common.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/subprocess_worker_common.js 2025-09-22 21:16:24.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/subprocess_worker_common.js 2025-10-09 15:35:45.000000000 +0000 @@ -153,10 +153,17 @@ }); }, + // For testing. + getIsPolling() { + return { data: io.polling }; + }, + + // For testing. getOpenFiles() { return { data: new Set(io.pipes.keys()) }; }, + // For testing. getProcesses() { let data = new Map( Array.from(io.processes.values()) @@ -166,6 +173,7 @@ return { data }; }, + // For testing. waitForNoProcesses() { return Promise.all( Array.from(io.processes.values(), proc => proc.awaitFinished()) diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/data_test_child.py firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/data_test_child.py --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/data_test_child.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/data_test_child.py 2025-10-09 15:35:46.000000000 +0000 @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 + +# This file is run by test_subprocess_child.js. To test this file in isolation: +# python3 -u toolkit/modules/subprocess/test/xpcshell/data_test_child.py spawn_child_and_exit +# Then separately, to the displayed URL "Listening at http://127.0.0.1:12345", +# with 12345 being a random port, +# curl http://127.0.0.1:12345 -X DELETE # request exit of parent +# curl http://127.0.0.1:12345 # request exit of child + +import sys +import time + + +def sleep_for_a_little_bit(): + time.sleep(0.2) + + +def spawn_child_and_exit(is_breakaway_job): + """ + Spawns and exits child processes to allow tests to verify that they detect + specifically the exit of this (parent) process. + + The expected sequence of outputs is as follows: + 1. parent_start + 2. first_child_start_and_exit + 3. parent_after_first_child_exit + 4. spawned_child_start + 5. Listening at http://127.0.0.1:12345 - with 12345 being random port + 6. child_received_http_request - DELETE request from test. + 7. data_from_child:kill_parent + 8. parent_exit + ( now the parent has exit) + ( child_process_still_alive_1 response sent to request from step 6) + ( wait for new request from client to request child to exit ) + ( child_process_still_alive_2 response sent to that new request ) + 9. spawned_child_exit + """ + import subprocess + + print("1. parent_start", flush=True) + + # Start and exit a child process (used to make sure that we do not + # mistakenly detect an exited child process for the parent process). + subprocess.run( + [sys.executable, "-c", "print('2. first_child_start_and_exit')"], + stdout=sys.stdout, + stderr=sys.stderr, + ) + # Wait a bit to make sure that the child's exit signal has been processed. + # This is not strictly needed, because we don't expect the child to affect + # the parent, but in case of a flawed implementation, this would enable the + # test to detect a bad implementation (by observing the exit before the + # "parent_after_first_child_exit" message below). + sleep_for_a_little_bit() + print("3. parent_after_first_child_exit", flush=True) + + creationflags = 0 + if is_breakaway_job: + # See comment in test_subprocess_child.js; in short we need this flag + # to make sure that the child outlives the parent when the subprocess + # implementation calls TerminateJobObject. + creationflags = subprocess.CREATE_BREAKAWAY_FROM_JOB + child_proc = subprocess.Popen( + [sys.executable, "-u", __file__, "spawned_child"], + creationflags=creationflags, + # We don't need this pipe, but when this side of the process exits, + # the pipe is closed, which the child can use to detect that the parent + # has exit. + stdin=subprocess.PIPE, + # We are using stdout as a control channel to allow the child to + # notify us when the process is done. + stdout=subprocess.PIPE, + # stderr is redirected to the real stdout, so that the caller can + # still observe print() from spawned_child. + stderr=sys.stdout, + ) + + # This blocks until the child has notified us. + data_from_child = child_proc.stdout.readline().decode().rstrip() + print(f"7. data_from_child:{data_from_child}", flush=True) + print("8. parent_exit", flush=True) + + # Wait a little bit to make sure that stdout has been flushed (and read by + # the caller) when the process exits. + sleep_for_a_little_bit() + sys.exit(0) + + +def spawned_child(): + import http.server + import socketserver + + def print_to_parent_stdout(msg): + # The parent maps our stderr to its stdout. + print(msg, flush=True, file=sys.stderr) + + # This is spawned via spawn_child_and_exit. + print_to_parent_stdout("4. spawned_child_start") + + class RequestHandler(http.server.BaseHTTPRequestHandler): + def log_message(self, *args): + pass # Disable logging + + def do_DELETE(self): + print_to_parent_stdout("6. child_received_http_request") + # Let the caller know that we are responsive. + self.send_response(200) + self.send_header("Connection", "close") + self.end_headers() + + # Wait a little bit to allow the network request to be + # processed by the client. If for some reason the termination + # of the parent also kills the child, then at least the client + # has had a chance to become aware of it. + sleep_for_a_little_bit() + + # Now ask the parent to exit, and continue here. + print("kill_parent", flush=True) + # When the parent exits, stdin closes, which we detect here: + res = sys.stdin.read(1) + if len(res): + print_to_parent_stdout("spawned_child_UNEXPECTED_STDIN") + + # If we make it here, it means that this child outlived the + # parent, and we can let the client know. + # (if the child process is terminated prematurely, the client + # would also know through a disconnected socket). + self.wfile.write(b"child_process_still_alive_1") + + def do_GET(self): + self.send_response(200) + self.send_header("Connection", "close") + self.end_headers() + self.wfile.write(b"child_process_still_alive_2") + + # Starts a server that handles two requests and then closes the server. + with socketserver.TCPServer(("127.0.0.1", 0), RequestHandler) as server: + host, port = server.server_address[:2] + print_to_parent_stdout(f"5. Listening at http://{host}:{port}") + + # Expecting DELETE request (do_DELETE) + server.handle_request() + + # Expecting GET request (do_GET) + server.handle_request() + + print_to_parent_stdout("9. spawned_child_exit") + sys.exit(0) + + +cmd = sys.argv[1] +if cmd == "spawn_child_and_exit": + spawn_child_and_exit(is_breakaway_job=False) +elif cmd == "spawn_child_in_breakaway_job_and_exit": + spawn_child_and_exit(is_breakaway_job=True) +elif cmd == "spawned_child": + spawned_child() +else: + raise Exception(f"Unknown command: {cmd}") diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/data_test_script.py firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/data_test_script.py --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/data_test_script.py 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/data_test_script.py 2025-10-09 15:35:45.000000000 +0000 @@ -43,6 +43,14 @@ elif cmd == "print_args": for arg in sys.argv[2:]: output(arg) +elif cmd == "print_python_executable_path": + import psutil # not stdlib, put already part of our virtualenv. + + # This returns the final executable that launched this script. + # We cannot use sys.executable because on Windows that would point to the + # python.exe parent that spawns this process. + # See getRealPythonExecutable in test_subprocess.js. + output(psutil.Process().exe()) elif cmd == "ignore_sigterm": signal.signal(signal.SIGTERM, signal.SIG_IGN) @@ -54,6 +62,17 @@ import time time.sleep(3600) +elif cmd == "close_stdin_and_wait_forever": + # Do NOT use non-stdlib modules here; this runs outside our virtualenv, + # via the program identified by print_python_executable_path. + os.close(sys.stdin.fileno()) + output("stdin_closed") + while True: + pass # Test should kill the program +elif cmd == "close_pipes_and_wait_for_stdin": + os.close(sys.stdout.fileno()) + os.close(sys.stderr.fileno()) + sys.stdin.buffer.read(1) elif cmd == "print": output(sys.argv[2], stream=sys.stdout, print_only=True) output(sys.argv[3], stream=sys.stderr, print_only=True) diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/head.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/head.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/head.js 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/head.js 2025-10-09 15:35:46.000000000 +0000 @@ -11,3 +11,32 @@ ChromeUtils.defineESModuleGetters(this, { Subprocess: "resource://gre/modules/Subprocess.sys.mjs", }); + +// Given the full path to a python executable (pathToPython), this function +// looks up the ultimate "real" Python program that runs the Python script. +// By default, pathToPython runs Python in a virtualenv, which on Windows +// results in two python.exe being spawned: python.exe (at pathToPython) spawns +// a new python.exe (outside the virtualenv, but configured by the parent +// python.exe to use the virtualenv modules). +// +// In test_subprocess_stdin_closed_by_program test below in test_subprocess.js, +// we run a script that closes stdin. This closed stdin does not propagate back +// via the parent python.exe, so to make sure that it does, we directly launch +// the real Python interpreter. This runs outside the virtualenv. +// +// Similarly, test_subprocess_stdout_closed_by_program in test_subprocess.js +// runs a script that closes stdout, which only propagates back to the program +// when the real Python interpreter is launched instead of a wrapper. +async function getRealPythonExecutable(pathToPython) { + const TEST_SCRIPT = do_get_file("data_test_script.py").path; + let proc = await Subprocess.call({ + command: pathToPython, + arguments: ["-u", TEST_SCRIPT, "print_python_executable_path"], + }); + let { exitCode } = await proc.wait(); + equal(exitCode, 0, "Successfully got executable path"); + let count = await proc.stdout.readUint32(); + let realPythonPath = await proc.stdout.readString(count); + ok(realPythonPath, `Found path to Python program: ${realPythonPath}`); + return realPythonPath; +} diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess.js 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess.js 2025-10-09 15:35:46.000000000 +0000 @@ -36,7 +36,7 @@ return result.join(""); }; -add_task(async function setup() { +add_setup(async function setup() { PYTHON = await Subprocess.pathSearch(Services.env.get("PYTHON")); PYTHON_BIN = PathUtils.filename(PYTHON); @@ -421,6 +421,79 @@ equal(exitCode, 0, "Got expected exit code"); }); +// Regression test for bug 1983138. +add_task(async function test_subprocess_stdin_closed_by_program() { + // On Windows, the actual python.exe that runs the script is a child of the + // python.exe of the virtualenv, and closing stdin from that child does not + // propagate back, which would cause the proc.stdin.write() call below to + // succeed unexpectedly. + // + // To avoid this issue, use the real Python, see getRealPythonExecutable. + let proc = await Subprocess.call({ + command: await getRealPythonExecutable(PYTHON), + arguments: ["-u", TEST_SCRIPT, "close_stdin_and_wait_forever"], + }); + + info("Waiting for program to notify us via stdout after closing stdin"); + + equal( + await read(proc.stdout), + "stdin_closed", + "Spawned process closed stdin" + ); + + // This is the most interesting part - write() should reject with an error. + await Assert.rejects( + proc.stdin.write("a"), + function (e) { + equal( + e.errorCode, + Subprocess.ERROR_END_OF_FILE, + "Got the expected error code" + ); + return /File closed/.test(e.message); + }, + "Promise should be rejected after program closed stdin" + ); + + let { exitCode } = await proc.kill(); + + // On UNIX platforms, our subprocess.kill() implementation sends SIGTERM, + // which Python handles and exiting with -15. On Windows, we send SIGKILL + // which the program cannot even handle and the exit code is -9. + const expectedExitCode = AppConstants.platform == "win" ? -9 : -15; + equal(exitCode, expectedExitCode, "Got expected exit code"); +}); + +// Regression test for bug 1983138. +add_task(async function test_subprocess_stdout_closed_by_program() { + // On Windows, the actual python.exe that runs the script is a child of the + // python.exe of the virtualenv, and closing stdout from that child does not + // propagate back, which would cause the proc.stdout.readString() call (via + // read) below to never resolve. + // + // To avoid this issue, use the real Python, see getRealPythonExecutable. + let proc = await Subprocess.call({ + command: await getRealPythonExecutable(PYTHON), + arguments: ["-u", TEST_SCRIPT, "close_pipes_and_wait_for_stdin"], + }); + + // This is the most interesting part - readString() should resolve. + equal( + await proc.stdout.readString(), + "", + "stdout read should resolve to empty string upon close" + ); + + let { exitCode } = await proc.kill(); + + // On UNIX platforms, our subprocess.kill() implementation sends SIGTERM, + // which Python handles and exiting with -15. On Windows, we send SIGKILL + // which the program cannot even handle and the exit code is -9. + const expectedExitCode = AppConstants.platform == "win" ? -9 : -15; + equal(exitCode, expectedExitCode, "Got expected exit code"); +}); + add_task(async function test_subprocess_invalid_json() { let proc = await Subprocess.call({ command: PYTHON, diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_child.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_child.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_child.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_child.js 2025-10-09 15:35:46.000000000 +0000 @@ -0,0 +1,203 @@ +"use strict"; + +const { TestUtils } = ChromeUtils.importESModule( + "resource://testing-common/TestUtils.sys.mjs" +); +const { setTimeout } = ChromeUtils.importESModule( + "resource://gre/modules/Timer.sys.mjs" +); + +let PYTHON; + +add_setup(async () => { + PYTHON = await Subprocess.pathSearch(Services.env.get("PYTHON")); +}); + +// Send a request to the test server. We expect a non-empty response. Any error +// is caught and returned as an empty string. +async function fetchResponseText(url, method) { + const timeoutCtrl = new AbortController(); + + // We expect the (localhost) server to respond soon. If the server is not + // listening, we will eventually time out. Let's have a generous deadlines: + // - DELETE is given plenty of time, because the request is expected to + // always be accepted, followed by IPC and process termination. + // - GET is given a short deadline, because we expect either an immediate + // response (server is around) or no response (server was closed). + const timeout = method === "DELETE" ? 10000 : 1000; + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => timeoutCtrl.abort(), timeout); + // (^ AbortSignal.timeout() would be nicer but cannot be used, because it + // throws: "The current global does not support timeout".) + + try { + let res = await fetch(url, { method, signal: timeoutCtrl.signal }); + return await res.text(); + } catch (e) { + info(`fetch() request to kill parent failed: ${e}`); + if ( + e.name !== "AbortError" && + e.message !== "NetworkError when attempting to fetch resource." + ) { + ok(false, `Unexpected error: ${e}`); + } + return ""; + } +} + +async function do_test_spawn_parent_with_child(isBreakAwayJob) { + let testCmd; + if (isBreakAwayJob) { + Assert.equal(AppConstants.platform, "win", "Breakaway is Windows-only"); + testCmd = "spawn_child_in_breakaway_job_and_exit"; + } else { + testCmd = "spawn_child_and_exit"; + } + const TEST_SCRIPT = do_get_file("data_test_child.py").path; + info(`Launching proc: ${PYTHON} -u ${TEST_SCRIPT} ${testCmd}`); + const proc = await Subprocess.call({ + command: PYTHON, + arguments: ["-u", TEST_SCRIPT, testCmd], + }); + const exitPromise = proc.wait(); + let exited = false; + exitPromise.then(() => { + exited = true; + }); + + info(`Spawned process with pid ${proc.pid}, waiting for child`); + + // We'll accumulate stdout, and reset what we've received so far after + // checking that the content matches with our expectations. + let stdoutText = ""; + let stdoutDonePromise = (async () => { + let seenParentExit = false; + for (let s; (s = await proc.stdout.readString()); ) { + // On Windows, print() uses \r\n instead of \n. Drop it. + s = s.replaceAll("\r", ""); + stdoutText += s; + dump(`Received stdout from test script: ${s}\n`); + + seenParentExit ||= stdoutText.includes("parent_exit"); + if (!seenParentExit) { + Assert.ok(!exited, "Process should not have exited yet"); + } + } + })(); + + const EXPECTED_STDOUT_UNTIL_LISTENING = `\ +1. parent_start +2. first_child_start_and_exit +3. parent_after_first_child_exit +4. spawned_child_start +5. Listening at `; // followed by http://127.0.0.1:\n + const EXPECTED_STDOUT_AT_PARENT_EXIT = `\ +6. child_received_http_request +7. data_from_child:kill_parent +8. parent_exit +`; + const EXPECTED_STDOUT_AT_CHILD_EXIT = `\ +9. spawned_child_exit +`; + + await TestUtils.waitForCondition( + () => stdoutText.startsWith(EXPECTED_STDOUT_UNTIL_LISTENING), + "Waiting for (parent) process to start child with listening HTTP server" + ); + + const url = stdoutText.replace(EXPECTED_STDOUT_UNTIL_LISTENING, "").trim(); + ok(/^http:\/\/127\.0\.0\.1:\d+$/.test(url), `Found server URL: ${url}`); + stdoutText = ""; // Reset now that we have confirmed its content. + + // When the server receives this request, it triggers exit of the process. + const promiseResponseToExitParent = fetchResponseText(url, "DELETE"); + + info("Waiting for spawned (parent) process to exit"); + const { exitCode } = await exitPromise; + equal(exitCode, 0, "Got expected exit code"); + equal(stdoutText, EXPECTED_STDOUT_AT_PARENT_EXIT, "stdout before exit"); + stdoutText = ""; // Reset again after checking its content. + + // Now two things can happen: + // - Either the child lives on, and we can send a request to it to ask the + // child to exit as well. + // - Or the process tree rooted at the parent dies, and the child is taken + // with it. The initial fetch() might succeed or reject. A new fetch() is + // most likely going to reject. + // On Linux and macOS, the child appears to live on. + // On Windows, the whole process tree dies, when run under this test + // (but somehow not when the Python script is run in isolation...?). + + const responseToExitParent = await promiseResponseToExitParent; + if (!responseToExitParent) { + info("fetch() request to kill parent failed"); + } + + info("Checking whether the child process is still alive..."); + const responseToChildAlive = await fetchResponseText(url, "GET"); + const wasChildAlive = !!responseToChildAlive; + + if (wasChildAlive) { + // Mainly a sanity check: If the second request gots through, then the + // first request should have received the expected response. + equal(responseToExitParent, "child_process_still_alive_1", "Still alive 1"); + equal(responseToChildAlive, "child_process_still_alive_2", "Still alive 2"); + } else { + info("fetch() request to check child liveness failed"); + } + + if (AppConstants.platform === "win" && !isBreakAwayJob) { + ok(!wasChildAlive, "Child process exits when the parent exits"); + } else { + ok(wasChildAlive, "Child process outlives parent"); + } + + await stdoutDonePromise; + + // On Windows, we close the pipes as soon as the parent process was detected + // to have exited. This prevents the child's write to be read. + if (wasChildAlive && AppConstants.platform !== "win") { + equal(stdoutText, EXPECTED_STDOUT_AT_CHILD_EXIT, "Stdout from child"); + } else { + equal(stdoutText, "", "No more stdout after parent exited (with child)"); + } +} + +// Tests spawning a process that exits after spawning a child process, and +// verify that the parent process is detected as exited, while the child +// process is still running. +add_task(async function test_spawn_child_outliving_parent_process() { + // Our subprocess implementation (subprocess_win.worker.js) puts the spawned + // process in a job, and cleans up that job upon process exit by calling + // TerminateJobObject. This causes all other (child) processes that are part + // of the job to terminate. To make sure that the child process outlives the + // parent, we have to launch it with the CREATE_BREAKAWAY_FROM_JOB flag. + const isBreakAwayJob = AppConstants.platform == "win"; + await do_test_spawn_parent_with_child(isBreakAwayJob); +}); + +// On Windows, child processes are terminated along with the parent by default, +// because our subprocess implementation puts the process in a Job, and the +// TerminateJobObject call terminates all associated child processes. This +// test confirms the default behavior, as opposed to what we see in +// test_spawn_child_outliving_parent_process. +add_task( + { skip_if: () => AppConstants.platform != "win" }, + async function test_child_terminated_on_process_termination() { + await do_test_spawn_parent_with_child(false); + } +); + +add_task(async function test_cleanup() { + let { getSubprocessImplForTest } = ChromeUtils.importESModule( + "resource://gre/modules/Subprocess.sys.mjs" + ); + + let worker = getSubprocessImplForTest().Process.getWorker(); + + let openFiles = await worker.call("getOpenFiles", []); + let processes = await worker.call("getProcesses", []); + + equal(openFiles.size, 0, "No remaining open files"); + equal(processes.size, 0, "No remaining processes"); +}); diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_polling.js firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_polling.js --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_polling.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/test_subprocess_polling.js 2025-10-09 15:35:46.000000000 +0000 @@ -0,0 +1,63 @@ +"use strict"; + +const { getSubprocessImplForTest } = ChromeUtils.importESModule( + "resource://gre/modules/Subprocess.sys.mjs" +); + +let PYTHON; +const TEST_SCRIPT = do_get_file("data_test_script.py").path; + +add_setup(async () => { + PYTHON = await Subprocess.pathSearch(Services.env.get("PYTHON")); +}); + +// When the last process exits, we should stop polling. +// This is a regression test for bug 1982950 +add_task(async function test_polling_only_when_process_is_running() { + let worker = getSubprocessImplForTest().Process.getWorker(); + + equal( + await worker.call("getIsPolling", []), + false, + "Initially not polling before starting a program" + ); + + let proc = await Subprocess.call({ + command: await getRealPythonExecutable(PYTHON), + arguments: ["-u", TEST_SCRIPT, "close_pipes_and_wait_for_stdin"], + }); + + equal( + await worker.call("getIsPolling", []), + true, + "Is polling while process is active" + ); + + // Make sure that we have completed reading before exiting the program, + // to rule out pending polls from open stdout pipe. Note that we expect + // to be closed because the program closed stdout prematurely. + equal( + await proc.stdout.readString(), + "", + "Test program should have closed stdout prematurely without stdout" + ); + + equal( + await worker.call("getIsPolling", []), + true, + "Is still polling while process is active" + ); + + info("Closing stdin to trigger exit"); + await proc.stdin.close(); + + let { exitCode } = await proc.wait(); + equal(exitCode, 0, "Got expected exit code"); + + // This part is the regression test for bug 1982950. + equal( + await worker.call("getIsPolling", []), + false, + "Not polling when last process has exited" + ); +}); diff -Nru firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/xpcshell.toml firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/xpcshell.toml --- firefox-esr-140.3.1esr/toolkit/modules/subprocess/test/xpcshell/xpcshell.toml 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/modules/subprocess/test/xpcshell/xpcshell.toml 2025-10-09 15:35:46.000000000 +0000 @@ -5,6 +5,7 @@ subprocess = true support-files = [ "data_text_file.txt", + "data_test_child.py", "data_test_script.py", ] @@ -15,6 +16,8 @@ ] run-sequentially = "very high failure rate in parallel" +["test_subprocess_child.js"] + ["test_subprocess_connectRunning.js"] skip-if = [ "os == 'mac' && os_version == '11.20' && arch == 'aarch64'", # Bug 1936343 @@ -24,3 +27,5 @@ ["test_subprocess_getEnvironment.js"] ["test_subprocess_pathSearch.js"] + +["test_subprocess_polling.js"] diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs firefox-esr-140.4.0esr/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs 2025-10-09 15:35:46.000000000 +0000 @@ -1420,9 +1420,12 @@ let perms = { origins: required.origins.concat(requested?.origins ?? []), permissions: required.permissions.concat(requested?.permissions ?? []), - data_collection: required.data_collection.concat( - requested?.data_collection ?? [] - ), + data_collection: [ + // These fields can be missing if read from extensions.json that was + // generated before support for data_collection was introduced. + ...(required?.data_collection ?? []), + ...(requested?.data_collection ?? []), + ], }; return perms; } diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs firefox-esr-140.4.0esr/toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs 2025-10-09 15:35:46.000000000 +0000 @@ -1805,6 +1805,11 @@ this.removeTemporaryFile(); } else { logger.info(`Install of ${this.addon.id} cancelled by user`); + if (err) { + // promptHandler is expected to reject() without value to cancel. + // A non-void error is unexpected, so log it for visibility. + Cu.reportError(err); + } this.state = AddonManager.STATE_CANCELLED; this._cleanup(); this._callInstallListeners( diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/browser/browser_permission_prompt.js firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/browser/browser_permission_prompt.js --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/browser/browser_permission_prompt.js 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/browser/browser_permission_prompt.js 2025-10-09 15:35:46.000000000 +0000 @@ -1617,6 +1617,15 @@ `addons://detail/${encodeURIComponent(extensionId)}`, "Expected about:addons to show the detail view of the extension" ); + + // Asserting the browser chrome window url to guard against regressions + // like Bug 1983869. + Assert.equal( + AppConstants.BROWSER_CHROME_URL, + tab.ownerGlobal.window.location.href, + "Expect browser chrome window url to be unchanged" + ); + BrowserTestUtils.removeTab(tab); // Dismiss the popup by clicking "OK". diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpcshell/head_addons.js firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/head_addons.js --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpcshell/head_addons.js 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/head_addons.js 2025-10-09 15:35:46.000000000 +0000 @@ -16,6 +16,8 @@ const PREF_EM_STRICT_COMPATIBILITY = "extensions.strictCompatibility"; const PREF_GETADDONS_BYIDS = "extensions.getAddons.get.url"; const PREF_XPI_SIGNATURES_REQUIRED = "xpinstall.signatures.required"; +const PREF_DATA_COLLECTION_PERMISSIONS_ENABLED = + "extensions.dataCollectionPermissions.enabled"; // Maximum error in file modification times. Some file systems don't store // modification times exactly. As long as we are closer than this then it diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpcshell/test_data_collection_not_in_db.js firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/test_data_collection_not_in_db.js --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpcshell/test_data_collection_not_in_db.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/test_data_collection_not_in_db.js 2025-10-09 15:35:46.000000000 +0000 @@ -0,0 +1,144 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// We don't have an easy way to serve update manifests from a secure URL. +Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false); +Services.prefs.setBoolPref(PREF_DATA_COLLECTION_PERMISSIONS_ENABLED, true); + +const server = AddonTestUtils.createHttpServer(); + +add_setup(async () => { + ExtensionTestUtils.mockAppInfo(); +}); + +async function deleteDataCollectionFromDB(addonId) { + await promiseShutdownManager(); + + info(`Modifying ${gExtensionsJSON.path} to drop data_collection`); + let json = await IOUtils.readJSON(gExtensionsJSON.path); + let addonDbItem = json.addons.find(a => a.id === addonId); + + function simulateAddonDbItemWithoutDataCollection(propName) { + ok( + Array.isArray(addonDbItem[propName].data_collection), + `Sanity check: ${propName}.data_collection is an Array` + ); + delete addonDbItem[propName].data_collection; + } + // Drop the "data_collection" field from every object describing permissions. + simulateAddonDbItemWithoutDataCollection("userPermissions"); + simulateAddonDbItemWithoutDataCollection("optionalPermissions"); + simulateAddonDbItemWithoutDataCollection("requestedPermissions"); + + // Now write the modifications. + await IOUtils.writeJSON(gExtensionsJSON.path, json); + + await promiseStartupManager(); +} + +function prepareToServeUpdate(extensionData) { + const id = extensionData.manifest.browser_specific_settings.gecko.id; + + const xpi = AddonTestUtils.createTempWebExtensionFile(extensionData); + + const serverHost = `http://localhost:${server.identity.primaryPort}`; + const updatesPath = "/updates.json"; + const xpiFilename = "/update.xpi"; + server.registerFile(xpiFilename, xpi); + AddonTestUtils.registerJSON(server, updatesPath, { + addons: { + [id]: { + updates: [ + { + version: extensionData.manifest.version, + update_link: `${serverHost}${xpiFilename}`, + }, + ], + }, + }, + }); + Services.prefs.setStringPref( + "extensions.update.background.url", + `${serverHost}${updatesPath}` + ); +} + +// Regression test for https://bugzilla.mozilla.org/show_bug.cgi?id=1984724 +add_task(async function test_db_without_data_collection_background_update() { + const ID = "@addon-without-data_collection-in-extensions.json"; + + await promiseStartupManager(); + + info("Preparing extensions.json without data_collection"); + { + let startedPromise = promiseWebExtensionStartup(ID); + await promiseInstallWebExtension({ + manifest: { + version: "1.0", + browser_specific_settings: { gecko: { id: ID } }, + }, + }); + await startedPromise; + await deleteDataCollectionFromDB(ID); + + let addon = await AddonManager.getAddonByID(ID); + Assert.deepEqual( + addon.userPermissions, + { permissions: [], origins: [] }, + ".userPermissions is read from extensions.json (without data_collection)" + ); + } + + // Setup and sanity check completed - we have simulated the scenario relevant + // to bug 1984724 (user starts Firefox with extensions.json from old profile, + // without a forced extensions.json rebuild for other reasons). + + info("Preparing update to version with data_collection_permissions"); + prepareToServeUpdate({ + manifest: { + version: "2.0", + browser_specific_settings: { + gecko: { + id: ID, + data_collection_permissions: { required: ["none"] }, + }, + }, + }, + }); + + function promptObserver() { + // We should not be getting the prompt because the update does not specify + // required data_collection_permissions values. + Assert.ok(false, "Unexpected webextension-update-permission-prompt"); + } + Services.obs.addObserver( + promptObserver, + "webextension-update-permission-prompt" + ); + + let restartAfterUpdatePromise = promiseWebExtensionStartup(ID); + await AddonManagerPrivate.backgroundUpdateCheck(); + info("Update check done. Waiting for extension to update and restart"); + await restartAfterUpdatePromise; + + // Getting here without error is the regression test for bug 1984724. + // Prior to the fix, we'd get errors as seen at: + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1984724#c22 + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1984724#c23 + + let addon = await AddonManager.getAddonByID(ID); + equal(addon.version, "2.0", "Add-on was updated"); + Assert.deepEqual( + addon.userPermissions, + { permissions: [], origins: [], data_collection: ["none"] }, + ".userPermissions now contains the updated data_collection" + ); + Services.obs.removeObserver( + promptObserver, + "webextension-update-permission-prompt" + ); + + await addon.uninstall(); + await promiseShutdownManager(); +}); diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml 2025-10-09 15:35:45.000000000 +0000 @@ -87,6 +87,8 @@ ["test_crash_annotation_quoting.js"] +["test_data_collection_not_in_db.js"] + ["test_db_path.js"] head = "" skip-if = ["os == 'android'"] # Cannot override profdir path, see comment about do_get_profile() in test_db_path.js diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpinstall/browser_doorhanger_installs.js firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpinstall/browser_doorhanger_installs.js --- firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpinstall/browser_doorhanger_installs.js 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpinstall/browser_doorhanger_installs.js 2025-10-09 15:35:45.000000000 +0000 @@ -577,7 +577,11 @@ async function test_recommendedPostDownload() { await SpecialPowers.pushPrefEnv({ - set: [["extensions.postDownloadThirdPartyPrompt", true]], + set: [ + ["extensions.postDownloadThirdPartyPrompt", true], + // recommended.xpi is signed with AMO staging signature. + ["xpinstall.signatures.dev-root", true], + ], }); let triggers = encodeURIComponent( @@ -594,7 +598,7 @@ let notificationPromise = acceptAppMenuNotificationWhenShown( "addon-installed", - "{811d77f1-f306-4187-9251-b4ff99bad60b}" + "recommended-line@test.mozilla.org" ); installDialog.button.click(); @@ -604,7 +608,7 @@ is(installs.length, 0, "Should be no pending installs"); let addon = await AddonManager.getAddonByID( - "{811d77f1-f306-4187-9251-b4ff99bad60b}" + "recommended-line@test.mozilla.org" ); await addon.uninstall(); Binary files /srv/release.debian.org/tmp/Ty9Rhqvd7U/firefox-esr-140.3.1esr/toolkit/mozapps/extensions/test/xpinstall/recommended.xpi and /srv/release.debian.org/tmp/CmEC825M4L/firefox-esr-140.4.0esr/toolkit/mozapps/extensions/test/xpinstall/recommended.xpi differ diff -Nru firefox-esr-140.3.1esr/toolkit/mozapps/update/UpdateService.sys.mjs firefox-esr-140.4.0esr/toolkit/mozapps/update/UpdateService.sys.mjs --- firefox-esr-140.3.1esr/toolkit/mozapps/update/UpdateService.sys.mjs 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/mozapps/update/UpdateService.sys.mjs 2025-10-09 15:35:45.000000000 +0000 @@ -1374,14 +1374,15 @@ // Now trash the update download directory, since we're done with it cleanUpDownloadingUpdateDir(); - // If the update status file says we are downloading, we should remove that + // If the update state says we are downloading, we should change that // too, since we aren't doing that anymore. - let readyUpdateDir = getReadyUpdateDir(); - let status = readStatusFile(readyUpdateDir); - if (status == STATE_DOWNLOADING) { - let statusFile = readyUpdateDir.clone(); + if ( + lazy.AUS.currentState == Ci.nsIApplicationUpdateService.STATE_DOWNLOADING + ) { + let statusFile = getReadyUpdateDir().clone(); statusFile.append(FILE_UPDATE_STATUS); statusFile.remove(false); + transitionState(Ci.nsIApplicationUpdateService.STATE_IDLE); } } diff -Nru firefox-esr-140.3.1esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in firefox-esr-140.4.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in --- firefox-esr-140.3.1esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in 2025-10-09 15:35:46.000000000 +0000 @@ -256,6 +256,10 @@ # Qihoo 360 Internet Security, bug 1958112 DllBlocklistEntry("chromesafe64.dll", (2, 0, 0, 42)), + + # Meta Quest Link App, bug 1986922 + DllBlocklistEntry("magicdsfilterQuest3.dll", ALL_VERSIONS), + DllBlocklistEntry("magicdsfilterQuest3s.dll", ALL_VERSIONS), ] # Shell extensions that result in crashes when the file-dialog is opened. (These diff -Nru firefox-esr-140.3.1esr/xpcom/threads/Queue.h firefox-esr-140.4.0esr/xpcom/threads/Queue.h --- firefox-esr-140.3.1esr/xpcom/threads/Queue.h 2025-09-22 21:16:26.000000000 +0000 +++ firefox-esr-140.4.0esr/xpcom/threads/Queue.h 2025-10-09 15:35:46.000000000 +0000 @@ -82,7 +82,7 @@ } T& Push(T&& aElement) { - MOZ_ASSERT(mCount < std::numeric_limits::max()); + MOZ_RELEASE_ASSERT(mCount < std::numeric_limits::max()); if (!mHead) { // First page @@ -133,7 +133,7 @@ bool IsEmpty() const { return !mCount; } T Pop() { - MOZ_ASSERT(!IsEmpty()); + MOZ_RELEASE_ASSERT(!IsEmpty()); T result = std::move(mHead->mEvents[mOffsetHead]); mHead->mEvents[mOffsetHead].~T(); @@ -158,12 +158,12 @@ } T& FirstElement() { - MOZ_ASSERT(!IsEmpty()); + MOZ_RELEASE_ASSERT(!IsEmpty()); return mHead->mEvents[mOffsetHead]; } const T& FirstElement() const { - MOZ_ASSERT(!IsEmpty()); + MOZ_RELEASE_ASSERT(!IsEmpty()); return mHead->mEvents[mOffsetHead]; } diff -Nru firefox-esr-140.3.1esr/xpcom/threads/TaskController.cpp firefox-esr-140.4.0esr/xpcom/threads/TaskController.cpp --- firefox-esr-140.3.1esr/xpcom/threads/TaskController.cpp 2025-09-22 21:16:25.000000000 +0000 +++ firefox-esr-140.4.0esr/xpcom/threads/TaskController.cpp 2025-10-09 15:35:46.000000000 +0000 @@ -888,6 +888,7 @@ sIdleMemoryCleanupRunner->Cancel(); sIdleMemoryCleanupRunner = nullptr; } + nsresult timerInitOK = NS_OK; if (!sIdleMemoryCleanupWantsLater) { auto res = NS_NewTimerWithFuncCallback( CheckIdleMemoryCleanupNeeded, (void*)"IdleMemoryCleanupWantsLaterCheck", @@ -895,17 +896,28 @@ "IdleMemoryCleanupWantsLaterCheck"); if (res.isOk()) { sIdleMemoryCleanupWantsLater = res.unwrap().forget(); + } else { + timerInitOK = res.unwrapErr(); } } else { if (sIdleMemoryCleanupWantsLaterScheduled) { sIdleMemoryCleanupWantsLater->Cancel(); } - sIdleMemoryCleanupWantsLater->InitWithNamedFuncCallback( + timerInitOK = sIdleMemoryCleanupWantsLater->InitWithNamedFuncCallback( CheckIdleMemoryCleanupNeeded, (void*)"IdleMemoryCleanupWantsLaterCheck", aWantsLaterDelay, nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY, "IdleMemoryCleanupWantsLaterCheck"); } - sIdleMemoryCleanupWantsLaterScheduled = true; + if (NS_SUCCEEDED(timerInitOK)) { + sIdleMemoryCleanupWantsLaterScheduled = true; + } else { + // Under normal conditions, we would never expect this to fail. + MOZ_ASSERT_UNREACHABLE("ScheduleWantsLaterTimer could not create the timer."); + // If we were not able to create/init the timer, we will retry the next + // time the main thread is about to fall idle. But if we were to stay + // idle, we would never purge without this emergency purge. + jemalloc_free_dirty_pages(); + } } void ScheduleIdleMemoryCleanup(uint32_t aWantsLaterDelay) {