diff options
359 files changed, 23749 insertions, 13412 deletions
diff --git a/.gitignore b/.gitignore index 19a82fb4b6..d3ac3bbc52 100644 --- a/.gitignore +++ b/.gitignore @@ -52,7 +52,6 @@ core.* /autom4te.cache /build-stamp /compile -/config.rust /configure /Doxyfile /orconfig.h @@ -63,7 +62,6 @@ core.* /config.guess /config.sub /conftest* -/link_rust.sh /micro-revision.* /patch-stamp /stamp-h @@ -161,12 +159,6 @@ core.* /src/app/tor-cov /src/app/tor-cov.exe -# /src/rust -/src/rust/.cargo/config -/src/rust/.cargo/registry -/src/rust/target -/src/rust/registry - # /src/test /src/test/Makefile /src/test/Makefile.in diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 284f7d858c..d033b7ca30 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -188,18 +188,6 @@ debian-tracing: DISTCHECK: "yes" script: - ./scripts/ci/ci-driver.sh - # Ensure that we only run tracing when it's implemented. - # - # Once versions before 0.4.5 are obsolete, we can remove this test. - rules: - # This first "if" check prevents us from running a duplicate version of - # this pipeline whenever we push and create an MR. I don't understand why - # it is necessary, though the following URL purports to explain: - # - # https://docs.gitlab.com/ee/ci/yaml/#prevent-duplicate-pipelines - - if: '$CI_PIPELINE_SOURCE == "push"' - exists: - - src/lib/trace/trace_sys.c ##### # No-authority mode @@ -220,18 +208,6 @@ debian-disable-relay: DISABLE_RELAY: "yes" script: - ./scripts/ci/ci-driver.sh - # Ensure that we only run tracing when it's implemented. - # - # Once versions before 0.4.3 are obsolete, we can remove this test. - rules: - # This first "if" check prevents us from running a duplicate version of - # this pipeline whenever we push and create an MR. I don't understand why - # it is necessary, though the following URL purports to explain: - # - # https://docs.gitlab.com/ee/ci/yaml/#prevent-duplicate-pipelines - - if: '$CI_PIPELINE_SOURCE == "push"' - exists: - - src/feature/relay/relay_stub.c ##### # NSS check on debian diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 8f80405650..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "src/ext/rust"] - path = src/ext/rust - url = https://git.torproject.org/tor-rust-dependencies diff --git a/.travis.yml b/.travis.yml index aaca3a7368..ceec8169c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,13 +2,6 @@ language: c cache: ccache: true - ## cargo: true - directories: - - $HOME/.cargo - ## caching CARGO_TARGET_DIR actually slows down the build over time, - ## because old build products are never deleted. - ## where we point CARGO_TARGET_DIR in all our cargo invocations - #- $TRAVIS_BUILD_DIR/src/rust/target compiler: - gcc @@ -29,8 +22,6 @@ env: - HARDENING_OPTIONS="--enable-all-bugs-are-fatal --enable-expensive-hardening" ## We turn off asciidoc by default, because it's slow - ASCIIDOC_OPTIONS="--disable-asciidoc" - ## Our default rust version is the minimum supported version - - RUST_VERSION="1.31.0" ## Turn off tor's sandbox in chutney, until we fix sandbox errors that are ## triggered by Ubuntu Xenial and Bionic. See #32722. - CHUTNEY_TOR_SANDBOX="0" @@ -68,10 +59,6 @@ matrix: ## We check disable module dirauth - env: MODULES_OPTIONS="--disable-module-dirauth" HARDENING_OPTIONS="--enable-expensive-hardening" - ## We run rust on Linux, because it's faster than rust on macOS - ## We check rust offline - - env: RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true - ## We check NSS ## Use -std=gnu99 to turn off some newer features, and maybe turn on some ## extra gcc warnings? @@ -86,14 +73,6 @@ matrix: ## We run `make doxygen` without `make check`. - env: SKIP_MAKE_CHECK="yes" DOXYGEN="yes" - ## macOS builds are very slow, and we have a limited number of - ## concurrent macOS jobs. We're not actively developing Rust, so it is - ## the lowest priority. - ## We run rust on macOS, because we have seen macOS rust failures before - #- env: RUST_VERSION="nightly" RUST_OPTIONS="--enable-rust --enable-cargo-online-mode" - # compiler: clang - # os: osx - ## Allow the build to report success (with non-required sub-builds ## continuing to run) if all required sub-builds have succeeded. fast_finish: true @@ -101,16 +80,6 @@ matrix: ## Careful! We use global envs, which makes it hard to allow failures by env: ## https://docs.travis-ci.com/user/customizing-the-build#matching-jobs-with-allow_failures allow_failures: - ## macOS rust and chutney are very slow, so we let the build finish before - ## they are done. We'd like to fast finish, but still eventually show - ## any failures in the build status. But Travis doesn't have that ability. - - ## Since this job is disabled, there's not much point having an exception - ## for it - #- env: RUST_VERSION="nightly" RUST_OPTIONS="--enable-rust --enable-cargo-online-mode" - # compiler: clang - # os: osx - ## Since we're actively developing IPv6, we want to require the IPv6 ## chutney tests #- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes" @@ -187,8 +156,6 @@ osx_image: xcode11.2 before_install: ## Set pipefail: we use pipes - set -o pipefail || echo "pipefail failed" - ## Create empty rust directories for non-Rust builds, so caching succeeds - - if [[ "$RUST_OPTIONS" == "" ]]; then mkdir -p $HOME/.cargo $TRAVIS_BUILD_DIR/src/rust/target; fi install: ## If we're on OSX, configure ccache (ccache is automatically installed and configured on Linux) @@ -200,13 +167,6 @@ install: - if [[ "$COVERAGE_OPTIONS" != "" ]]; then pip install --user cpp-coveralls; fi ## If we're on OSX, and using asciidoc, configure asciidoc - if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi - ## If we're using Rust, download rustup - - if [[ "$RUST_OPTIONS" != "" ]]; then curl -Ssf -o rustup.sh https://sh.rustup.rs; fi - ## Install the stable channels of rustc and cargo and setup our toolchain environment - - if [[ "$RUST_OPTIONS" != "" ]]; then sh rustup.sh -y --default-toolchain $RUST_VERSION; fi - - if [[ "$RUST_OPTIONS" != "" ]]; then source $HOME/.cargo/env; fi - ## If we're testing rust builds in offline-mode, then set up our vendored dependencies - - if [[ "$TOR_RUST_DEPENDENCIES" == "true" ]]; then export TOR_RUST_DEPENDENCIES=$PWD/src/ext/rust/crates; fi ## If we're running chutney, install it. - if [[ "$CHUTNEY" != "" ]]; then git clone --depth 1 https://github.com/torproject/chutney.git ; export CHUTNEY_PATH="$(pwd)/chutney"; fi ## If we're running stem, install it. @@ -215,13 +175,6 @@ install: ## Finally, list installed package versions - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dpkg-query --show; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew list --versions; fi - ## Get some info about rustup, rustc and cargo - - if [[ "$RUST_OPTIONS" != "" ]]; then which rustup; fi - - if [[ "$RUST_OPTIONS" != "" ]]; then which rustc; fi - - if [[ "$RUST_OPTIONS" != "" ]]; then which cargo; fi - - if [[ "$RUST_OPTIONS" != "" ]]; then rustup --version; fi - - if [[ "$RUST_OPTIONS" != "" ]]; then rustc --version; fi - - if [[ "$RUST_OPTIONS" != "" ]]; then cargo --version; fi ## Get python version - python --version ## If we're running chutney, show the chutney commit @@ -240,7 +193,7 @@ script: # Skip test_rebind and test_include on macOS - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export TOR_SKIP_TEST_REBIND=true; export TOR_SKIP_TEST_INCLUDE=true; fi - ./autogen.sh - - CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS $RUST_OPTIONS --enable-fatal-warnings --disable-silent-rules" + - CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS --enable-fatal-warnings --disable-silent-rules" - echo "Configure flags are $CONFIGURE_FLAGS CC=\"$CC $C_DIALECT_OPTIONS\"" - ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS"; ## We run `make check` because that's what https://jenkins.torproject.org does. @@ -270,9 +223,6 @@ after_failure: before_cache: ## Delete all gcov files. - if [[ "$COVERAGE_OPTIONS" != "" ]]; then make reset-gcov; fi - ## Delete the cargo registry before caching .cargo, because it's cheaper to - ## download the registry and throw it away, rather than caching it - - rm -rf $HOME/.cargo/registry notifications: irc: @@ -1,3 +1,1331 @@ +Changes in version 0.4.7.5-alpha - 2022-03-25 + This version contains, of what we hope, the final work for congestion + control paving the way to the stable version. We expect this to be the last + alpha version of the 0.4.7.x series. Mostly minor bugfixes except one major + bugfix that changes how Tor behaves with DNS timeouts for Exit relays. As + always with an alpha, we recommend all relay operators to upgrade from + previous alpha to this one. + + o Major bugfixes (onion service, congestion control): + - Fix the onion service upload case where the congestion control + parameters were not added to the right object. Fixes bug 40586; + bugfix on 0.4.7.4-alpha. + + o Major bugfixes (relay, DNS): + - Lower the DNS timeout from 3 attempts at 5 seconds each to 2 + attempts at 1 seconds each. Two new consensus parameters were + added to control these values. This change should improve observed + performance under DNS load; see ticket for more details. Fixes bug + 40312; bugfix on 0.3.5.1-alpha. + + o Minor features (control port): + - Provide congestion control fields on CIRC_BW and STREAM control + port events, for use by sbws. Closes ticket 40568. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on March 25, 2022. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2022/03/25. + + o Minor bugfixes (DNSPort, dormant mode): + - A request on the DNSPort now wakes up a dormant tor. Fixes bug + 40577; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (metrics port, onion service): + - Fix the metrics with a port label to be unique. Before this, all + ports of an onion service would be on the same line which violates + the Prometheus rules of unique labels. Fixes bug 40581; bugfix + on 0.4.5.1-alpha. + + o Minor bugfixes (onion service congestion control): + - Avoid a non-fatal assertion failure in the case where we fail to + set up congestion control on a rendezvous circuit. This could + happen naturally if a cache entry expired at an unexpected time. + Fixes bug 40576; bugfix on 0.4.7.4-alpha. + + o Minor bugfixes (onion service, client): + - Fix a rare but fatal assertion failure due to a guard subsystem + recursion triggered by the onion service client. Fixes bug 40579; + bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (relay, overload): + - Decide whether to signal overload based on a fraction and + assessment period of ntor handshake drops. Previously, a single + drop could trigger an overload state, which caused many false + positives. Fixes bug 40560; bugfix on 0.4.7.1-alpha. + + +Changes in version 0.4.7.4-alpha - 2022-02-25 + This version contains the negotiation congestion control work which is the + final part needed before going stable. There are also various bugfixes + including two major ones detailed below. Last, the Exit notice page layout + has been modernized but the text is unchanged. We recommend that all relay + operators running any previous alpha upgrade to this one. + + o Major features (relay, client, onion services): + - Implement RTT-based congestion control for exits and onion + services, from Proposal 324. Disabled by default. Enabled by the + 'cc_alg' consensus parameter. Closes ticket 40444. + + o Major bugfixes (client): + - Stop caching TCP connect failures to relays/bridges when we + initiated the connection as a client. Now we only cache connect + failures as a relay or bridge when we initiated them because of an + EXTEND request. Declining to re-attempt the client-based + connections could cause problems when we lose connectivity and try + to reconnect. Fixes bug 40499; bugfix on 0.3.3.4-alpha. + + o Major bugfixes (relay, overload): + - Do not trigger a general overload on DNS timeout. Even after + fixing 40527, some code remained that triggered the overload. + Fixes bug 40564; bugfix on 0.4.7.1-alpha. + + o Minor feature (authority, relay): + - Reject End-Of-Life relays running version 0.3.5.x. Closes + ticket 40559. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on February 25, 2022. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2022/02/25. + + o Minor bugfix (logging): + - Update a log notice dead URL to a working one. Fixes bug 40544; + bugfix on 0.3.5.1-alpha. + + o Minor bugfix (relay): + - Remove the HSDir and HSIntro onion service v2 protocol versions so + relay stop advertising that they support them. Fixes bug 40509; + bugfix on 0.3.5.17. + + o Minor bugfixes (cell scheduling): + - Avoid writing empty payload with NSS write. + - Don't attempt to write 0 bytes after a cell scheduling loop. No + empty payload was put on the wire. Fixes bug 40548; bugfix + on 0.3.5.1-alpha. + + o Minor bugfixes (compilation): + - Resume being able to build on old / esoteric gcc versions. Fixes + bug 40550; bugfix on 0.4.7.1-alpha. + + o Minor bugfixes (compiler warnings): + - Fix couple compiler warnings on latest Ubuntu Jammy. Fixes bug + 40516; bugfix on 0.3.5.1-alpha. + + o Documentation: + - Provide an improved version of the tor-exit-notice.html file for + exit relays to use as a landing page. The text is unchanged, but + the page design and layout are significantly modernized, and + several links are fixed. Patch from "n_user"; closes ticket 40529. + + +Changes in version 0.4.6.10 - 2022-02-04 + This version contains minor bugfixes but one in particular is that relays + don't advertise onion service v2 support at the protocol version level. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on February 04, 2022. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2022/02/04. + + o Minor bugfix (logging): + - Update a log notice dead URL to a working one. Fixes bug 40544; + bugfix on 0.3.5.1-alpha. + + o Minor bugfix (relay): + - Remove the HSDir and HSIntro onion service v2 protocol versions so + relay stop advertising that they support them. Fixes bug 40509; + bugfix on 0.3.5.17. + + o Minor bugfixes (MetricsPort, Prometheus): + - Add double quotes to the label values of the onion service + metrics. Fixes bug 40552; bugfix on 0.4.5.1-alpha. + + +Changes in version 0.4.5.12 - 2022-02-04 + This version contains mostly minor bugfixes for which you can find the + details below. The previous release (0.4.5.11) was suppose to update the + GeoIP and fallbackdir lists but a problem in our release pipeline prevented + those files to be updated correctly. Thus, this release regenerates up to + date lists. Furthermore, another fix to highlight is that relays don't + advertise onion service v2 support at the protocol version level. + + o Minor feature (reproducible build): + - The repository can now build reproducible tarballs which adds the + build command "make dist-reprod" for that purpose. Closes + ticket 26299. + + o Minor features (compilation): + - Give an error message if trying to build with a version of + LibreSSL known not to work with Tor. (There's an incompatibility + with LibreSSL versions 3.2.1 through 3.4.0 inclusive because of + their incompatibility with OpenSSL 1.1.1's TLSv1.3 APIs.) Closes + ticket 40511. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on February 04, 2022. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2022/02/04. + + o Minor bugfix (logging): + - Update a log notice dead URL to a working one. Fixes bug 40544; + bugfix on 0.3.5.1-alpha. + + o Minor bugfix (relay): + - Remove the HSDir and HSIntro onion service v2 protocol versions so + relay stop advertising that they support them. Fixes bug 40509; + bugfix on 0.3.5.17. + + o Minor bugfixes (compilation): + - Fix a compilation error when trying to build Tor with a compiler + that does not support expanding statically initialized const + values in macro's. Fixes bug 40410; bugfix on 0.4.5.1-alpha + - Fix our configuration logic to detect whether we had OpenSSL 3: + previously, our logic was reversed. This has no other effect than + to change whether we suppress deprecated API warnings. Fixes bug + 40429; bugfix on 0.3.5.13. + + o Minor bugfixes (MetricsPort, Prometheus): + - Add double quotes to the label values of the onion service + metrics. Fixes bug 40552; bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (relay): + - Reject IPv6-only DirPorts. Our reachability self-test forces + DirPorts to be IPv4, but our configuration parser allowed them to + be IPv6-only, which led to an assertion failure. Fixes bug 40494; + bugfix on 0.4.5.1-alpha. + + +Changes in version 0.4.7.3-alpha - 2021-12-15 + This third alpha release of the 0.4.7.x series fixes several bugs including + two major ones affecting Bridges and Relays (see below). If you are running + an earlier 0.4.7.x version, you should upgrade to this version. + + o Major bugfixes (bridges): + - Make Tor work reliably again when you have multiple bridges + configured and one or more of them are unreachable. The problem + came because we require that we have bridge descriptors for both + of our first two bridges (else we refuse to try to connect), but + in some cases we would wait three hours before trying to fetch + these missing descriptors, and/or never recover when we do try to + fetch them. Fixes bugs 40396 and 40495; bugfix on 0.3.0.5-rc + and 0.3.2.1-alpha. + + o Major bugfixes (relay, overload): + - Change the MetricsPort DNS "timeout" label to be "tor_timeout" in + order to indicate that this was a DNS timeout from tor perspective + and not the DNS server itself. + - Deprecate overload_dns_timeout_period_secs and + overload_dns_timeout_scale_percent consensus parameters as well. + They were used to assess the overload state which is no more now. + - Don't make Tor DNS timeout trigger an overload general state. + These timeouts are different from DNS server timeout. They have to + be seen as timeout related to UX and not because of a network + problem. Fixes bug 40527; bugfix on 0.4.6.1-alpha. + + o Minor feature (reproducible build): + - The repository can now build reproducible tarballs which adds the + build command "make dist-reprod" for that purpose. Closes + ticket 26299. + + o Minor features (compilation): + - Give an error message if trying to build with a version of + LibreSSL known not to work with Tor. (There's an incompatibility + with LibreSSL versions 3.2.1 through 3.4.0 inclusive because of + their incompatibility with OpenSSL 1.1.1's TLSv1.3 APIs.) Closes + ticket 40511. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on December 15, 2021. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/12/15. + + o Minor features (portability): + - Try to prevent a compiler warning about printf arguments that + could sometimes occur on MSYS2 depending on the configuration. + Closes ticket 40355. + + o Minor bugfix (pluggable transport): + - Do not kill a managed proxy if one of its transport configurations + emits a method error. Instead log a warning and continue processing + method arguments. Fixes bug 7362; bugfix on 0.2.3.6-alpha. + + o Minor bugfixes (bridges): + - When we don't yet have a descriptor for one of our bridges, + disable the entry guard retry schedule on that bridge. The entry + guard retry schedule and the bridge descriptor retry schedule can + conflict, e.g. where we mark a bridge as "maybe up" yet we don't + try to fetch its descriptor yet, leading Tor to wait (refusing to + do anything) until it becomes time to fetch the descriptor. Fixes + bug 40497; bugfix on 0.3.0.3-alpha. + + o Minor bugfixes (compilation): + - Fix our configuration logic to detect whether we had OpenSSL 3: + previously, our logic was reversed. This has no other effect than + to change whether we suppress deprecated API warnings. Fixes bug + 40429; bugfix on 0.3.5.13. + + o Minor bugfixes (controller, path bias): + - When a circuit's path is specified, in full or in part, from the + controller API, do not count that circuit towards our path-bias + calculations. (Doing so was incorrect, since we cannot tell + whether the controller is selecting relays randomly.) Resolves a + "Bug" warning. Fixes bug 40515; bugfix on 0.2.4.10-alpha. + + o Minor bugfixes (logging): + - When we no longer have enough directory information to use the + network, we would log a notice-level message -- but we would not + reliably log a message when we recovered and resumed using the + network. Now make sure there is always a corresponding message + about recovering. Fixes bug 40496; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (performance, DoS): + - Fix one case of a not-especially viable denial-of-service attack + found by OSS-Fuzz in our consensus-diff parsing code. This attack + causes a lot small of memory allocations and then immediately + frees them: this is only slow when running with all the sanitizers + enabled. Fixes one case of bug 40472; bugfix on 0.3.1.1-alpha. + + o Minor bugfixes (relay): + - Reject IPv6-only DirPorts. Our reachability self-test forces + DirPorts to be IPv4, but our configuration parser allowed them to + be IPv6-only, which led to an assertion failure. Fixes bug 40494; + bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (sandbox): + - Fix the sandbox on i386 by modifying it to allow the + "clock_gettime64" and "statx" system calls and to filter the + "chown32" and "stat64" system calls in place of "chown" and + "stat", respectively. Fixes bug 40505; bugfix on 0.2.5.4-alpha. + + o Documentation (man, relay): + - Missing "OverloadStatistics" in tor.1 manpage. Fixes bug 40504; + bugfix on 0.4.6.1-alpha. + + +Changes in version 0.4.6.9 - 2021-12-15 + This version fixes several bugs from earlier versions of Tor. One important + piece is the removal of DNS timeout metric from the overload general signal. + See below for more details. + + o Major bugfixes (relay, overload): + - Don't make Tor DNS timeout trigger an overload general state. + These timeouts are different from DNS server timeout. They have to + be seen as timeout related to UX and not because of a network + problem. Fixes bug 40527; bugfix on 0.4.6.1-alpha. + + o Minor feature (reproducible build): + - The repository can now build reproducible tarballs which adds the + build command "make dist-reprod" for that purpose. Closes + ticket 26299. + + o Minor features (compilation): + - Give an error message if trying to build with a version of + LibreSSL known not to work with Tor. (There's an incompatibility + with LibreSSL versions 3.2.1 through 3.4.0 inclusive because of + their incompatibility with OpenSSL 1.1.1's TLSv1.3 APIs.) Closes + ticket 40511. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on December 15, 2021. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/12/15. + + o Minor bugfixes (compilation): + - Fix our configuration logic to detect whether we had OpenSSL 3: + previously, our logic was reversed. This has no other effect than + to change whether we suppress deprecated API warnings. Fixes bug + 40429; bugfix on 0.3.5.13. + + o Minor bugfixes (relay): + - Reject IPv6-only DirPorts. Our reachability self-test forces + DirPorts to be IPv4, but our configuration parser allowed them to + be IPv6-only, which led to an assertion failure. Fixes bug 40494; + bugfix on 0.4.5.1-alpha. + + o Documentation (man, relay): + - Missing "OverloadStatistics" in tor.1 manpage. Fixes bug 40504; + bugfix on 0.4.6.1-alpha. + + +Changes in version 0.4.7.2-alpha - 2021-10-26 + This second alpha release of the 0.4.7.x series adds two major + features: congestion control (prop324) for network performance, and + the MiddleOnly flag (prop335) voted by the authorities to pin relays + to the middle position for various network health reasons. This + release also fixes numerous bugs. + + The congestion control feature, detailed in proposal 324, still needs + more work before we can enable it by default. It is currently in its + testing and tuning phase which means that you should expect more + 0.4.7.x alphas as congestion control gets stabilized and tuned for + optimal performance. And so, at this release, it can not be used + without a custom patch. + + o Major features (congestion control): + - Implement support for flow control over congestion controlled + circuits. This work comes from proposal 324. Closes ticket 40450. + + o Major features (directory authority): + - Add a new consensus method to handle MiddleOnly specially. When + enough authorities are using this method, then any relay tagged + with the MiddleOnly flag will have its Exit, Guard, HSDir, and + V2Dir flags automatically cleared, and will have its BadExit flag + automatically set. Implements part of proposal 335. + - Authorities can now be configured to label relays as "MiddleOnly". + When voting for this flag, authorities automatically vote against + Exit, Guard, HSDir, and V2Dir; and in favor of BadExit. Implements + part of proposal 335. Based on a patch from Neel Chauhan. + + o Major bugfix (relay, metrics): + - On the MetricsPort, the DNS error statistics are not reported by + record type ("record=...") anymore due to a libevent bug + (https://github.com/libevent/libevent/issues/1219). Fixes bug + 40490; bugfix on 0.4.7.1-alpha. + + o Major bugfixes (relay, overload state): + - Relays report the general overload state for DNS timeout errors + only if X% of all DNS queries over Y seconds are errors. Before + that, it only took 1 timeout to report the overload state which + was just too low of a threshold. The X and Y values are 1% and 10 + minutes respectively but they are also controlled by consensus + parameters. Fixes bug 40491; bugfix on 0.4.6.1-alpha. + + o Minor feature (authority, relay): + - Reject End-Of-Life relays running version 0.4.2.x, 0.4.3.x, + 0.4.4.x and 0.4.5 alphas/rc. Closes ticket 40480. + + o Minor feature (onion service v2): + - Onion service v2 addresses are now not recognized anymore by tor + meaning a bad hostname is returned when attempting to pass it on a + SOCKS connection. No more deprecation log is emitted client side. + Closes ticket 40476. + - See https://blog.torproject.org/v2-deprecation-timeline for + details on how to transition from v2 to v3. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor features (logging, heartbeat): + - When a relay receives a cell that isn't encrypted properly for it, + but the relay is the last hop on the circuit, the relay now counts + how many cells of this kind it receives, on how many circuits, and + reports this information in the log. Previously, we'd log each + cell at PROTOCOL_WARN level, which is far too verbose to be + useful. Fixes part of ticket 40400. + + o Minor features (testing): + - We now have separate fuzzers for the inner layers of v3 onion + service descriptors, to prevent future bugs like 40392. Closes + ticket 40488. + + o Minor bugfixes (compilation): + - Fix compilation error when __NR_time is not defined. Fixes bug + 40465; bugfix on 0.2.5.5-alpha. Patch by Daniel Pinto. + + o Minor bugfixes (dirauth, bandwidth scanner): + - Add the AuthDirDontVoteOnDirAuthBandwidth dirauth config parameter + to avoid voting on bandwidth scanner weights to v3 directory + authorities. Fixes bug 40471; bugfix on 0.2.2.1-alpha. Patch by + Neel Chauhan. + + o Minor bugfixes (fragile-hardening, sandbox): + - When building with --enable-fragile-hardening, add or relax Linux + seccomp rules to allow AddressSanitizer to execute normally if the + process terminates with the sandbox active. This has the side + effect of disabling the filtering of file- and directory-open + requests on most systems and dilutes the effectiveness of the + sandbox overall, as a wider range of system calls must be + permitted. Fixes bug 11477; bugfix on 0.2.5.4-alpha. + + o Minor bugfixes (logging): + - If a channel has never received or transmitted a cell, or seen a + client, do not calculate time diffs against 1/1/1970 but log a + better prettier message. Fixes bug 40182; bugfix on 0.2.4.4. + + o Minor bugfixes (onion service): + - Fix a warning BUG that would occur often on heavily loaded onion + service leading to filling the logs with useless warnings. Fixes + bug 34083; bugfix on 0.3.2.1-alpha. + + o Minor bugfix (CI, onion service): + - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (onion service, config): + - Fix a memory leak for a small config line string that could occur + if the onion service failed to be configured from file properly. + Fixes bug 40484; bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (onion service, TROVE-2021-008): + - Only log v2 access attempts once total, in order to not pollute + the logs with warnings and to avoid recording the times on disk + when v2 access was attempted. Note that the onion address was + _never_ logged. This counts as a Low-severity security issue. + Fixes bug 40474; bugfix on 0.4.5.8. + - Note that due to #40476 which removes v2 support entirely, this + log line is not emitted anymore. We still mention this in the + changelog because it is a Low-severity TROVE. + + o Minor bugfixes (usability): + - Do not log "RENDEZVOUS1 cell with unrecognized rendezvous cookie" + at LOG_PROTOCOL_WARN; instead log it at DEBUG. This warning can + happen naturally if a client gives up on a rendezvous circuit + after sending INTRODUCE1. Fixes part of bug 40400; bugfix + on 0.1.1.13-alpha. + - Do not log "circuit_receive_relay_cell failed" at + LOG_PROTOCOL_WARN; instead log it at DEBUG. In every case where we + would want to log this as a protocol warning, we are already + logging another warning from inside circuit_receive_relay_cell. + Fixes part of bug 40400; bugfix on 0.1.1.9-alpha. + + o Code simplification and refactoring: + - Lower the official maximum for "guard-extreme-restriction-percent" + to 100. This has no effect on when the guard code will generate a + warning, but it makes the intent of the option clearer. Fixes bug + 40486; bugfix on 0.3.0.1-alpha. + + o Testing: + - Add unit tests for the Linux seccomp sandbox. Resolves + issue 16803. + + o Code simplification and refactoring (rust): + - Remove Rust support and its associated code. It is unsupported and + Rust focus should be shifted to arti. Closes ticket 40469. + + o Testing (CI, chutney): + - Bump the data size that chutney transmits to 5MBytes in order to + trigger the flow control and congestion window code. Closes + ticket 40485. + + +Changes in version 0.4.6.8 - 2021-10-26 + This version fixes several bugs from earlier versions of Tor. One + highlight is a fix on how we track DNS timeouts to report general + relay overload. + + o Major bugfixes (relay, overload state): + - Relays report the general overload state for DNS timeout errors + only if X% of all DNS queries over Y seconds are errors. Before + that, it only took 1 timeout to report the overload state which + was just too low of a threshold. The X and Y values are 1% and 10 + minutes respectively but they are also controlled by consensus + parameters. Fixes bug 40491; bugfix on 0.4.6.1-alpha. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor features (testing): + - On a testing network, relays can now use the + TestingMinTimeToReportBandwidth option to change the smallest + amount of time over which they're willing to report their observed + maximum bandwidth. Previously, this was fixed at 1 day. For + safety, values under 2 hours are only supported on testing + networks. Part of a fix for ticket 40337. + - Relays on testing networks no longer rate-limit how frequently + they are willing to report new bandwidth measurements. Part of a + fix for ticket 40337. + - Relays on testing networks now report their observed bandwidths + immediately from startup. Previously, they waited until they had + been running for a full day. Closes ticket 40337. + + o Minor bugfix (onion service): + - Do not flag an HSDir as non-running in case the descriptor upload + or fetch fails. An onion service closes pending directory + connections before uploading a new descriptor which can thus lead + to wrongly flagging many relays and thus affecting circuit building + path selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha. + - Improve logging when a bad HS version is given. Fixes bug 40476; + bugfix on 0.4.6.1-alpha. + + o Minor bugfix (CI, onion service): + - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (compatibility): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + o Minor bugfixes (onion service, TROVE-2021-008): + - Only log v2 access attempts once total, in order to not pollute + the logs with warnings and to avoid recording the times on disk + when v2 access was attempted. Note that the onion address was + _never_ logged. This counts as a Low-severity security issue. + Fixes bug 40474; bugfix on 0.4.5.8. + + +Changes in version 0.4.5.11 - 2021-10-26 + The major change in this version is that v2 onion services are now + disabled at the client, service, and relay: any Tor nodes running this + version and onward will stop supporting v2 onion services. This is the + last step in the long deprecation process of v2 onion services. + Everyone running an earlier version, whether as a client, a relay, or + an onion service, should upgrade to Tor 0.3.5.17, 0.4.5.11, + or 0.4.6.8. + + o Major feature (onion service v2): + - See https://blog.torproject.org/v2-deprecation-timeline for + details on how to transition from v2 to v3. + - The control port commands HSFETCH and HSPOST no longer allow + version 2, and it is no longer possible to create a v2 service + with ADD_ONION. + - Tor no longer allows creating v2 services, or connecting as a + client to a v2 service. Relays will decline to be a v2 HSDir or + introduction point. This effectively disables onion service + version 2 Tor-wide. Closes ticket 40476. + + o Minor features (bridge, backport from 0.4.6.8): + - We now announce the URL to Tor's new bridge status at + https://bridges.torproject.org/ when Tor is configured to run as a + bridge relay. Closes ticket 30477. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor features (logging, diagnostic, backport from 0.4.6.5): + - Log decompression failures at a higher severity level, since they + can help provide missing context for other warning messages. We + rate-limit these messages, to avoid flooding the logs if they + begin to occur frequently. Closes ticket 40175. + + o Minor features (testing, backport from 0.4.6.8): + - On a testing network, relays can now use the + TestingMinTimeToReportBandwidth option to change the smallest + amount of time over which they're willing to report their observed + maximum bandwidth. Previously, this was fixed at 1 day. For + safety, values under 2 hours are only supported on testing + networks. Part of a fix for ticket 40337. + - Relays on testing networks no longer rate-limit how frequently + they are willing to report new bandwidth measurements. Part of a + fix for ticket 40337. + - Relays on testing networks now report their observed bandwidths + immediately from startup. Previously, they waited until they had + been running for a full day. Closes ticket 40337. + + o Minor bugfix (CI, onion service): + - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; + bugfix on 0.3.2.1-alpha. + + o Minor bugfix (onion service, backport from 0.4.6.8): + - Do not flag an HSDir as non-running in case the descriptor upload + or fetch fails. An onion service closes pending directory + connections before uploading a new descriptor which can thus lead + to wrongly flagging many relays and thus affecting circuit building + path selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha. + + o Minor bugfixes (compatibility, backport from 0.4.6.8): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + o Minor bugfixes (consensus handling, backport from 0.4.6.4-rc): + - Avoid a set of bugs that could be caused by inconsistently + preferring an out-of-date consensus stored in a stale directory + cache over a more recent one stored on disk as the latest + consensus. Fixes bug 40375; bugfix on 0.3.1.1-alpha. + + o Minor bugfixes (onion service, TROVE-2021-008, backport from 0.4.6.8): + - Only log v2 access attempts once total, in order to not pollute + the logs with warnings and to avoid recording the times on disk + when v2 access was attempted. Note that the onion address was + _never_ logged. This counts as a Low-severity security issue. + Fixes bug 40474; bugfix on 0.4.5.8. + + +Changes in version 0.3.5.17 - 2021-10-26 + The major change in this version is that v2 onion services are now + disabled at the client, service, and relay: any Tor nodes running this + version and onward will stop supporting v2 onion services. This is the + last step in the long deprecation process of v2 onion services. + Everyone running an earlier version, whether as a client, a relay, or + an onion service, should upgrade to Tor 0.3.5.17, 0.4.5.11, + or 0.4.6.8. + + o Major feature (onion service v2, backport from 0.4.5.11): + - See https://blog.torproject.org/v2-deprecation-timeline for + details on how to transition from v2 to v3. + - The control port commands HSFETCH and HSPOST no longer allow + version 2, and it is no longer possible to create a v2 service + with ADD_ONION. + - Tor no longer allows creating v2 services, or connecting as a + client to a v2 service. Relays will decline to be a v2 HSDir or + introduction point. This effectively disables onion service + version 2 Tor-wide. Closes ticket 40476. + + o Minor features (bridge, backport from 0.4.6.8): + - We now announce the URL to Tor's new bridge status at + https://bridges.torproject.org/ when Tor is configured to run as a + bridge relay. Closes ticket 30477. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor bugfixes (compatibility, backport from 0.4.6.8): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + +Changes in version 0.4.7.1-alpha - 2021-09-17 + This version is the first alpha release of the 0.4.7.x series. One + major feature is Vanguards Lite, from proposal 333, to help mitigate + guard discovery attacks against onion services. It also includes + numerous bugfixes. + + o Major features (Proposal 332, onion services, guard selection algorithm): + - Clients and onion services now choose four long-lived "layer 2" + guard relays for use as the middle hop in all onion circuits. + These relays are kept in place for a randomized duration averaging + 1 week. This mitigates guard discovery attacks against clients and + short-lived onion services such as OnionShare. Long-lived onion + services that need high security should still use the Vanguards + addon (https://github.com/mikeperry-tor/vanguards). Closes ticket + 40363; implements proposal 333. + + o Minor features (bridge testing support): + - Let external bridge reachability testing tools discard cached + bridge descriptors when setting new bridges, so they can be sure + to get a clean reachability test. Implements ticket 40209. + + o Minor features (fuzzing): + - When building with --enable-libfuzzer, use a set of compiler flags + that works with more recent versions of the library. Previously we + were using a set of flags from 2017. Closes ticket 40407. + + o Minor features (testing configuration): + - When TestingTorNetwork is enabled, skip the permissions check on + hidden service directories. Closes ticket 40338. + - On a testing network, relays can now use the + TestingMinTimeToReportBandwidth option to change the smallest + amount of time over which they're willing to report their observed + maximum bandwidth. Previously, this was fixed at 1 day. For + safety, values under 2 hours are only supported on testing + networks. Part of a fix for ticket 40337. + - Relays on testing networks no longer rate-limit how frequently + they are willing to report new bandwidth measurements. Part of a + fix for ticket 40337. + - Relays on testing networks now report their observed bandwidths + immediately from startup. Previously, they waited until they had + been running for a full day. Closes ticket 40337. + + o Minor bugfixes (circuit padding): + - Don't send STOP circuit padding cells when the other side has + already shut down the corresponding padding machine. Fixes bug + 40435; bugfix on 0.4.0.1-alpha. + + o Minor bugfixes (compatibility): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + o Minor bugfixes (control, sandbox): + - Allows the control command SAVECONF to succeed when the seccomp + sandbox is enabled. Makes SAVECONF keep only one backup file, to + simplify implementation. Fixes bug 40317; bugfix on 0.2.5.4-alpha. + Patch by Daniel Pinto. + + o Minor bugfixes (heartbeat): + - Adjust the heartbeat log message about distinct clients to + consider the HeartbeatPeriod rather than a flat 6-hour delay. + Fixes bug 40330; bugfix on 0.2.6.3-alpha. + + o Minor bugfixes (logging, relay): + - Add spaces between the "and" when logging the "Your server has not + managed to confirm reachability for its" on dual-stack relays. + Fixes bug 40453; bugfix on 0.4.5.1-alpha. Patch by Neel Chauhan. + + o Minor bugfixes (onion service): + - Do not flag an HSDir as non-running in case the descriptor upload + or fetch fails. An onion service closes pending directory + connections before uploading a new descriptor which leads to + wrongly flagging many relays and thus affecting circuit path + selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha. + + o Minor bugfixes (statistics): + - Fix a fencepost issue when we check stability_last_downrated where + we called rep_hist_downrate_old_runs() twice. Fixes bug 40394; + bugfix on 0.2.0.5-alpha. Patch by Neel Chauhan. + + o Minor bugfixes (tests): + - Fix a bug that prevented some tests from running with the correct + names. Fixes bug 40365; bugfix on 0.4.3.1-alpha. + + o Documentation: + - Add links to original tor design paper and anonbib to + docs/HACKING/README.1st.md. Closes ticket 33742. Patch from + Emily Bones. + - Describe the "fingerprint-ed25519" file in the tor.1 man page. + Fixes bug 40467; bugfix on 0.4.3.1-alpha. Patch by Neel Chauhan. + + +Changes in version 0.4.6.7 - 2021-08-16 + This version fixes several bugs from earlier versions of Tor, + including one that could lead to a denial-of-service attack. Everyone + running an earlier version, whether as a client, a relay, or an onion + service, should upgrade to Tor 0.3.5.16, 0.4.5.10, or 0.4.6.7. + + o Major bugfixes (cryptography, security): + - Resolve an assertion failure caused by a behavior mismatch between + our batch-signature verification code and our single-signature + verification code. This assertion failure could be triggered + remotely, leading to a denial of service attack. We fix this issue + by disabling batch verification. Fixes bug 40078; bugfix on + 0.2.6.1-alpha. This issue is also tracked as TROVE-2021-007 and + CVE-2021-38385. Found by Henry de Valence. + + o Minor feature (fallbackdir): + - Regenerate fallback directories list. Close ticket 40447. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/08/12. + + o Minor bugfix (crypto): + - Disable the unused batch verification feature of ed25519-donna. + Fixes bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry + de Valence. + + o Minor bugfixes (onion service): + - Send back the extended SOCKS error 0xF6 (Onion Service Invalid + Address) for a v2 onion address. Fixes bug 40421; bugfix + on 0.4.6.2-alpha. + + o Minor bugfixes (relay): + - Reduce the compression level for data streaming from HIGH to LOW + in order to reduce CPU load on the directory relays. Fixes bug + 40301; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (timekeeping): + - Calculate the time of day correctly on systems where the time_t + type includes leap seconds. (This is not the case on most + operating systems, but on those where it occurs, our tor_timegm + function did not correctly invert the system's gmtime function, + which could result in assertion failures when calculating voting + schedules.) Fixes bug 40383; bugfix on 0.2.0.3-alpha. + + +Changes in version 0.4.5.10 - 2021-08-16 + This version fixes several bugs from earlier versions of Tor, + including one that could lead to a denial-of-service attack. Everyone + running an earlier version, whether as a client, a relay, or an onion + service, should upgrade to Tor 0.3.5.16, 0.4.5.10, or 0.4.6.7. + + o Major bugfixes (cryptography, security): + - Resolve an assertion failure caused by a behavior mismatch between + our batch-signature verification code and our single-signature + verification code. This assertion failure could be triggered + remotely, leading to a denial of service attack. We fix this issue + by disabling batch verification. Fixes bug 40078; bugfix on + 0.2.6.1-alpha. This issue is also tracked as TROVE-2021-007 and + CVE-2021-38385. Found by Henry de Valence. + + o Minor feature (fallbackdir): + - Regenerate fallback directories list. Close ticket 40447. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/08/12. + + o Minor features (testing): + - Enable the deterministic RNG for unit tests that covers the + address set bloomfilter-based API's. Fixes bug 40419; bugfix + on 0.3.3.2-alpha. + + o Minor bugfix (crypto, backport from 0.4.6.7): + - Disable the unused batch verification feature of ed25519-donna. + Fixes bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry + de Valence. + + o Minor bugfixes (relay, backport from 0.4.6.7): + - Reduce the compression level for data streaming from HIGH to LOW. + Fixes bug 40301; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (timekeeping, backport from 0.4.6.7): + - Calculate the time of day correctly on systems where the time_t + type includes leap seconds. (This is not the case on most + operating systems, but on those where it occurs, our tor_timegm + function did not correctly invert the system's gmtime function, + which could result in assertion failures when calculating voting + schedules.) Fixes bug 40383; bugfix on 0.2.0.3-alpha. + + o Minor bugfixes (warnings, portability, backport from 0.4.6.6): + - Suppress a strict-prototype warning when building with some + versions of NSS. Fixes bug 40409; bugfix on 0.3.5.1-alpha. + + +Changes in version 0.3.5.16 - 2021-08-16 + This version fixes several bugs from earlier versions of Tor, + including one that could lead to a denial-of-service attack. Everyone + running an earlier version, whether as a client, a relay, or an onion + service, should upgrade to Tor 0.3.5.16, 0.4.5.10, or 0.4.6.7. + + o Major bugfixes (cryptography, security): + - Resolve an assertion failure caused by a behavior mismatch between + our batch-signature verification code and our single-signature + verification code. This assertion failure could be triggered + remotely, leading to a denial of service attack. We fix this issue + by disabling batch verification. Fixes bug 40078; bugfix on + 0.2.6.1-alpha. This issue is also tracked as TROVE-2021-007 and + CVE-2021-38385. Found by Henry de Valence. + + o Minor feature (fallbackdir): + - Regenerate fallback directories list. Close ticket 40447. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/08/12. + + o Minor bugfix (crypto, backport from 0.4.6.7): + - Disable the unused batch verification feature of ed25519-donna. + Fixes bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry + de Valence. + + o Minor bugfixes (relay, backport from 0.4.6.7): + - Reduce the compression level for data streaming from HIGH to LOW. + Fixes bug 40301; bugfix on 0.3.5.1-alpha. + + +Changes in version 0.4.6.6 - 2021-06-30 + Tor 0.4.6.6 makes several small fixes on 0.4.6.5, including one that + allows Tor to build correctly on older versions of GCC. You should + upgrade to this version if you were having trouble building Tor + 0.4.6.5; otherwise, there is probably no need. + + o Minor bugfixes (compilation): + - Fix a compilation error when trying to build Tor with a compiler + that does not support const variables in static initializers. + Fixes bug 40410; bugfix on 0.4.6.5. + - Suppress a strict-prototype warning when building with some + versions of NSS. Fixes bug 40409; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (testing): + - Enable the deterministic RNG for unit tests that covers the + address set bloomfilter-based API's. Fixes bug 40419; bugfix + on 0.3.3.2-alpha. + + +Changes in version 0.4.5.9 - 2021-06-14 + Tor 0.4.5.9 fixes several security issues, including a + denial-of-service attack against onion service clients, and another + denial-of-service attack against relays. Everybody should upgrade to + one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + o Major bugfixes (security, backport from 0.4.6.5): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth, backport from 0.4.6.5): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service, backport from 0.4.6.5): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor features (compatibility, backport from 0.4.6.4-rc): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + o Minor bugfixes (control, sandbox, backport from 0.4.6.4-rc): + - Allow the control command SAVECONF to succeed when the seccomp + sandbox is enabled, and make SAVECONF keep only one backup file to + simplify implementation. Previously SAVECONF allowed a large + number of backup files, which made it incompatible with the + sandbox. Fixes bug 40317; bugfix on 0.2.5.4-alpha. Patch by + Daniel Pinto. + + o Minor bugfixes (metrics port, backport from 0.4.6.4-rc): + - Fix a bug that made tor try to re-bind() on an already open + MetricsPort every 60 seconds. Fixes bug 40370; bugfix + on 0.4.5.1-alpha. + + +Changes in version 0.4.4.9 - 2021-06-14 + Tor 0.4.4.9 fixes several security issues, including a + denial-of-service attack against onion service clients, and another + denial-of-service attack against relays. Everybody should upgrade to + one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + Note that the scheduled end-of-life date for the Tor 0.4.4.x series is + June 15. This is therefore the last release in its series. Everybody + still running 0.4.4.x should plan to upgrade to 0.4.5.x or later. + + o Major bugfixes (security, backport from 0.4.6.5): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth, backport from 0.4.6.5): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service, backport from 0.4.6.5): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor features (compatibility, backport from 0.4.6.4-rc): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (fallback directory list, backport from 0.4.6.2-alpha): + - Regenerate the list of fallback directories to contain a new set + of 200 relays. Closes ticket 40265. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + o Minor bugfixes (channel, DoS, backport from 0.4.6.2-alpha): + - Fix a non-fatal BUG() message due to a too-early free of a string, + when listing a client connection from the DoS defenses subsystem. + Fixes bug 40345; bugfix on 0.4.3.4-rc. + + o Minor bugfixes (compiler warnings, backport from 0.4.6.3-rc): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + +Changes in version 0.3.5.15 - 2021-06-14 + Tor 0.3.5.15 fixes several security issues, including a + denial-of-service attack against onion service clients, and another + denial-of-service attack against relays. Everybody should upgrade to + one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + o Major bugfixes (security, backport from 0.4.6.5): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth, backport from 0.4.6.5): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service, backport from 0.4.6.5): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor bugfixes (compiler warnings, backport from 0.4.6.3-rc): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + o Minor features (compatibility, backport from 0.4.6.4-rc): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (fallback directory list, backport from 0.4.6.2-alpha): + - Regenerate the list of fallback directories to contain a new set + of 200 relays. Closes ticket 40265. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + +Changes in version 0.4.6.5 - 2021-06-14 + Tor 0.4.6.5 is the first stable release in its series. The 0.4.6.x + series includes numerous features and bugfixes, including a significant + improvement to our circuit timeout algorithm that should improve + observed client performance, and a way for relays to report when they are + overloaded. + + This release also includes security fixes for several security issues, + including a denial-of-service attack against onion service clients, + and another denial-of-service attack against relays. Everybody should + upgrade to one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + Below are the changes since 0.4.6.4-rc. For a complete list of changes + since 0.4.5.8, see the ReleaseNotes file. + + o Major bugfixes (security): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + o Minor features (logging, diagnostic): + - Log decompression failures at a higher severity level, since they + can help provide missing context for other warning messages. We + rate-limit these messages, to avoid flooding the logs if they + begin to occur frequently. Closes ticket 40175. + + +Changes in version 0.4.6.4-rc - 2021-05-28 + Tor 0.4.6.4-rc fixes a few bugs from previous releases. This, we hope, + the final release candidate in its series: unless major new issues are + found, the next release will be stable. + + o Minor features (compatibility): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor bugfixes (consensus handling): + - Avoid a set of bugs that could be caused by inconsistently + preferring an out-of-date consensus stored in a stale directory + cache over a more recent one stored on disk as the latest + consensus. Fixes bug 40375; bugfix on 0.3.1.1-alpha. + + o Minor bugfixes (control, sandbox): + - Allow the control command SAVECONF to succeed when the seccomp + sandbox is enabled, and make SAVECONF keep only one backup file to + simplify implementation. Previously SAVECONF allowed a large + number of backup files, which made it incompatible with the + sandbox. Fixes bug 40317; bugfix on 0.2.5.4-alpha. Patch by + Daniel Pinto. + + o Minor bugfixes (metrics port): + - Fix a bug that made tor try to re-bind() on an already open + MetricsPort every 60 seconds. Fixes bug 40370; bugfix + on 0.4.5.1-alpha. + + o Removed features: + - Remove unneeded code for parsing private keys in directory + documents. This code was only used for client authentication in v2 + onion services, which are now unsupported. Closes ticket 40374. + + +Changes in version 0.4.5.8 - 2021-05-10 + Tor 0.4.5.8 fixes several bugs in earlier version, backporting fixes + from the 0.4.6.x series. + + o Minor features (compatibility, Linux seccomp sandbox, backport from 0.4.6.3-rc): + - Add a workaround to enable the Linux sandbox to work correctly + with Glibc 2.33. This version of Glibc has started using the + fstatat() system call, which previously our sandbox did not allow. + Closes ticket 40382; see the ticket for a discussion of trade-offs. + + o Minor features (compilation, backport from 0.4.6.3-rc): + - Make the autoconf script build correctly with autoconf versions + 2.70 and later. Closes part of ticket 40335. + + o Minor features (fallback directory list, backport from 0.4.6.2-alpha): + - Regenerate the list of fallback directories to contain a new set + of 200 relays. Closes ticket 40265. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/05/07. + + o Minor features (onion services): + - Add warning message when connecting to now deprecated v2 onion + services. As announced, Tor 0.4.5.x is the last series that will + support v2 onions. Closes ticket 40373. + + o Minor bugfixes (bridge, pluggable transport, backport from 0.4.6.2-alpha): + - Fix a regression that made it impossible start Tor using a bridge + line with a transport name and no fingerprint. Fixes bug 40360; + bugfix on 0.4.5.4-rc. + + o Minor bugfixes (build, cross-compilation, backport from 0.4.6.3-rc): + - Allow a custom "ar" for cross-compilation. Our previous build + script had used the $AR environment variable in most places, but + it missed one. Fixes bug 40369; bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (channel, DoS, backport from 0.4.6.2-alpha): + - Fix a non-fatal BUG() message due to a too-early free of a string, + when listing a client connection from the DoS defenses subsystem. + Fixes bug 40345; bugfix on 0.4.3.4-rc. + + o Minor bugfixes (compiler warnings, backport from 0.4.6.3-rc): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (controller, backport from 0.4.6.1-alpha): + - Fix a "BUG" warning that would appear when a controller chooses + the first hop for a circuit, and that circuit completes. Fixes bug + 40285; bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (onion service, client, memory leak, backport from 0.4.6.3-rc): + - Fix a bug where an expired cached descriptor could get overwritten + with a new one without freeing it, leading to a memory leak. Fixes + bug 40356; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (testing, BSD, backport from 0.4.6.2-alpha): + - Fix pattern-matching errors when patterns expand to invalid paths + on BSD systems. Fixes bug 40318; bugfix on 0.4.5.1-alpha. Patch by + Daniel Pinto. + + +Changes in version 0.4.6.3-rc - 2021-05-10 + Tor 0.4.6.3-rc is the first release candidate in its series. It fixes + a few small bugs from previous versions, and adds a better error + message when trying to use (no longer supported) v2 onion services. + + Though we anticipate that we'll be doing a bit more clean-up between + now and the stable release, we expect that our remaining changes will + be fairly simple. There will likely be at least one more release + candidate before 0.4.6.x is stable. + + o Major bugfixes (onion service, control port): + - Make the ADD_ONION command properly configure client authorization. + Before this fix, the created onion failed to add the client(s). + Fixes bug 40378; bugfix on 0.4.6.1-alpha. + + o Minor features (compatibility, Linux seccomp sandbox): + - Add a workaround to enable the Linux sandbox to work correctly + with Glibc 2.33. This version of Glibc has started using the + fstatat() system call, which previously our sandbox did not allow. + Closes ticket 40382; see the ticket for a discussion of trade-offs. + + o Minor features (compilation): + - Make the autoconf script build correctly with autoconf versions + 2.70 and later. Closes part of ticket 40335. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/05/07. + + o Minor features (onion services): + - Add a warning message when trying to connect to (no longer + supported) v2 onion services. Closes ticket 40373. + + o Minor bugfixes (build, cross-compilation): + - Allow a custom "ar" for cross-compilation. Our previous build + script had used the $AR environment variable in most places, but + it missed one. Fixes bug 40369; bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (compiler warnings): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (logging, relay): + - Emit a warning if an Address is found to be internal and tor can't + use it. Fixes bug 40290; bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (onion service, client, memory leak): + - Fix a bug where an expired cached descriptor could get overwritten + with a new one without freeing it, leading to a memory leak. Fixes + bug 40356; bugfix on 0.3.5.1-alpha. + + Changes in version 0.4.6.2-alpha - 2021-04-15 Tor 0.4.6.2-alpha is the second alpha in its series. It fixes several small bugs in previous releases, and solves other issues that had @@ -675,7 +2003,7 @@ Changes in version 0.3.5.13 - 2020-02-03 o Major feature (exit, backport from 0.4.5.5-rc): - Re-entry into the network is now denied at the Exit level to all relays' ORPorts and authorities' ORPorts and DirPorts. This change - should help mitgate a set of denial-of-service attacks. Closes + should help mitigate a set of denial-of-service attacks. Closes ticket 2667. o Minor feature (build system, backport from 0.4.5.4-rc): @@ -3740,7 +5068,7 @@ Changes in version 0.4.1.7 - 2019-12-09 uses mutexes. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - Disable backtrace signal handlers when shutting down tor. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -4043,7 +5371,7 @@ Changes in version 0.4.0.6 - 2019-12-09 on 0.1.1.10-alpha. o Minor bugfixes (logging, backport from 0.4.2.2-alpha): - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -4077,7 +5405,7 @@ Changes in version 0.4.0.6 - 2019-12-09 o Minor bugfixes (onion services, backport from 0.4.1.1-alpha): - Avoid a GCC 9.1.1 warning (and possible crash depending on libc - implemenation) when failing to load an onion service client + implementation) when failing to load an onion service client authorization file. Fixes bug 30475; bugfix on 0.3.5.1-alpha. o Minor bugfixes (out-of-memory handler, backport from 0.4.1.2-alpha): @@ -4469,7 +5797,7 @@ Changes in version 0.3.5.9 - 2019-12-09 on 0.1.1.10-alpha. o Minor bugfixes (logging, backport from 0.4.2.2-alpha): - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -4507,7 +5835,7 @@ Changes in version 0.3.5.9 - 2019-12-09 o Minor bugfixes (onion services, backport from 0.4.1.1-alpha): - Avoid a GCC 9.1.1 warning (and possible crash depending on libc - implemenation) when failing to load an onion service client + implementation) when failing to load an onion service client authorization file. Fixes bug 30475; bugfix on 0.3.5.1-alpha. o Minor bugfixes (out-of-memory handler, backport from 0.4.1.2-alpha): @@ -4887,7 +6215,7 @@ Changes in version 0.4.2.2-alpha - 2019-10-07 uses mutexes. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - Disable backtrace signal handlers when shutting down tor. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -5961,7 +7289,7 @@ Changes in version 0.4.1.1-alpha - 2019-05-22 o Minor bugfixes (onion services): - Avoid a GCC 9.1.1 warning (and possible crash depending on libc - implemenation) when failing to load an onion service client + implementation) when failing to load an onion service client authorization file. Fixes bug 30475; bugfix on 0.3.5.1-alpha. - When refusing to launch a controller's HSFETCH request because of rate-limiting, respond to the controller with a new response, diff --git a/Doxyfile.in b/Doxyfile.in index 4374e54858..d06c344528 100644 --- a/Doxyfile.in +++ b/Doxyfile.in @@ -864,10 +864,8 @@ RECURSIVE = YES # run. EXCLUDE = ./src/ext/ed25519 \ - ./src/ext/rust \ ./src/trunnel \ - ./src/test \ - ./src/rust/registry + ./src/test # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/Makefile.am b/Makefile.am index c889945d5a..280047a71b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,12 +36,6 @@ else TESTING_TOR_BINARY=$(top_builddir)/src/app/tor$(EXEEXT) endif -if USE_RUST -rust_ldadd=$(top_builddir)/$(TOR_RUST_LIB_PATH) -else -rust_ldadd= -endif - # "Common" libraries used to link tor's utility code. TOR_UTIL_LIBS = \ src/lib/libtor-geoip.a \ @@ -192,7 +186,7 @@ EXTRA_DIST+= \ INSTALL \ LICENSE \ Makefile.nmake \ - README \ + README.md \ ReleaseNotes \ scripts/build/combine_libs \ scripts/maint/checkIncludes.py \ @@ -253,7 +247,7 @@ endif TEST_NETWORK_SHOW_WARNINGS_FOR_LAST_RUN_FLAGS=--quiet --only-warnings if LIBFUZZER_ENABLED -TEST_CFLAGS += -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-div +TEST_CFLAGS += -fsanitize=fuzzer-no-link # not "edge" endif @@ -590,7 +584,7 @@ check-typos: $(top_srcdir)/doc \ $(top_srcdir)/contrib \ $(top_srcdir)/scripts \ - $(top_srcdir)/README \ + $(top_srcdir)/README.md \ $(top_srcdir)/ChangeLog \ $(top_srcdir)/INSTALL \ $(top_srcdir)/ReleaseNotes \ @@ -601,51 +595,6 @@ check-typos: echo "You can install the latest version of misspell here: https://github.com/client9/misspell#install"; \ fi -.PHONY: rustfmt -rustfmt: -if USE_RUST - @if test -x "`which cargo-fmt 2>&1;true`"; then \ - echo "Formatting Rust code ..."; \ - (cd "$(top_srcdir)/src/rust" && cargo fmt --all --); \ - else \ - echo "Tor uses rustfmt (via cargo-fmt) to format Rust code."; \ - echo "However, it seems that you don't have rustfmt installed."; \ - printf "You can install rustfmt by following the directions here:"; \ - echo " https://github.com/rust-lang-nursery/rustfmt"; \ - fi -endif - -.PHONY: check-rustfmt -check-rustfmt: -if USE_RUST - @if test -x "`which cargo-fmt 2>&1;true`"; then \ - printf "Running rustfmt..."; \ - (cd "$(top_srcdir)/src/rust" && cargo fmt --all -- --check && echo "done.") || \ - (echo "**************** check-rustfmt failed. ****************"; \ - echo " Run \`make rustfmt\` to apply the above changes."; \ - exit 1); \ - else \ - echo "Tor uses rustfmt (via cargo-fmt) to format Rust code."; \ - echo "However, it seems that you don't have rustfmt installed."; \ - printf "You can install rustfmt by following the directions here:"; \ - echo " https://github.com/rust-lang-nursery/rustfmt"; \ - fi -endif - -.PHONY: clippy -clippy: -if USE_RUST - @if test -x "`which cargo-clippy 2>&1;true`"; then \ - echo "Running cargo clippy ..."; \ - echo "Prepare yourself for the onslaught of suggestions ..."; \ - (cd "$(top_srcdir)/src/rust" && cargo clippy); \ - else \ - echo "Tor can use clippy to lint Rust code."; \ - echo "However, it seems that you don't have clippy installed."; \ - echo "You can install the latest version of clippy by following the directions here: https://github.com/rust-lang-nursery/rust-clippy"; \ - fi -endif - .PHONY: check-changes check-changes: if USEPYTHON @@ -686,7 +635,7 @@ update-copyright: $(PERL) $(top_srcdir)/scripts/maint/updateCopyright.pl $(OWNED_TOR_C_FILES) .PHONY: autostyle -autostyle: update-versions rustfmt autostyle-ifdefs rectify-includes +autostyle: update-versions autostyle-ifdefs rectify-includes mostlyclean-local: rm -f $(top_builddir)/src/*/*.gc{da,no} $(top_builddir)/src/*/*/*.gc{da,no} @@ -694,14 +643,6 @@ mostlyclean-local: rm -rf $(top_builddir)/doc/doxygen rm -rf $(TEST_NETWORK_ALL_LOG_DIR) -clean-local: - rm -rf $(top_builddir)/src/rust/target - rm -rf $(top_builddir)/src/rust/.cargo/registry - -if USE_RUST -distclean-local: distclean-rust -endif - # This relies on some internal details of how automake implements # distcheck. We check two directories because automake-1.15 changed # from $(distdir)/_build to $(distdir)/_build/sub. diff --git a/README b/README deleted file mode 100644 index 397f6b927e..0000000000 --- a/README +++ /dev/null @@ -1,31 +0,0 @@ -Tor protects your privacy on the internet by hiding the connection -between your Internet address and the services you use. We believe Tor -is reasonably secure, but please ensure you read the instructions and -configure it properly. - -To build Tor from source: - ./configure && make && make install - -To build Tor from a just-cloned git repository: - sh autogen.sh && ./configure && make && make install - -Home page: - https://www.torproject.org/ - -Download new versions: - https://www.torproject.org/download/download.html - -Documentation, including links to installation and setup instructions: - https://www.torproject.org/docs/documentation.html - -Making applications work with Tor: - https://gitlab.torproject.org/legacy/trac/-/wikis/doc/TorifyHOWTO - -Frequently Asked Questions: - https://www.torproject.org/docs/faq.html - -Release timeline: - https://gitlab.torproject.org/tpo/core/team/-/wikis/NetworkTeam/CoreTorReleases - -To get started working on Tor development: - See the doc/HACKING directory. diff --git a/README.md b/README.md new file mode 100644 index 0000000000..4a8db49e53 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +Tor protects your privacy on the internet by hiding the connection between +your Internet address and the services you use. We believe Tor is reasonably +secure, but please ensure you read the instructions and configure it properly. + +## Build + +To build Tor from source: + +``` +./configure +make +make install +``` + +To build Tor from a just-cloned git repository: + +``` +./autogen.sh +./configure +make +make install +``` + +## Releases + +The tarballs, checksums and signatures can be found here: https://dist.torproject.org + +- Checksum: `<tarball-name>.sha256sum` +- Signatures: `<tarball-name>.sha256sum.asc` + +### Schedule + +You can find our release schedule here: + +- https://gitlab.torproject.org/tpo/core/team/-/wikis/NetworkTeam/CoreTorReleases + +### Keys that CAN sign a release + +The following keys are the maintainers of this repository. One or many of +these keys can sign the releases, do NOT expect them all: + +- Alexander Færøy: + [514102454D0A87DB0767A1EBBE6A0531C18A9179](https://keys.openpgp.org/vks/v1/by-fingerprint/1C1BC007A9F607AA8152C040BEA7B180B1491921) +- David Goulet: + [B74417EDDF22AC9F9E90F49142E86A2A11F48D36](https://keys.openpgp.org/vks/v1/by-fingerprint/B74417EDDF22AC9F9E90F49142E86A2A11F48D36) +- Nick Mathewson: + [2133BC600AB133E1D826D173FE43009C4607B1FB](https://keys.openpgp.org/vks/v1/by-fingerprint/2133BC600AB133E1D826D173FE43009C4607B1FB) + +## Development + +See our hacking documentation in [doc/HACKING/](./doc/HACKING). + +## Resources + +Home page: + +- https://www.torproject.org/ + +Download new versions: + +- https://www.torproject.org/download/download.html + +Documentation, including links to installation and setup instructions: + +- https://www.torproject.org/docs/documentation.html + +Frequently Asked Questions: + +- https://www.torproject.org/docs/faq.html + diff --git a/ReleaseNotes b/ReleaseNotes index 42017292c5..41b28e8307 100644 --- a/ReleaseNotes +++ b/ReleaseNotes @@ -2,6 +2,960 @@ This document summarizes new features and bugfixes in each stable release of Tor. If you want to see more detailed descriptions of the changes in each development snapshot, see the ChangeLog file. +Changes in version 0.4.6.10 - 2022-02-04 + This version contains minor bugfixes but one in particular is that relays + don't advertise onion service v2 support at the protocol version level. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on February 04, 2022. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2022/02/04. + + o Minor bugfix (logging): + - Update a log notice dead URL to a working one. Fixes bug 40544; + bugfix on 0.3.5.1-alpha. + + o Minor bugfix (relay): + - Remove the HSDir and HSIntro onion service v2 protocol versions so + relay stop advertising that they support them. Fixes bug 40509; + bugfix on 0.3.5.17. + + o Minor bugfixes (MetricsPort, Prometheus): + - Add double quotes to the label values of the onion service + metrics. Fixes bug 40552; bugfix on 0.4.5.1-alpha. + + +Changes in version 0.4.6.9 - 2021-12-15 + This version fixes several bugs from earlier versions of Tor. One important + piece is the removal of DNS timeout metric from the overload general signal. + See below for more details. + + o Major bugfixes (relay, overload): + - Don't make Tor DNS timeout trigger an overload general state. + These timeouts are different from DNS server timeout. They have to + be seen as timeout related to UX and not because of a network + problem. Fixes bug 40527; bugfix on 0.4.6.1-alpha. + + o Minor feature (reproducible build): + - The repository can now build reproducible tarballs which adds the + build command "make dist-reprod" for that purpose. Closes + ticket 26299. + + o Minor features (compilation): + - Give an error message if trying to build with a version of + LibreSSL known not to work with Tor. (There's an incompatibility + with LibreSSL versions 3.2.1 through 3.4.0 inclusive because of + their incompatibility with OpenSSL 1.1.1's TLSv1.3 APIs.) Closes + ticket 40511. + + o Minor features (fallbackdir): + - Regenerate fallback directories generated on December 15, 2021. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/12/15. + + o Minor bugfixes (compilation): + - Fix our configuration logic to detect whether we had OpenSSL 3: + previously, our logic was reversed. This has no other effect than + to change whether we suppress deprecated API warnings. Fixes bug + 40429; bugfix on 0.3.5.13. + + o Minor bugfixes (relay): + - Reject IPv6-only DirPorts. Our reachability self-test forces + DirPorts to be IPv4, but our configuration parser allowed them to + be IPv6-only, which led to an assertion failure. Fixes bug 40494; + bugfix on 0.4.5.1-alpha. + + o Documentation (man, relay): + - Missing "OverloadStatistics" in tor.1 manpage. Fixes bug 40504; + bugfix on 0.4.6.1-alpha. + + +Changes in version 0.4.6.8 - 2021-10-26 + This version fixes several bugs from earlier versions of Tor. One + highlight is a fix on how we track DNS timeouts to report general + relay overload. + + o Major bugfixes (relay, overload state): + - Relays report the general overload state for DNS timeout errors + only if X% of all DNS queries over Y seconds are errors. Before + that, it only took 1 timeout to report the overload state which + was just too low of a threshold. The X and Y values are 1% and 10 + minutes respectively but they are also controlled by consensus + parameters. Fixes bug 40491; bugfix on 0.4.6.1-alpha. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor features (testing): + - On a testing network, relays can now use the + TestingMinTimeToReportBandwidth option to change the smallest + amount of time over which they're willing to report their observed + maximum bandwidth. Previously, this was fixed at 1 day. For + safety, values under 2 hours are only supported on testing + networks. Part of a fix for ticket 40337. + - Relays on testing networks no longer rate-limit how frequently + they are willing to report new bandwidth measurements. Part of a + fix for ticket 40337. + - Relays on testing networks now report their observed bandwidths + immediately from startup. Previously, they waited until they had + been running for a full day. Closes ticket 40337. + + o Minor bugfix (onion service): + - Do not flag an HSDir as non-running in case the descriptor upload + or fetch fails. An onion service closes pending directory + connections before uploading a new descriptor which can thus lead + to wrongly flagging many relays and thus affecting circuit building + path selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha. + - Improve logging when a bad HS version is given. Fixes bug 40476; + bugfix on 0.4.6.1-alpha. + + o Minor bugfix (CI, onion service): + - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (compatibility): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + o Minor bugfixes (onion service, TROVE-2021-008): + - Only log v2 access attempts once total, in order to not pollute + the logs with warnings and to avoid recording the times on disk + when v2 access was attempted. Note that the onion address was + _never_ logged. This counts as a Low-severity security issue. + Fixes bug 40474; bugfix on 0.4.5.8. + + +Changes in version 0.4.5.11 - 2021-10-26 + The major change in this version is that v2 onion services are now + disabled at the client, service, and relay: any Tor nodes running this + version and onward will stop supporting v2 onion services. This is the + last step in the long deprecation process of v2 onion services. + Everyone running an earlier version, whether as a client, a relay, or + an onion service, should upgrade to Tor 0.3.5.17, 0.4.5.11, + or 0.4.6.8. + + o Major feature (onion service v2): + - See https://blog.torproject.org/v2-deprecation-timeline for + details on how to transition from v2 to v3. + - The control port commands HSFETCH and HSPOST no longer allow + version 2, and it is no longer possible to create a v2 service + with ADD_ONION. + - Tor no longer allows creating v2 services, or connecting as a + client to a v2 service. Relays will decline to be a v2 HSDir or + introduction point. This effectively disables onion service + version 2 Tor-wide. Closes ticket 40476. + + o Minor features (bridge, backport from 0.4.6.8): + - We now announce the URL to Tor's new bridge status at + https://bridges.torproject.org/ when Tor is configured to run as a + bridge relay. Closes ticket 30477. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor features (logging, diagnostic, backport from 0.4.6.5): + - Log decompression failures at a higher severity level, since they + can help provide missing context for other warning messages. We + rate-limit these messages, to avoid flooding the logs if they + begin to occur frequently. Closes ticket 40175. + + o Minor features (testing, backport from 0.4.6.8): + - On a testing network, relays can now use the + TestingMinTimeToReportBandwidth option to change the smallest + amount of time over which they're willing to report their observed + maximum bandwidth. Previously, this was fixed at 1 day. For + safety, values under 2 hours are only supported on testing + networks. Part of a fix for ticket 40337. + - Relays on testing networks no longer rate-limit how frequently + they are willing to report new bandwidth measurements. Part of a + fix for ticket 40337. + - Relays on testing networks now report their observed bandwidths + immediately from startup. Previously, they waited until they had + been running for a full day. Closes ticket 40337. + + o Minor bugfix (CI, onion service): + - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; + bugfix on 0.3.2.1-alpha. + + o Minor bugfix (onion service, backport from 0.4.6.8): + - Do not flag an HSDir as non-running in case the descriptor upload + or fetch fails. An onion service closes pending directory + connections before uploading a new descriptor which can thus lead + to wrongly flagging many relays and thus affecting circuit building + path selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha. + + o Minor bugfixes (compatibility, backport from 0.4.6.8): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + o Minor bugfixes (consensus handling, backport from 0.4.6.4-rc): + - Avoid a set of bugs that could be caused by inconsistently + preferring an out-of-date consensus stored in a stale directory + cache over a more recent one stored on disk as the latest + consensus. Fixes bug 40375; bugfix on 0.3.1.1-alpha. + + o Minor bugfixes (onion service, TROVE-2021-008, backport from 0.4.6.8): + - Only log v2 access attempts once total, in order to not pollute + the logs with warnings and to avoid recording the times on disk + when v2 access was attempted. Note that the onion address was + _never_ logged. This counts as a Low-severity security issue. + Fixes bug 40474; bugfix on 0.4.5.8. + + +Changes in version 0.3.5.17 - 2021-10-26 + The major change in this version is that v2 onion services are now + disabled at the client, service, and relay: any Tor nodes running this + version and onward will stop supporting v2 onion services. This is the + last step in the long deprecation process of v2 onion services. + Everyone running an earlier version, whether as a client, a relay, or + an onion service, should upgrade to Tor 0.3.5.17, 0.4.5.11, + or 0.4.6.8. + + o Major feature (onion service v2, backport from 0.4.5.11): + - See https://blog.torproject.org/v2-deprecation-timeline for + details on how to transition from v2 to v3. + - The control port commands HSFETCH and HSPOST no longer allow + version 2, and it is no longer possible to create a v2 service + with ADD_ONION. + - Tor no longer allows creating v2 services, or connecting as a + client to a v2 service. Relays will decline to be a v2 HSDir or + introduction point. This effectively disables onion service + version 2 Tor-wide. Closes ticket 40476. + + o Minor features (bridge, backport from 0.4.6.8): + - We now announce the URL to Tor's new bridge status at + https://bridges.torproject.org/ when Tor is configured to run as a + bridge relay. Closes ticket 30477. + + o Minor features (fallbackdir): + - Regenerate fallback directories for October 2021. Closes + ticket 40493. + + o Minor bugfixes (compatibility, backport from 0.4.6.8): + - Fix compatibility with the most recent Libevent versions, which no + longer have an evdns_set_random_bytes() function. Because this + function has been a no-op since Libevent 2.0.4-alpha, it is safe + for us to just stop calling it. Fixes bug 40371; bugfix + on 0.2.1.7-alpha. + + +Changes in version 0.4.6.7 - 2021-08-16 + This version fixes several bugs from earlier versions of Tor, including one + that could lead to a denial-of-service attack. Everyone running an earlier + version, whether as a client, a relay, or an onion service, should upgrade + to Tor 0.3.5.16, 0.4.5.10, or 0.4.6.7. + + o Major bugfixes (cryptography, security): + - Resolve an assertion failure caused by a behavior mismatch between our + batch-signature verification code and our single-signature verification + code. This assertion failure could be triggered remotely, leading to a + denial of service attack. We fix this issue by disabling batch + verification. Fixes bug 40078; bugfix on 0.2.6.1-alpha. This issue is + also tracked as TROVE-2021-007 and CVE-2021-38385. Found by Henry de + Valence. + + o Minor feature (fallbackdir): + - Regenerate fallback directories list. Close ticket 40447. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, + as retrieved on 2021/08/12. + + o Minor bugfix (crypto): + - Disable the unused batch verification feature of ed25519-donna. Fixes + bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry de Valence. + + o Minor bugfixes (onion service): + - Send back the extended SOCKS error 0xF6 (Onion Service Invalid Address) + for a v2 onion address. Fixes bug 40421; bugfix on 0.4.6.2-alpha. + + o Minor bugfix (CI, onion service): + - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (relay): + - Reduce the compression level for data streaming from HIGH to LOW in + order to reduce CPU load on the directory relays. Fixes bug 40301; + bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (timekeeping): + - Calculate the time of day correctly on systems where the time_t + type includes leap seconds. (This is not the case on most + operating systems, but on those where it occurs, our tor_timegm + function did not correctly invert the system's gmtime function, + which could result in assertion failures when calculating + voting schedules.) Fixes bug 40383; bugfix on 0.2.0.3-alpha. + + +Changes in version 0.4.5.10 - 2021-08-16 + This version fixes several bugs from earlier versions of Tor, including one + that could lead to a denial-of-service attack. Everyone running an earlier + version, whether as a client, a relay, or an onion service, should upgrade + to Tor 0.3.5.16, 0.4.5.10, or 0.4.6.7. + + o Major bugfixes (cryptography, security): + - Resolve an assertion failure caused by a behavior mismatch between our + batch-signature verification code and our single-signature verification + code. This assertion failure could be triggered remotely, leading to a + denial of service attack. We fix this issue by disabling batch + verification. Fixes bug 40078; bugfix on 0.2.6.1-alpha. This issue is + also tracked as TROVE-2021-007 and CVE-2021-38385. Found by Henry de + Valence. + + o Minor feature (fallbackdir): + - Regenerate fallback directories list. Close ticket 40447. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, + as retrieved on 2021/08/12. + + o Minor features (testing): + - Enable the deterministic RNG for unit tests that covers the address set + bloomfilter-based API's. Fixes bug 40419; bugfix on 0.3.3.2-alpha. + + o Minor bugfix (crypto): + - Disable the unused batch verification feature of ed25519-donna. Fixes + bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry de Valence. + + o Minor bugfixes (relay, backport from 0.4.6.x): + - Reduce the compression level for data streaming from HIGH to LOW. Fixes + bug 40301; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (timekeeping, backport from 0.4.6.x): + - Calculate the time of day correctly on systems where the time_t + type includes leap seconds. (This is not the case on most + operating systems, but on those where it occurs, our tor_timegm + function did not correctly invert the system's gmtime function, + which could result in assertion failures when calculating + voting schedules.) Fixes bug 40383; bugfix on 0.2.0.3-alpha. + + o Minor bugfixes (warnings, portability, backport from 0.4.6.x): + - Suppress a strict-prototype warning when building with some versions + of NSS. Fixes bug 40409; bugfix on 0.3.5.1-alpha. + + +Changes in version 0.3.5.16 - 2021-08-16 + This version fixes several bugs from earlier versions of Tor, including one + that could lead to a denial-of-service attack. Everyone running an earlier + version, whether as a client, a relay, or an onion service, should upgrade + to Tor 0.3.5.16, 0.4.5.10, or 0.4.6.7. + + o Major bugfixes (cryptography, security): + - Resolve an assertion failure caused by a behavior mismatch between our + batch-signature verification code and our single-signature verification + code. This assertion failure could be triggered remotely, leading to a + denial of service attack. We fix this issue by disabling batch + verification. Fixes bug 40078; bugfix on 0.2.6.1-alpha. This issue is + also tracked as TROVE-2021-007 and CVE-2021-38385. Found by Henry de + Valence. + + o Minor feature (fallbackdir): + - Regenerate fallback directories list. Close ticket 40447. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, + as retrieved on 2021/08/12. + + o Minor bugfix (crypto): + - Disable the unused batch verification feature of ed25519-donna. Fixes + bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry de Valence. + + o Minor bugfixes (relay, backport from 0.4.6.x): + - Reduce the compression level for data streaming from HIGH to LOW. Fixes + bug 40301; bugfix on 0.3.5.1-alpha. + + +Changes in version 0.4.6.6 - 2021-06-30 + Tor 0.4.6.6 makes several small fixes on 0.4.6.5, including one that + allows Tor to build correctly on older versions of GCC. You should + upgrade to this version if you were having trouble building Tor + 0.4.6.5; otherwise, there is probably no need. + + o Minor bugfixes (compilation): + - Fix a compilation error when trying to build Tor with a compiler + that does not support const variables in static initializers. + Fixes bug 40410; bugfix on 0.4.6.5. + - Suppress a strict-prototype warning when building with some + versions of NSS. Fixes bug 40409; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (testing): + - Enable the deterministic RNG for unit tests that covers the + address set bloomfilter-based API's. Fixes bug 40419; bugfix + on 0.3.3.2-alpha. + + +Changes in version 0.4.6.5 - 2021-06-14 + Tor 0.4.6.5 is the first stable release in its series. The 0.4.6.x + series includes numerous features and bugfixes, including a significant + improvement to our circuit timeout algorithm that should improve + observed client performance, and a way for relays to report when they are + overloaded. + + This release also includes security fixes for several security issues, + including a denial-of-service attack against onion service clients, + and another denial-of-service attack against relays. Everybody should + upgrade to one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + Below are the changes since 0.4.5.8. For a list of changes since + 0.4.6.4-rc, see the ChangeLog file. + + o Major bugfixes (security): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Major features (control port, onion services): + - Add controller support for creating version 3 onion services with + client authorization. Previously, only v2 onion services could be + created with client authorization. Closes ticket 40084. Patch by + Neel Chauhan. + + o Major features (directory authority): + - When voting on a relay with a Sybil-like appearance, add the Sybil + flag when clearing out the other flags. This lets a relay operator + know why their relay hasn't been included in the consensus. Closes + ticket 40255. Patch by Neel Chauhan. + + o Major features (metrics): + - Relays now report how overloaded they are in their extrainfo + documents. This information is controlled with the + OverloadStatistics torrc option, and it will be used to improve + decisions about the network's load balancing. Implements proposal + 328; closes ticket 40222. + + o Major features (relay, denial of service): + - Add a new DoS subsystem feature to control the rate of client + connections for relays. Closes ticket 40253. + + o Major features (statistics): + - Relays now publish statistics about the number of v3 onion + services and volume of v3 onion service traffic, in the same + manner they already do for v2 onions. Closes ticket 23126. + + o Major bugfixes (circuit build timeout): + - Improve the accuracy of our circuit build timeout calculation for + 60%, 70%, and 80% build rates for various guard choices. We now + use a maximum likelihood estimator for Pareto parameters of the + circuit build time distribution, instead of a "right-censored + estimator". This causes clients to ignore circuits that never + finish building in their timeout calculations. Previously, clients + were counting such unfinished circuits as having the highest + possible build time value, when in reality these circuits most + likely just contain relays that are offline. We also now wait a + bit longer to let circuits complete for measurement purposes, + lower the minimum possible effective timeout from 1.5 seconds to + 10ms, and increase the resolution of the circuit build time + histogram from 50ms bin widths to 10ms bin widths. Additionally, + we alter our estimate Xm by taking the maximum of the top 10 most + common build time values of the 10ms histogram, and compute Xm as + the average of these. Fixes bug 40168; bugfix on 0.2.2.14-alpha. + - Remove max_time calculation and associated warning from circuit + build timeout 'alpha' parameter estimation, as this is no longer + needed by our new estimator from 40168. Fixes bug 34088; bugfix + on 0.2.2.9-alpha. + + o Major bugfixes (signing key): + - In the tor-gencert utility, give an informative error message if + the passphrase given in `--create-identity-key` is too short. + Fixes bug 40189; bugfix on 0.2.0.1-alpha. Patch by Neel Chauhan. + + o Minor features (bridge): + - We now announce the URL to Tor's new bridge status at + https://bridges.torproject.org/ when Tor is configured to run as a + bridge relay. Closes ticket 30477. + + o Minor features (build system): + - New "make lsp" command to auto generate the compile_commands.json + file used by the ccls server. The "bear" program is needed for + this. Closes ticket 40227. + + o Minor features (client): + - Clients now check whether their streams are attempting to re-enter + the Tor network (i.e. to send Tor traffic over Tor), and close + them preemptively if they think exit relays will refuse them for + this reason. See ticket 2667 for details. Closes ticket 40271. + + o Minor features (command line): + - Add long format name "--torrc-file" equivalent to the existing + command-line option "-f". Closes ticket 40324. Patch by + Daniel Pinto. + + o Minor features (command-line interface): + - Add build informations to `tor --version` in order to ease + reproducible builds. Closes ticket 32102. + - When parsing command-line flags that take an optional argument, + treat the argument as absent if it would start with a '-' + character. Arguments in that form are not intelligible for any of + our optional-argument flags. Closes ticket 40223. + - Allow a relay operator to list the ed25519 keys on the command + line by adding the `rsa` and `ed25519` arguments to the + --list-fingerprint flag to show the respective RSA and ed25519 + relay fingerprint. Closes ticket 33632. Patch by Neel Chauhan. + + o Minor features (compatibility): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (control port, stream handling): + - Add the stream ID to the event line in the ADDRMAP control event. + Closes ticket 40249. Patch by Neel Chauhan. + + o Minor features (dormant mode): + - Add a new 'DormantTimeoutEnabled' option to allow coarse-grained + control over whether the client ever becomes dormant from + inactivity. Most people won't need this. Closes ticket 40228. + - Add a new 'DormantTimeoutEnabled' option for coarse-grained + control over whether the client can become dormant from + inactivity. Most people won't need this. Closes ticket 40228. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + o Minor features (logging): + - Edit heartbeat log messages so that more of them begin with the + string "Heartbeat: ". Closes ticket 40322; patch + from 'cypherpunks'. + - Change the DoS subsystem heartbeat line format to be more clear on + what has been detected/rejected, and which option is disabled (if + any). Closes ticket 40308. + - In src/core/mainloop/mainloop.c and src/core/mainloop/connection.c, + put brackets around IPv6 addresses in log messages. Closes ticket + 40232. Patch by Neel Chauhan. + + o Minor features (logging, diagnostic): + - Log decompression failures at a higher severity level, since they + can help provide missing context for other warning messages. We + rate-limit these messages, to avoid flooding the logs if they + begin to occur frequently. Closes ticket 40175. + + o Minor features (onion services): + - Add a warning message when trying to connect to (no longer + supported) v2 onion services. Closes ticket 40373. + + o Minor features (performance, windows): + - Use SRWLocks to implement locking on Windows. Replaces the + "critical section" locking implementation with the faster + SRWLocks, available since Windows Vista. Closes ticket 17927. + Patch by Daniel Pinto. + + o Minor features (protocol, proxy support, defense in depth): + - Close HAProxy connections if they somehow manage to send us data + before we start reading. Closes another case of ticket 40017. + + o Minor features (tests, portability): + - Port the hs_build_address.py test script to work with recent + versions of python. Closes ticket 40213. Patch from + Samanta Navarro. + + o Minor features (vote document): + - Add a "stats" line to directory authority votes, to report various + statistics that authorities compute about the relays. This will + help us diagnose the network better. Closes ticket 40314. + + o Minor bugfixes (build): + - The configure script now shows whether or not lzma and zstd have + been used, not just if the enable flag was passed in. Fixes bug + 40236; bugfix on 0.4.3.1-alpha. + + o Minor bugfixes (compatibility): + - Fix a failure in the test cases when running on the "hppa" + architecture, along with a related test that might fail on other + architectures in the future. Fixes bug 40274; bugfix + on 0.2.5.1-alpha. + + o Minor bugfixes (compilation): + - Fix a compilation warning about unused functions when building + with a libc that lacks the GLOB_ALTDIRFUNC constant. Fixes bug + 40354; bugfix on 0.4.5.1-alpha. Patch by Daniel Pinto. + + o Minor bugfixes (consensus handling): + - Avoid a set of bugs that could be caused by inconsistently + preferring an out-of-date consensus stored in a stale directory + cache over a more recent one stored on disk as the latest + consensus. Fixes bug 40375; bugfix on 0.3.1.1-alpha. + + o Minor bugfixes (control, sandbox): + - Allow the control command SAVECONF to succeed when the seccomp + sandbox is enabled, and make SAVECONF keep only one backup file to + simplify implementation. Previously SAVECONF allowed a large + number of backup files, which made it incompatible with the + sandbox. Fixes bug 40317; bugfix on 0.2.5.4-alpha. Patch by + Daniel Pinto. + + o Minor bugfixes (directory authorities, voting): + - Add a new consensus method (31) to support any future changes that + authorities decide to make to the value of bwweightscale or + maxunmeasuredbw. Previously, there was a bug that prevented the + authorities from parsing these consensus parameters correctly under + most circumstances. Fixes bug 19011; bugfix on 0.2.2.10-alpha. + + o Minor bugfixes (ipv6): + - Allow non-SOCKSPorts to disable IPv4, IPv6, and PreferIPv4. Some + rare configurations might break, but in this case you can disable + NoIPv4Traffic and NoIPv6Traffic as needed. Fixes bug 33607; bugfix + on 0.4.1.1-alpha. Patch by Neel Chauhan. + + o Minor bugfixes (key generation): + - Do not require a valid torrc when using the `--keygen` argument to + generate a signing key. This allows us to generate keys on systems + or users which may not run Tor. Fixes bug 40235; bugfix on + 0.2.7.2-alpha. Patch by Neel Chauhan. + + o Minor bugfixes (logging, relay): + - Emit a warning if an Address is found to be internal and tor can't + use it. Fixes bug 40290; bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (metrics port): + - Fix a bug that made tor try to re-bind() on an already open + MetricsPort every 60 seconds. Fixes bug 40370; bugfix + on 0.4.5.1-alpha. + + o Minor bugfixes (onion services, logging): + - Downgrade the severity of a few rendezvous circuit-related + warnings from warning to info. Fixes bug 40207; bugfix on + 0.3.2.1-alpha. Patch by Neel Chauhan. + + o Minor bugfixes (relay): + - Reduce the compression level for data streaming from HIGH to LOW. + This should reduce the CPU and memory burden for directory caches. + Fixes bug 40301; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (testing, BSD): + - Fix pattern-matching errors when patterns expand to invalid paths + on BSD systems. Fixes bug 40318; bugfix on 0.4.5.1-alpha. Patch by + Daniel Pinto. + + o Code simplification and refactoring: + - Remove the orconn_ext_or_id_map structure and related functions. + (Nothing outside of unit tests used them.) Closes ticket 33383. + Patch by Neel Chauhan. + + o Removed features: + - Remove unneeded code for parsing private keys in directory + documents. This code was only used for client authentication in v2 + onion services, which are now unsupported. Closes ticket 40374. + - As of this release, Tor no longer supports the old v2 onion + services. They were deprecated last July for security, and support + will be removed entirely later this year. We strongly encourage + everybody to migrate to v3 onion services. For more information, + see https://blog.torproject.org/v2-deprecation-timeline . Closes + ticket 40266. (NOTE: We accidentally released an earlier version + of the 0.4.6.1-alpha changelog without this entry. Sorry for + the confusion!) + + o Code simplification and refactoring (metrics, DoS): + - Move the DoS subsystem into the subsys manager, including its + configuration options. Closes ticket 40261. + + o Documentation (manual): + - Move the ServerTransport* options to the "SERVER OPTIONS" section. + Closes issue 40331. + - Indicate that the HiddenServiceStatistics option also applies to + bridges. Closes ticket 40346. + - Move the description of BridgeRecordUsageByCountry to the section + "STATISTICS OPTIONS". Closes ticket 40323. + + o Removed features (relay): + - Because DirPorts are only used on authorities, relays no longer + advertise them. Similarly, self-testing for DirPorts has been + disabled, since an unreachable DirPort is no reason for a relay + not to advertise itself. (Configuring a DirPort will still work, + for now.) Closes ticket 40282. + + +Changes in version 0.4.5.9 - 2021-06-14 + Tor 0.4.5.9 fixes several security issues, including a + denial-of-service attack against onion service clients, and another + denial-of-service attack against relays. Everybody should upgrade to + one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + o Major bugfixes (security, backport from 0.4.6.5): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth, backport from 0.4.6.5): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service, backport from 0.4.6.5): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor features (compatibility, backport from 0.4.6.4-rc): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + o Minor bugfixes (control, sandbox, backport from 0.4.6.4-rc): + - Allow the control command SAVECONF to succeed when the seccomp + sandbox is enabled, and make SAVECONF keep only one backup file to + simplify implementation. Previously SAVECONF allowed a large + number of backup files, which made it incompatible with the + sandbox. Fixes bug 40317; bugfix on 0.2.5.4-alpha. Patch by + Daniel Pinto. + + o Minor bugfixes (metrics port, backport from 0.4.6.4-rc): + - Fix a bug that made tor try to re-bind() on an already open + MetricsPort every 60 seconds. Fixes bug 40370; bugfix + on 0.4.5.1-alpha. + + +Changes in version 0.4.4.9 - 2021-06-14 + Tor 0.4.4.9 fixes several security issues, including a + denial-of-service attack against onion service clients, and another + denial-of-service attack against relays. Everybody should upgrade to + one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + Note that the scheduled end-of-life date for the Tor 0.4.4.x series is + June 15. This is therefore the last release in its series. Everybody + still running 0.4.4.x should plan to upgrade to 0.4.5.x or later. + + o Major bugfixes (security, backport from 0.4.6.5): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth, backport from 0.4.6.5): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service, backport from 0.4.6.5): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor features (compatibility, backport from 0.4.6.4-rc): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (fallback directory list, backport from 0.4.6.2-alpha): + - Regenerate the list of fallback directories to contain a new set + of 200 relays. Closes ticket 40265. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + o Minor bugfixes (channel, DoS, backport from 0.4.6.2-alpha): + - Fix a non-fatal BUG() message due to a too-early free of a string, + when listing a client connection from the DoS defenses subsystem. + Fixes bug 40345; bugfix on 0.4.3.4-rc. + + o Minor bugfixes (compiler warnings, backport from 0.4.6.3-rc): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + +Changes in version 0.3.5.15 - 2021-06-14 + Tor 0.3.5.15 fixes several security issues, including a + denial-of-service attack against onion service clients, and another + denial-of-service attack against relays. Everybody should upgrade to + one of 0.3.5.15, 0.4.4.9, 0.4.5.9, or 0.4.6.5. + + o Major bugfixes (security, backport from 0.4.6.5): + - Don't allow relays to spoof RELAY_END or RELAY_RESOLVED cell on + half-closed streams. Previously, clients failed to validate which + hop sent these cells: this would allow a relay on a circuit to end + a stream that wasn't actually built with it. Fixes bug 40389; + bugfix on 0.3.5.1-alpha. This issue is also tracked as TROVE-2021- + 003 and CVE-2021-34548. + + o Major bugfixes (security, defense-in-depth, backport from 0.4.6.5): + - Detect more failure conditions from the OpenSSL RNG code. + Previously, we would detect errors from a missing RNG + implementation, but not failures from the RNG code itself. + Fortunately, it appears those failures do not happen in practice + when Tor is using OpenSSL's default RNG implementation. Fixes bug + 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as + TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. + + o Major bugfixes (security, denial of service, backport from 0.4.6.5): + - Resist a hashtable-based CPU denial-of-service attack against + relays. Previously we used a naive unkeyed hash function to look + up circuits in a circuitmux object. An attacker could exploit this + to construct circuits with chosen circuit IDs, to create + collisions and make the hash table inefficient. Now we use a + SipHash construction here instead. Fixes bug 40391; bugfix on + 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005 and + CVE-2021-34549. Reported by Jann Horn from Google's Project Zero. + - Fix an out-of-bounds memory access in v3 onion service descriptor + parsing. An attacker could exploit this bug by crafting an onion + service descriptor that would crash any client that tried to visit + it. Fixes bug 40392; bugfix on 0.3.0.1-alpha. This issue is also + tracked as TROVE-2021-006 and CVE-2021-34550. Reported by Sergei + Glazunov from Google's Project Zero. + + o Minor bugfixes (compiler warnings, backport from 0.4.6.3-rc): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + o Minor features (compatibility, backport from 0.4.6.4-rc): + - Remove an assertion function related to TLS renegotiation. It was + used nowhere outside the unit tests, and it was breaking + compilation with recent alpha releases of OpenSSL 3.0.0. Closes + ticket 40399. + + o Minor features (fallback directory list, backport from 0.4.6.2-alpha): + - Regenerate the list of fallback directories to contain a new set + of 200 relays. Closes ticket 40265. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/06/10. + + +Changes in version 0.4.5.8 - 2021-05-10 + Tor 0.4.5.8 fixes several bugs in earlier version, backporting fixes + from the 0.4.6.x series. + + o Minor features (compatibility, Linux seccomp sandbox, backport from 0.4.6.3-rc): + - Add a workaround to enable the Linux sandbox to work correctly + with Glibc 2.33. This version of Glibc has started using the + fstatat() system call, which previously our sandbox did not allow. + Closes ticket 40382; see the ticket for a discussion of trade-offs. + + o Minor features (compilation, backport from 0.4.6.3-rc): + - Make the autoconf script build correctly with autoconf versions + 2.70 and later. Closes part of ticket 40335. + + o Minor features (fallback directory list, backport from 0.4.6.2-alpha): + - Regenerate the list of fallback directories to contain a new set + of 200 relays. Closes ticket 40265. + + o Minor features (geoip data): + - Update the geoip files to match the IPFire Location Database, as + retrieved on 2021/05/07. + + o Minor features (onion services): + - Add warning message when connecting to now deprecated v2 onion + services. As announced, Tor 0.4.5.x is the last series that will + support v2 onions. Closes ticket 40373. + + o Minor bugfixes (bridge, pluggable transport, backport from 0.4.6.2-alpha): + - Fix a regression that made it impossible start Tor using a bridge + line with a transport name and no fingerprint. Fixes bug 40360; + bugfix on 0.4.5.4-rc. + + o Minor bugfixes (build, cross-compilation, backport from 0.4.6.3-rc): + - Allow a custom "ar" for cross-compilation. Our previous build + script had used the $AR environment variable in most places, but + it missed one. Fixes bug 40369; bugfix on 0.4.5.1-alpha. + + o Minor bugfixes (channel, DoS, backport from 0.4.6.2-alpha): + - Fix a non-fatal BUG() message due to a too-early free of a string, + when listing a client connection from the DoS defenses subsystem. + Fixes bug 40345; bugfix on 0.4.3.4-rc. + + o Minor bugfixes (compiler warnings, backport from 0.4.6.3-rc): + - Fix an indentation problem that led to a warning from GCC 11.1.1. + Fixes bug 40380; bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (controller, backport from 0.4.6.1-alpha): + - Fix a "BUG" warning that would appear when a controller chooses + the first hop for a circuit, and that circuit completes. Fixes bug + 40285; bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (onion service, client, memory leak, backport from 0.4.6.3-rc): + - Fix a bug where an expired cached descriptor could get overwritten + with a new one without freeing it, leading to a memory leak. Fixes + bug 40356; bugfix on 0.3.5.1-alpha. + + o Minor bugfixes (testing, BSD, backport from 0.4.6.2-alpha): + - Fix pattern-matching errors when patterns expand to invalid paths + on BSD systems. Fixes bug 40318; bugfix on 0.4.5.1-alpha. Patch by + Daniel Pinto. + + Changes in version 0.3.5.14 - 2021-03-16 Tor 0.3.5.14 backports fixes for two important denial-of-service bugs in earlier versions of Tor. @@ -3216,7 +4170,7 @@ Changes in version 0.4.2.5 - 2019-12-09 uses mutexes. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - Disable backtrace signal handlers when shutting down tor. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -3561,7 +4515,7 @@ Changes in version 0.4.1.7 - 2019-12-09 uses mutexes. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - Disable backtrace signal handlers when shutting down tor. Fixes bug 31614; bugfix on 0.2.5.2-alpha. - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -3864,7 +4818,7 @@ Changes in version 0.4.0.6 - 2019-12-09 on 0.1.1.10-alpha. o Minor bugfixes (logging, backport from 0.4.2.2-alpha): - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -3898,7 +4852,7 @@ Changes in version 0.4.0.6 - 2019-12-09 o Minor bugfixes (onion services, backport from 0.4.1.1-alpha): - Avoid a GCC 9.1.1 warning (and possible crash depending on libc - implemenation) when failing to load an onion service client + implementation) when failing to load an onion service client authorization file. Fixes bug 30475; bugfix on 0.3.5.1-alpha. o Minor bugfixes (out-of-memory handler, backport from 0.4.1.2-alpha): @@ -4291,7 +5245,7 @@ Changes in version 0.3.5.9 - 2019-12-09 on 0.1.1.10-alpha. o Minor bugfixes (logging, backport from 0.4.2.2-alpha): - - Rate-limit our the logging message about the obsolete .exit + - Rate-limit the logging message about the obsolete .exit notation. Previously, there was no limit on this warning, which could potentially be triggered many times by a hostile website. Fixes bug 31466; bugfix on 0.2.2.1-alpha. @@ -4329,7 +5283,7 @@ Changes in version 0.3.5.9 - 2019-12-09 o Minor bugfixes (onion services, backport from 0.4.1.1-alpha): - Avoid a GCC 9.1.1 warning (and possible crash depending on libc - implemenation) when failing to load an onion service client + implementation) when failing to load an onion service client authorization file. Fixes bug 30475; bugfix on 0.3.5.1-alpha. o Minor bugfixes (out-of-memory handler, backport from 0.4.1.2-alpha): @@ -4938,7 +5892,7 @@ Changes in version 0.4.1.5 - 2019-08-20 o Minor bugfixes (onion services): - Avoid a GCC 9.1.1 warning (and possible crash depending on libc - implemenation) when failing to load an onion service client + implementation) when failing to load an onion service client authorization file. Fixes bug 30475; bugfix on 0.3.5.1-alpha. - When refusing to launch a controller's HSFETCH request because of rate-limiting, respond to the controller with a new response, @@ -5193,14 +6147,6 @@ Changes in version 0.4.0.5 - 2019-05-02 handshake with one another when these ciphersuites were enabled. Fixes bug 29241; bugfix on 0.3.5.1-alpha. - o Major bugfixes (windows, startup): - - When reading a consensus file from disk, detect whether it was - written in text mode, and re-read it in text mode if so. Always - write consensus files in binary mode so that we can map them into - memory later. Previously, we had written in text mode, which - confused us when we tried to map the file on windows. Fixes bug - 28614; bugfix on 0.4.0.1-alpha. - o Minor features (address selection): - Treat the subnet 100.64.0.0/10 as public for some purposes; private for others. This subnet is the RFC 6598 (Carrier Grade @@ -5437,8 +6383,6 @@ Changes in version 0.4.0.5 - 2019-05-02 on 0.3.0.1-alpha. o Minor bugfixes (compilation): - - Fix compilation warnings in test_circuitpadding.c. Fixes bug - 29169; bugfix on 0.4.0.1-alpha. - Silence a compiler warning in test-memwipe.c on OpenBSD. Fixes bug 29145; bugfix on 0.2.9.3-alpha. Patch from Kris Katterjohn. - Compile correctly on OpenBSD; previously, we were missing some @@ -5479,10 +6423,6 @@ Changes in version 0.4.0.5 - 2019-05-02 of AF_INET6. Fixes bug 28995; bugfix on 0.3.5.1-alpha. Patch from Kris Katterjohn. - o Minor bugfixes (linux seccomp sandbox): - - Fix startup crash when experimental sandbox support is enabled. - Fixes bug 29150; bugfix on 0.4.0.1-alpha. Patch by Peter Gerber. - o Minor bugfixes (logging): - Correct a misleading error message when IPv4Only or IPv6Only is used but the resolved address can not be interpreted as an address @@ -5566,11 +6506,6 @@ Changes in version 0.4.0.5 - 2019-05-02 of our circuit scheduling code. Fixes bug 29508; bugfix on 0.3.2.10. - o Minor bugfixes (shellcheck): - - Look for scripts in their correct locations during "make - shellcheck". Previously we had looked in the wrong place during - out-of-tree builds. Fixes bug 30263; bugfix on 0.4.0.1-alpha. - o Minor bugfixes (single onion services): - Allow connections to single onion services to remain idle without being disconnected. Previously, relays acting as rendezvous points @@ -5598,14 +6533,6 @@ Changes in version 0.4.0.5 - 2019-05-02 29530; bugfix on 0.3.5.8. - Fix our gcov wrapper script to look for object files at the correct locations. Fixes bug 29435; bugfix on 0.3.5.1-alpha. - - Decrease the false positive rate of stochastic probability - distribution tests. Fixes bug 29693; bugfix on 0.4.0.1-alpha. - - Fix intermittent failures on an adaptive padding test. Fixes one - case of bug 29122; bugfix on 0.4.0.1-alpha. - - Disable an unstable circuit-padding test that was failing - intermittently because of an ill-defined small histogram. Such - histograms will be allowed again after 29298 is implemented. Fixes - a second case of bug 29122; bugfix on 0.4.0.1-alpha. - Detect and suppress "bug" warnings from the util/time test on Windows. Fixes bug 29161; bugfix on 0.2.9.3-alpha. - Do not log an error-level message if we fail to find an IPv6 @@ -5615,8 +6542,6 @@ Changes in version 0.4.0.5 - 2019-05-02 objects in test_build_descriptors(), we now deallocate them one by one. This lets Coverity know that we are not leaking memory there and fixes CID 1442277. Fixes bug 28989; bugfix on 0.3.5.1-alpha. - - Check the time in the "Expires" header using approx_time(). Fixes - bug 30001; bugfix on 0.4.0.4-rc. o Minor bugfixes (TLS protocol): - When classifying a client's selection of TLS ciphers, if the @@ -5627,10 +6552,6 @@ Changes in version 0.4.0.5 - 2019-05-02 was causing Stem integration tests to stall in some cases. Fixes bug 30021; bugfix on 0.2.4.8-alpha. - o Minor bugfixes (UI): - - Lower log level of unlink() errors during bootstrap. Fixes bug - 29930; bugfix on 0.4.0.1-alpha. - o Minor bugfixes (usability): - Stop saying "Your Guard ..." in pathbias_measure_{use,close}_rate(). Some users took this phrasing to mean that the mentioned guard was diff --git a/changes/autoconf-2.70 b/changes/autoconf-2.70 deleted file mode 100644 index 27a9f243b1..0000000000 --- a/changes/autoconf-2.70 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (compilation): - - Make the autoconf script build correctly with autoconf versions 2.70 - and later. Closes part of ticket 40335. diff --git a/changes/bug40078 b/changes/bug40078 deleted file mode 100644 index 717309e076..0000000000 --- a/changes/bug40078 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfix (crypto): - - Disable the unused batch verification feature of ed25519-donna. Fixes - bug 40078; bugfix on 0.2.6.1-alpha. Found by Henry de Valence.
\ No newline at end of file diff --git a/changes/bug40175 b/changes/bug40175 deleted file mode 100644 index aa2ce9566f..0000000000 --- a/changes/bug40175 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor features (logging, diagnostic): - - Log decompression failures at a higher severity level, since they - can help provide missing context for other warning messages. - We rate-limit these messages, to avoid flooding the logs if they - begin to occur frequently. Closes ticket 40175. diff --git a/changes/bug40317 b/changes/bug40317 deleted file mode 100644 index 18ec499a51..0000000000 --- a/changes/bug40317 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor bugfixes (control, sandbox): - - Allows the control command SAVECONF to succeed when the seccomp - sandbox is enabled. Makes SAVECONF keep only one backup file to - simplify implementation. Fixes bug 40317; bugfix on 0.2.5.4-alpha. - Patch by Daniel Pinto. diff --git a/changes/bug40371 b/changes/bug40371 deleted file mode 100644 index 8cc7117f9f..0000000000 --- a/changes/bug40371 +++ /dev/null @@ -1,6 +0,0 @@ - o Minor bugfixes (compatibility): - - Fix compatibility with the most recent Libevent versions, which - no longer have an evdns_set_random_bytes() function. Because - this function has been a no-op since Libevent 2.0.4-alpha, - it is safe for us to just stop calling it. Fixes bug 40371; - bugfix on 0.2.1.7-alpha. diff --git a/changes/bug40375 b/changes/bug40375 deleted file mode 100644 index 7ac32bc628..0000000000 --- a/changes/bug40375 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor bugfixes (consensus handling): - - Avoid a set of bugs that could be caused by inconsistently preferring - an out-of-date consensus stored in a stale directory cache over - a more recent one stored on disk as the latest consensus. - Fixes bug 40375; bugfix on 0.3.1.1-alpha. diff --git a/changes/bug40380 b/changes/bug40380 deleted file mode 100644 index 24d2876b7d..0000000000 --- a/changes/bug40380 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfixes (compiler warnings): - - Fix an indentation problem that led to a warning from GCC 11.1.1. - Fixes bug 40380; bugfix on 0.3.0.1-alpha. diff --git a/changes/bug40383 b/changes/bug40383 deleted file mode 100644 index c4ca46fac7..0000000000 --- a/changes/bug40383 +++ /dev/null @@ -1,7 +0,0 @@ - o Minor bugfixes (timekeeping): - - Calculate the time of day correctly on systems where the time_t - type includes leap seconds. (This is not the case on most - operating systems, but on those where it occurs, our tor_timegm - function did not correctly invert the system's gmtime function, - which could result in assertion failures when calculating - voting schedules.) Fixes bug 40383; bugfix on 0.2.0.3-alpha. diff --git a/changes/bug40391 b/changes/bug40391 deleted file mode 100644 index e3c186275f..0000000000 --- a/changes/bug40391 +++ /dev/null @@ -1,9 +0,0 @@ - o Major bugfixes (security): - - Resist a hashtable-based CPU denial-of-service attack against - relays. Previously we used a naive unkeyed hash function to look up - circuits in a circuitmux object. An attacker could exploit this to - construct circuits with chosen circuit IDs in order to try to create - collisions and make the hash table inefficient. Now we use a SipHash - construction for this hash table instead. Fixes bug 40391; bugfix on - 0.2.4.4-alpha. This issue is also tracked as TROVE-2021-005. - Reported by Jann Horn from Google's Project Zero. diff --git a/changes/bug40392 b/changes/bug40392 deleted file mode 100644 index 4dffa50bb2..0000000000 --- a/changes/bug40392 +++ /dev/null @@ -1,4 +0,0 @@ - o Major bugfixes (security, denial of service, onion services): - - Fix an out-of-bounds memory access in v3 descriptor parsing. Fixes bug - 40392; bugfix on 0.3.0.1-alpha. This issue is also tracked as - TROVE-2021-006. Reported by Sergei Glazunov from Google's Project Zero.
\ No newline at end of file diff --git a/changes/bug40399 b/changes/bug40399 deleted file mode 100644 index 7954b85eaf..0000000000 --- a/changes/bug40399 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor features (compatibility): - - Remove an assertion function related to TLS renegotiation. - It was used nowhere outside the unit tests, and it was breaking - compilation with recent alpha releases of OpenSSL 3.0.0. - Closes ticket 40399. diff --git a/changes/bug40409 b/changes/bug40409 deleted file mode 100644 index b8d061be78..0000000000 --- a/changes/bug40409 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfixes (warnings, portability): - - Suppress a strict-prototype warning when building with some versions - of NSS. Fixes bug 40409; bugfix on 0.3.5.1-alpha. diff --git a/changes/bug40429 b/changes/bug40429 deleted file mode 100644 index 9bf3b63818..0000000000 --- a/changes/bug40429 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor bugfixes (compilation): - - Fix our configuration logic to detect whether we had OpenSSL 3: - previously, our logic was reversed. This has no other effect than to - change whether we suppress deprecated API warnings. Fixes - bug 40429; bugfix on 0.3.5.13. diff --git a/changes/fallbackdirs-2021-12-15 b/changes/fallbackdirs-2021-12-15 deleted file mode 100644 index ce08cef5cb..0000000000 --- a/changes/fallbackdirs-2021-12-15 +++ /dev/null @@ -1,2 +0,0 @@ - o Minor features (fallbackdir): - - Regenerate fallback directories generated on December 15, 2021. diff --git a/changes/fallbackdirs-2022-02-04 b/changes/fallbackdirs-2022-02-04 deleted file mode 100644 index 3d4ec28fe9..0000000000 --- a/changes/fallbackdirs-2022-02-04 +++ /dev/null @@ -1,2 +0,0 @@ - o Minor features (fallbackdir): - - Regenerate fallback directories generated on February 04, 2022. diff --git a/changes/geoip-2021-05-07 b/changes/geoip-2021-05-07 deleted file mode 100644 index 07bf12c4d8..0000000000 --- a/changes/geoip-2021-05-07 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (geoip data): - - Update the geoip files to match the IPFire Location Database, - as retrieved on 2021/05/07. diff --git a/changes/geoip-2021-06-10 b/changes/geoip-2021-06-10 deleted file mode 100644 index 2b798012c8..0000000000 --- a/changes/geoip-2021-06-10 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (geoip data): - - Update the geoip files to match the IPFire Location Database, - as retrieved on 2021/06/10. diff --git a/changes/geoip-2021-08-12 b/changes/geoip-2021-08-12 deleted file mode 100644 index 59afcc5bb7..0000000000 --- a/changes/geoip-2021-08-12 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (geoip data): - - Update the geoip files to match the IPFire Location Database, - as retrieved on 2021/08/12. diff --git a/changes/geoip-2021-12-15 b/changes/geoip-2021-12-15 deleted file mode 100644 index 5123557138..0000000000 --- a/changes/geoip-2021-12-15 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (geoip data): - - Update the geoip files to match the IPFire Location Database, - as retrieved on 2021/12/15. diff --git a/changes/geoip-2022-02-04 b/changes/geoip-2022-02-04 deleted file mode 100644 index 41921da85f..0000000000 --- a/changes/geoip-2022-02-04 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (geoip data): - - Update the geoip files to match the IPFire Location Database, - as retrieved on 2022/02/04. diff --git a/changes/ticket26299 b/changes/ticket26299 deleted file mode 100644 index 6b08adf53c..0000000000 --- a/changes/ticket26299 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor feature (reproducible build): - - The repository can now build reproducible tarballs which adds the build - command "make dist-reprod" for that purpose. Closes ticket 26299. diff --git a/changes/ticket30477 b/changes/ticket30477 deleted file mode 100644 index 379fc4e7eb..0000000000 --- a/changes/ticket30477 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor features (bridge): - - We now announce the URL to Tor's new bridge status at - https://bridges.torproject.org/ when Tor is configured to run as a bridge - relay. Closes ticket 30477. diff --git a/changes/ticket40290 b/changes/ticket40290 deleted file mode 100644 index 3d3a64be93..0000000000 --- a/changes/ticket40290 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfix (logging, relay): - - Emit a warning if an Address is found to be internal and tor can't use it. - Fixes bug 40290; bugfix on 0.4.5.1-alpha. diff --git a/changes/ticket40301 b/changes/ticket40301 deleted file mode 100644 index c1fd821e3f..0000000000 --- a/changes/ticket40301 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (relay): - - Reduce the compression level for data streaming from HIGH to LOW. Fixes - bug 40301; bugfix on 0.3.5.1-alpha. - diff --git a/changes/ticket40337 b/changes/ticket40337 deleted file mode 100644 index 1c86fc4c99..0000000000 --- a/changes/ticket40337 +++ /dev/null @@ -1,16 +0,0 @@ - o Minor features (testing): - - On a testing network, relays can now use the - TestingMinTimeToReportBandwidth option to change - the smallest amount of time over which they're willing to report - their observed maximum bandwidth. Previously, this was fixed - at 1 day. For safety, values under 2 hours are only supported on - testing networks. Part of a fix for ticket 40337. - - o Minor features (testing): - - Relays on testing networks now report their observed bandwidths - immediately from startup. Previously, they waited - until they had been running for a full day. Closes ticket - 40337. - - Relays on testing networks no longer rate-limit how frequently - they are willing to report new bandwidth measurements. Part of a fix - for ticket 40337. diff --git a/changes/ticket40356 b/changes/ticket40356 deleted file mode 100644 index 59c32ce0cc..0000000000 --- a/changes/ticket40356 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfix (onion service, client, memory leak): - - An expired cached descriptor could have been overwritten with a new one - leading to a memory leak. Fixes bug 40356; bugfix on 0.3.5.1-alpha. diff --git a/changes/ticket40369 b/changes/ticket40369 deleted file mode 100644 index abb59a7125..0000000000 --- a/changes/ticket40369 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (build, cross-compilation): - - Allow a custom "ar" for cross-compilation. Our previous build script - had used the $AR environment variable in most places, but it missed - one. Fixes bug 40369; bugfix on 0.4.5.1-alpha. diff --git a/changes/ticket40370 b/changes/ticket40370 deleted file mode 100644 index fcdb0eb173..0000000000 --- a/changes/ticket40370 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfix (metrics port): - - Fix a bug that made tor try to re-bind() every 60 seconds on an already - open MetricsPort. Fixes bug 40370; bugfix on 0.4.5.1-alpha. - diff --git a/changes/ticket40373 b/changes/ticket40373 deleted file mode 100644 index 3b2edd0652..0000000000 --- a/changes/ticket40373 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (onion services): - - Add warning message when connecting to deprecated v2 onions. - Closes ticket 40373.
\ No newline at end of file diff --git a/changes/ticket40374 b/changes/ticket40374 deleted file mode 100644 index 8b6e99b8af..0000000000 --- a/changes/ticket40374 +++ /dev/null @@ -1,4 +0,0 @@ - o Removed features: - - Remove unneeded code for parsing private keys in directory documents. - This code was only used for client authentication in v2 onion - services, which are now unsupported. Closes ticket 40374. diff --git a/changes/ticket40378 b/changes/ticket40378 deleted file mode 100644 index 35b2fd7bd4..0000000000 --- a/changes/ticket40378 +++ /dev/null @@ -1,4 +0,0 @@ - o Major bugfixes (onion service, control port): - - Make the ADD_ONION command properly configure client authorization. Before - this fix, the created onion failed to add the client(s). Fixes bug 40378; - bugfix on 0.4.6.1-alpha. diff --git a/changes/ticket40382 b/changes/ticket40382 deleted file mode 100644 index 5ac1b771b9..0000000000 --- a/changes/ticket40382 +++ /dev/null @@ -1,6 +0,0 @@ - o Minor features (compatibility, Linux seccomp sandbox): - - Add a workaround to enable the Linux sandbox to work correctly - on systems running Glibc 2.33. These versions have started - using the fstatat() system call, which previously our sandbox did not - allow. - Closes ticket 40382; see the ticket for a discussion of tradeoffs. diff --git a/changes/ticket40389 b/changes/ticket40389 deleted file mode 100644 index 7dcf65b32e..0000000000 --- a/changes/ticket40389 +++ /dev/null @@ -1,3 +0,0 @@ - o Major bugfixes (relay, TROVE): - - Don't allow entry or middle relays to spoof RELAY_END or RELAY_RESOLVED - cell on half-closed streams. Fixes bug 40389; bugfix on 0.3.5.1-alpha. diff --git a/changes/ticket40390 b/changes/ticket40390 deleted file mode 100644 index b56fa4d9da..0000000000 --- a/changes/ticket40390 +++ /dev/null @@ -1,8 +0,0 @@ - o Major bugfixes (security, defense-in-depth): - - Detect a wider variety of failure conditions from the OpenSSL RNG - code. Previously, we would detect errors from a missing RNG - implementation, but not failures from the RNG code itself. - Fortunately, it appears those failures do not happen in practice - when Tor is using OpenSSL's default RNG implementation. - Fixes bug 40390; bugfix on 0.2.8.1-alpha. This issue is also tracked as - TROVE-2021-004. Reported by Jann Horn at Google's Project Zero. diff --git a/changes/ticket40410 b/changes/ticket40410 deleted file mode 100644 index 658e0683c7..0000000000 --- a/changes/ticket40410 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (compilation): - - Fix a compilation error when trying to build Tor with a compiler that - does not support expanding statitically initialized const values in - macro's. Fixes bug 40410; bugfix on 0.4.5.1-alpha diff --git a/changes/ticket40419 b/changes/ticket40419 deleted file mode 100644 index 0004329662..0000000000 --- a/changes/ticket40419 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (testing): - - Enable the deterministic RNG for unit tests that covers the address set - bloomfilter-based API's. Fixes bug 40419; bugfix on 0.3.3.2-alpha. diff --git a/changes/ticket40421 b/changes/ticket40421 deleted file mode 100644 index d2dcc5533d..0000000000 --- a/changes/ticket40421 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfixes (onion service): - - Send back the extended SOCKS error 0xF6 for a v2 onion address. Fixes bug - 40421; bugfix on 0.4.6.2-alpha. diff --git a/changes/ticket40434 b/changes/ticket40434 deleted file mode 100644 index 988bb416be..0000000000 --- a/changes/ticket40434 +++ /dev/null @@ -1,6 +0,0 @@ - o Minor bugfix (onion service): - - Do not flag an HSDir as non-running in case the descriptor upload or - fetch fails. An onion service closes pending directory connections - before uploading a new descriptor which can thus lead to wrongly - flagging many relays and thus affecting circuit building path selection. - Fixes bug 40434; bugfix on 0.2.0.13-alpha. diff --git a/changes/ticket40447 b/changes/ticket40447 deleted file mode 100644 index d1be646a7d..0000000000 --- a/changes/ticket40447 +++ /dev/null @@ -1,2 +0,0 @@ - o Minor feature (fallbackdir): - - Regenerate fallback directories list. Close ticket 40447. diff --git a/changes/ticket40474 b/changes/ticket40474 deleted file mode 100644 index d2a7231106..0000000000 --- a/changes/ticket40474 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor bugfixes (onion service, TROVE-2021-008): - - Only log once any v2 access attempts in order to not pollute the logs - with warnings and avoid recording the times on disk when v2 access was - attempted. Important to note that the onion address was _never_ logged. - That is a Low security issue. Fixes bug 40474; bugfix on 0.4.5.8. diff --git a/changes/ticket40476 b/changes/ticket40476 deleted file mode 100644 index 86e4377a1c..0000000000 --- a/changes/ticket40476 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfix (onion service): - - Improve logging when a bad HS version is given. Fixes bug 40476; bugfix on - 0.4.6.1-alpha. diff --git a/changes/ticket40491 b/changes/ticket40491 deleted file mode 100644 index 01c6c7d748..0000000000 --- a/changes/ticket40491 +++ /dev/null @@ -1,7 +0,0 @@ - o Major bugfixes (relay, overload state): - - Report the general overload state for DNS timeout errors only if X% of all - DNS queries over Y seconds are errors. Before that, it only took 1 timeout - to report the overload state which was just too low of a threshold. The X - and Y values are 1% and 10 minutes respectively but they are also - controlled by consensus parameters. Fixes bug 40491; bugfix on - 0.4.6.1-alpha. diff --git a/changes/ticket40493 b/changes/ticket40493 deleted file mode 100644 index eb9baf916b..0000000000 --- a/changes/ticket40493 +++ /dev/null @@ -1,2 +0,0 @@ - o Minor features (fallbackdir): - - Regenerate fallback directories for October 2021. Close ticket 40493. diff --git a/changes/ticket40494 b/changes/ticket40494 deleted file mode 100644 index a0e6c38443..0000000000 --- a/changes/ticket40494 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor bugfixes (relay): - - Reject IPv6-only DirPorts. Our reachability self-test forces DirPorts to - be IPv4, but our configuration parser allowed them to be IPv6-only, - which led to an assertion failure. Fixes bug 40494; bugfix on - 0.4.5.1-alpha. diff --git a/changes/ticket40500 b/changes/ticket40500 deleted file mode 100644 index 2e5ff39761..0000000000 --- a/changes/ticket40500 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfix (CI, onion service): - - Exclude onion service version 2 Stem tests in our CI. Fixes bug 40500; - bugfix on 0.3.2.1-alpha. diff --git a/changes/ticket40504 b/changes/ticket40504 deleted file mode 100644 index 9095591419..0000000000 --- a/changes/ticket40504 +++ /dev/null @@ -1,3 +0,0 @@ - o Documentation (man, relay): - - Missing "OverloadStatistics" in tor.1 manpage. Fixes bug 40504; bugfix on - 0.4.6.1-alpha. diff --git a/changes/ticket40509 b/changes/ticket40509 deleted file mode 100644 index ba4502ff3b..0000000000 --- a/changes/ticket40509 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfix (relay): - - Remove the HSDir and HSIntro onion service v2 protocol versions so relay - stop advertising that they support them. Fixes bug 40509; bugfix on - 0.3.5.17. diff --git a/changes/ticket40511 b/changes/ticket40511 deleted file mode 100644 index 756edd874d..0000000000 --- a/changes/ticket40511 +++ /dev/null @@ -1,6 +0,0 @@ - o Minor features (compilation): - - Give an error message if trying to build with a version of LibreSSL - known not to work with Tor. (There's an incompatibility with - LibreSSL versions 3.2.1 through 3.4.0 inclusive because of their - incompatibility with OpenSSL 1.1.1's TLSv1.3 APIs.) - Closes ticket 40511. diff --git a/changes/ticket40527 b/changes/ticket40527 deleted file mode 100644 index 631b3d4bb9..0000000000 --- a/changes/ticket40527 +++ /dev/null @@ -1,5 +0,0 @@ - o Major bugfixes (relay, overload): - - Don't make Tor DNS timeout trigger an overload general state. These - timeouts are different from DNS server timeout. They have to be seen as - timeout related to UX and not because of a network problem. Fixes bug - 40527; bugfix on 0.4.6.1-alpha. diff --git a/changes/ticket40544 b/changes/ticket40544 deleted file mode 100644 index b0754f0fd4..0000000000 --- a/changes/ticket40544 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfix (logging): - - Update a log notice dead URL to a working one. Fixes bug 40544; bugfix on - 0.3.5.1-alpha. diff --git a/changes/ticket40552 b/changes/ticket40552 deleted file mode 100644 index 7811f3a743..0000000000 --- a/changes/ticket40552 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfixes (MetricsPort, Prometheus): - - Add double quotes to the label values of the onion service metrics. Fixes - bug 40552; bugfix on 0.4.5.1-alpha. diff --git a/changes/ticket40579 b/changes/ticket40579 deleted file mode 100644 index e2558c1102..0000000000 --- a/changes/ticket40579 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfixes (onion service, client): - - Fix a fatal assert due to a guard subsystem recursion triggered by the - onion service client. Fixes bug 40579; bugfix on 0.3.5.1-alpha. diff --git a/changes/ticket40581 b/changes/ticket40581 deleted file mode 100644 index 315215d8ed..0000000000 --- a/changes/ticket40581 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (metrics port, onion service): - - Fix the metrics with a port label to be unique. Before this, all ports of - an onion service would be on the same line which violates the Prometheus - rules of unique labels. Fixes bug 40581; bugfix on 0.4.5.1-alpha. diff --git a/config.rust.in b/config.rust.in deleted file mode 100644 index 11b671b980..0000000000 --- a/config.rust.in +++ /dev/null @@ -1,24 +0,0 @@ -# Used by our cargo build.rs script to get variables from autoconf. -# -# The "configure" script will generate "config.rust" from "config.rust.in", -# and then build.rs will read "config.rust". - -BUILDDIR=@BUILDDIR@ -TOR_LDFLAGS_zlib=@TOR_LDFLAGS_zlib@ -TOR_LDFLAGS_nss=@TOR_LDFLAGS_nss@ -TOR_LDFLAGS_openssl=@TOR_LDFLAGS_openssl@ -TOR_LDFLAGS_libevent=@TOR_LDFLAGS_libevent@ -TOR_ZLIB_LIBS=@TOR_ZLIB_LIBS@ -TOR_LIB_MATH=@TOR_LIB_MATH@ -TOR_LIBEVENT_LIBS=@TOR_LIBEVENT_LIBS@ -TOR_OPENSSL_LIBS=@TOR_OPENSSL_LIBS@ -TOR_LIB_WS32=@TOR_LIB_WS32@ -TOR_LIB_GDI=@TOR_LIB_GDI@ -TOR_LIB_USERENV=@TOR_LIB_USERENV@ -CURVE25519_LIBS=@CURVE25519_LIBS@ -TOR_SYSTEMD_LIBS=@TOR_SYSTEMD_LIBS@ -TOR_LZMA_LIBS=@TOR_LZMA_LIBS@ -TOR_ZSTD_LIBS=@TOR_ZSTD_LIBS@ -LIBS=@LIBS@ -LDFLAGS=@LDFLAGS@ -NSS_LIBS=@NSS_LIBS@
\ No newline at end of file diff --git a/configure.ac b/configure.ac index 75e76d9075..d903e5ec39 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ dnl Copyright (c) 2007-2019, The Tor Project, Inc. dnl See LICENSE for licensing information AC_PREREQ([2.63]) -AC_INIT([tor],[0.4.6.10-dev]) +AC_INIT([tor],[0.4.7.5-alpha-dev]) AC_CONFIG_SRCDIR([src/app/main/tor_main.c]) AC_CONFIG_MACRO_DIR([m4]) @@ -18,7 +18,7 @@ AC_DEFINE_UNQUOTED([CONFIG_FLAGS], ["$configure_flags"], [Flags passed to config # version number changes. Tor uses it to make sure that it # only shuts down for missing "required protocols" when those protocols # are listed as required by a consensus after this date. -AC_DEFINE(APPROX_RELEASE_DATE, ["2022-02-04"], # for 0.4.6.10-dev +AC_DEFINE(APPROX_RELEASE_DATE, ["2022-03-25"], # for 0.4.7.5-alpha-dev [Approximate date when this software was released. (Updated when the version changes.)]) # "foreign" means we don't follow GNU package layout standards @@ -75,10 +75,6 @@ AC_ARG_ENABLE(oss-fuzz, AS_HELP_STRING(--enable-oss-fuzz, [build extra fuzzers based on 'oss-fuzz' environment])) AC_ARG_ENABLE(memory-sentinels, AS_HELP_STRING(--disable-memory-sentinels, [disable code that tries to prevent some kinds of memory access bugs. For fuzzing only.])) -AC_ARG_ENABLE(rust, - AS_HELP_STRING(--enable-rust, [enable rust integration])) -AC_ARG_ENABLE(cargo-online-mode, - AS_HELP_STRING(--enable-cargo-online-mode, [Allow cargo to make network requests to fetch crates. For builds with rust only.])) AC_ARG_ENABLE(restart-debugging, AS_HELP_STRING(--enable-restart-debugging, [Build Tor with support for debugging in-process restart. Developers only.])) AC_ARG_ENABLE(zstd-advanced-apis, @@ -115,10 +111,14 @@ AM_CONDITIONAL(COVERAGE_ENABLED, test "x$enable_coverage" = "xyes") AM_CONDITIONAL(DISABLE_ASSERTS_IN_UNIT_TESTS, test "x$enable_asserts_in_tests" = "xno") AM_CONDITIONAL(LIBFUZZER_ENABLED, test "x$enable_libfuzzer" = "xyes") AM_CONDITIONAL(OSS_FUZZ_ENABLED, test "x$enable_oss_fuzz" = "xyes") -AM_CONDITIONAL(USE_RUST, test "x$enable_rust" = "xyes") AM_CONDITIONAL(USE_NSS, test "x$enable_nss" = "xyes") AM_CONDITIONAL(USE_OPENSSL, test "x$enable_nss" != "xyes") +if test "x$enable_coverage" = "xyes"; then + AC_DEFINE(ENABLE_COVERAGE, 1, + [Defined if coverage support is enabled for the unit tests]) +fi + if test "x$enable_nss" = "xyes"; then AC_DEFINE(ENABLE_NSS, 1, [Defined if we're building with NSS.]) @@ -233,6 +233,7 @@ AC_ARG_ENABLE(fragile-hardening, AS_HELP_STRING(--enable-fragile-hardening, [enable more fragile and expensive compiler hardening; makes Tor slower])) if test "x$enable_expensive_hardening" = "xyes" || test "x$enable_fragile_hardening" = "xyes"; then fragile_hardening="yes" + AC_DEFINE(ENABLE_FRAGILE_HARDENING, 1, [Defined if we're building with additional, fragile and expensive compiler hardening]) AC_DEFINE(DEBUG_SMARTLIST, 1, [Enable smartlist debugging]) fi @@ -456,7 +457,7 @@ AM_CONDITIONAL(BUILD_HTML_DOCS, [test "x$enable_html_manual" != "xno"]) AM_PROG_CC_C_O dnl Before autoconf 2.70, AC_PROG_CC_C99 is supposedly necessary for some -dnl compilers if you wan't C99 support. Starting with 2.70, it is obsolete and +dnl compilers if you want C99 support. Starting with 2.70, it is obsolete and dnl forbidden. m4_version_prereq([2.70], [:], [AC_PROG_CC_C99]) @@ -477,13 +478,6 @@ fi AM_CONDITIONAL(USEPYTHON, [test "x$PYTHON" != "x"]) -dnl List all external rust crates we depend on here. Include the version -rust_crates=" \ - digest-0.7.2 \ - libc-0.2.39 \ -" -AC_SUBST(rust_crates) - ifdef([AC_C_FLEXIBLE_ARRAY_MEMBER], [ AC_C_FLEXIBLE_ARRAY_MEMBER ], [ @@ -636,105 +630,6 @@ fi AC_C_BIGENDIAN -AC_ARG_VAR([TOR_RUST_TARGET], [Rust target, must be specified when cross-compiling (HOST != BUILD). example: i686-pc-windows-gnu]) - -if test "x$enable_rust" = "xyes"; then - AC_ARG_VAR([RUSTC], [path to the rustc binary]) - AC_CHECK_PROG([RUSTC], [rustc], [rustc],[no]) - if test "x$RUSTC" = "xno"; then - AC_MSG_ERROR([rustc unavailable but rust integration requested.]) - fi - - AC_ARG_VAR([CARGO], [path to the cargo binary]) - AC_CHECK_PROG([CARGO], [cargo], [cargo],[no]) - if test "x$CARGO" = "xno"; then - AC_MSG_ERROR([cargo unavailable but rust integration requested.]) - fi - - AC_DEFINE([HAVE_RUST], 1, [have Rust]) - if test "x$enable_fatal_warnings" = "xyes"; then - RUST_WARN= - else - RUST_WARN=# - fi - if test "x$enable_cargo_online_mode" = "xyes"; then - CARGO_ONLINE= - RUST_DL=# - else - CARGO_ONLINE=--frozen - RUST_DL= - - dnl When we're not allowed to touch the network, we need crate dependencies - dnl locally available. - AC_MSG_CHECKING([rust crate dependencies]) - AC_ARG_VAR([TOR_RUST_DEPENDENCIES], [path to directory with local crate mirror]) - if test "x$TOR_RUST_DEPENDENCIES" = "x"; then - TOR_RUST_DEPENDENCIES="${srcdir}/src/ext/rust/crates" - fi - dnl Check whether the path exists before we try to cd into it. - if test ! -d "$TOR_RUST_DEPENDENCIES"; then - AC_MSG_ERROR([Rust dependency directory $TOR_RUST_DEPENDENCIES does not exist. Specify a dependency directory using the TOR_RUST_DEPENDENCIES variable or allow cargo to fetch crates using --enable-cargo-online-mode.]) - ERRORED=1 - fi - dnl Make the path absolute, since we'll be using it from within a - dnl subdirectory. - TOR_RUST_DEPENDENCIES=$(cd "$TOR_RUST_DEPENDENCIES" ; pwd) - - for dep in $rust_crates; do - if test ! -d "$TOR_RUST_DEPENDENCIES"/"$dep"; then - AC_MSG_ERROR([Failure to find rust dependency $TOR_RUST_DEPENDENCIES/$dep. Specify a dependency directory using the TOR_RUST_DEPENDENCIES variable or allow cargo to fetch crates using --enable-cargo-online-mode.]) - ERRORED=1 - fi - done - if test "x$ERRORED" = "x"; then - AC_MSG_RESULT([yes]) - fi - fi - - dnl For now both MSVC and MinGW rust libraries will output static libs with - dnl the MSVC naming convention. - if test "$bwin32" = "true"; then - tor_rust_static_name=tor_rust.lib - else - tor_rust_static_name=libtor_rust.a - fi - - AC_CANONICAL_BUILD - - if test -n "$TOR_RUST_TARGET"; then - if test "$host" = "$build"; then - AC_MSG_ERROR([HOST = BUILD is invalid if TOR_RUST_TARGET is specified, see configure --help for more information.]) - fi - RUST_TARGET_PROP="target = '$TOR_RUST_TARGET'" - TOR_RUST_LIB_PATH="src/rust/target/$TOR_RUST_TARGET/release/$tor_rust_static_name" - else - if test "$host" != "$build"; then - AC_MSG_ERROR([TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled.]) - fi - RUST_TARGET_PROP= - TOR_RUST_LIB_PATH="src/rust/target/release/$tor_rust_static_name" - fi - - AC_SUBST(RUST_TARGET_PROP) - AC_SUBST(TOR_RUST_LIB_PATH) - AC_SUBST(CARGO_ONLINE) - AC_SUBST(RUST_WARN) - AC_SUBST(RUST_DL) - - dnl Let's check the rustc version, too - AC_MSG_CHECKING([rust version]) - RUSTC_VERSION=`$RUSTC --version` - RUSTC_VERSION_MAJOR=`$RUSTC --version | cut -d ' ' -f 2 | cut -d '.' -f 1` - RUSTC_VERSION_MINOR=`$RUSTC --version | cut -d ' ' -f 2 | cut -d '.' -f 2` - if test "x$RUSTC_VERSION_MAJOR" = "x" -o "x$RUSTC_VERSION_MINOR" = "x"; then - AC_MSG_ERROR([rustc version couldn't be identified]) - fi - if test "$RUSTC_VERSION_MAJOR" -lt 2 -a "$RUSTC_VERSION_MINOR" -lt 31; then - AC_MSG_ERROR([rustc must be at least version 1.31.0]) - fi - AC_MSG_RESULT([$RUSTC_VERSION]) -fi - AC_SEARCH_LIBS(socket, [socket network]) AC_SEARCH_LIBS(gethostbyname, [nsl]) AC_SEARCH_LIBS(dlopen, [dl]) @@ -794,6 +689,7 @@ AC_CHECK_FUNCS( readpassphrase \ rint \ sigaction \ + snprintf \ socketpair \ statvfs \ strncasecmp \ @@ -811,7 +707,8 @@ AC_CHECK_FUNCS( uname \ usleep \ vasprintf \ - _vscprintf + _vscprintf \ + vsnprintf ) # Apple messed up when they added some functions: they @@ -910,8 +807,6 @@ if test "$bwin32" = "true"; then TOR_LIB_WS32=-lws2_32 TOR_LIB_IPHLPAPI=-liphlpapi TOR_LIB_SHLWAPI=-lshlwapi - # Some of the cargo-cults recommend -lwsock32 as well, but I don't - # think it's actually necessary. TOR_LIB_GDI=-lgdi32 TOR_LIB_USERENV=-luserenv TOR_LIB_BCRYPT=-lbcrypt @@ -1467,33 +1362,6 @@ if test "$fragile_hardening" = "yes"; then TOR_CHECK_CFLAGS([-fno-omit-frame-pointer]) fi -dnl Find the correct libraries to add in order to use the sanitizers. -dnl -dnl When building Rust, Cargo will run the linker with the -nodefaultlibs -dnl option, which will prevent the compiler from linking the sanitizer -dnl libraries it needs. We need to specify them manually. -dnl -dnl What's more, we need to specify them in a linker script rather than -dnl from build.rs: these options aren't allowed in the cargo:rustc-flags -dnl variable. -RUST_LINKER_OPTIONS="" -if test "x$have_clang" = "xyes"; then - if test "x$CFLAGS_ASAN" != "x"; then - RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=$CFLAGS_ASAN -Cdefault-linker-libraries" - fi - if test "x$CFLAGS_UBSAN" != "x"; then - RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=$CFLAGS_UBSAN -Cdefault-linker-libraries" - fi -else - if test "x$CFLAGS_ASAN" != "x"; then - RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=-fsanitize=address -Cdefault-linker-libraries" - fi - if test "x$CFLAGS_UBSAN" != "x"; then - RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -Clink-arg=-fsanitize=undefined -Cdefault-linker-libraries" - fi -fi -AC_SUBST(RUST_LINKER_OPTIONS) - CFLAGS_BUGTRAP="$CFLAGS_FTRAPV $CFLAGS_ASAN $CFLAGS_UBSAN" CFLAGS_CONSTTIME="$CFLAGS_FWRAPV" @@ -2704,11 +2572,9 @@ CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_z AC_CONFIG_FILES([ Doxyfile Makefile - config.rust contrib/operator-tools/tor.logrotate src/config/torrc.sample src/config/torrc.minimal - src/rust/.cargo/config scripts/maint/checkOptionDocs.pl warning_flags ]) @@ -2784,12 +2650,6 @@ AS_ECHO test "x$enable_fatal_warnings" = "xyes" && value=1 || value=0 PPRINT_PROP_BOOL([Warnings are fatal (--enable-fatal-warnings)], $value) -test "x$enable_rust" = "xyes" && value=1 || value=0 -PPRINT_PROP_BOOL([Rust support (--enable-rust)], $value) - -test "x$enable_cargo_online_mode" = "xyes" && value=1 || value=0 -PPRINT_PROP_BOOL([Cargo Online Fetch (--enable-cargo-online-mode)], $value) - test "x$enable_android" = "xyes" && value=1 || value=0 PPRINT_PROP_BOOL([Android support (--enable-android)], $value) diff --git a/contrib/operator-tools/tor-exit-notice.html b/contrib/operator-tools/tor-exit-notice.html index 278d3de502..cedb3cb353 100644 --- a/contrib/operator-tools/tor-exit-notice.html +++ b/contrib/operator-tools/tor-exit-notice.html @@ -1,18 +1,17 @@ -<?xml version="1.0"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> +<!DOCTYPE html> +<html lang="en-US"> <head> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta charset="UTF-8"> <title>This is a Tor Exit Router</title> - +<meta name="viewport" content="width=device-width, initial-scale=1"> +<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAMxQTFRFAAAAcK9AAAAAaK9IAAAAaq9FAAAAaK9EAAAAaa9DAAAAaK9FAAAAaa9EAAAAaK9EAgICZ7FEAgICaLBDAgICZ7BEAQEBaLBEAQEBZ7BEAQEBaLBDAQEBZ7BEHDATAQEB9fje5unQ19nCx8q1uLqnqauZmpuLaLBEiox9e31wbG1iSHkvfkeYXV5UdkOPbj6FZzp8TU5GXzZyVzFpPj84Ty1fRyhWQCRNLy8qLykwJyQmMBs6ICAdKBcwIBMnGA4dEBAPEQoUCQUKAQEBYGuyKwAAACB0Uk5TABAQICAwMEBAUFBgYHBwgICPj5+fr6+/v8/P39/v7+9rEnzIAAABbUlEQVR42n2SbVuCMBSG8TXzpUzN1DTOBoyNmIZOpUJS9///U0f7EFzIno+77z3b2TXrZmo1y5i7oZl3ppXOsFKKHzuL3uu0nDeeF1PfwK3hwjfyiu/7C9MM9yg0ynG7/uT7PcP+vn57f7EMqUduPG+aDA0ibRl4VUNw6Bv4WNJ4p0sr2rYijKWb86B6e/uRA/U8sVke7HaRN+cxBZBEkM8wxJLCgLYkQCIGzGXbMPwoGDMJ4CkHqKPIIbwY+at2EwCBDnCXsa8Qs5/nC7BbIPfcAKRaobA8515UExIh5wwrpFyHmNyDtRIEQJSDkuTqKuzHWUEBFkTIPSaY2l+FSXbIBAWPA9BAuDL5E0ZWJjYVjiDYTwKi9PWI9CErjIQTCAqUg3D0VVjpelZoHWnEObguCKH1EoXviZXLIHbihLgMBNc/yLc2FuQyioMkAgkq0jvkul38sEedRAFL9Gm5Tm9+zPrI1pekp1n3f/UXYAE8WMMDnnoAAAAASUVORK5CYII="> <!-- This notice is intended to be placed on a virtual host for a domain that your Tor exit node IP reverse resolves to so that people who may be about to file an abuse complaint would check it first before bothering you or your ISP. Ex: -http://tor-exit.yourdomain.org or http://tor-readme.yourdomain.org. +https://tor-exit.yourdomain.org or https://tor-readme.yourdomain.org. This type of setup has proven very effective at reducing abuse complaints for exit node operators. @@ -21,213 +20,250 @@ There are a few places in this document that you may want to customize. They are marked with FIXME. --> +<style> +:root{ +--background-color: white; +--text-color: rgb(33, 37, 41); +--link-color: rgb(116, 42, 152); +} +@media (prefers-color-scheme: dark){ +:root{ +--background-color: rgb(34, 34, 34); +--text-color: rgb(221, 221, 221); +--link-color: rgb(219, 142, 255); +} +} +*{ +font-family: Arial; +box-sizing: border-box; +} +html{ +background: var(--background-color); +} +body{ +margin-left: auto; +margin-right: auto; +padding-left: 5vw; +padding-right: 5vw; +max-width: 1000px; +} +h1, p{ +color: var(--text-color); +} +h1{ +font-size: 55px; +text-align: center; +} +p, a{ +font-size: 20px; +} +a{ +color: var(--link-color); +text-decoration: none; +} +a:hover{ +filter: brightness(.8); +text-decoration: underline; +} +.links{ +display: flex; +flex-wrap: wrap; +justify-content: space-evenly; +} +.links > a{ +margin: 10px; +white-space: nowrap; +} +</style> </head> <body> - -<p style="text-align:center; font-size:xx-large; font-weight:bold">This is a -Tor Exit Router</p> +<main> +<h1>This is a Tor Exit Router</h1> +<p style="text-align:center"> +<svg xmlns="http://www.w3.org/2000/svg" width="500" viewBox="0 0 274.3 159.9" style="width:100%;max-width:500px"> +<desc></desc> +<defs> +<style> +.a{fill:none}.b,.e{fill:#895ba5}.b{stroke:#895ba5}.j,.l,.m,.o,.b,.d{stroke-miterlimit:10}.l,.b{stroke-width:.75px}.k,.c,.f{fill:#24093b}.a,.c,.f{stroke:#24093b;stroke-linecap:round;stroke-linejoin:round}.m,.o,.c,.d{stroke-width:.5px}.i,.j,.d{fill:#6fc8b7}.j,.d{stroke:#6fc8b7}.l,.m,.g{fill:#fed916}.h{fill:#fff}.a{stroke-width:1.6px}.j{stroke-width:.68px}.l,.m{stroke:#fed916}.n,.o{fill:#cf63a6}.o{stroke:#cf63a6} +</style> +</defs> +<path d="M153.6 27.5s6.2 13.1 18.1 3c-8-5.7-10.9-7.6-10.9-7.6z" class="c"/> +<path d="M212.9 96.2c3.2 6.5 5.2 13.8 9 20 2.3 3.8 4 4.5 8.3 3.3 8.2-2.3 17.4-6.3 25.6-9.7l-1.2-7.6a7.5 7.5 0 0 1-3.2 1.2c-2 0-4-1-5.8-1.6-1.4-.4-3.9.4-4.6.8-3.5 1.9-4.8 4-7 7-.6-7.8-1.2-15.6-1.5-23.4-6.6 3.4-12.9 7-19.6 10z" class="d"/> +<path d="M217.2 108.6c.6 1.3 1.7 2 1.5 2.8 1.7 1.9 1.8 5.2 3 6.6 2.3-4 5.5-7.4 7.9-11.2.5-1.5 1.8-2.3 2.4-3.3.7-1.8 2.8-4.4 2.4-7.1.6-3.7.4-7.4 1-11-4-5-19.5 18.8-19.5 19.2-.4.5 1.4 2.6 1.3 4zm3.4 6.8c-.4-.3.3-.5 0 0z" class="e"/> +<path d="M221 115.4c-1.2-3.3-.3-9.3 1.4-11.6 2.3-3 5.3-3.6 7.4-5.5 1.7-1.4 3.3-4.8 3.6-5.9 6.3-23.1-13.8 5.3-17.2 11.2 1.6 4 3.1 8 4.9 11.8z" class="f"/> +<path d="M220.6 97c2.5-2.7 5.3-5.1 7.7-8-5-.4-10-.8-14.8-1.5-4.1 5.4-8 11.1-11.9 16.7-8 13.6-14.5 28.2-21.6 42.3a9.1 9.1 0 0 0 5 2c.3.1.8.4 1.2.2.4-.3.4 0 .9-.6.4-.6 0 .4.8-.9 3-4.7 5.4-10.1 9-15.1.6-.9 2.7-2.8 4-4.5a16.8 16.8 0 0 0 2.3-3.2c2.7-4.9 5.5-11.3 9.2-16.8a119.3 119.3 0 0 1 8.2-10.6z" class="d"/> +<path d="M233.4 75.7c0-.1-.2-.1-.2 0v.2zm-3.6 2.3c-2.5 1.1-4.2 2.1-6.5 2.7-2.5 1-5.7.5-7.7 2.8-2.6 2.8-4 6.5-6.7 9.2-2.6 3.5-4.3 7.6-7.4 10.5 0 2.2 2.3 3.3 4 4 1.5.3 2.4 1.8 3.9 2.2 1.5.7 3.3.1 4.3-1.2 2-2 3.4-4.6 5.8-6.1 5.3-4 11.6-6.9 16.1-12 2.6-2.6 4.5-6.7 2.7-10.2-.8-1.4-1.8-3-3.4-3.3-2.1.2-1.1-.1-5.1 1.4z" class="e"/> +<path d="m185.4 133 7 6.2c-2 3.9-4.2 7.6-6.5 11.2-1.8-2.2-3.6-4.3-5.3-6.6a82.4 82.4 0 0 0 4.8-10.9z" class="g"/> +<path d="M182.5 141.4c-1.3 0-1.2 1.3-2.2 2.2a13.9 13.9 0 0 0-1.8 2.3c-.3-2.6 0-4.4-1.4-7-.3-.6-1.8-2.3-3-2.2-.6 0-2.4-.4-3.2.1a12.4 12.4 0 0 0-2.2 1.2c2.6 4 5.2 7.9 7.7 12a24 24 0 0 0 3 3.5l2.8 2.5a103.3 103.3 0 0 0 6-8.8 24.5 24.5 0 0 0-2.6-3.4c-1.1-1.3-1.7-2.5-3-2.4z" class="f"/> +<path d="m168.3 138-.8.6c-.6 1-1 2 0 3 4 4.7 8.1 9.4 12.3 14 1.1 1.3 2 .5 3.3-.1-5-5.9-9.8-11.7-14.8-17.4z" class="e"/> +<path d="m248 113 .1-10.8 12.6-4v10L248 113z" class="g"/> +<path d="M257.4 109.2c1.3.7 2-.6 3.4-1a13.6 13.6 0 0 0 2.8-1.1c-.9 2.7-1.8 4.2-1.5 7.5 0 .7.7 3 1.8 3.7.4.3 1.8 1.7 2.5 1.8a9.4 9.4 0 0 0 2.3.2c-.4-5.3-.9-10.6-1.5-15.8a37.3 37.3 0 0 0-1-5l-1.3-4c-3.2 1.7-6.4 3-9.5 4.9a26.3 26.3 0 0 0 .3 4.7c.4 1.9.3 3.4 1.7 4.1z" class="f"/> +<path d="M269 120.3c.3 0 .7.2.9 0a2.5 2.5 0 0 0 1.3-2.8c-1.4-6.8-2.9-13.7-4.5-20.4-.4-1.7-1.4-1.6-2.7-1.7l5 25z" class="e"/> +<path d="m185.2 134.6 6.5 6.4m58-39.4.1 10.8" class="a"/> +<path d="M188.5 86.7c.4.6.7 1.3.8 2 0 1.2-.4 2-1.4 2.3-2.8.6-5.8 0-8.1-1.7-1.6-1-3-2.4-2.8-4.5" class="d"/> +<path d="M213.8 50.2a55.2 55.2 0 0 0-8.7 14.6 61.4 61.4 0 0 0-4.3 17.4 13.5 13.5 0 0 0-6.8-.7 14.2 14.2 0 0 0-5.5 2.2l-1 4.5-.7 3.2c4.6-.5 9.2.2 14-.2 2.2-.2 3-.5 4.6-3.1 3.6-6.4 7-14 11.2-20.2-1.8-5.8-1.5-11.7-2.8-17.7z" class="d"/> +<path d="m186.7 91.3 1.4-8.5 6-1.1-1.4 9.7-6-.1z" class="b"/> +<path d="M249 83.2a3.5 3.5 0 0 0 2.4-2.3 2.1 2.1 0 0 0-1-2.7c-.9-.3-3.4 1.4-1.8 1.8 1.6.4 2.2-2.2 1.9-3.6-.8-3-2.7-4-5.2-3a5.4 5.4 0 0 0-3.8 5.8c.8 4.5 4.2 4.8 7.6 4z" class="d"/> +<path d="M235.1 82.3a33.1 33.1 0 0 1-.4-16.9c1.8-5.8 4.6-7.7 6.4-12.2a6.3 6.3 0 0 0 .2-2.6c.7-4.3-3.3-6.3-5.7-6.4A46.6 46.6 0 0 0 218 48c-4.5 1.9-5 4.2-7.1 7-2.1 3-1.5 6-1.3 8.2.5 5 2.3 7 3.8 11.1a84 84 0 0 1 4 15.4c5.9-2.8 12-4.5 17.8-7.4z" class="b"/> +<path d="m234.4 58.2.2-.5a15.3 15.3 0 0 1 4.3.7l4 .8 1.9.3a6.3 6.3 0 0 0 3-.3c1.7-.5 3.6-.5 5.2-1.2m-35.8 26.8c2.8-2.9 6.5-4.4 9.9-6a67.1 67.1 0 0 1 6.4-2.8" class="a"/> +<path fill="#6fc8b7" stroke="#6fc8b7" stroke-miterlimit="10" stroke-width=".6" d="M220.3 46.4c-1.4 1.5-5 6.6-.8 6.2 4.3-.4 7.4-4.4 10.5-7.6a77.4 77.4 0 0 0-9.7 1.4z"/> +<path d="M238.3 48.2a2.8 2.8 0 0 0-5.2-1.6c-2.7 3.8-8.9 13.7-3.7 17 5.6 3.5 9.1-10.3 8.9-15.4z" class="f"/> +<path d="M242.6 46c5.8 2.2 12.6 3.7 18.3 6.4 3.3 1.6 3.5 3.9 1.2 7.3-3.3 5-8.3 10.3-12 15.5-1.8-1-3.5-2-5.3-2.8 2.7-4.5 5.3-8.9 8.1-13.2-5.6-.4-10.5-.5-16.4-1.3-.6 0-3.9-1.1-3.6-3.4.2-1.3 0-3.7 1-5.3.3-.3.3-1.2 1.3-1.7 2.3-1.2 4.4-2.7 7.4-1.5z" class="d"/> +<path d="m247.5 67.2 1.5.4 5 1.6c-1.1 2.3-2.6 4.6-4 7q-2.5-2-5.2-3.8" class="b"/> +<path d="M224.6 37a117.1 117.1 0 0 0-5.9 10.2 65.3 65.3 0 0 1 13-2.9q.6-5.7 1.5-11.4l-8.6 4z" class="f"/> +<path d="M218.3 29.7c2.1-6.6 7.7-10 13.8-10.6 4.2 1 7.3 2.6 7 7.6 0 .6 0 .6-.4 1.3-2.1 2.6-6 6-9 8.7-2.4 2.1-4 2.4-6.7 3h-.5c-3.5-2.6-6-4.3-4.2-10z" class="i"/> +<path d="M233.6 29.7c1.2.2 3 .4 3.9 1.2.9.8.2 1.2.3 2.2a3.7 3.7 0 0 1 0 .8 3.5 3.5 0 0 1-.5 1 4.3 4.3 0 0 1-4.1 2.3c-1.6-.1-2-.5-2.2-2.1" class="i"/> +<path d="M235.4 31.5a6.4 6.4 0 0 0 1-.7c3.5-6-3-3.8-1 .7z" class="j"/> +<path d="M224.7 23c-2-4.7.8-8.1 4-11.3 1.6-1.5 5-3.5 7.3-3.2 2.3.2 3 1.5 2 3.8s-3.5 3.8-5.2 5.4c2.2-.2 6-1.8 7.3 1.4 1.4 4-2.4 6.4-5.5 6.8-3.1.3-8.1 1.2-9.9-2.9z" class="f"/> +<path d="m233.7 27.9.6.9m1.9-1 .2.1m-2.6 1.9.7.2m-13.3-4.2c-2.1 1.4-4.3 2.7-6.4 4.2 1.4-.1 2.8.5 4.3.4l.6.1m-2.5 3c4.2.3 8.5-.8 12-3.1" class="a"/> +<path d="M65.3 25.6c-1.9-2-.8-6 2-6.5.7-.2 1.7 0 .7.6-1.7 1.7-3.9 3.4-6.4 3.1a5.2 5.2 0 0 1-5-4c-.6-2.3.2-5 2-6.5 1.7-1.8 3.5-4 6.1-4 6.7-.1-1.8 5.7-.4 2.4.6-1.5 1.3-3 2.3-4.2 2.2-3.2 5.7-5.9 9.7-6 2.7 0 5.9 1.6 6.3 4.5 1.2 9.3-9.6 27-17.3 20.6Z" class="k"/> +<path d="M11.9 82.2c1.3 1.3 2.3 1 4.5.6 2.1-.4 4.4-2.1 6.2-3.9 0 2.4-.8 5-1.3 7.1.5 1.7 2.5-.3 2.8-.8 1.1-2 2.4-3.7 3.9-5.4 1.6-1.4 4-1.2 5.4-2.5 1.9-1.8 2.2-2.8-.6-3.6-2.7-.7-2.8-3-7.2-.1-2.8 1.8-9.6 8.8-13.7 8.6z" class="e"/> +<path d="M55.8 93.4c2.8 7 4.9 15 8.2 21.4 2 4 3.7 5 8 4.3 7.7-1.2 16-4 23.8-4.9l-.2-8.2c-1 .2-2.2.7-3.1.4a23.6 23.6 0 0 1-5-3 5.7 5.7 0 0 0-4.1-.3c-3.5 1.4-4.8 3.5-7.2 6.3l.6-24.6c-7 3-14 5.8-21 8.6z" class="b"/> +<path d="M58.3 99.4c1.3 4.2.8 7 4.8 14.8.4 1 .8 1.4 2.1-.2l10.9-14c1-1.1 1-1.2 1-2 .2-6.5 1.1-10.7 2-16.5-6.7 6.3-13.9 12-20.8 18z" class="k"/> +<path d="M63.5 95c2.8-2.6 5.6-5 8.4-7.4a140.2 140.2 0 0 1-15.8-3.7c-4 5.9-7.5 11.9-11.6 17.8-9.9 14-20.3 28-30.2 42A13.4 13.4 0 0 0 20 146c.4 0 .9.3 1.4.1.5-.2.5 0 1.1-.6.6-.6 0 .3 1.2-1 4-4.6 8-10 13-14.6a51.6 51.6 0 0 0 4.8-4 12.3 12.3 0 0 0 2.8-3c3.2-5 7-11.3 10.9-17.1a134.4 134.4 0 0 1 8.4-10.9z" class="b"/> +<path d="M63.3 78.6c-5-.4-7 4.8-9.5 7.8-2.7 4-5.1 8-7.6 11.9-4.6 4.5 2.9 6.5 5.3 8.9 5 2.7 6.6-5.2 10.3-7.1 3.9-3.9 9.2-5.4 14.3-6.6 3.3-.8 5.1-3.2 6.5-6.5 1.4-4 .8-9.3-2.5-12.1a46.7 46.7 0 0 0-16.8 3.7z" class="k"/> +<path d="m24.3 129.5 5.6 7.2-9.1 11.3c-1.9-2.4-3.7-4.8-5.6-7z" class="l"/> +<path d="M17.9 138.4c-1.6 0-1.8 1.4-3 2.4a15.7 15.7 0 0 0-2.2 2.4c-.4-2.9-.3-4.7-2-7.2-.3-.6-1.7-2.3-3.1-2.3-.5 0-2.4-.4-3.2 0a15.7 15.7 0 0 0-2.4 1.1c2.7 4.2 5.3 8.4 8.2 12.5a27.5 27.5 0 0 0 3.3 3.6c1 1 2 1.8 3 2.6 2.3-3 4.9-5.8 7.1-9a21.8 21.8 0 0 0-2.3-3.5c-1.2-1.4-1.9-2.5-3.4-2.5z" class="f"/> +<path d="m1.6 135-.8.4c-.6 1.3-.9 2 0 3.1 4.2 4.9 8.6 10 13 14.6 1.2 1.2 2.1.5 3.5 0 0 0 0-.1.1 0L1.6 135Z" class="m"/> +<path d="m88.7 115.2 1-11 12-.4-1.5 10.3-11.5 1.1z" class="l"/> +<path d="M97.2 114c1 1.2 1.8.2 3.1.3a9.6 9.6 0 0 0 2.7-.5c-1.2 2.8-2.2 4.4-2.5 7.8-.1.7 0 3.4 1 4.4.3.3 1.3 2 2 2.2a10 10 0 0 0 2.2.6l1.1-16.8a43.8 43.8 0 0 0-.3-5.6l-.6-4.4c-3.1 1-6.3 1.4-9.4 2.5a33.5 33.5 0 0 0-.2 4.7c0 2.1-.1 3.6.9 4.8z" class="f"/> +<path d="M106 129c.2 0 .5.3.8.1 1-.7 1.7-1.1 1.6-2.7-.3-7.2-.5-14.9-1-22-.1-2-1-2-2.3-2.6h-.1l1 27.2z" class="m"/> +<path d="m22.7 131.3 6.1 7.1M91.1 104l-.8 11.1" class="a"/> +<path d="M59.9 50.2c-2.6 2.1-4.8 3.6-6.9 6.2a53.5 53.5 0 0 0-8.2 15.3c-2.1-.3-3.5-.8-5.8-1-2.7-.2-5.4 0-8 .6l.5 6.6v2.6c3.9-.3 9.4 1.6 12.5 2.5 3.1 1 3.8 1 5.9-1.2 5.6-5.5 9.7-12 14.9-17.8-1.8-4.8-3.4-8.8-5-13.8Z" class="b"/> +<path d="M79 75.3a17 17 0 0 1-1.6-10.9c1-5 3.2-8.1 4.4-12.3a7 7 0 0 0 .1-2.5c.3-4-3.8-5-5.9-4.6-5 .8-10.7 3-14.7 4-3.9.8-4.3 2.6-6.6 4.8-2.3 2.2-1.7 4.8-1.7 6.8 0 4.3 1.8 6.8 2.6 10.3 1 4 1.2 7.2 1.4 11.3 7.6-2 14.8-3.5 22.1-6.9Z" class="m"/> +<path d="M63.2 48.1c-1.7 1.7-3.7 4.7-.2 4.8 3.4.1 6.3-3.3 8.7-6.4L63.2 48z" class="b"/> +<path d="M81.3 47.7c-.4-2.8-5-2.9-6.6 0-2.6 4.3-7.6 13-2 15.5 6 2.7 9.6-9.9 8.6-15.5z" class="f"/> +<path d="m66.8 37.6-4 11c3.8-1.2 7.6-1.8 11.4-3.2l1.5-9.6-9 1.8z" class="k"/> +<path d="m30 80.1-.3-8.1a62.1 62.1 0 0 1 9.4-1.5 6.5 6.5 0 0 1 .9 4 19.4 19.4 0 0 1-2.6 6.3 55.3 55.3 0 0 0-7.3-.7z" class="f"/> +<path d="M84.2 52.5c2.1 6 3.9 12.3 6.1 18.2 2.5 0 5.5-.6 7.8-.5a54.5 54.5 0 0 1 14.2 1.8 1.6 1.6 0 0 1 0 3c-7 2.4-15.4 4.2-22.3 5.8a6.5 6.5 0 0 1-5.7-1.5 43 43 0 0 1-10-19c-1-3.8 0-8.7 2.3-12 .5-.8 1.6-.7 2.4-.8h.1c2.2 1.2 4 2.1 5 5z" class="b"/> +<path d="M95.6 70.1c.8.9 3.6 8 10.2 6.7 6.6-1.3 6.9-10.7-10.2-6.7z" class="c"/> +<path d="M56 81.7c3 .4 6 1.1 9 .3a42.4 42.4 0 0 0 15.1-7.2" class="a"/> +<path d="M60.7 34.3c2.2-5.9 7.3-8.1 12.4-8.7a9.4 9.4 0 0 1 3.2 1.7 5.7 5.7 0 0 1 2.5 3.7c0 .6-.4.8-.6 1.1l-5.3 6.7a32.9 32.9 0 0 1-5.1 3.2 12.8 12.8 0 0 1-3.2 1h-.4c-2.6-2.5-5.5-3.6-3.5-8.7z" class="e"/> +<path d="M75.6 32.6c1.3.2 2.7.6 3.7 1.5.3.3.2.7.1 1v1.1c0 .8-.6 1.3-1 1.9a4 4 0 0 1-4.4.8c-.5-.2-.7-.8-.8-1.3l-.1-.4" class="e"/> +<path d="m62.9 31.2-1.6 1.5-1.8 1.5c0 .2-.5.4-.5.5l3.1.4.6.2" class="a"/> +<path d="M79.7 28.6c-4.6-1.5-11-5.8-15.1-4.9-.6.7-.6 1.7-1.2 2.3-.4 1-.2 2.3.8 2.7 3.8 0 12.2 4.9 14.6 4.3.5-2.4 1.4-1.7.9-4.4z" class="n"/> +<path d="M83.4 29.3c-2.1 1.5-5.4 2-7.5.2-2-2-.9-6 2-6.5.7-.3 1.8 0 .6.7-1.7 1.8-4 3.5-6.7 3A5.3 5.3 0 0 1 67 22c5-6 11.8-17.7 18.8-17.8 2.9-.4 6.3 1 7 4 .9 3.5-1.5 7.3-5 7.7-4-.3 2.9-4 4.1-4 2.2-.1 4 1.4 4.8 3.3 1.3 3.4-.3 7.1-2.5 9.7a13 13 0 0 1-7.7 4.5c-2.2 0-4.4-2.3-3.3-4.5 2.2-1.2 4.6.5 1.3 3.7l-1 .6z" class="k"/> +<path d="M63.9 27.6c5.6 2.5 10.4 4.3 15.4 6.4" class="a"/> +<path fill="#fff" stroke="#24093b" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6" d="M14.5 84.1c1.4-1.7 3.3-2.7 5-3.9 1-.7 1.8-1.6 2.8-2.2m29.4 32.6a26 26 0 0 0 7.2-7.2l3.5-3"/> +<path d="M65.7 34.6c-.2 2-2 4.8 1 5.7M37.4 80.8c4.4 0 8.8 6.8 12.4-.2l4.6-3.3v0" class="a"/> +<path d="M155.4 28.1c-.9 4.1-3.8 7.2-7.5 6.6-3.7-.6-5.4-4.2-4.5-8.3 1-4.2 4-7.1 7.8-6.5 3.8.6 5.2 4.2 4.3 8.3z" class="k"/> +<path d="M142.8 36.6c1.2-2.9 2.6-4.2 5.2-4.8" class="a"/> +<path d="M136.3 93.5c2.3 7.6 3.4 16 6.8 23 2.1 4.3 3.6 5.4 8.2 4.8 8.6-1 17.9-4.6 26.3-7.8l-1.1-8a7.9 7.9 0 0 1-3.4 1.2c-2 0-4-1.1-5.8-1.7-1.3-.6-3.7 0-4.5.4-3.4 1.7-5 3.7-7.3 6.4-.4-8-.3-16-.2-24-6.4 1.8-12.7 3.7-19 5.7z" class="o"/> +<path d="M138 100c1.5 5.7 2.8 10.7 4.6 16.3.5 1.5.8.8 1.3.3a81 81 0 0 0 11-14.2c1-1.3.5-2.6.8-4.3l1.8-13-19.4 14.8Z" class="g"/> +<path d="M142.3 115.6c-1.1-3.5.1-9.5 2-11.7 2.4-3 5.2-2.8 7.5-4.4 1.8-1.1 3.4-4.1 3.9-5.1 1.8-4.5 1.6-7 2-11.3-8.6 8.4-16.2 15.5-19 19.1 1 4.5 2.1 9.1 3.6 13.4z" class="f"/> +<path fill="#cf63a6" stroke="#cf63a6" stroke-miterlimit="10" d="m143.2 96 8-6.4c-4.6-1.7-9-3.6-13.5-5.4-4 4.9-7.7 10-11.5 15l-1 1.4c-10.4 14.8-21 29.6-31.1 44.7a11 11 0 0 0 5.5 2.1c.4 0 .9.4 1.4.1.4-.2.5 0 1-.6.6-.7 0 .3 1.2-1.2 4-5 8.2-10.7 13.2-15.7.9-.8 3.4-2.4 5-4.1 1-.9 2-1.9 2.7-3 3.2-4.9 7-11.2 10.8-16.9 2.6-3.5 5.3-6.8 8.3-10z"/> +<path d="M156.7 82.7c-.4 5.6-.4 6.6-3.8 11.1-1 1.1-2.2 2-3.6 2.7-2.3 1-5.5 2.6-8 3.6l-5.3 5.3c-.9 1.2-.6 1.6-3.7 1-3.8-1-8-3.8-8.2-5 0-.8 1.2-2 1.6-2.6 5-6.5 8.2-10.5 13-17 5.5.2 12.5 1 18 1z" class="g"/> +<path d="m104.5 129.7 5.1 7.7-9.2 12-5.4-7 9.5-12.7z" class="h"/> +<path d="M97.6 139.7c-1.5 0-1.8 1.5-3 2.5a16.3 16.3 0 0 0-2.1 2.5c-.3-2.9-.2-4.6-1.8-7.3-.3-.6-1.8-2.2-3-2.2-.6 0-2.4-.5-3 0a13.6 13.6 0 0 0-2.3 1c2.6 4.1 5.1 8.4 7.8 12.5a28.8 28.8 0 0 0 3 3.6l3 2.7c2.3-3 4.9-6 7-9.2a22.9 22.9 0 0 0-2.2-3.6c-1.3-1.4-1.8-2.6-3.4-2.5z" class="f"/> +<path d="M82 136.2c-.2.2-.6.2-.7.5-.6 1-1 2 0 3 4 5 8.1 10 12.4 14.8 1 1.3 2 .6 3.3 0l-15-18.3Z" class="e"/> +<path d="m169.4 116.6.4-11.2c4.4-1.3 8.7-2.7 13.1-3.8l-.1 10.1-13.4 5z" class="h"/> +<path d="M179.2 112.7c1.4.8 2.3-.5 3.7-.8a13.8 13.8 0 0 0 2.8-1.1c-.9 2.8-1.8 4.5-1.5 7.8 0 .7.6 3 1.7 3.8.4.3 1.6 1.7 2.4 1.8a11 11 0 0 0 2.3.3c-.4-5.4-.7-10.7-1.3-16.1a38 38 0 0 0-1-5.2c-.3-1.6-.7-2.7-1.2-4.2-3.2 1.6-6.6 2.8-9.7 4.7a26.9 26.9 0 0 0 .2 4.7c.3 2 .2 3.5 1.6 4.3z" class="f"/> +<path d="M191 124.6c.1 0 .5.2.7 0 1-.7 1.6-1.3 1.3-2.8-1.2-7-2.5-14-4-21-.5-1.8-1.5-1.6-2.8-2 0 0 0 .1 0 0l4.7 25.8z" class="e"/> +<path d="M102.8 131.7c2 2.8 4 5 5.6 7.6m63-34.5-.1 11.3" class="a"/> +<path d="M139.9 50.3a15.3 15.3 0 0 0-6.7 6.3c-1.2 2.3-1.4 4-3 8.9l-2.5 7a21.1 21.1 0 0 1-8-1.8 24.7 24.7 0 0 1-5.5-3.7 33.1 33.1 0 0 1-3.8 5.2c-.5.5-1.4.9-2 1.4a35.7 35.7 0 0 0 14 8.6c3 .9 5.5 1.6 8.2.9 8-2.1 11.3-14.8 11.7-16.4-.8-5.6-1.5-11-2.4-16.4z" class="o"/> +<path d="M108.2 74c7-3.3 5.8-3 10.9-3.7-.2 1.4-.1 2.8-.8 4-1 1.7-2.6 3-4.5 3.7-2.2-2-3.3-2-5.6-4zM158 84.5c-1.7-4.3-.6-13.4.4-16.7 1.8-5.8 4.1-8.2 5.8-12.7.3-.9.4-1.8.3-2.7.7-4-3-6.5-5.1-6.6-5.2-.3-11.3 1.5-15.2 2.4-4 .8-4 2.6-6 4.7-2.2 2.1-1.5 5-1.5 7 0 4.5 1.6 7.3 2 11.4.6 4.7-.1 9.3-.8 14 6.7-.6 13.4.3 20.2-.8z" class="j"/> +<path d="M145.6 47.2c-1.3 1.6-3.5 5 0 5.3 3.4.4 6.3-3.2 8.5-6q-4.2.2-8.5.7z" class="o"/> +<path d="M164 49.8c-.5-3-5.2-4.4-6.8-1.7-2.7 4.2-8.2 12.4-3 16.3 6 4.3 10.7-8.5 9.8-14.6z" class="f"/> +<path d="M148.9 36q-2 5.8-3.7 11.8l10.5-2 2.3-10.9-9.1 1z" class="k"/> +<path d="M165 35.3a12.8 12.8 0 0 0-8.7-12.3 10.7 10.7 0 0 0-3.8 1 8.8 8.8 0 0 0-4 3.6 1.5 1.5 0 0 0 0 1.4c.9 3 2 5.5 3 8.3a28 28 0 0 0 4 4.5 11.8 11.8 0 0 0 2.8 1.9h.4c3.4-2.2 6.3-2.9 6.2-8.4z" class="n"/> +<path d="M151 30a8 8 0 0 0-4.3 1c-.5.4-.4 1-.6 1.5-.5 1.3-.5 3 .7 4 .9.9 2.3 1.1 3.5.7.7-.2 1.1-1 1.5-1.6" class="n"/> +<path d="M163 31.3c1 .9 1.6 2 2.5 3l1.6 1.7c.1.4-.7 0-1 .1l-2-.1-1.4-.2" class="a"/> +<path d="M167 29.3c4.6 5.4 11.5 10 18.9 8.6 5-1 10-5.6 9.1-11-.4-3.6-4.4-5.7-7.7-4.4-3.2 1-6.5 3.4-10 1.9-3.8-2-5.9-6-9.7-8-6.1-4-15.5-2.7-19.4 3.7a6.4 6.4 0 0 0 1.4 6c2.9 2.7 7.3.4 13 1.6 1.8-.3 3.5-.6 4.4 1.6Zm8.2 6.7-.2-.1zm.8.4c-.5.4 0-.6 0 0zm-1.1-1.7h-.1z" class="k"/> +<path d="M164.6 50.5c1.8 2 2.3 4.9 2.9 7.5.8 4.4 1.2 8.9 2.2 13.3.2 1.4.4 2.8 2.2 2.7 2.7.7 5.9 1.3 7.6 3.7 1.5 2.3.6 5.3 2 7.6.3 1 2.5 2.5.5 1.9-4.4-.5-8.4-2.4-12.7-2.8-6.1 0-7.8-7.5-10.1-12-2.4-6.4-4.5-14-2.1-20.8.5-2.3 2.8-4 5.1-2.5l1.3.6z" class="o"/> +<path fill="none" stroke="#fed916" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6" d="M148.1 31.8c2.2 1.2 3.7 3 3.2 6s-2.2 4.8-4.8 4.5c-2.6-.4-3.4-3-3.7-5.6"/> +<path d="M138 83.4c2.4 1.3 4.5 3 7.2 3.4 4.5.7 8.7-.3 13.1-1.6m-20.4 0L128.5 97m29.9-60.2a8 8 0 0 0 5.3 2.6m23.2 32.4 1.4-14.8" class="a"/> +<path d="M186.2 88.7c-4.8.9-10.2-1.5-12-6.2-2.9-6.7 1.9-14.6 8.5-16.6 5-2 11.6 0 14 5.2 3.3 7.5-2.8 16.2-10.5 17.6Z" class="g"/> +<path d="M186.2 88.7c-5.2 1-11-2-12.5-7.3-2.2-7.8 4.8-16 12.7-16.3 5.5-.5 10.8 4 11.1 9.6.6 6.7-4.9 12.8-11.3 14Z" class="a"/> +<path d="M185.6 84.4c-3.6.7-7.5-2-7.8-5.7-.2-2.7 1-5.5 3-7.2 1.5-1.2 3.6-2 5.5-2 2.1 0 4.3.8 5.5 2.6 1.9 2.4 1.6 6 0 8.4a8.5 8.5 0 0 1-4.1 3.4c-.7.1-1.4.5-2.1.5Z" class="a"/> +<path d="M185.2 81c-2.5.4-4.7-2.3-3.7-4.7.7-2.8 4.6-4.6 6.8-2.4 2 1.5 1.5 4.5-.3 6-.8.7-1.8 1-2.8 1.1Zm10.3-19.2c-2.1.4-4.3 1-6.4 1.3m-79.6-5-1.8-14.7" class="a"/> +<path d="m112.5 74.7-.7.3-.8.2-.7.1-.8.2-.8.1-.8-.1h-1.6l-.8-.1-.7-.3-.8-.2-.8-.1-.7-.4-.7-.4-.6-.5-.7-.4-.6-.6-.6-.5-.4-.7-.5-.6-.5-.6-.3-.8-.4-.7-.2-.8-.2-.7-.1-.8-.1-.8-.1-.8.1-.7v-.8l.2-.8.1-.8.3-.7.3-.8.3-.7.3-.7.5-.7.4-.6.5-.6.5-.7.5-.5.6-.6.6-.5.6-.5.7-.5.7-.3.7-.3.7-.4.7-.4.8-.1.7-.2.8-.3.8-.1.8-.1.8.1h.8l.8-.1.8.2.7.2.8.2.7.4.8.3.7.3.7.5.6.4.5.6.7.5.5.6.5.6.3.7.4.8.3.7.3.7.2.8.1.8.1.8v.7l.1.8-.2.8-.1.8-.2.8-.2.7-.4.7-.2.8-.4.7-.4.6-.4.7-.6.6-.4.7-.6.5-.5.6-.6.5-.6.5-.7.5-.7.3-.7.3-.7.4z" class="n"/> +<path d="M112.5 74.7c-1.4.5-2.8.9-4.3.8-1.5.1-3-.1-4.5-.6a9.6 9.6 0 0 1-4-2.6 11 11 0 0 1-2.6-4.1c-.9-3-.7-6.1.7-8.8 1-2 2.5-3.7 4.2-5.1 1-1 2.4-1.4 3.6-2 1.7-.4 3.3-1.2 5-.9 2.3-.3 4.5.8 6.5 1.8 1.2 1 2.4 2 3.2 3.3a12 12 0 0 1 1.5 4.8 13.4 13.4 0 0 1-7.8 12.8l-1.5.6z" class="a"/> +<path d="M111.1 70.7c-2.3.8-5.1.5-7.1-1-2.1-1.5-3.4-4.4-2.6-7a8.7 8.7 0 0 1 4.2-5.7 8.6 8.6 0 0 1 7-.8c3.1.9 5.1 4.5 4.4 7.7-.3 2.7-2.3 5-4.6 6.2l-1.3.6z" class="a"/> +<path d="M109.8 67.5c-4 1.2-6.7-4.3-3.5-6.8 2.5-3 8.2-.9 7.1 3.2-.3 1.8-2 3-3.6 3.6zm6.5-20.9-6.3 2.5m-54.1 83.1c-5.3 0-12 8.7-14.5 7.3 2.4-5.3 9.2-7 14.5-7.3Zm72.3 10.1c-4.1 7.4-14 8.5-21.6 7.8a53 53 0 0 1 20.6-8.4l.7.1zm58.1 9.7c4.3-5.7 10.2-22 21-17.9 5 1.7 4.4 10.7-.9 10.7 4.4-9.1 16.3-14.3 25.6-9.3M73.4 60.8c3.3 6.7 6 14 11.6 19.2 6.5 1.4 13.3-1.4 19.7-2.6l5.6-1.5" class="a"/> +<path d="M161.5 158c1.6-3.3 5.6-4.4 8.8-5.6 10-3 20.6-4.7 31-3.5 2.8 0 8.5 2.5 4.4 5.3-1.4 1.1-4 3.3 1.7-2.3a20 20 0 0 1 12.7-5c5.2 0 11 .9 15 4.6 2.2 1.6-1.3 6-2 5.5 2.8-1.9 6.5-1.8 9.7-2 3.2.2 6.8 0 9.5 1.9l.2.4-.5.6" class="o"/> +<path d="M21.9 158.4a204 204 0 0 1 43-9.4c10.8-.8 23-2.8 33.4 1.5 2.4 4.1-7.3 4.4-10.4 5.5-2.6.5-7.7 1.6-2.5-.8a51 51 0 0 1 33.4-1.5c-1.7 3.8-8.9 3-12.8 4.4a207.6 207.6 0 0 1 77.6.6" class="o"/> +<path d="M15 159.2c6.2-5.7 14.2-9 22.2-11.2 4.2-.9 9.4-1 12.4 2.5 1.4 3.4-3 5.2-5.4 6.3-1 .9-2.8.8-1.1-.6 3.3-4 9-5 13.9-3.7 3.4.8 1.2 5.5-1.6 5.3l-2 .8c10-4.6 22.1-4.7 32.2-.4 1.5.4 2.8 1.8.6 1.4l-71.2-.4Z" class="j"/> +<path fill="#6fc8b7" stroke="#6fc8b7" stroke-linecap="round" stroke-linejoin="round" d="M213.7 157.6c4.8-2.7-9-5.2.4-6.8a43 43 0 0 1 8-.8c5.6 0 9.7 1.6 9.3 3-.5 1.5-4.2 2.7-8.5 3.6a10.4 10.4 0 0 1 5.5-3c3.2-.7 8.8-.8 11.5 0 1.8.7 1.7 1.5.4 2.2a27.6 27.6 0 0 1-5.6 1.7 66.4 66.4 0 0 1 20-2.2c7.7.2 15 1.4 19 3.1z"/> +</svg> +</p> <p> -Most likely you are accessing this website because you had some issue with +You are most likely accessing this website because you've had some issue with the traffic coming from this IP. This router is part of the <a href="https://www.torproject.org/">Tor Anonymity Network</a>, which is -dedicated to <a href="https://www.torproject.org/about/overview">providing +dedicated to <a href="https://2019.www.torproject.org/about/overview">providing privacy</a> to people who need it most: average computer users. This router IP should be generating no other traffic, unless it has been compromised.</p> -<p style="text-align:center"> -<a href="https://www.torproject.org/about/overview"> -<img src="data:image/png;base64, -iVBORw0KGgoAAAANSUhEUgAAAQQAAACQCAMAAADZVuXZAAAABGdBTUEAANbY1E9Y -MgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGAUExURej4 -6Zycm+Hh4XZ2duTk5LS0tfP79OLc3P/r/6iopv///2ZmZgMDAw8PD/b29v39/cTE -whUVFS8vL/Ly8by8uvv7+vn5+CUlJcXCm+/v7xsbGuzs7E5OTq2trASbBVpaWszM -yaKipDk5ONra2iAhH8/OrX9/fPf35vv77j4+Pvj2zPz82Onp6PPz3t7e3ra2n66s -if7+9b+/v+3t7efn529vb9DQ0GNjY4iIiLi9xtfX15aWldTU1Ofmyy6wMZCQjtkG -Bufl4ZTcmYiLjujo4dbVwmppZmvLcd3czoaHhaSstsjIyMTL07Pmt9ny2sjty/// -/EVBPe/x05WcpZGRkVKzV+Pj3vDuw9vasqOfet/extbd5uPivOVXVvr9+dHY35WU -hefm1IjJi8zR2e+bm/vg4C5PMvfFxf3w8DlyQP/4+Nvj6/77/IuTnZ7KolF8Vv39 -/+bi5v/9/HvCgCU7KLm5uMraylZfa3CZdf3//P3//7TQtu3k7ZwICPn9/eLu7gnB -e20AAB3ZSURBVHja7F2JQ9rY1hdCOh/33YRAQhBDIAGJbLJYwAUqFhfUulu1taO1 -+zZdpp193ve9f/0754ZNwG4683yvHjAJycnJvb977pb8chz6x5X8Y+gf5JuXKxCu -QPgYCE5KiEBGs980CKGACSBYRA4ZhA/5v0kQPJRQIsijQZql8qhMv0kQqtRLNSoG -IPtZ3huZ/CZBoH5SclN11BX1gU9Eole9w1UX+a2CIN/cvwny4/6PN9maLW+ep4d4 -908wsG+bBbu4BYvvLjEI/iJRNU3LZBZuOrP7rn2X62Yms0XkgWcfb9Rnw+HwLC7C -jc1rg6+hfrclawto0rWPcnNhYUHbWvD09kn/XECwFopwHDf29xdgq6/ngn37CwzP -hYXW2nPBIIjlLXeJs1a4pclIKBn1BUa9At0vZPpP3WiEw3sPN1o/r/3ZmA3vbW70 -K8rlLQ4sWmAyFEr6mEkv2Vd71PzZrZlyWVJ0t6NScZhuXpHk93JP/jxBv1g2JIXX -Taalg5a4JV80CNKWOblUKiEG2y0QjC1nT2J+b4Rn62qfufW9cPjhcc9OTSIlsFha -igCszOQIgLAs9mFFSgAWV2ppeQV3QevRUrOJKpQRx01GIskoaI14qVEoei4WBFkq -nEQikUlMsA0CXGa44Dp1mYez4fr/nWFRrYdnT9eLjLQ1GZkEiYT29p76ApBwQRgA -gkRAZ4mhb19XqCUWegpZrSaUphL6KQNB8jv9F+0JiZMQoBBCP7DT4qW5hKsbgvDe -xkeNboTD3QpavBBBkwBrvfE0wLInbPWBEJQKTAsujblDLasPBLE8lm8qQc1CWwJV -Cln/RXtCYiW5HdreDjEMWKlRPbHf8fjw3qfNXpsNb3ZAMAohNPg06Vtfj0C6R4SB -ICiJ7RATLGIEX+DGHvSDULO1oMoEsM5AEY1lL9wT0itRqAgIAfM2SDB1256wgIW8 -93mGxb02DAhCEuRtfX1zY3O97kVcC4e9IGhKArVYg4AXBq3SIBBWmNK2jRTgCX6a -fXfRnpC2fAwAXzMpVKD5tBMONcK/z4Y3Pts084bGQ2wY02Av6gMQNoY2AARhIAhB -KRH1Rdvgo9ZS+oHYB8IJJC+KWuCmUEaU5tIXXx3SXACTAfWNuSRtgQANf/jOFxkP -4vjhAzSM6SiY8z19GtrY+O3FU8SAJgaDYGOPXo4XLo33gzBuNXVYc4VO5R77C0Cw -RgPsEiN2XQDRx5zgBzAq+lLzdRxEBaU0phlRXV9/ITCbwkAQmmrtC58FAmqNtDD4 -CzwB2gRrZGSUQWBfg+JlXA0cGM5e+0LzOJIM7wEIIyPMYL0OfkDR6CAQ0lDJ8cre -Fvjczg25HwSWuK7k/RXVIWV5mX1MSROE4ZTzj6++xLVflHTAa0vbpJA+/KUXhHg6 -wLLW0bJSN3o9oTp+FzRsnGw4aW784scJqRVMRxcEAMK48xzX+J942id0MLCNpu/s -rfdXh9aFm9dd2ekHIZUXOqaYopL6C9qEu1hnGcqtxNxJuc5xDS2e8qG9Vsk1PeFl -uGssgSAMpwNCN/SU5lPf91WHHUloS7OI/gIQUgcH36PcYcI2D1I/ngeEpsk7TZPM -ZuqOCH3H7EY3CKAUH8477p6crJzczQ/H7xwcHPZ5wsHBnTvDw3lbycwN3/n+4ODC -q4ORy+cd+eE8yDCTu458XsqcY4oSVMBkPgcpH0aTYBcs5iRxExrNh93VYTiHx+PD -TcnlhnPxXhBiCuyOd5SGwbDkumAQ/K41Xnc8WF5cNIxFWCzu53leqZ5nsirHJN59 -iCYXbZMLJs8bLhX6jtnwqfzp7mW4bBzEiP+i6LqixHpnkUVJdytVOC7F45JhVHNu -ni9rFzyLJKLmqubu5ttA35WcRU0+D9R+OeMs37170jFZdbk00UMam6TeGXp4ZFes -nMsjBPH1eDyfm3G6ir33E4gItnK5eEvyejXr1NSLvr3mf6cWlUQhkYC/QgHWEiBw -PqQ9fjE7hsZsSRSWVX/L4my9cxsus18eHxtLJMaYLH9X1Po7Zo9YXF4ea0p6bCw+ -UxTPeWNpAAg3dVZc8XhrCRUwN36uiyy2/KpplFX4VqbaFcIjLaoJURxjXybqsNKH -gaokEqDAVGy9Yz540SCoZUX647jwQ8H/g7+AC/8PJKcsn+caIq/s+9GS/7i1Cip8 -q4I1HnbUFn+HS6KrFPxqQS0oCt/bFoGXKgUVTKjHqqqiX23xynf+CwZBlqZ5RR1j -ONsfNcfz1fNcJujmpw9F8F40iiKO6zzfavE2Wq2CDE2cMTYOFQL+ZFDjQbReQGd4 -PgdHZVAbAzU5AambUS8cBF3Xc+nx9Dh+QdJuXXdXz1PtNLCgL47bglk8dLtXc+1m -v1Ufgrrpdg8bceweFrHNM0H6QKiabjOPKobdMjpAqSxe+N1mR61SqdUqJzWQE7as -6K7zgBBUKjVmDFYnTcMOpe3o4ePWjVa3A2S3An+4cFRMReqt7mqWNysVplbZhQ9u -5mIX7Qmqy1BgYDCtoPBsqUjV4HlAEGOS0hKet+1K2XbpzQ61qnvVMNbgUzYMo1w2 -JKkcc/WWsV+bwcNdsmbMaBfdJnhELVMsFjOZTDHDlvgjeK6rwDihyMwwi0VmU+sM -AFpDZ48qBmU5CH9MgrAlqp7+3rZ5EA7jB76i/6J7B7wQfD3wZX8ee8c5xWMb8dgG -PZ5um3sb5N8sl+CB7OzmJQFhW6CKbnZ2U+qzqzMlxOsR2rvZchKmryNdNhxmtF11 -ff/BIFCn5vYKJCCQaAVyKkcILS7B/uTkJBHICEnSIBFGYcPOPXUSjsacpVFCdKrX -3BZRqENNUtNHv5zRsXdZQNCitGa6a5Ye8Eo1pOdEIx676CkRVMGxQkIB96RJ9IiO -nRbNOkOEun1MY8R0R8FjvBkv/PgKVsulAYGSMnXr1pJS9gb5CHi1gx2doT5BQRDc -ZIVWFBeJSQGDgTCDILjZmSUAIUj1edn3dSA0LgsIJqWxIlUoNUZ84Pky1PrsNtSG -DJFKAb9ABKpnKM2QIqUaA4EE6IqEjUiEJnf5JFkSRuUoOs6XU90a65eud/D+7Ulo -1K+6SFJ/6Lk8IHg/0cUFBu302d1mkDvH/Gp243KAYBkVYhGjpApkhVQwR3wJK7+0 -QpYssqKYRHFQaB+IanAe7D1MDZRKFZkatAxNg2NELJe+Ng3dd1v/rb2DGVIE12iV -eiejRFirQRFnoeQVqkeyPhFaTL8gQasn0Qx1ey3Ivy80yY06RzI0S3VoSd0+FQ5+ -ZRr2wpelizRNIRYhmpeGoDeETlJYgmERv0ImvaMwCEgWwe8Ni1AYRgWUEtaNbCg6 -Img4kIgESSwEjvC1IGzOqvbcqCXv2lt+z4Ablv3iuZC7zXSEzggijApgTFimSxHi -otuQJ2WFCCvgByQk0ijkN7SdDZEADyD4RqjkrcGhAICgkSzlaejsMYIoiyKb/Yls -i90/7Dr8poGZW+g/b4uovXNpdX+A/a1zTfXbIFhJEiFWNBYiZpCRmZO4lHXCBxQp -SkrqUiRCuKhTq3i4KjQCAYePWD5eKUHWLUiozw0nn4nBuJbJaAuZhQx+2V+m+1GB -Gma3S7Y8pCBrONNGomNQfE/I+0Jv9sQHP5AtFYyBEnw1DdU853ok0KkOXyhfMlHy -Z4lYNQxJUpo3VySj+l7svoWK/BfZOFYiv5aQnBfa9vmQOSgkE8c93EGPtkwik0uc -VVqyaZYjAqWjBU2+ABD+UlGrW2aJs1i6Q01mZGGsm3sozzLuoLIEGJQiSOFjDEUh -mihke0AoLm9FUKs0GYm0KIYjhfGLAcHim3tC2Ujbr5Py/PSnbayHwx9t31Vjq9Li -hyI7D7k4+2Onihim07KUcNtsx+iLFz/ZvLmAlugHoQBT26W2GnK36MWAINEIX6Uc -8VGZCu5i1BJIhS5Be6m7ynSFeKMh7C8rpESz2aWoANVBwt205cx7JDy7sRc+/iMc -Xr9W72F3iVKhxuihkSard0QQlNMgXAvPhqWEI4R8x1C00fgpwKhb3uWx2AAQbCIj -qD21jdFrC/KFtAnbEuQfxj4zIWck5i1HqpEYrUXlpRjMpXE+7SEwZnAmVZxA+4K1 -aUoCLtq6Zz4bPg5vbOxthGc3r4WHwsenuU2ikbA6DEVWxFQf737Yf4wMLyl9EgK1 -7aivvg46o8jDWOwHYTHhCyEtMhmo16NQFZCzM7ZzMSAsSdRdIYYVBRBmKJmswuho -PiqWYJv6KY6ZHSbN+nTLdBMefIEqNc9I+05pfSNM1vfW12fr9fpGYwAIye0k46Ai -Ow9BcJ8CgTxEEMasZDIZ3Wu82dxcf7jHCEnx9CAQQO3p3oc3mxuohjS3sQvxhBr1 -KQ4cJAjKPI04EQQ6CqNCapZXKM4PRj0kMuIlPoGbhg4SR1QC3nFivrCBbUKY/B4O -16+Fw7NDjeNwHwjRpM1QDNi0QMEc//FU7hrh8J9jFraHjfr6hrr5Z4Nx3OLp3jbB -tZgORKPRp3uN9Q0PMkORrtLH+bx8vYNopJF7yOiXNj2P0vx4D/flYRhZpKDx9reH -mxvKh98YHyc+PsATRsDYT3t7HzY33nzYY6Sd8f8IELgmjxFZ26zszIPelwcaStqy -tQLr64EmOW0xFev3BG+bFPm0yVvqozu+83xE3jWfJPSCAG0bm9p//k2eSHNdO3X5 -uR/O8ITR0dPUyNzBqx4QgtAwjjAe40/1+ghlat47qXu9nhBPe9EWWHvYJkXuHHZ7 -gidrmtPTq9MVaXqad+s8f7/6SHr0aFpf5cvGmoR7p/ndVbUfhPrmtQb5sLlO6jiQ -V5Y02c1leTY9LinEsaLAPo9L4edJJSiVVgh1EK5CXJM+nHG/fHxEHj8jTx4fvRwI -QoqzCYreNoMtfqMXBFnaOfEylLxPnzaJaSM7A0EYYXrepz95myy31CnOp8hz3Pz8 -69XXq6u7q6s6vzoNIkm8vgpbPOzc3X3N/fprZ+DeAuF49uFefe9DIzw0O7RORJgZ -a6OS7qvC8NgbY5Posq9KV6I4oTbozChPyyHemqaGgC8GiXPPjp7978u5J3NngGAJ -p4mR9MaTXlIggHBXaPIYW1qBndT9h71tQgqVuric4DCnQPDIqxYHuZ9eW3vkuH/v -3r1Xznuv7r969epeFn7wj9bWpldXX3OlDuWtBcLvs43NjT1oo0k9XCciLVEtSWoj -2yXsCpJ4B1XiiMuSSEgJKRxxV6DXDIVgpJDUGAhk7ujo+Rw5yxNOTvMTKU0f/Njn -Cam80MNj3N45+OdpQrXHFU/1sh1p4LQnyGuO0vz8CnzmYT1fq813pGbBkRVrxbJ2 -Xf7+NoGBsDlbDzcaJEaTNAO1npZgpBiK4E0DKtLRAI6tKQwdRygZodYolQI+qkI3 -+fyIHB0BEHNneUIqlU6l06kuOfhnPwhMDfXSHe0fYRzVxaj2ZOKppgpTZavUwSkQ -VFdZ+qhAuyAZsaDnq3sHB8W7DN3yyUcNfqfuqN0d7shJrWIqvZ2aeN+s1KwurXyt -4nAoQRxHdd2PDiqOSm24W0DNbXQ3zx5VDmrwaQluaRp+g/aCPdLuont9OQgiCZa/ -7BTk5q3l+Nx+FuS7fScvlWPZPtqdP+iMGW6FV3I4287lcooxE4sVxaHwqTeq1Eys -Kin8cA4UUTcnGTMzzuBF3E8Ad8bVs2cDVEL2yiD8qaASS1+Agiq7lIWFmw8ePMDF -gqSJAzgFHlXM5BaXD/FzuLy8bGiiqoJauB4e6gYLjC3OwPFD9l1c/JetdoZUI58N -whx59vL9c+jmXpKXzxFvzeMRg34RHzwqREagQ5I1DY1gEB1PDIpagMjg0VqQBOVP -3dtSh3O6eReJwnnH3Txs5HLD/cn27y9K7hsdWTQWlx/g7ArG5d3VZrGsLN648T18 -mBxKi8sfSUE5QgR8zOyFho56PgrC/6pzR3NzR48fzz2fO3pG/NSiQepz00nsIoPQ -TBIPHYFZBEzj8Tk9hSl3gPdFHSEOmkyf8XEM3sWme/lXC8pib4L8RanvzLhkjyvf -7HXNy6t9aobyMU9QRG434Ao5aTDr+7gnAAhPnhw9noN6MfeEkEkvdpEW9SUBBPak -lUTKJcM5SQNUIjUFXCAQEUYtxUs/fWtONBT+QSIhqgkRliJsLPO80cfXrSq8qqoJ -f6GAK/hsSYpSttVm20NZTZmOb/kTCdBR/QnU3ZJ4Xj7TD5TQUqTi8KluJ4V29uMg -iOAAT46Ons09hnEPkaI61UrEFcCHD0KQgbA0WeKzkZDOBUmWcqPFQC2iR6CDlGHK -6fkECLzOHzYpfAvwt8jzfNnTr8Xr44zn+ByZfmPIUGxj1a4QLtg7LA4hi/H5GKpd -Gwa1szitfkqzppCM+ETTsEao+6MgfEeePH/58smT5+9exp7B+N+Ixd45CXGio8c8 -WVJGbl/R73cRA73RWY6RLJkpk4wkymUS+wQIVSiDCrYIbpR8vlJxVLK958iGCQd3 -dnZuHOwwycFvs2X64WxrxKi7TVNhChsHBzs3mJr7fMTev2MW6c8YNneP8QKn2XY/ -KVCM8W6zR/jOexbh1t1mQzfNU4oOk6/Klx4Ejxq0iXsZmxjIGHx9TZknmJ2pzpyW -bIfHyOZ1iFUx1q+m+S89CC3OXvdyIFZiW5qbXf3/tZYr+LFJVG0Ne62qFx1E4tLK -X/jU9j8HhC9+MfW/EoSNKxDIqQnENwvCVZtwBUJ3F/lNgzA0ewUC2WxcgUDq9SsQ -SP3hFQjkX1/UJjwnzx//F4JwHP58AN7PPSYqgDD3+BKBIAY1kHFcaMFx9ihgPPil -L3TOHn6e3tzc8/b2JQJBHRj/uS8shSfDsNLGM5qG3wWErHOH9pdZe74tD5AOH/B5 -LyRPLgkI8uLWCmdZVmlyMrLdjKiV7I/HKFa3JF5ncRZrK/jY0KHL77tuvrDJgz9T -eE/GZySp9eaq5BTJD+9bd+GO5nqMPnl8SUDQ4qRU4jiuhGEuk3ZAtxGS7QtFaKCa -xS2xQJCM36X7u+IxMlcQY4ll1CqVJm0aGBKgYsetF9qffFUC/xYQpC0MoYg0xqdP -f7Kz5+0HIYjxGJdKNlTRwOioV1g5FYoQJ9NqVZ0BJQ6sMconRusTjILB3OrZ8wFX -fzb3SWj+JhAizRiK9foLO9LigKCUQWmrFY+xyVQVLHFBPD2HClYTixHkfEYiL96+ -tUOdCnzCYJ4wN/Dyzx7PXQYQMB6jTWNcr7+w+WtCoQ8ETQI1DDa5nWzGpBRKY6dA -qM/ONqqJP0N2hMu39Q/NAJd3myAMlqO5T3WVf48nJJClmXzx22+bmw9/22M0k0Eg -sHiMdjhGRvGiS6cIir8j5fP+2PA2WAOdt/U3gs2BOkmU/e/mnr0cePXHcyCXAgTo -E5J2PMbN9cbZIETbkRZHMXsAQjct7Q8E4d6YEgWg9hpv1pHziUH9qDVmqFDeP5wx -eAIQnn0+CJ5PyDvPV71ArzUDLb798GZjY/1Ng5FtBocibIVjbEaCXOohKO6Fw9Vx -BRmRjcb65tDQev0t0nasdPkPLO+zGsCXR3OfB4InaL5WeH668maNnzZ1nS8/qj4y -Hj2CrbVyeQ0JYKv87u7XBO7Q4uloM8jl5nqIUjso5eIAEAIBXzsSJJKRSqmeUISN -sJHKYczMFy/evtn85cWLn9DWStp4Mtep+R55zSivVWOPsrEZfFATe/XqO6fTmYWt -bPZeNluNzTxak6oDmCrqo9Kv3Ovd3Qry3pD8Nz29Zk5L06vIe9tF3tvr+Xlu6Wui -nIEn+EYZkdFbr4eapLN0f4zWeDpgh1rsxGPsBYH8+SY1HLDJnL/V39h40pNU+air -8VN5rvR69/VuydzddczXKq+xAOH7+nWFZxw+E/LC/Sr3c5ZEifu1yXvT1+7fv3fv -1b1X+uY9EPhhPgJXgHPnS9WvCF+iDSd8yD2EzL198RNtxWPsbxPSAZuh2GbnWYNC -EcabMTPfNj40OXz5nftHnQbBI69y3C6SF9ce7WJGXkFWfrnXzMobdOpVJDL2Ufgw -do+jBENbC8ar3AojvdVqnE1+W5nnkPcGK8t0ql9VHXxeoRPn82wQfALjMdKW4kmf -J4jVnTgLSdmKyWjHIix3hdL2BHmL2zUBhbW13UeP7qPE7BX8mmYgrO5y3M1+EPyZ -KpLb1hjBbY19mmS3bpn5mtfOMFov7REhfae/TUiFGAG8FXHSOzI8IDLnk3iLytnG -Kp46NU4QszizYMKegLMPzzaakW1ws6oNoPD55TblTWuy3ewVUuC0JhPuq2K4aHEk -HB4cfH8nHo8Px+98f4A/B4FgExM7kuoH4dHB99tNujwKtDQB3/epcne6WGwcV7FY -dOECtlwgbGX/tDeC6oAu0uO3n/eqamvdJa1dX/X4Vxs+SKXsb5PImTo4SA0AIY6h -Fu/Y4d4ALvglxQcFpYxjrMYcI4KxM1KnPYH4VVFuvYDZeg+zvaO1T/3EYAkagwud -Ss9MrzoOHzy4gTQUWNwYr7hXpb7WRXSV1/hrhcIPhcRxoaBuZaclo9obblLMKnk3 -EkNZTDtc3HXnc8POM0tH5+x32TPzXzhipNokBTiRR+An6rlf7PcHi1kjXztZbEal -zLvLTlemj1ziUWVt5m5H8k5NlvspnzOG5EiMjeG9lCFYisq0YWTPZqpElBkKXk7K -S2dnZCAIAjKYhckSH1F925P03P8Myy/KMXWLbLWEVMVB9Et1IWvcOFw+vHHjxvLy -jcP4zP6Adz7BVlFy381hhcD4pTmlKH8s3FRkxQoQ6vOWqY/OfDEIk9Sn0SWN+gTx -vBgUWWTWpmCMVqjI/dxHv5R7wPJ/eDizzHiaTxRFHeAvP/KFBIuaiVKIu+SPddsR -KUaNChFik0Swvqg6lJI+frsyaoQooVnunP9MhIi61OeJBt9XeLLOxz0FP0Zb9B9j -XEai9BMUPaL7zuIvdgA+Ow7fncXD/PLZVTYyWaKioAtl6qbKl4BgSFBOSlXKEIn4 -eem8tSHoVpSEmFCRxwllpyYSfqUTj7Gjlud5qRmu8Pn40OB4jKoT0vNDoQAoed7D -Ej5EGuAwbclKkkZivEeOKeK/dSoNuePt3OHi2tBQjtdzff4V5E3TzG20qM07jKg3 -ICilkgMYAc2xhIhxLhM4EDpfLMK/A4RgzmE6zHyO9e05+GDYRbOvXJDIqJ8SXprp -eyuiCjo5xHLHZsju5NyrunH5QWDDWGV6WlLYC1mM0bnWF2kRJj7O7CmJZYt97zGI -MdOBsSgrjoq9cDgqDnPm8oOAw1gMG5HJdFZB8YxAISq2i2yE6setvi5EY1McycAl -LiRjrftNnksLArHjOzZvXJHzBUBRm1McFr2yuSVeePDqb1CuQLgC4QqEKxCuQLgC -4QqEKxA+AsKV/GPoyhEIuQLhCoRPgcBdJ+RW39vFUxxK5/fEbULcnItMdCLBOyb6 -jcWmmL2uo82fvWJyE5+TbLBn31+Y4s74j22xibMucX4QINt696/rnEisqQliTnwK -hKbsfhyEz054r92PJ/OcIJgcZxKrXOUmRBt0sH79NgcFxk1hTM7bLpcFbmC5YlPc -VAx3ViZuTbkmOO62OFHBE9ygzDwBNG5fd+BRNH+bm7ougqFbxDHFldkGAMhxtnHY -F4OfoPQzx7na+1p6aA+ud52Dv1ZiUFkHZTQ6EYM/dsWpWMyyOMfXgoDiuDV1/frU -LfNnnjNv3W5BrDtIjLvOUkN+npgwXZZrhYA7TEDSIE+3retkql0Q1anrLq6MINwG -h/mZHUXzE6Qy8bNJXFPirk54N24w6G3jFXa+wyQOKIef7X0Ondgn2CAAKghuOzGg -XHEQNx8rk6qFyeSuszTFABcrdh5PQK/SJ27ddjgsk2+B4IDsg22WmaoJ7m/pJupf -53DJCvGWxU25On7JPIGdsMuKmJnXJxwIdAzM2Rtsd4UZdzCEYalPEF3fbe1r6dlt -jI4gtBPTUr6ugyvYILA0YZWZOhcIzBOgJlgxO5EdT3DZIIgW1BI3FAuibjEQJnjm -M7ft2l8GC9ZE0xN0d+soywOvExdLvb3R8QSXDUKlma/2vp+bel0gtBPTAsFtkgmu -4wnWuUHYReyh4b9t4ZecbhPsNuw25GkCgIhZrE24Dl4uWrfgtNvXJ1hV1Fttggtr -MTvaAgGrryVC6u0NtrtZ/095QntfS68LhHZiWsq3OM7NibdYm7CCbQIDYcJxNU64 -GixdgXAFwhUIny3/L8AAEAy9MIp/F7YAAAAASUVORK5CYII=" -alt="How Tor works" style="border-style:none"/> -</a></p> +<p> +Tor works by running user traffic through a random chain of encrypted +servers, and then letting the traffic exit the Tor network through an +exit node like this one. This design makes it very hard for a service to +know which user is connecting to it, since it can only see the IP-address +of the Tor exit node:</p> + +<p style="text-align:center;margin:40px 0"> +<svg xmlns="http://www.w3.org/2000/svg" width="500" viewBox="0 0 490.28 293.73" style="width:100%;max-width:600px"> +<desc>Illustration showing how a user might connect to a service through the Tor network. The user first sends their data through three daisy-chained encrypted Tor servers that exist on three different continents. Then the last Tor server in the chain connects to the target service over the normal internet.</desc> +<defs> +<style> +.t{ +fill: var(--text-color); +stroke: var(--text-color); +} +</style> +</defs> +<path fill="#6fc8b7" d="M257.89 69.4c-6.61-6.36-10.62-7.73-18.36-8.62-7.97-1.83-20.06-7.99-24.17-.67-3.29 5.85-18.2 12.3-16.87 2.08.92-7.03 11.06-13.28 17-17.37 8.69-5.99 24.97-2.87 26.1-10.28 1.04-6.86-8.33-13.22-8.55-2.3-.38 12.84-19.62 2.24-8.73-6.2 8.92-6.9 16.05-9.02 25.61-6.15 12.37 4.83 25.58-2.05 33.73-.71 12.37-2.01 24.69-5.25 37.39-3.96 13 .43 24.08-.14 37.06.63 9.8 1.58 16.5 2.87 26.37 3.6 6.6.48 17.68-.82 24.3 1.9 8.3 4.24.44 10.94-6.89 11.8-8.79 1.05-23.59-1.19-26.6 1.86-5.8 7.41 10.75 5.68 11.27 14.54.57 9.45-5.42 9.38-8.72 16-2.7 4.2.3 13.93-1.18 18.45-1.85 5.64-19.64 4.47-14.7 14.4 4.16 8.34 1.17 19.14-10.33 12.02-5.88-3.65-9.85-22.04-15.66-21.9-11.06.27-11.37 13.18-12.7 17.52-1.3 4.27-3.79 2.33-6-.63-3.54-4.76-7.75-14.22-12.01-17.32-6.12-4.46-10.75-1.17-15.55 2.83-5.63 4.69-8.78 7.82-7.46 16.5.78 9.1-12.9 15.84-14.98 24.09-2.61 10.32-2.57 22.12-8.81 31.47-4 5.98-14.03 20.12-21.27 14.97-7.5-5.34-7.22-14.6-9.56-23.08-2.5-9.02.6-17.35-2.57-26.2-2.45-6.82-6.23-14.54-13.01-13.24-6.5.92-15.08 1.38-19.23-2.97-5.65-5.93-6-10.1-6.61-18.56 1.65-6.94 5.79-12.64 10.38-18.63 3.4-4.42 17.45-10.39 25.26-7.83 10.35 3.38 17.43 10.5 28.95 8.57 3.12-.53 9.14-4.65 7.1-6.62zm-145.6 37.27c-4.96-1.27-11.57 1.13-11.8 6.94-1.48 5.59-4.82 10.62-5.8 16.32.56 6.42 4.34 12.02 8.18 16.97 3.72 3.85 8.58 7.37 9.3 13.1 1.24 5.88 1.6 11.92 2.28 17.87.34 9.37.95 19.67 7.29 27.16 4.26 3.83 8.4-2.15 6.52-6.3-.54-4.54-.6-9.11 1.01-13.27 4.2-6.7 7.32-10.57 12.44-16.64 5.6-7.16 12.74-11.75 14-20.9.56-4.26 5.72-13.86 1.7-16.72-3.14-2.3-15.83-4-18.86-6.49-2.36-1.71-3.86-9.2-9.86-12.07-4.91-3.1-10.28-6.73-16.4-5.97zm11.16-49.42c6.13-2.93 10.58-4.77 14.61-10.25 3.5-4.28 2.46-12.62-2.59-15.45-7.27-3.22-13.08 5.78-18.81 8.71-5.96 4.2-12.07-5.48-6.44-10.6 5.53-4.13.38-9.2-5.66-8.48-6.12.8-12.48-1.45-18.6-1.73-5.3-.7-10.13-1-15.45-1.37-5.37-.05-16.51-2.23-25.13.87-5.42 1.79-12.5 5.3-16.73 9.06-4.85 4.2.2 7.56 5.54 7.45 5.3-.22 16.8-5.36 20.16.98 3.68 8.13-5.82 18.29-5.2 26.69.1 6.2 3.37 11 4.74 16.98 1.62 5.94 6.17 10.45 10 15.14 4.7 5.06 13.06 6.3 19.53 8.23 7.46.14 3.34-9.23 3.01-14.11 1.77-7.15 8.49-7.82 12.68-13.5 7.14-7.72 16.41-13.4 24.34-18.62zM190.88 3.1c-4.69 0-13.33.04-18.17-.34-7.65.12-13.1-.62-19.48-1.09-3.67.39-9.09 3.34-5.28 7.04 3.8.94 7.32 4.92 7.1 9.31 1.32 4.68 1.2 11.96 6.53 13.88 4.76-.2 7.12-7.6 11.93-8.25 6.85-2.05 12.5-4.58 17.87-9.09 2.48-2.76 7.94-6.38 5.26-10.33-1.55-1.31-2.18-.64-5.76-1.13zm178.81 157.37c-2.66 10.08-5.88 24.97 9.4 15.43 7.97-5.72 12.58-2.02 17.47 1.15.5.43 2.65 9.2 7.19 8.53 5.43-2.1 11.55-5.1 14.96-11.2 2.6-4.62 3.6-12.39 2.76-13.22-3.18-3.43-6.24-11.03-7.7-15.1-.76-2.14-2.24-2.6-2.74-.4-2.82 12.85-6.04 1.22-10.12-.05-8.2-1.67-29.62 7.17-31.22 14.86z"/> +<g fill="none"> +<path stroke="#cf63a6" stroke-linecap="round" stroke-width="2.76" d="M135.2 140.58c61.4-3.82 115.95-118.83 151.45-103.33"/> +<path stroke="#cf63a6" stroke-linecap="round" stroke-width="2.76" d="M74.43 46.66c38.15 8.21 64.05 42.26 60.78 93.92M286.65 37.25c-9.6 39.44-3.57 57.12-35.64 91.98"/> +<path stroke="#e4c101" stroke-dasharray="9.06,2.265" stroke-width="2.27" d="M397.92 162.52c-31.38 1.26-90.89-53.54-148.3-36.17"/> +<path stroke="#cf63a6" stroke-linecap="round" stroke-width="2.77" d="M17.6 245.88c14.35 0 14.4.05 28-.03"/> +<path stroke="#e3bf01" stroke-dasharray="9.06,2.265" stroke-width="2.27" d="M46.26 274.14c-17.52-.12-16.68.08-30.34.07"/> +</g> +<g transform="translate(120.8 -35.81)"> +<circle cx="509.78" cy="68.74" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/> +<circle cx="440.95" cy="251.87" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/> +<circle cx="212.62" cy="272.19" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/> +<circle cx="92.12" cy="87.56" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/> +<circle cx="730.88" cy="315.83" r="18.12" fill="#67727b" transform="translate(-93.3 38.03) scale(.50637)"/> +<circle cx="-102.85" cy="282.18" r="9.18" fill="#240a3b"/> +<circle cx="-102.85" cy="309.94" r="9.18" fill="#67727b"/> +</g> +<g class="t"> +<text xml:space="preserve" x="-24.76" y="10.37" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="-24.76" y="10.37">The user</tspan></text> +<text xml:space="preserve" x="150.63" y="196.62" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="150.63" y="196.62">This server</tspan></text> +<text xml:space="preserve" x="346.39" y="202.63" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="346.39" y="202.63">Your service</tspan></text> +<text xml:space="preserve" x="34.52" y="249.07" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="34.52" y="249.07">Tor encrypted link</tspan></text> +<text xml:space="preserve" x="34.13" y="276.05" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="34.13" y="276.05">Unencrypted link</tspan></text> +<path fill="none" stroke-linecap="round" stroke-width="1.67" d="M222.6 184.1c-2.6-15.27 8.95-23.6 18.43-38.86m186.75 45.61c-.68-10.17-9.4-17.68-18.08-23.49"/> +<path fill="none" stroke-linecap="round" stroke-width="1.67" d="M240.99 153.41c.35-3.41 1.19-6.17.04-8.17m-7.15 5.48c1.83-2.8 4.58-4.45 7.15-5.48"/> +<path fill="none" stroke-linecap="round" stroke-width="1.67" d="M412.43 173.21c-2.2-3.15-2.54-3.85-2.73-5.85m0 0c2.46-.65 3.85.01 6.67 1.24M61.62 40.8C48.89 36.98 36.45 27.54 36.9 18.96M61.62 40.8c.05-2.58-3.58-4.8-5.25-5.26m-2.65 6.04c1.8.54 6.8 1.31 7.9-.78"/> +<path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.44" d="M1.22 229.4h247.74v63.1H1.22z"/> +</g> +</svg> +</p> + +<p> +<a href="https://2019.www.torproject.org/about/overview">Read more about how Tor works.</a></p> <p> -Tor sees use by <a href="https://www.torproject.org/about/torusers">many +Tor sees use by <a href="https://2019.www.torproject.org/about/torusers">many important segments of the population</a>, including whistle blowers, journalists, Chinese dissidents skirting the Great Firewall and oppressive censorship, abuse victims, stalker targets, the US military, and law enforcement, just to name a few. While Tor is not designed for malicious computer users, it is true that they can use the network for malicious ends. In reality however, the actual amount of <a -href="https://www.torproject.org/docs/faq-abuse">abuse</a> is quite low. This +href="https://support.torproject.org/abuse/">abuse</a> is quite low. This is largely because criminals and hackers have significantly better access to privacy and anonymity than do the regular users whom they prey upon. Criminals can and do <a -href="http://voices.washingtonpost.com/securityfix/2008/08/web_fraud_20_tools.html">build, +href="https://web.archive.org/web/20200131013910/http://voices.washingtonpost.com/securityfix/2008/08/web_fraud_20_tools.html">build, sell, and trade</a> far larger and <a -href="http://voices.washingtonpost.com/securityfix/2008/08/web_fraud_20_distributing_your.html">more +href="https://web.archive.org/web/20200131013908/http://voices.washingtonpost.com/securityfix/2008/08/web_fraud_20_distributing_your.html">more powerful networks</a> than Tor on a daily basis. Thus, in the mind of this operator, the social need for easily accessible censorship-resistant private, anonymous communication trumps the risk of unskilled bad actors, who are @@ -256,7 +292,7 @@ Furthermore, this machine also serves as a carrier of email, which means that its contents are further protected under the ECPA. <a href="https://www.law.cornell.edu/uscode/text/18/2707">18 USC 2707</a> explicitly allows for civil remedies ($1000/account -<i><b>plus</b></i> legal fees) +<i>plus</i> legal fees) in the event of a seizure executed without good faith or probable cause (it should be clear at this point that traffic with an originating IP address of FIXME_DNS_NAME should not constitute probable cause to seize the @@ -275,16 +311,16 @@ equipment, in accordance with <a href="https://www.law.cornell.edu/uscode/text/17/512">DMCA "safe harbor" provisions</a>. In other words, you will have just as much luck sending a takedown notice to the Internet backbone providers. Please consult -<a href="https://www.torproject.org/eff/tor-dmca-response">EFF's prepared +<a href="https://community.torproject.org/relay/community-resources/eff-tor-legal-faq/tor-dmca-response/">EFF's prepared response</a> for more information on this matter.</p> <p>For more information, please consult the following documentation:</p> -<ol> -<li><a href="https://www.torproject.org/about/overview">Tor Overview</a></li> -<li><a href="https://www.torproject.org/docs/faq-abuse">Tor Abuse FAQ</a></li> -<li><a href="https://www.torproject.org/eff/tor-legal-faq">Tor Legal FAQ</a></li> -</ol> +<div class="links"> +<a href="https://2019.www.torproject.org/about/overview">Tor Overview</a> +<a href="https://support.torproject.org/abuse/">Tor Abuse FAQ</a> +<a href="https://community.torproject.org/relay/community-resources/eff-tor-legal-faq/">Tor Legal FAQ</a> +</div> <p> That being said, if you still have a complaint about the router, you may @@ -298,14 +334,15 @@ already blocked.</p> <p> You also have the option of blocking this IP address and others on the Tor network if you so desire. The Tor project provides a <a -href="https://check.torproject.org/cgi-bin/TorBulkExitList.py">web service</a> +href="https://check.torproject.org/torbulkexitlist">web service</a> to fetch a list of all IP addresses of Tor exit nodes that allow exiting to a specified IP:port combination, and an official <a -href="https://www.torproject.org/tordnsel/dist/">DNSRBL</a> is also available to +href="https://dist.torproject.org/tordnsel/">DNSRBL</a> is also available to determine if a given IP address is actually a Tor exit server. Please be considerate when using these options. It would be unfortunate to deny all Tor users access to your site indefinitely simply because of a few bad apples.</p> +</main> </body> </html> diff --git a/contrib/win32build/tor-mingw.nsi.in b/contrib/win32build/tor-mingw.nsi.in index 31579e7041..237c58f4fa 100644 --- a/contrib/win32build/tor-mingw.nsi.in +++ b/contrib/win32build/tor-mingw.nsi.in @@ -8,7 +8,7 @@ !include "LogicLib.nsh" !include "FileFunc.nsh" !insertmacro GetParameters -!define VERSION "0.4.6.10-dev" +!define VERSION "0.4.7.5-alpha-dev" !define INSTALLER "tor-${VERSION}-win32.exe" !define WEBSITE "https://www.torproject.org/" !define LICENSE "LICENSE" diff --git a/doc/HACKING/CircuitPaddingDevelopment.md b/doc/HACKING/CircuitPaddingDevelopment.md index 95ffbae4dd..e4aa9ddd09 100644 --- a/doc/HACKING/CircuitPaddingDevelopment.md +++ b/doc/HACKING/CircuitPaddingDevelopment.md @@ -381,11 +381,10 @@ use case. #### 2.2.2. Detecting and Negotiating Machine Support When a new machine specification is added to Tor (or removed from Tor), you -should bump the Padding subprotocol version in `src/core/or/protover.c` and -`src/rust/protover/protover.rs`, add a field to `protover_summary_flags_t` in -`or.h`, and set this field in `memoize_protover_summary()` in versions.c. This -new field must then be checked in `circpad_node_supports_padding()` in -`circuitpadding.c`. +should bump the Padding subprotocol version in `src/core/or/protover.c`, add a +field to `protover_summary_flags_t` in `or.h`, and set this field in +`memoize_protover_summary()` in versions.c. This new field must then be +checked in `circpad_node_supports_padding()` in `circuitpadding.c`. Note that this protocol version update and associated support check is not necessary if your experiments will *only* be using your own relays that diff --git a/doc/HACKING/CodingStandards.md b/doc/HACKING/CodingStandards.md index cd3417d0b5..c5dd6c744f 100644 --- a/doc/HACKING/CodingStandards.md +++ b/doc/HACKING/CodingStandards.md @@ -59,7 +59,7 @@ Some compatible licenses include: Each main development series (like 0.2.1, 0.2.2, etc) has its main work applied to a single branch. At most one series can be the development series at a time; all other series are maintenance series that get bug-fixes only. -The development series is built in a git branch called "master"; the +The development series is built in a git branch called "main"; the maintenance series are built in branches called "maint-0.2.0", "maint-0.2.1", and so on. We regularly merge the active maint branches forward. @@ -75,7 +75,7 @@ If you're working on a bugfix for a bug that occurs in a particular version, base your bugfix branch on the "maint" branch for the first supported series that has that bug. (As of June 2013, we're supporting 0.2.3 and later.) -If you're working on a new feature, base it on the master branch. If you're +If you're working on a new feature, base it on the main branch. If you're working on a new feature and it will take a while to implement and/or you'd like to avoid the possibility of unrelated bugs in Tor while you're implementing your feature, consider branching off of the latest maint- branch. diff --git a/doc/HACKING/CodingStandardsRust.md b/doc/HACKING/CodingStandardsRust.md deleted file mode 100644 index c821465173..0000000000 --- a/doc/HACKING/CodingStandardsRust.md +++ /dev/null @@ -1,553 +0,0 @@ -# Rust Coding Standards - -You MUST follow the standards laid out in `doc/HACKING/CodingStandards.md`, -where applicable. - -## Module/Crate Declarations - -Each Tor C module which is being rewritten MUST be in its own crate. -See the structure of `src/rust` for examples. - -In your crate, you MUST use `lib.rs` ONLY for pulling in external -crates (e.g. `extern crate libc;`) and exporting public objects from -other Rust modules (e.g. `pub use mymodule::foo;`). For example, if -you create a crate in `src/rust/yourcrate`, your Rust code should -live in `src/rust/yourcrate/yourcode.rs` and the public interface -to it should be exported in `src/rust/yourcrate/lib.rs`. - -If your code is to be called from Tor C code, you MUST define a safe -`ffi.rs`. See the "Safety" section further down for more details. - -For example, in a hypothetical `tor_addition` Rust module: - -In `src/rust/tor_addition/addition.rs`: - -```rust -pub fn get_sum(a: i32, b: i32) -> i32 { - a + b -} -``` - -In `src/rust/tor_addition/lib.rs`: - -```rust -pub use addition::*; -``` - -In `src/rust/tor_addition/ffi.rs`: - -```rust -#[no_mangle] -pub extern "C" fn tor_get_sum(a: c_int, b: c_int) -> c_int { - get_sum(a, b) -} -``` - -If your Rust code must call out to parts of Tor's C code, you must -declare the functions you are calling in the `external` crate, located -at `src/rust/external`. - -<!-- XXX get better examples of how to declare these externs, when/how they --> -<!-- XXX are unsafe, what they are expected to do —isis --> - -Modules should strive to be below 500 lines (tests excluded). Single -responsibility and limited dependencies should be a guiding standard. - -If you have any external modules as dependencies (e.g. `extern crate -libc;`), you MUST declare them in your crate's `lib.rs` and NOT in any -other module. - -## Dependencies and versions - -In general, we use modules from only the Rust standard library -whenever possible. We will review including external crates on a -case-by-case basis. - -If a crate only contains traits meant for compatibility between Rust -crates, such as [the digest crate](https://crates.io/crates/digest) or -[the failure crate](https://crates.io/crates/failure), it is very likely -permissible to add it as a dependency. However, a brief review should -be conducted as to the usefulness of implementing external traits -(i.e. how widespread is the usage, how many other crates either -implement the traits or have trait bounds based upon them), as well as -the stability of the traits (i.e. if the trait is going to change, we'll -potentially have to re-do all our implementations of it). - -For large external libraries, especially which implement features which -would be labour-intensive to reproduce/maintain ourselves, such as -cryptographic or mathematical/statistics libraries, only crates which -have stabilised to 1.0.0 should be considered, however, again, we may -make exceptions on a case-by-case basis. - -Currently, Tor requires that you use the latest stable Rust version. At -some point in the future, we will freeze on a given stable Rust version, -to ensure backward compatibility with stable distributions that ship it. - -## Updating/Adding Dependencies - -To add/remove/update dependencies, first add your dependencies, -exactly specifying their versions, into the appropriate *crate-level* -`Cargo.toml` in `src/rust/` (i.e. *not* `/src/rust/Cargo.toml`, but -instead the one for your crate). Also, investigate whether your -dependency has any optional dependencies which are unnecessary but are -enabled by default. If so, you'll likely be able to enable/disable -them via some feature, e.g.: - -```toml -[dependencies] -foo = { version = "1.0.0", default-features = false } -``` - -Next, run `/scripts/maint/updateRustDependencies.sh`. Then, go into -`src/ext/rust` and commit the changes to the `tor-rust-dependencies` -repo. - -## Documentation - -You MUST include `#![deny(missing_docs)]` in your crate. - -For function/method comments, you SHOULD include a one-sentence, "first person" -description of function behaviour (see requirements for documentation as -described in `src/HACKING/CodingStandards.md`), then an `# Inputs` section -for inputs or initialisation values, a `# Returns` section for return -values/types, a `# Warning` section containing warnings for unsafe behaviours or -panics that could happen. For publicly accessible -types/constants/objects/functions/methods, you SHOULD also include an -`# Examples` section with runnable doctests. - -You MUST document your module with _module docstring_ comments, -i.e. `//!` at the beginning of each line. - -## Style - -You SHOULD consider breaking up large literal numbers with `_` when it makes it -more human readable to do so, e.g. `let x: u64 = 100_000_000_000`. - -## Testing - -All code MUST be unittested and integration tested. - -Public functions/objects exported from a crate SHOULD include doctests -describing how the function/object is expected to be used. - -Integration tests SHOULD go into a `tests/` directory inside your -crate. Unittests SHOULD go into their own module inside the module -they are testing, e.g. in `src/rust/tor_addition/addition.rs` you -should put: - -```rust -#[cfg(test)] -mod test { - use super::*; - -#[test] - fn addition_with_zero() { - let sum: i32 = get_sum(5i32, 0i32); - assert_eq!(sum, 5); - } -} -``` - -## Benchmarking - -The external `test` crate can be used for most benchmarking. However, using -this crate requires nightly Rust. Since we may want to switch to a more -stable Rust compiler eventually, we shouldn't do things which will automatically -break builds for stable compilers. Therefore, you MUST feature-gate your -benchmarks in the following manner. - -If you wish to benchmark some of your Rust code, you MUST put the -following in the `[features]` section of your crate's `Cargo.toml`: - -```toml -[features] -bench = [] -``` - -Next, in your crate's `lib.rs` you MUST put: - -```rust -#[cfg(all(test, feature = "bench"))] -extern crate test; -``` - -This ensures that the external crate `test`, which contains utilities -for basic benchmarks, is only used when running benchmarks via `cargo -bench --features bench`. - -Finally, to write your benchmark code, in -`src/rust/tor_addition/addition.rs` you SHOULD put: - -```rust -#[cfg(all(test, features = "bench"))] -mod bench { - use test::Bencher; - use super::*; - -#[bench] - fn addition_small_integers(b: &mut Bencher) { - b.iter(| | get_sum(5i32, 0i32)); - } -} -``` - -## Fuzzing - -If you wish to fuzz parts of your code, please see the -[cargo fuzz](https://github.com/rust-fuzz/cargo-fuzz) crate, which uses -[libfuzzer-sys](https://github.com/rust-fuzz/libfuzzer-sys). - -## Whitespace & Formatting - -You MUST run `rustfmt` (https://github.com/rust-lang-nursery/rustfmt) -on your code before your code will be merged. You can install rustfmt -by doing `cargo install rustfmt-nightly` and then run it with `cargo -fmt`. - -## Safety - -You SHOULD read [the nomicon](https://doc.rust-lang.org/nomicon/) before writing -Rust FFI code. It is *highly advised* that you read and write normal Rust code -before attempting to write FFI or any other unsafe code. - -Here are some additional bits of advice and rules: - -0. Any behaviours which Rust considers to be undefined are forbidden - - From https://doc.rust-lang.org/reference/behavior-considered-undefined.html: - - > Behavior considered undefined - > - > The following is a list of behavior which is forbidden in all Rust code, - > including within unsafe blocks and unsafe functions. Type checking provides the - > guarantee that these issues are never caused by safe code. - > - > * Data races - > * Dereferencing a null/dangling raw pointer - > * Reads of [undef](https://llvm.org/docs/LangRef.html#undefined-values) - > (uninitialized) memory - > * Breaking the - > [pointer aliasing rules](https://llvm.org/docs/LangRef.html#pointer-aliasing-rules) - > with raw pointers (a subset of the rules used by C) - > * `&mut T` and `&T` follow LLVM’s scoped noalias model, except if the `&T` - > contains an `UnsafeCell<U>`. Unsafe code must not violate these aliasing - > guarantees. - > * Mutating non-mutable data (that is, data reached through a shared - > reference or data owned by a `let` binding), unless that data is - > contained within an `UnsafeCell<U>`. - > * Invoking undefined behavior via compiler intrinsics: - > - Indexing outside of the bounds of an object with - > `std::ptr::offset` (`offset` intrinsic), with the exception of - > one byte past the end which is permitted. - > - Using `std::ptr::copy_nonoverlapping_memory` (`memcpy32`/`memcpy64` - > intrinsics) on overlapping buffers - > * Invalid values in primitive types, even in private fields/locals: - > - Dangling/null references or boxes - > - A value other than `false` (0) or `true` (1) in a `bool` - > - A discriminant in an `enum` not included in the type definition - > - A value in a `char` which is a surrogate or above `char::MAX` - > - Non-UTF-8 byte sequences in a `str` - > * Unwinding into Rust from foreign code or unwinding from Rust into foreign - > code. Rust's failure system is not compatible with exception handling in other - > languages. Unwinding must be caught and handled at FFI boundaries. - -1. `unwrap()` - - If you call `unwrap()`, anywhere, even in a test, you MUST include - an inline comment stating how the unwrap will either 1) never fail, - or 2) should fail (i.e. in a unittest). - - You SHOULD NOT use `unwrap()` anywhere in which it is possible to handle the - potential error with the eel operator, `?` or another non panicking way. - For example, consider a function which parses a string into an integer: - - ```rust - fn parse_port_number(config_string: &str) -> u16 { - u16::from_str_radix(config_string, 10).unwrap() - } - ``` - - There are numerous ways this can fail, and the `unwrap()` will cause the - whole program to byte the dust! Instead, either you SHOULD use `ok()` - (or another equivalent function which will return an `Option` or a `Result`) - and change the return type to be compatible: - - ```rust - fn parse_port_number(config_string: &str) -> Option<u16> { - u16::from_str_radix(config_string, 10).ok() - } - ``` - - or you SHOULD use `or()` (or another similar method): - - ```rust - fn parse_port_number(config_string: &str) -> Option<u16> { - u16::from_str_radix(config_string, 10).or(Err("Couldn't parse port into a u16") - } - ``` - - Using methods like `or()` can be particularly handy when you must do - something afterwards with the data, for example, if we wanted to guarantee - that the port is high. Combining these methods with the eel operator (`?`) - makes this even easier: - - ```rust - fn parse_port_number(config_string: &str) -> Result<u16, Err> { - let port = u16::from_str_radix(config_string, 10).or(Err("Couldn't parse port into a u16"))?; - - if port > 1024 { - return Ok(port); - } else { - return Err("Low ports not allowed"); - } - } - ``` - -2. `unsafe` - - If you use `unsafe`, you MUST describe a contract in your - documentation which describes how and when the unsafe code may - fail, and what expectations are made w.r.t. the interfaces to - unsafe code. This is also REQUIRED for major pieces of FFI between - C and Rust. - - When creating an FFI in Rust for C code to call, it is NOT REQUIRED - to declare the entire function `unsafe`. For example, rather than doing: - - ```rust - #[no_mangle] - pub unsafe extern "C" fn increment_and_combine_numbers(mut numbers: [u8; 4]) -> u32 { - for number in &mut numbers { - *number += 1; - } - std::mem::transmute::<[u8; 4], u32>(numbers) - } - ``` - - You SHOULD instead do: - - ```rust - #[no_mangle] - pub extern "C" fn increment_and_combine_numbers(mut numbers: [u8; 4]) -> u32 { - for index in 0..numbers.len() { - numbers[index] += 1; - } - unsafe { - std::mem::transmute::<[u8; 4], u32>(numbers) - } - } - ``` - -3. Pass only C-compatible primitive types and bytes over the boundary - - Rust's C-compatible primitive types are integers and floats. - These types are declared in the [libc crate](https://doc.rust-lang.org/libc/x86_64-unknown-linux-gnu/libc/index.html#types). - Most Rust objects have different [representations](https://doc.rust-lang.org/libc/x86_64-unknown-linux-gnu/libc/index.html#types) - in C and Rust, so they can't be passed using FFI. - - Tor currently uses the following Rust primitive types from libc for FFI: - * defined-size integers: `uint32_t` - * native-sized integers: `c_int` - * native-sized floats: `c_double` - * native-sized raw pointers: `* c_void`, `* c_char`, `** c_char` - - TODO: C smartlist to Stringlist conversion using FFI - - The only non-primitive type which may cross the FFI boundary is - bytes, e.g. `&[u8]`. This SHOULD be done on the Rust side by - passing a pointer (`*mut libc::c_char`). The length can be passed - explicitly (`libc::size_t`), or the string can be NUL-byte terminated - C string. - - One might be tempted to do this via doing - `CString::new("blah").unwrap().into_raw()`. This has several problems: - - a) If you do `CString::new("bl\x00ah")` then the unwrap() will fail - due to the additional NULL terminator, causing a dangling - pointer to be returned (as well as a potential use-after-free). - - b) Returning the raw pointer will cause the CString to run its deallocator, - which causes any C code which tries to access the contents to dereference a - NULL pointer. - - c) If we were to do `as_raw()` this would result in a potential double-free - since the Rust deallocator would run and possibly Tor's deallocator. - - d) Calling `into_raw()` without later using the same pointer in Rust to call - `from_raw()` and then deallocate in Rust can result in a - [memory leak](https://doc.rust-lang.org/std/ffi/struct.CString.html#method.into_raw). - - [It was determined](https://github.com/rust-lang/rust/pull/41074) that this - is safe to do if you use the same allocator in C and Rust and also specify - the memory alignment for CString (except that there is no way to specify - the alignment for CString). It is believed that the alignment is always 1, - which would mean it's safe to dealloc the resulting `*mut c_char` in Tor's - C code. However, the Rust developers are not willing to guarantee the - stability of, or a contract for, this behaviour, citing concerns that this - is potentially extremely and subtly unsafe. - -4. Perform an allocation on the other side of the boundary - - After crossing the boundary, the other side MUST perform an - allocation to copy the data and is therefore responsible for - freeing that memory later. - -5. No touching other language's enums - - Rust enums should never be touched from C (nor can they be safely - `#[repr(C)]`) nor vice versa: - - > "The chosen size is the default enum size for the target platform's C - > ABI. Note that enum representation in C is implementation defined, so this is - > really a "best guess". In particular, this may be incorrect when the C code - > of interest is compiled with certain flags." - - (from https://gankro.github.io/nomicon/other-reprs.html) - -6. Type safety - - Wherever possible and sensical, you SHOULD create new types in a - manner which prevents type confusion or misuse. For example, - rather than using an untyped mapping between strings and integers - like so: - - ```rust - use std::collections::HashMap; - - pub fn get_elements_with_over_9000_points(map: &HashMap<String, usize>) -> Vec<String> { - ... - } - ``` - - It would be safer to define a new type, such that some other usage - of `HashMap<String, usize>` cannot be confused for this type: - - ```rust - pub struct DragonBallZPowers(pub HashMap<String, usize>); - - impl DragonBallZPowers { - pub fn over_nine_thousand<'a>(&'a self) -> Vec<&'a String> { - let mut powerful_enough: Vec<&'a String> = Vec::with_capacity(5); - - for (character, power) in &self.0 { - if *power > 9000 { - powerful_enough.push(character); - } - } - powerful_enough - } - } - ``` - - Note the following code, which uses Rust's type aliasing, is valid - but it does NOT meet the desired type safety goals: - - ```rust - pub type Power = usize; - - pub fn over_nine_thousand(power: &Power) -> bool { - if *power > 9000 { - return true; - } - false - } - - // We can still do the following: - let his_power: usize = 9001; - over_nine_thousand(&his_power); - ``` - -7. Unsafe mucking around with lifetimes - - Because lifetimes are technically, in type theory terms, a kind, i.e. a - family of types, individual lifetimes can be treated as types. For example, - one can arbitrarily extend and shorten lifetime using `std::mem::transmute`: - - ```rust - struct R<'a>(&'a i32); - - unsafe fn extend_lifetime<'b>(r: R<'b>) -> R<'static> { - std::mem::transmute::<R<'b>, R<'static>>(r) - } - - unsafe fn shorten_invariant_lifetime<'b, 'c>(r: &'b mut R<'static>) -> &'b mut R<'c> { - std::mem::transmute::<&'b mut R<'static>, &'b mut R<'c>>(r) - } - ``` - - Calling `extend_lifetime()` would cause an `R` passed into it to live forever - for the life of the program (the `'static` lifetime). Similarly, - `shorten_invariant_lifetime()` could be used to take something meant to live - forever, and cause it to disappear! This is incredibly unsafe. If you're - going to be mucking around with lifetimes like this, first, you better have - an extremely good reason, and second, you may as be honest and explicit about - it, and for ferris' sake just use a raw pointer. - - In short, just because lifetimes can be treated like types doesn't mean you - should do it. - -8. Doing excessively unsafe things when there's a safer alternative - - Similarly to #7, often there are excessively unsafe ways to do a task and a - simpler, safer way. You MUST choose the safer option where possible. - - For example, `std::mem::transmute` can be abused in ways where casting with - `as` would be both simpler and safer: - - ```rust - // Don't do this - let ptr = &0; - let ptr_num_transmute = unsafe { std::mem::transmute::<&i32, usize>(ptr)}; - - // Use an `as` cast instead - let ptr_num_cast = ptr as *const i32 as usize; - ``` - - In fact, using `std::mem::transmute` for *any* reason is a code smell and as - such SHOULD be avoided. - -9. Casting integers with `as` - - This is generally fine to do, but it has some behaviours which you should be - aware of. Casting down chops off the high bits, e.g.: - - ```rust - let x: u32 = 4294967295; - println!("{}", x as u16); // prints 65535 - ``` - - Some cases which you MUST NOT do include: - - * Casting an `u128` down to an `f32` or vice versa (e.g. - `u128::MAX as f32` but this isn't only a problem with overflowing - as it is also undefined behaviour for `42.0f32 as u128`), - - * Casting between integers and floats when the thing being cast - cannot fit into the type it is being casted into, e.g.: - - ```rust - println!("{}", 42949.0f32 as u8); // prints 197 in debug mode and 0 in release - println!("{}", 1.04E+17 as u8); // prints 0 in both modes - println!("{}", (0.0/0.0) as i64); // prints whatever the heck LLVM wants - ``` - - Because this behaviour is undefined, it can even produce segfaults in - safe Rust code. For example, the following program built in release - mode segfaults: - - ```rust - #[inline(never)] - pub fn trigger_ub(sl: &[u8; 666]) -> &[u8] { - // Note that the float is out of the range of `usize`, invoking UB when casting. - let idx = 1e99999f64 as usize; - &sl[idx..] // The bound check is elided due to `idx` being of an undefined value. - } - - fn main() { - println!("{}", trigger_ub(&[1; 666])[999999]); // ~ out of bound - } - ``` - - And in debug mode panics with: - - thread 'main' panicked at 'slice index starts at 140721821254240 but ends at 666', /checkout/src/libcore/slice/mod.rs:754:4 diff --git a/doc/HACKING/GettingStarted.md b/doc/HACKING/GettingStarted.md index 6d61be9881..271e2d7517 100644 --- a/doc/HACKING/GettingStarted.md +++ b/doc/HACKING/GettingStarted.md @@ -41,7 +41,7 @@ Once you've reached this point, here's what you need to know. $ git clone https://git.torproject.org/git/tor ``` - This will give you a checkout of the master branch. If you're + This will give you a checkout of the main branch. If you're going to fix a bug that appears in a stable version, check out the appropriate "maint" branch, as in: diff --git a/doc/HACKING/GettingStartedRust.md b/doc/HACKING/GettingStartedRust.md deleted file mode 100644 index beef825226..0000000000 --- a/doc/HACKING/GettingStartedRust.md +++ /dev/null @@ -1,187 +0,0 @@ -# Hacking on Rust in Tor - -## Getting Started - -Please read or review our documentation on Rust coding standards -(`doc/HACKING/CodingStandardsRust.md`) before doing anything. - -Please also read -[the Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html). We -aim to follow the good example set by the Rust community and be -excellent to one another. Let's be careful with each other, so we can -be memory-safe together! - -Next, please contact us before rewriting anything! Rust in Tor is still -an experiment. It is an experiment that we very much want to see -succeed, so we're going slowly and carefully. For the moment, it's also -a completely volunteer-driven effort: while many, if not most, of us are -paid to work on Tor, we are not yet funded to write Rust code for Tor. -Please be patient with the other people who are working on getting more -Rust code into Tor, because they are graciously donating their free time -to contribute to this effort. - -## Resources for learning Rust - -**Beginning resources** - -The primary resource for learning Rust is -[The Book](https://doc.rust-lang.org/book/). If you'd like to start writing -Rust immediately, without waiting for anything to install, there is -[an interactive browser-based playground](https://play.rust-lang.org/). - -**Advanced resources** - -If you're interested in playing with various Rust compilers and viewing -a very nicely displayed output of the generated assembly, there is -[the Godbolt compiler explorer](https://rust.godbolt.org/) - -For learning how to write unsafe Rust, read -[The Rustonomicon](https://doc.rust-lang.org/nomicon/). - -For learning everything you ever wanted to know about Rust macros, there -is -[The Little Book of Rust Macros](https://danielkeep.github.io/tlborm/book/index.html). - -For learning more about FFI and Rust, see Jake Goulding's -[Rust FFI Omnibus](https://jakegoulding.com/rust-ffi-omnibus/). - -## Compiling Tor with Rust enabled - -You will need to run the `configure` script with the `--enable-rust` -flag to explicitly build with Rust. Additionally, you will need to -specify where to fetch Rust dependencies, as we allow for either -fetching dependencies from Cargo or specifying a local directory. - -**Fetch dependencies from Cargo** - -```console -$ ./configure --enable-rust --enable-cargo-online-mode -``` - -**Using a local dependency cache** - -You'll need the following Rust dependencies (as of this writing): - - libc==0.2.39 - -We vendor our Rust dependencies in a separate repo using -[cargo-vendor](https://github.com/alexcrichton/cargo-vendor). To use -them, do: - -```console -$ git submodule init -$ git submodule update -``` - -To specify the local directory containing the dependencies, (assuming -you are in the top level of the repository) configure tor with: - -```console -$ TOR_RUST_DEPENDENCIES='path_to_dependencies_directory' ./configure --enable-rust -``` - -(Note that `TOR_RUST_DEPENDENCIES` must be the full path to the directory; it -cannot be relative.) - -Assuming you used the above `git submodule` commands and you're in the -topmost directory of the repository, this would be: - -```console -$ TOR_RUST_DEPENDENCIES=`pwd`/src/ext/rust/crates ./configure --enable-rust -``` - -## Identifying which modules to rewrite - -The places in the Tor codebase that are good candidates for porting to -Rust are: - -1. loosely coupled to other Tor submodules, -2. have high test coverage, and -3. would benefit from being implemented in a memory safe language. - -Help in either identifying places such as this, or working to improve -existing areas of the C codebase by adding regression tests and -simplifying dependencies, would be really helpful. - -Furthermore, as submodules in C are implemented in Rust, this is a good -opportunity to refactor, add more tests, and split modules into smaller -areas of responsibility. - -A good first step is to build a module-level callgraph to understand how -interconnected your target module is. - -```console -$ git clone https://git.torproject.org/user/nickm/calltool.git -$ cd tor -$ CFLAGS=0 ./configure -$ ../calltool/src/main.py module_callgraph -``` - -The output will tell you each module name, along with a set of every module that -the module calls. Modules which call fewer other modules are better targets. - -## Writing your Rust module - -Strive to change the C API as little as possible. - -We are currently targeting Rust stable. (See `CodingStandardsRust.md` for more -details.) - -It is on our TODO list to try to cultivate good -standing with various distro maintainers of `rustc` and `cargo`, in -order to ensure that whatever version we solidify on is readily -available. - -If parts of your Rust code needs to stay in sync with C code (such as -handling enums across the FFI boundary), annonotate these places in a -comment structured as follows: - - `/// C_RUST_COUPLED: <path_to_file> <name_of_c_object>` - -Where `<name_of_c_object>` can be an enum, struct, constant, etc. Then, -do the same in the C code, to note that rust will need to be changed -when the C does. - -## Adding your Rust module to Tor's build system - -0. Your translation of the C module should live in its own crate(s) - in the `src/rust/` directory. -1. Add your crate to `src/rust/Cargo.toml`, in the - `[workspace.members]` section. -2. Add your crate's files to src/rust/include.am - -If your crate should be available to C (rather than just being included as a -dependency of other Rust modules): -0. Declare the crate as a dependency of tor_rust in - `src/rust/tor_util/Cargo.toml` and include it in - `src/rust/tor_rust/lib.rs` - -## How to test your Rust code - -Everything should be tested full stop. Even non-public functionality. - -Be sure to edit `src/test/test_rust.sh` to add the name of your -crate to the `crates` variable! This will ensure that `cargo test` is -run on your crate. - -Configure Tor's build system to build with Rust enabled: - -```console -$ ./configure --enable-fatal-warnings --enable-rust --enable-cargo-online-mode -``` - -Tor's test should be run by doing: - -```console -$ make check -``` - -Tor's integration tests should also pass: - -```console -$ make test-stem -``` - -## Submitting a patch - -Please follow the instructions in `doc/HACKING/GettingStarted.md`. diff --git a/doc/HACKING/HelpfulTools.md b/doc/HACKING/HelpfulTools.md index 0ce59576f0..7849fc67c7 100644 --- a/doc/HACKING/HelpfulTools.md +++ b/doc/HACKING/HelpfulTools.md @@ -33,8 +33,8 @@ OFTC. If they don't, ask #tor-dev (also on OFTC). It's CI/builders. Looks like this: https://jenkins.torproject.org Runs automatically on commits merged to git.torproject.org. We CI the -master branch and all supported tor versions. We also build nightly debian -packages from master. +main branch and all supported tor versions. We also build nightly debian +packages from main. Builds Linux and Windows cross-compilation. Runs Linux tests. diff --git a/doc/HACKING/Maintaining.md b/doc/HACKING/Maintaining.md index 4d5a7f6b76..267f6d0b58 100644 --- a/doc/HACKING/Maintaining.md +++ b/doc/HACKING/Maintaining.md @@ -7,7 +7,7 @@ The first section describes who is the current Tor maintainer and what are the responsibilities. Tor has one main single maintainer but does have many committers and subsystem maintainers. -The second third section describes how the **alpha and master** branches are +The second third section describes how the **alpha and main** branches are maintained and by whom. Finally, the last section describes how the **stable** branches are maintained @@ -25,7 +25,7 @@ protocol design. Releasing Tor falls under their responsibility. ## Alpha and Master Branches -The Tor repository always has at all times a **master** branch which contains +The Tor repository always has at all times a **main** branch which contains the upstream ongoing development. It may also contain a branch for a released feature freezed version which is @@ -37,7 +37,7 @@ Tor is separated into subsystems and some of those are maintained by other developers than the main maintainer. Those people have commit access to the code base but only commit (in most cases) into the subsystem they maintain. -Upstream merges are restricted to the alpha and master branches. Subsystem +Upstream merges are restricted to the alpha and main branches. Subsystem maintainers should never push a patch into a stable branch which is the responsibility of the [stable branch maintainer](#stable-branches). @@ -69,7 +69,7 @@ maintain the following subsystems: These are the tasks of a subsystem maintainer: 1. Regularly go over `merge_ready` tickets relevant to the related subsystem - and for the current alpha or development (master branch) Milestone. + and for the current alpha or development (main branch) Milestone. 2. A subsystem maintainer is expected to contribute to any design changes (including proposals) or large patch set about the subsystem. @@ -102,7 +102,7 @@ These are few important items to follow when merging code upstream: 4. Tor uses the "merge forward" method, that is, if a patch applies to the alpha branch, it has to be merged there first and then merged forward - into master. + into main. 5. Maintainer should always consult with the network team about any doubts, mis-understandings or unknowns of a patch. Final word will always go to the diff --git a/doc/HACKING/README.1st.md b/doc/HACKING/README.1st.md index 4bc3298c67..1c0decf9ce 100644 --- a/doc/HACKING/README.1st.md +++ b/doc/HACKING/README.1st.md @@ -5,12 +5,11 @@ This directory has helpful information about what you need to know to hack on Tor! -First, read `GettingStarted.md` and `GettingStartedRust.md` -to learn how to get a start in Tor development. +First, read `GettingStarted.md` to learn how to get a start in Tor +development. -If you've decided to write a patch, `CodingStandards.md` and -`CodingStandardsRust.md` will give you a bunch of information -about how we structure our code. +If you've decided to write a patch, `CodingStandards.md` will give you a bunch +of information about how we structure our code. It's important to get the code right! Reading `WritingTests.md` will tell you how to write and run tests in the Tor codebase. @@ -36,6 +35,13 @@ For the latest version of the code, get a copy of git, and $ git clone https://git.torproject.org/git/tor ``` +For a copy of Tor's original design paper, see +[here](https://spec.torproject.org/tor-design). Note that Tor has changed in +many ways since 2004. + +For a large collection of security papers, many of which are related to Tor, +see [Anonbib's Selected Papers in Anonymity](https://www.freehaven.net/anonbib/). + ## Stay in touch We talk about Tor on the `tor-talk` mailing list. Design proposals and diff --git a/doc/HACKING/ReleaseSeriesLifecycle.md b/doc/HACKING/ReleaseSeriesLifecycle.md index 8536fbbd08..e47ac90fa5 100644 --- a/doc/HACKING/ReleaseSeriesLifecycle.md +++ b/doc/HACKING/ReleaseSeriesLifecycle.md @@ -87,17 +87,17 @@ they do not apply to security-related patch release versions. (Ideally, do this immediately after a release.) -1. Start a new maint-x.y.z branch based on master, and a new - release-x.y.z branch based on master. They should have the same +1. Start a new maint-x.y.z branch based on main, and a new + release-x.y.z branch based on main. They should have the same starting point. - Push both of these branches to the master git repository. + Push both of these branches to the canonical git repository. -2. In master, change the version to "0.x.y.0-alpha-dev". Run the +2. In the main branch, change the version to "0.x.y.0-alpha-dev". Run the update_versions.py script, and commit this version bump. 3. Tag the version bump with "tor-0.x.y.0-alpha-dev". Push the tag - and master. + and main branch. 4. Open tickets for connecting the new branches to various other places. See section 2 above for a list of affected locations. @@ -107,7 +107,7 @@ they do not apply to security-related patch release versions. target in the maint-x.y.z branch only. * Delete the file scripts/maint/practracker/.enable_practracker_in_hooks in the maint-x.y.z branch only. - * Merge to release-x.y.z, but do not forward-port to master. + * Merge to release-x.y.z, but do not forward-port to the main branch. 6. Finally, make sure this document is up to date with our latest process. diff --git a/doc/HACKING/ReleasingTor.md b/doc/HACKING/ReleasingTor.md index 739ea38795..9eb89b54de 100644 --- a/doc/HACKING/ReleasingTor.md +++ b/doc/HACKING/ReleasingTor.md @@ -1,234 +1,161 @@ -# Putting out a new release +# How to Release Tor Here are the steps that the maintainer should take when putting out a -new Tor release: +new Tor release. It is split in 3 stages and coupled with our Tor CI Release +pipeline. -## 0. Preliminaries +Before we begin, first rule is to make sure: -1. Get at least two of weasel/arma/Sebastian to put the new - version number in their approved versions list. Give them a few - days to do this if you can. + - Our CIs (*nix and Windows) pass for each version to release + - Coverity has no new alerts -2. If this is going to be an important security release, give these packagers - some advance warning: +## 0. Security Release - - {weasel,sysrqb,mikeperry} at torproject dot org - - {blueness} at gentoo dot org - - {paul} at invizbox dot io - - {vincent} at invizbox dot com - - {lfleischer} at archlinux dot org - - {Nathan} at freitas dot net - - {mike} at tig dot as - - {tails-rm} at boum dot org - - {simon} at sdeziel.info - - {yuri} at freebsd.org - - {mh+tor} at scrit.ch - - {security} at brave.com - -3. Given the release date for Tor, ask the TB team about the likely release - date of a TB that contains it. See note below in "commit, upload, - announce". - -## I. Make sure it works - -1. Make sure that CI passes: have a look at Travis - (https://travis-ci.org/torproject/tor/branches), Appveyor - (https://ci.appveyor.com/project/torproject/tor/history), and - Jenkins (https://jenkins.torproject.org/view/tor/). - Make sure you're looking at the right branches. - - If there are any unexplained failures, try to fix them or figure them - out. - -2. Verify that there are no big outstanding issues. You might find such - issues -- - - * On Trac - - * On coverity scan +To start with, if you are doing a security release, this must be done few days +prior to the release: - * On OSS-Fuzz + 1. If this is going to be an important security release, give the packagers + advance warning, via `tor-packagers@lists.torproject.org`. -## II. Write a changelog -1a. (Alpha release variant) +## 1. Preliminaries - Gather the `changes/*` files into a changelog entry, rewriting many - of them and reordering to focus on what users and funders would find - interesting and understandable. +The following must be done **2 days** at the very least prior to the release: - To do this, run `./scripts/maint/sortChanges.py changes/* > changelog.in` - to combine headings and sort the entries. Copy the changelog.in file into - the ChangeLog. Run `format_changelog.py --inplace` (see below) to clean up - the line breaks. + 1. Add the version(s) in the dirauth-conf git repository as the + RecommendedVersion and RequiredVersion so they can be approved by the + authorities and be in the consensus before the release. - Remove the `changes/*` files that you just merged into the ChangeLog. + 2. Send a pre-release announcement to `tor-project@lists.torproject.org` in + order to inform every teams in Tor of the upcoming release. This is so + we can avoid creating release surprises and sync with other teams. - After that, it's time to hand-edit and fix the issues that - lintChanges can't find: + 3. Ask the network-team to review the `changes/` files in all versions we + are about to release. This step is encouraged but not mandatory. - 1. Within each section, sort by "version it's a bugfix on", else by - numerical ticket order. - 2. Clean them up: +## 2. Tarballs - Make stuff very terse +To build the tarballs to release, we need to launch the CI release pipeline: - Describe the user-visible problem right away + https://gitlab.torproject.org/tpo/core/tor-ci-release - Mention relevant config options by name. If they're rare or unusual, - remind people what they're for +The `versions.yml` needs to be modified with the Tor versions you want to +release. Once done, git commit and push to trigger the release pipeline. - Avoid starting lines with open-paren +The first two stages (Preliminary and Patches) will be run automatically. The +Build stage needs to be triggered manually once all generated patches have +been merged upstream. - Present and imperative tense: not past. + 1. Download the generated patches from the `Patches` stage. - "Relays", not "servers" or "nodes" or "Tor relays". + Apply these patches to the `main` or `release` branch as appropriate. + (Version bumps apply to `maint`; anything touching the changelog should + apply only to `main` or `release`.) - "Onion services", not "hidden services". + 2. For the ChangeLog and ReleaseNotes, you need to write a blurb at the top + explaining a bit the release. - "Stop FOOing", not "Fix a bug where we would FOO". + 3. Review, modify if needed, and merge them upstream. - Try not to let any given section be longer than about a page. Break up - long sections into subsections by some sort of common subtopic. This - guideline is especially important when organizing Release Notes for - new stable releases. + 4. Manually trigger the `maintained` job in the `Build` stage so the CI can + build the tarballs without errors. - If a given changes stanza showed up in a different release (e.g. - maint-0.2.1), be sure to make the stanzas identical (so people can - distinguish if these are the same change). +Once this is done, each selected developers need to build the tarballs in a +reproducible way using: - 3. Clean everything one last time. + https://gitlab.torproject.org/tpo/core/tor-ci-reproducible - 4. Run `./scripts/maint/format_changelog.py --inplace` to make it prettier +Steps are: -1b. (old-stable release variant) + 1. Run `./build.sh` which will download everything you need, including the + latest tarballs from the release CI, and auto-commit the signatures if + the checksum match. You will need to confim the commits. - For stable releases that backport things from later, we try to compose - their releases, we try to make sure that we keep the changelog entries - identical to their original versions, with a "backport from 0.x.y.z" - note added to each section. So in this case, once you have the items - from the changes files copied together, don't use them to build a new - changelog: instead, look up the corrected versions that were merged - into ChangeLog in the master branch, and use those. + 2. If all is good, `git push origin main` your signatures. - Add "backport from X.Y.Z" in the section header for these entries. +Once all signatures from all selected developers have been committed: -2. Compose a short release blurb to highlight the user-facing - changes. Insert said release blurb into the ChangeLog stanza. If it's - a stable release, add it to the ReleaseNotes file too. If we're adding - to a release-* branch, manually commit the changelogs to the later - git branches too. + 1. Manually trigger the `signature` job in the `Post-process` stage of the + CI release pipeline. -3. If there are changes that require or suggest operator intervention - before or during the update, mail operators (either dirauth or relays - list) with a headline that indicates that an action is required or - appreciated. + 2. If it passes, the tarball(s) and signature(s) will be available as + artifacts and should be used for the release. -4. If you're doing the first stable release in a series, you need to - create a ReleaseNotes for the series as a whole. To get started - there, copy all of the Changelog entries from the series into a new - file, and run `./scripts/maint/sortChanges.py` on it. That will - group them by category. Then kill every bugfix entry for fixing - bugs that were introduced within that release series; those aren't - relevant changes since the last series. At that point, it's time - to start sorting and condensing entries. (Generally, we don't edit the - text of existing entries, though.) + 3. Put them on `dist.torproject.org`: -## III. Making the source release. + Upload the tarball and its sig to the dist website: -1. In `maint-0.?.x`, bump the version number in `configure.ac` and run - `make update-versions` to update version numbers in other - places, and commit. Then merge `maint-0.?.x` into `release-0.?.x`. + `rsync -avP tor-0.3.5.18.tar.gz{,.asc} dist-master.torproject.org:/srv/dist-master.torproject.org/htdocs/` - When you merge the maint branch forward to the next maint branch, or into - master, merge it with "-s ours" to avoid conflict with the version - bump. + Then, on dist-master.torproject.org, run: -2. Make distcheck, put the tarball up in somewhere (how about your - homedir on people.torproject.org?) , and tell `#tor-dev` - about it. + `static-update-component dist.torproject.org` - If you want, wait until at least one person has built it - successfully. (We used to say "wait for others to test it", but our - CI has successfully caught these kinds of errors for the last several - years.) + For an alpha or latest stable, open an MR in + https://gitlab.torproject.org/tpo/web/tpo that updates the + `databags/versions.ini` to note the new version. -3. Make sure that the new version is recommended in the latest consensus. - (Otherwise, users will get confused when it complains to them - about its status.) + (NOTE: Due to #17805, there can only be one stable version listed at once. + Nonetheless, do not call your version "alpha" if it is stable, or people + will get confused.) - If it is not, you'll need to poke Roger, Weasel, and Sebastian again: see - item 0.1 at the start of this document. + (NOTE: It will take a while for the website update scripts to update the + website.) -## IV. Commit, upload, announce -1. Sign the tarball, then sign and push the git tag: +## 3. Post Process -```console -$ gpg -ba <the_tarball> -$ git tag -s tor-0.4.x.y-<status> -$ git push origin tag tor-0.4.x.y-<status> -``` +Once the tarballs have been uploaded and are ready to be announced, we need to +do the following: - (You must do this before you update the website: the website scripts - rely on finding the version by tag.) + 1. Tag versions (`main` branch or `release` branch as appropriate) using + `git tag -s tor-0.x.y.z-<status>` and then push the tags: + `git push origin --tags` - (If your default PGP key is not the one you want to sign with, then say - "-u <keyid>" instead of "-s".) + (This should be the `main` or `release` branch because that is the one + from which the tarballs are built. We want our tags to match our + tarballs.) -2. scp the tarball and its sig to the dist website, i.e. - `/srv/dist-master.torproject.org/htdocs/` on dist-master. Run - "static-update-component dist.torproject.org" on dist-master. + 2. Merge upstream the artifacts from the `patches` job in the + `Post-process` stage of the CI release pipeline. - In the project/web/tpo.git repository, update `databags/versions.ini` - to note the new version. Push these changes to master. + 3. Write and post the release announcement for the `forum.torproject.net` + in the `News -> Tor Release Announcement` category. - (NOTE: Due to #17805, there can only be one stable version listed at - once. Nonetheless, do not call your version "alpha" if it is stable, - or people will get confused.) + If possible, mention in which Tor Browser version (with dates) the + release will be in. This usually only applies to the latest stable. - (NOTE: It will take a while for the website update scripts to update - the website.) + 4. Inform `tor-talk@lists.torproject.org` with the releasing pointing to + the Forum. Append the ChangeLog there. We do this until we can automate + such post from the forum directly. -3. Email the tor-packagers@lists.torproject.org mailing list to tell them - about the new release. +### New Stable - Also, email tor-packagers@lists.torproject.org. + 1. Create the `maint-x.y.z` and `release-x.y.z` branches and update the + `./scripts/git/git-list-tor-branches.sh` with the new version. - Mention where to download the tarball (https://dist.torproject.org). + 2. Add the new version in `./scripts/ci/ci-driver.sh`. - Include a link to the changelog. + 3. Forward port the ChangeLog and ReleaseNotes into main branch. Remove any + change logs of stable releases in ReleaseNotes. -4. Wait for the download page to be updated. (If you don't do this before you - announce, people will be confused.) -5. Mail the release blurb and ChangeLog to tor-talk (development release) or - tor-announce (stable). +## Appendix: An alternative means to notify packagers - Post the changelog on the blog as well. You can generate a - blog-formatted version of the changelog with - `./scripts/maint/format_changelog.py -B` +If for some reason you need to contact a bunch of packagers without +using the publicly archived tor-packagers list, you can try these +people: - When you post, include an estimate of when the next TorBrowser - releases will come out that include this Tor release. This will - usually track https://wiki.mozilla.org/RapidRelease/Calendar , but it - can vary. - - For templates to use when announcing, see: - https://gitlab.torproject.org/tpo/core/team/-/wikis/NetworkTeam/AnnouncementTemplates - -## V. Aftermath and cleanup - -1. If it's a stable release, bump the version number in the - `maint-x.y.z` branch to "newversion-dev", and do a `merge -s ours` - merge to avoid taking that change into master. - -2. If there is a new `maint-x.y.z` branch, create a Travis CI cron job that - builds the release every week. (It's ok to skip the weekly build if the - branch was updated in the last 24 hours.) - -3. Forward-port the ChangeLog (and ReleaseNotes if appropriate) to the - master branch. - -4. Keep an eye on the blog post, to moderate comments and answer questions. + - {weasel,sysrqb,mikeperry} at torproject dot org + - {blueness} at gentoo dot org + - {paul} at invizbox dot io + - {vincent} at invizbox dot com + - {lfleischer} at archlinux dot org + - {Nathan} at freitas dot net + - {mike} at tig dot as + - {tails-rm} at boum dot org + - {simon} at sdeziel.info + - {yuri} at freebsd.org + - {mh+tor} at scrit.ch + - {security} at brave.com diff --git a/doc/HACKING/ReleasingTor.md.old b/doc/HACKING/ReleasingTor.md.old new file mode 100644 index 0000000000..490c100fcb --- /dev/null +++ b/doc/HACKING/ReleasingTor.md.old @@ -0,0 +1,255 @@ +# CHECKLIST + +Here's a summary checklist, with the things that Nick messes up most often. + +Did you: + + * [ ] Copy the ChangeLog to the ReleaseNotes? + * [ ] Check that the new versions got approved? + * [ ] Check the release date in the ChangeLog? + * [ ] Update the GeoIP file? + +# Putting out a new release + +Here are the steps that the maintainer should take when putting out a +new Tor release: + +## 0. Preliminaries + +1. Get at least three of weasel/arma/Sebastian/Sina to put the new + version number in their approved versions list. Give them a few + days to do this if you can. + +2. If this is going to be an important security release, give the packagers + advance warning, via `tor-packagers@lists.torproject.org`. + + +3. Given the release date for Tor, ask the TB team about the likely release + date of a TB that contains it. See note below in "commit, upload, + announce". + +## I. Make sure it works + +1. Make sure that CI passes: have a look at the branches on gitlab. + + _Optionally_, have a look at Travis + (https://travis-ci.org/torproject/tor/branches), Appveyor + (https://ci.appveyor.com/project/torproject/tor/history), and + Jenkins (https://jenkins.torproject.org/view/tor/). + Make sure you're looking at the right branches. + + If there are any unexplained failures, try to fix them or figure them + out. + +2. Verify that there are no big outstanding issues. You might find such + issues -- + + * On Gitlab + + * On coverity scan + + * On OSS-Fuzz + +## II. Write a changelog + + +1a. (Alpha release variant) + + Gather the `changes/*` files into a changelog entry, rewriting many + of them and reordering to focus on what users and funders would find + interesting and understandable. + + To do this, run `./scripts/maint/sortChanges.py changes/* > changelog.in` + to combine headings and sort the entries. Copy the changelog.in file into + the ChangeLog. Run `format_changelog.py --inplace` (see below) to clean up + the line breaks. + + Remove the `changes/*` files that you just merged into the ChangeLog. + + After that, it's time to hand-edit and fix the issues that + lintChanges can't find: + + 1. Within each section, sort by "version it's a bugfix on", else by + numerical ticket order. + + 2. Clean them up: + + Make stuff very terse + + Describe the user-visible problem right away + + Mention relevant config options by name. If they're rare or unusual, + remind people what they're for + + Avoid starting lines with open-paren + + Present and imperative tense: not past. + + "Relays", not "servers" or "nodes" or "Tor relays". + + "Onion services", not "hidden services". + + "Stop FOOing", not "Fix a bug where we would FOO". + + Try not to let any given section be longer than about a page. Break up + long sections into subsections by some sort of common subtopic. This + guideline is especially important when organizing Release Notes for + new stable releases. + + If a given changes stanza showed up in a different release (e.g. + maint-0.2.1), be sure to make the stanzas identical (so people can + distinguish if these are the same change). + + 3. Clean everything one last time. + + 4. Run `./scripts/maint/format_changelog.py --inplace` to make it prettier + +1b. (old-stable release variant) + + For stable releases that backport things from later, we try to compose + their releases, we try to make sure that we keep the changelog entries + identical to their original versions, with a "backport from 0.x.y.z" + note added to each section. So in this case, once you have the items + from the changes files copied together, don't use them to build a new + changelog: instead, look up the corrected versions that were merged + into ChangeLog in the main branch, and use those. + + Add "backport from X.Y.Z" in the section header for these entries. + +2. Compose a short release blurb to highlight the user-facing + changes. Insert said release blurb into the ChangeLog stanza. If it's + a stable release, add it to the ReleaseNotes file too. If we're adding + to a release-* branch, manually commit the changelogs to the later + git branches too. + +3. If there are changes that require or suggest operator intervention + before or during the update, mail operators (either dirauth or relays + list) with a headline that indicates that an action is required or + appreciated. + +4. If you're doing the first stable release in a series, you need to + create a ReleaseNotes for the series as a whole. To get started + there, copy all of the Changelog entries from the series into a new + file, and run `./scripts/maint/sortChanges.py` on it. That will + group them by category. Then kill every bugfix entry for fixing + bugs that were introduced within that release series; those aren't + relevant changes since the last series. At that point, it's time + to start sorting and condensing entries. (Generally, we don't edit the + text of existing entries, though.) + +## III. Making the source release. + +1. In `maint-0.?.x`, bump the version number in `configure.ac` and run + `./scripts/main/update_versions.py` to update version numbers in other + places, and commit. Then merge `maint-0.?.x` into `release-0.?.x`. + + When you merge the maint branch forward to the next maint branch, or into + main, merge it with `-s ours` to avoid conflict with the version + bump. + +2. In `release-0.?.x`, run `make distcheck`, put the tarball up in somewhere + (how about your homedir on people.torproject.org?) , and tell `#tor-dev` + about it. + + If you want, wait until at least one person has built it + successfully. (We used to say "wait for others to test it", but our + CI has successfully caught these kinds of errors for the last several + years.) + +3. Make sure that the new version is recommended in the latest consensus. + (Otherwise, users will get confused when it complains to them + about its status.) + + If it is not, you'll need to poke Roger, Weasel, Sebastian, and Sina + again: see the note at the start of the document. + +## IV. Commit, upload, announce + +1. Sign the tarball, then sign and push the git tag: + +```console +$ gpg -ba <the_tarball> +$ git tag -s tor-0.4.x.y-<status> +$ git push origin tag tor-0.4.x.y-<status> +``` + + (You must do this before you update the website: the website scripts + rely on finding the version by tag.) + + (If your default PGP key is not the one you want to sign with, then say + "-u <keyid>" instead of "-s".) + +2. scp the tarball and its sig to the dist website, i.e. + `/srv/dist-master.torproject.org/htdocs/` on dist-master. Run + "static-update-component dist.torproject.org" on dist-master. + + In the `project/web/tpo.git` repository, update `databags/versions.ini` + to note the new version. Push these changes to `master`. + + (NOTE: Due to #17805, there can only be one stable version listed at + once. Nonetheless, do not call your version "alpha" if it is stable, + or people will get confused.) + + (NOTE: It will take a while for the website update scripts to update + the website.) + +3. Email the tor-packagers@lists.torproject.org mailing list to tell them + about the new release. + + Also, email tor-packagers@lists.torproject.org. + + Mention where to download the tarball (`https://dist.torproject.org/`). + + Include a link to the changelog. + +4. Wait for the download page to be updated. (If you don't do this before you + announce, people will be confused.) + +5. Mail the release blurb and ChangeLog to tor-talk (development release) or + tor-announce (stable). + + Post the changelog on the blog as well. You can generate a + blog-formatted version of the changelog with + `./scripts/maint/format_changelog.py -B` + + When you post, include an estimate of when the next TorBrowser + releases will come out that include this Tor release. This will + usually track https://wiki.mozilla.org/RapidRelease/Calendar , but it + can vary. + + For templates to use when announcing, see: + https://gitlab.torproject.org/tpo/core/team/-/wikis/NetworkTeam/AnnouncementTemplates + +## V. Aftermath and cleanup + +1. If it's a stable release, bump the version number in the + `maint-x.y.z` branch to "newversion-dev", and do a `merge -s ours` + merge to avoid taking that change into main. + +2. If there is a new `maint-x.y.z` branch, create a Travis CI cron job that + builds the release every week. (It's ok to skip the weekly build if the + branch was updated in the last 24 hours.) + +3. Forward-port the ChangeLog (and ReleaseNotes if appropriate) to the + main branch. + +4. Keep an eye on the blog post, to moderate comments and answer questions. + +## Appendix: An alternative means to notify packagers + +If for some reason you need to contact a bunch of packagers without +using the publicly archived tor-packagers list, you can try these +people: + + - {weasel,sysrqb,mikeperry} at torproject dot org + - {blueness} at gentoo dot org + - {paul} at invizbox dot io + - {vincent} at invizbox dot com + - {lfleischer} at archlinux dot org + - {Nathan} at freitas dot net + - {mike} at tig dot as + - {tails-rm} at boum dot org + - {simon} at sdeziel.info + - {yuri} at freebsd.org + - {mh+tor} at scrit.ch + - {security} at brave.com diff --git a/doc/asciidoc-helper.sh b/doc/asciidoc-helper.sh index 3706ca2e14..98e216e68a 100755 --- a/doc/asciidoc-helper.sh +++ b/doc/asciidoc-helper.sh @@ -9,7 +9,7 @@ set -e if [ $# != 3 ]; then - exit 1; + exit 1 fi SOURCE_DATE_EPOCH="$(git show --no-patch --format='%ct')" @@ -22,50 +22,49 @@ if [ "$1" = "html" ]; then base=${output%%.html.in} if [ "$2" != none ]; then - TZ=UTC "$2" -f "$(dirname "$0")/nofooter.conf" -d manpage -o "$output" "$input"; + TZ=UTC "$2" -f "$(dirname "$0")/nofooter.conf" -d manpage -o "$output" "$input"; else - echo "=================================="; - echo; - echo "You need asciidoc installed to be able to build the manpage."; - echo "To build without manpages, use the --disable-asciidoc argument"; - echo "when calling configure."; - echo; - echo "=================================="; - exit 1; + echo "==================================" + echo + echo "You need asciidoc installed to be able to build the manpage." + echo "To build without manpages, use the --disable-asciidoc argument" + echo "when calling configure." + echo + echo "==================================" + exit 1 fi elif [ "$1" = "man" ]; then input=${output%%.1.in}.1.txt base=${output%%.1.in} if test "$2" = none; then - echo "=================================="; - echo; - echo "You need asciidoc installed to be able to build the manpage."; - echo "To build without manpages, use the --disable-asciidoc argument"; - echo "when calling configure."; - echo; - echo "=================================="; - exit 1; + echo "==================================" + echo + echo "You need asciidoc installed to be able to build the manpage." + echo "To build without manpages, use the --disable-asciidoc argument" + echo "when calling configure." + echo + echo "==================================" + exit 1 fi if "$2" -f manpage "$input"; then - mv "$base.1" "$output"; + mv "$base.1" "$output" else - cat<<EOF + cat<<EOF ================================== You need a working asciidoc installed to be able to build the manpage. a2x is installed, but for some reason it isn't working. Sometimes this happens because required docbook support files are missing. Please install docbook-xsl, docbook-xml, and xmlto (Debian) or -similar. If you use homebrew on Mac OS X, install the docbook formula +similar. If you use homebrew on Mac OS X, install the docbook formula and add "export XML_CATALOG_FILES=/usr/local/etc/xml/catalog" to your -.bashrc +.bashrc file. Alternatively, to build without manpages, use the --disable-asciidoc argument when calling configure. ================================== EOF - exit 1; + exit 1 fi fi - diff --git a/doc/include.am b/doc/include.am index 7a8a64ed16..d10f380e7f 100644 --- a/doc/include.am +++ b/doc/include.am @@ -51,10 +51,8 @@ EXTRA_DIST+= doc/asciidoc-helper.sh \ doc/TUNING \ doc/HACKING/README.1st.md \ doc/HACKING/CodingStandards.md \ - doc/HACKING/CodingStandardsRust.md \ doc/HACKING/Fuzzing.md \ doc/HACKING/GettingStarted.md \ - doc/HACKING/GettingStartedRust.md \ doc/HACKING/HelpfulTools.md \ doc/HACKING/HowToReview.md \ doc/HACKING/Module.md \ diff --git a/doc/man/tor-gencert.1.txt b/doc/man/tor-gencert.1.txt index 9262c4a39a..b9ef94d674 100644 --- a/doc/man/tor-gencert.1.txt +++ b/doc/man/tor-gencert.1.txt @@ -6,6 +6,7 @@ :man manual: Tor Manual tor-gencert(1) ============== +Tor Project, Inc. NAME ---- diff --git a/doc/man/tor.1.txt b/doc/man/tor.1.txt index 0af9a9c03d..1814801b71 100644 --- a/doc/man/tor.1.txt +++ b/doc/man/tor.1.txt @@ -71,7 +71,7 @@ The following options in this section are only recognized on the Specify a new configuration file to contain further Tor configuration options, or pass *-* to make Tor read its configuration from standard input. (Default: **`@CONFDIR@/torrc`**, or **`$HOME/.torrc`** if - that file is not found) + that file is not found.) [[opt-allow-missing-torrc]] **`--allow-missing-torrc`**:: Allow the configuration file specified by **`-f`** to be missing, @@ -101,7 +101,7 @@ The following options in this section are only recognized on the [[opt-dump-config]] **`--dump-config`** **`short`**|**`full`**:: Write a list of Tor's configured options to standard output. When the `short` flag is selected, only write the options that - are different from their default values + are different from their default values. When `full` is selected, write every option. [[opt-serviceinstall]] **`--service install`** [**`--options`** __command-line options__]:: @@ -988,20 +988,20 @@ forward slash (/) in the configuration file and on the command line. running. (Default: none) [[TCPProxy]] **TCPProxy** __protocol__ __host__:__port__:: - Tor will use the given protocol to make all its OR (SSL) connections through - a TCP proxy on host:port, rather than connecting directly to servers. You may - want to set **FascistFirewall** to restrict the set of ports you might try to - connect to, if your proxy only allows connecting to certain ports. There is no - equivalent option for directory connections, because all Tor client versions - that support this option download directory documents via OR connections. + + Tor will use the given protocol to make all its OR (SSL) connections through + a TCP proxy on host:port, rather than connecting directly to servers. You may + want to set **FascistFirewall** to restrict the set of ports you might try to + connect to, if your proxy only allows connecting to certain ports. There is no + equivalent option for directory connections, because all Tor client versions + that support this option download directory documents via OR connections. + + - The only protocol supported right now 'haproxy'. This option is only for - clients. (Default: none) + + The only protocol supported right now 'haproxy'. This option is only for + clients. (Default: none) + + - The HAProxy version 1 proxy protocol is described in detail at - https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt + + The HAProxy version 1 proxy protocol is described in detail at + https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt + + - Both source IP address and source port will be set to zero. + Both source IP address and source port will be set to zero. [[TruncateLogFile]] **TruncateLogFile** **0**|**1**:: If 1, Tor will overwrite logs at startup and in response to a HUP signal, @@ -1749,6 +1749,13 @@ The following options are useful only for clients (that is, if the guard-n-primary-guards consensus parameter, and default to 3 if the consensus parameter isn't set. (Default: 0) +[[VanguardsLiteEnabled]] **VanguardsLiteEnabled** **0**|**1**|**auto**:: + This option specifies whether clients should use the vanguards-lite + subsystem to protect against guard discovery attacks. If it's set to + 'auto', clients will do what the vanguards-lite-enabled consensus parameter + tells them to do, and will default to enable the subsystem if the consensus + parameter isn't set. (Default: auto) + [[UseMicrodescriptors]] **UseMicrodescriptors** **0**|**1**|**auto**:: Microdescriptors are a smaller version of the information that Tor needs in order to build its circuits. Using microdescriptors makes Tor clients @@ -2847,11 +2854,15 @@ details.) == DENIAL OF SERVICE MITIGATION OPTIONS -Tor has three built-in mitigation options that can be individually -enabled/disabled and fine-tuned, but by default Tor directory authorities will -define reasonable values for relays and no explicit configuration is required -to make use of these protections. The mitigations take place at relays, -and are as follows: +Tor has a series of built-in denial of service mitigation options that can be +individually enabled/disabled and fine-tuned, but by default Tor directory +authorities will define reasonable values for the network and no explicit +configuration is required to make use of these protections. + +The following is a series of configuration options for relays and then options +for onion services and how they work. + +The mitigations take place at relays, and are as follows: 1. If a single client address makes too many concurrent connections (this is configurable via DoSConnectionMaxConcurrentCount), hang up on further @@ -3002,6 +3013,68 @@ Denial of Service mitigation subsystem described above. (Default: auto) +As for onion services, only one possible mitigation exists. It was intended to +protect the network first and thus do not help the service availability or +reachability. + +The mitigation we put in place is a rate limit of the amount of introduction +that happens at the introduction point for a service. In other words, it rates +limit the number of clients that are attempting to reach the service at the +introduction point instead of at the service itself. + +The following options are per onion service: + +[[HiddenServiceEnableIntroDoSDefense]] **HiddenServiceEnableIntroDoSDefense** **0**|**1**:: + Enable DoS defense at the intropoint level. When this is enabled, the + rate and burst parameter (see below) will be sent to the intro point which + will then use them to apply rate limiting for introduction request to this + service. + + + The introduction point honors the consensus parameters except if this is + specifically set by the service operator using this option. The service + never looks at the consensus parameters in order to enable or disable this + defense. (Default: 0) + +//Out of order because it logically belongs after HiddenServiceEnableIntroDoSDefense. +[[HiddenServiceEnableIntroDoSBurstPerSec]] **HiddenServiceEnableIntroDoSBurstPerSec** __NUM__:: + The allowed client introduction burst per second at the introduction + point. If this option is 0, it is considered infinite and thus if + **HiddenServiceEnableIntroDoSDefense** is set, it then effectively + disables the defenses. (Default: 200) + +[[HiddenServiceEnableIntroDoSRatePerSec]] **HiddenServiceEnableIntroDoSRatePerSec** __NUM__:: + The allowed client introduction rate per second at the introduction + point. If this option is 0, it is considered infinite and thus if + **HiddenServiceEnableIntroDoSDefense** is set, it then effectively + disables the defenses. (Default: 25) + +The rate is the maximum number of clients a service will ask its introduction +points to allow every seconds. And the burst is a parameter that allows that +many within one second. + +For example, the default values of 25 and 200 respectively means that for every +introduction points a service has (default 3 but can be configured with +**HiddenServiceNumIntroductionPoints**), 25 clients per seconds will be allowed +to reach the service and 200 at most within 1 second as a burst. This means +that if 200 clients are seen within 1 second, it will take 8 seconds (200/25) +for another client to be able to be allowed to introduce due to the rate of 25 +per second. + +This might be too much for your use case or not, fine tuning these values is +hard and are likely different for each service operator. + +Why is this not helping reachability of the service? Because the defenses are +at the introduction point, an attacker can easily flood all introduction point +rendering the service unavailable due to no client being able to pass through. +But, the service itself is not overwhelmed with connetions allowing it to +function properly for the few clients that were able to go through or other any +services running on the same tor instance. + +The bottom line is that this protects the network by preventing an onion +service to flood the network with new rendezvous circuits that is reducing load +on the network. + + == DIRECTORY AUTHORITY SERVER OPTIONS The following options enable operation as a directory authority, and @@ -3039,6 +3112,11 @@ on the public Tor network. is the same as for exit policies, except that you don't need to say "accept" or "reject", and ports are not needed.) +[[AuthDirMiddleOnly]] **AuthMiddleOnly** __AddressPattern...__:: + Authoritative directories only. A set of address patterns for servers that + will be listed as middle-only in any network status document this authority + publishes, if **AuthDirListMiddleOnly** is set. + + [[AuthDirFastGuarantee]] **AuthDirFastGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**TBytes**|**KBits**|**MBits**|**GBits**|**TBits**:: Authoritative directories only. If non-zero, always vote the Fast flag for any relay advertising this amount of capacity or @@ -3086,6 +3164,13 @@ on the public Tor network. 1 unless you plan to list non-functioning exits as bad; otherwise, you are effectively voting in favor of every declared exit as an exit.) +[[AuthDirListMiddleOnly]] **AuthDirListMiddleOnly** **0**|**1**:: + Authoritative directories only. If set to 1, this directory has some + opinion about which nodes should only be used in the middle position. + (Do not set this to 1 unless you plan to list questionable relays + as "middle only"; otherwise, you are effectively voting _against_ + middle-only status for every relay.) + [[AuthDirMaxServersPerAddr]] **AuthDirMaxServersPerAddr** __NUM__:: Authoritative directories only. The maximum number of servers that we will list as acceptable on a single IP address. Set this to "0" for "no limit". @@ -3104,18 +3189,20 @@ on the public Tor network. authority publishes, or accepted as an OR address in any descriptor submitted for publication by this authority. +[[AuthDirRejectRequestsUnderLoad]] **AuthDirRejectRequestsUnderLoad** **0**|**1**:: + If set, the directory authority will start rejecting directory requests + from non relay connections by sending a 503 error code if it is under + bandwidth pressure (reaching the configured limit if any). Relays will + always tried to be answered even if this is on. (Default: 1) + //Out of order because it logically belongs with the other CCs options. [[AuthDirBadExitCCs]] **AuthDirBadExitCCs** __CC__,... + //Out of order because it logically belongs with the other CCs options. [[AuthDirInvalidCCs]] **AuthDirInvalidCCs** __CC__,... + - -[[AuthDirRejectRequestsUnderLoad]] **AuthDirRejectRequestsUnderLoad** **0**|**1**:: - If set, the directory authority will start rejecting directory requests - from non relay connections by sending a 503 error code if it is under - bandwidth pressure (reaching the configured limit if any). Relays will - always tried to be answered even if this is on. (Default: 1) +//Out of order because it logically belongs with the other CCs options. +[[AuthDirMiddleOnlytCCs]] **AuthDirMiddleOnlyCCs** __CC__,... + [[AuthDirRejectCCs]] **AuthDirRejectCCs** __CC__,...:: Authoritative directories only. These options contain a comma-separated @@ -3280,30 +3367,6 @@ The next section describes the per service options that can only be set only owner is able to read the hidden service directory. (Default: 0) Has no effect on Windows. -[[HiddenServiceEnableIntroDoSDefense]] **HiddenServiceEnableIntroDoSDefense** **0**|**1**:: - Enable DoS defense at the intropoint level. When this is enabled, the - rate and burst parameter (see below) will be sent to the intro point which - will then use them to apply rate limiting for introduction request to this - service. - + - The introduction point honors the consensus parameters except if this is - specifically set by the service operator using this option. The service - never looks at the consensus parameters in order to enable or disable this - defense. (Default: 0) - -//Out of order because it logically belongs after HiddenServiceEnableIntroDoSDefense. -[[HiddenServiceEnableIntroDoSBurstPerSec]] **HiddenServiceEnableIntroDoSBurstPerSec** __NUM__:: - The allowed client introduction burst per second at the introduction - point. If this option is 0, it is considered infinite and thus if - **HiddenServiceEnableIntroDoSDefense** is set, it then effectively - disables the defenses. (Default: 200) - -[[HiddenServiceEnableIntroDoSRatePerSec]] **HiddenServiceEnableIntroDoSRatePerSec** __NUM__:: - The allowed client introduction rate per second at the introduction - point. If this option is 0, it is considered infinite and thus if - **HiddenServiceEnableIntroDoSDefense** is set, it then effectively - disables the defenses. (Default: 25) - [[HiddenServiceExportCircuitID]] **HiddenServiceExportCircuitID** __protocol__:: The onion service will use the given protocol to expose the global circuit identifier of each inbound client circuit. The only @@ -3514,14 +3577,15 @@ The following options are used for running a testing Tor network. [[TestingAuthKeySlop]] **TestingAuthKeySlop** __N__ **seconds**|**minutes**|**hours** + [[TestingBridgeBootstrapDownloadInitialDelay]] **TestingBridgeBootstrapDownloadInitialDelay** __N__:: - Initial delay in seconds for when clients should download each bridge descriptor when they - have just started, or when they can not contact any of their bridges. + Initial delay in seconds for how long clients should wait before + downloading a bridge descriptor for a new bridge. Changing this requires that **TestingTorNetwork** is set. (Default: 0) [[TestingBridgeDownloadInitialDelay]] **TestingBridgeDownloadInitialDelay** __N__:: - Initial delay in seconds for when clients should download each bridge descriptor when they - know that one or more of their configured bridges are running. Changing - this requires that **TestingTorNetwork** is set. (Default: 10800) + How long to wait (in seconds) once clients have successfully + downloaded a bridge descriptor, before trying another download for + that same bridge. Changing this requires that **TestingTorNetwork** + is set. (Default: 10800) [[TestingClientConsensusDownloadInitialDelay]] **TestingClientConsensusDownloadInitialDelay** __N__:: Initial delay in seconds for when clients should download consensuses. Changing this @@ -3840,7 +3904,12 @@ __KeyDirectory__/**`secret_onion_key_ntor`** and **`secret_onion_key_ntor.old`** by clients that didn't have the new one. __DataDirectory__/**`fingerprint`**:: - Only used by servers. Contains the fingerprint of the server's identity key. + Only used by servers. Contains the fingerprint of the server's RSA + identity key. + +__DataDirectory__/**`fingerprint-ed25519`**:: + Only used by servers. Contains the fingerprint of the server's ed25519 + identity key. __DataDirectory__/**`hashed-fingerprint`**:: Only used by bridges. Contains the hashed fingerprint of the bridge's @@ -3856,7 +3925,8 @@ __DataDirectory__/**`approved-routers`**:: descriptors are accepted, but marked in the vote as not valid. If it is **!badexit**, then the authority will vote for it to receive a BadExit flag, indicating that it shouldn't be used for traffic leaving - the Tor network. + the Tor network. If it is **!middleonly**, then the authority will + vote for it to only be used in the middle of circuits. (Neither rejected nor invalid relays are included in the consensus.) __DataDirectory__/**`v3-status-votes`**:: diff --git a/doc/man/torify.1.txt b/doc/man/torify.1.txt index 46b13e18e5..30e4a42754 100644 --- a/doc/man/torify.1.txt +++ b/doc/man/torify.1.txt @@ -6,6 +6,7 @@ :man manual: Tor Manual torify(1) ========= +Tor Project, Inc. NAME ---- diff --git a/scripts/README b/scripts/README index 9cd6e74ac7..4cb49370f5 100644 --- a/scripts/README +++ b/scripts/README @@ -12,7 +12,7 @@ never used. maint/checkOptionDocs.pl -- Make sure that Tor options are documented in the manpage, and that the manpage only documents real Tor options. -maint/checkSpaces.pl -- Style checker for the Tor source code. Mainly checks +maint/checkSpace.pl -- Style checker for the Tor source code. Mainly checks whitespace. maint/findMergedChanges.pl -- Find a set of changes/* files that have been @@ -23,7 +23,7 @@ maint/format_changelog.py -- Flow the changelog into the proper format. maint/redox.py -- Find places that should have DOCDOC comments to indicate a need for doxygen comments, and put those comments there. -maint/updateVersions.pl -- Update the version number in the .nsi and windows +maint/update_versions.py -- Update the version number in the .nsi and windows orconfig.h files. diff --git a/scripts/build/combine_libs b/scripts/build/combine_libs index 9c87f68248..a855171dc7 100755 --- a/scripts/build/combine_libs +++ b/scripts/build/combine_libs @@ -8,15 +8,11 @@ ORIGDIR="$(pwd)" trap 'cd "$ORIGDIR" && rm -rf "$TMPDIR"' 0 abspath() { - echo "$(cd "$(dirname "$1")">/dev/null && pwd)/$(basename "$1")" + echo "$(cd "$(dirname "$1")" >/dev/null && pwd)/$(basename "$1")" } TARGET=$(abspath "$1") -#echo ORIGDIR="$ORIGDIR" -#echo AR="$AR" -#echo ARFLAGS="$AFLAGS" - shift for input in "$@"; do @@ -24,12 +20,11 @@ for input in "$@"; do abs=$(abspath "$input") dir="$TMPDIR"/$(basename "$input" .a) mkdir "$dir" - cd "$dir">/dev/null + cd "$dir" >/dev/null "${AR:-ar}" x "$abs" done cd "$TMPDIR" >/dev/null -#echo "${AR:-ar}" "${ARFLAGS:-cru}" library.tmp.a ./*/** "${AR:-ar}" "${ARFLAGS:-cru}" library.tmp.a ./*/** "${RANLIB:-ranlib}" library.tmp.a mv -f library.tmp.a "$TARGET" diff --git a/scripts/ci/ci-driver.sh b/scripts/ci/ci-driver.sh index a13e0f6c17..09696924ba 100755 --- a/scripts/ci/ci-driver.sh +++ b/scripts/ci/ci-driver.sh @@ -30,7 +30,6 @@ RUN_STAGE_TEST="${RUN_STAGE_TEST:-yes}" FATAL_WARNINGS="${FATAL_WARNINGS:-yes}" HARDENING="${HARDENING:-no}" COVERAGE="${COVERAGE:-no}" -RUST="${RUST:-no}" DOXYGEN="${DOXYGEN:-no}" ASCIIDOC="${ASCIIDOC:-no}" TRACING="${TRACING:-no}" @@ -87,6 +86,7 @@ function error() { echo "${T_BOLD}${T_RED}ERROR:${T_RESET} $*" 1>&2 } + function die() { echo "${T_BOLD}${T_RED}FATAL ERROR:${T_RESET} $*" 1>&2 @@ -159,27 +159,27 @@ function show_git_version() if [[ "${ON_GITLAB}" == "yes" ]]; then function start_section() { - local label="$1" - local stamp - stamp=$(date +%s) - printf "section_start:%s:%s\r\e[0K" "$stamp" "$label" - echo "${T_BOLD}${T_GREEN}========= $label${T_RESET}" + local label="$1" + local stamp + stamp=$(date +%s) + printf "section_start:%s:%s\r\e[0K" "$stamp" "$label" + echo "${T_BOLD}${T_GREEN}========= $label${T_RESET}" } function end_section() { - local label="$1" - local stamp - stamp=$(date +%s) - printf "section_end:%s:%s\r\e[0K" "$stamp" "$label" + local label="$1" + local stamp + stamp=$(date +%s) + printf "section_end:%s:%s\r\e[0K" "$stamp" "$label" } else function start_section() { - true + true } function end_section() { - true + true } fi @@ -193,7 +193,6 @@ yes_or_no ON_GITLAB yes_or_no FATAL_WARNINGS yes_or_no HARDENING yes_or_no COVERAGE -yes_or_no RUST yes_or_no DOXYGEN yes_or_no ASCIIDOC yes_or_no TRACING @@ -245,9 +244,6 @@ fi if [[ "$COVERAGE" == "yes" ]]; then configure_options+=("--enable-coverage") fi -if [[ "$RUST" == "yes" ]]; then - configure_options+=("--enable-rust") -fi if [[ "$ASCIIDOC" != "yes" ]]; then configure_options+=("--disable-asciidoc") fi @@ -297,22 +293,6 @@ TOR_VER_AT_LEAST_044=no # These are the currently supported Tor versions; no need to work with anything # ancient in this script. case "$TOR_VERSION" in - 0.3.*) - TOR_VER_AT_LEAST_043=no - TOR_VER_AT_LEAST_044=no - ;; - 0.4.[012].*) - TOR_VER_AT_LEAST_043=no - TOR_VER_AT_LEAST_044=no - ;; - 0.4.3.*) - TOR_VER_AT_LEAST_043=yes - TOR_VER_AT_LEAST_044=no - ;; - 0.4.4.*) - TOR_VER_AT_LEAST_043=yes - TOR_VER_AT_LEAST_044=yes - ;; 0.4.5.*) TOR_VER_AT_LEAST_043=yes TOR_VER_AT_LEAST_044=yes @@ -354,18 +334,18 @@ if [[ "$RUN_STAGE_CONFIGURE" = "yes" ]]; then start_section "Configure" if ! runcmd "${CI_SRCDIR}"/configure "${configure_options[@]}" ; then - error "Here is the end of config.log:" - runcmd tail config.log - die "Unable to continue" + error "Here is the end of config.log:" + runcmd tail config.log + die "Unable to continue" fi end_section "Configure" else debug "Skipping configure stage. Making sure that ${CI_BUILDDIR}/config.log exists." if [[ ! -d "${CI_BUILDDIR}" ]]; then - die "Build directory ${CI_BUILDDIR} did not exist!"; + die "Build directory ${CI_BUILDDIR} did not exist!" fi if [[ ! -f "${CI_BUILDDIR}/config.log" ]]; then - die "Tor was not configured in ${CI_BUILDDIR}!"; + die "Tor was not configured in ${CI_BUILDDIR}!" fi cp config.log "${CI_SRCDIR}"/artifacts @@ -379,26 +359,26 @@ fi if [[ "$RUN_STAGE_BUILD" = "yes" ]] ; then if [[ "$DISTCHECK" = "no" ]]; then - start_section "Build" - runcmd make "${make_options[@]}" all + start_section "Build" + runcmd make "${make_options[@]}" all cp src/app/tor "${CI_SRCDIR}"/artifacts - end_section "Build" + end_section "Build" else - export DISTCHECK_CONFIGURE_FLAGS="${configure_options[*]}" - # XXXX Set make options? - start_section Distcheck - if runcmd make "${make_options[@]}" distcheck ; then + export DISTCHECK_CONFIGURE_FLAGS="${configure_options[*]}" + # XXXX Set make options? + start_section Distcheck + if runcmd make "${make_options[@]}" distcheck ; then hooray "Distcheck was successful. Nothing further will be done." # We have to exit early here, since we can't do any other tests. cp tor-*.tar.gz "${CI_SRCDIR}"/artifacts exit 0 - else + else error "Diagnostics:" runcmd make show-distdir-testlog || true runcmd make show-distdir-core || true die "Unable to continue." - fi - end_section Distcheck + fi + end_section Distcheck fi fi @@ -416,9 +396,9 @@ if [[ "${DOXYGEN}" = 'yes' ]]; then start_section Doxygen if [[ "${TOR_VER_AT_LEAST_043}" = 'yes' ]]; then if runcmd make doxygen; then - hooray "make doxygen has succeeded." + hooray "make doxygen has succeeded." else - FAILED_TESTS="${FAILED_TESTS} doxygen" + FAILED_TESTS="${FAILED_TESTS} doxygen" fi else skipping "make doxygen: doxygen is broken for Tor < 0.4.3" @@ -452,6 +432,8 @@ if [[ "${CHUTNEY}" = "yes" ]]; then start_section "Chutney" export CHUTNEY_TOR_SANDBOX=0 export CHUTNEY_ALLOW_FAILURES=2 + # Send 5MB for every verify check. + export CHUTNEY_DATA_BYTES=5000000 if runcmd make "${CHUTNEY_MAKE_TARGET}"; then hooray "Chutney tests have succeeded" else @@ -467,36 +449,36 @@ if [[ "${CHUTNEY}" = "yes" ]]; then fi if [[ "${STEM}" = "yes" ]]; then - start_section "Stem" - # 0.3.5 and onward have now disabled onion service v2 so we need to exclude - # these Stem tests from now on. - EXCLUDE_TESTS="--exclude-test control.controller.test_ephemeral_hidden_services_v2 --exclude-test control.controller.test_hidden_services_conf --exclude-test control.controller.test_with_ephemeral_hidden_services_basic_auth --exclude-test control.controller.test_without_ephemeral_hidden_services --exclude-test control.controller.test_with_ephemeral_hidden_services_basic_auth_no_credentials" - if [[ "${TOR_VER_AT_LEAST_044}" = 'yes' ]]; then - # XXXX This should probably be part of some test-stem make target. - - # Disable the check around EXCLUDE_TESTS that requires double quote. We - # need it to be expanded. - # shellcheck disable=SC2086 - if runcmd timelimit -p -t 520 -s USR1 -T 30 -S ABRT \ - python3 "${STEM_PATH}/run_tests.py" \ - --tor src/app/tor \ - --integ --test control.controller \ - $EXCLUDE_TESTS \ - --test control.base_controller \ - --test process \ - --log TRACE \ - --log-file stem.log ; then - hooray "Stem tests have succeeded" - else - error "Stem output:" - runcmd tail -1000 "${STEM_PATH}"/test/data/tor_log - runcmd grep -v "SocketClosed" stem.log | tail -1000 - FAILED_TESTS="${FAILED_TESTS} stem" - fi - else - skipping "Stem: broken with <= 0.4.3. See bug tor#40077" - fi - end_section "Stem" + start_section "Stem" + # 0.3.5 and onward have now disabled onion service v2 so we need to exclude + # these Stem tests from now on. + EXCLUDE_TESTS="--exclude-test control.controller.test_ephemeral_hidden_services_v2 --exclude-test control.controller.test_hidden_services_conf --exclude-test control.controller.test_with_ephemeral_hidden_services_basic_auth --exclude-test control.controller.test_without_ephemeral_hidden_services --exclude-test control.controller.test_with_ephemeral_hidden_services_basic_auth_no_credentials" + if [[ "${TOR_VER_AT_LEAST_044}" = 'yes' ]]; then + # XXXX This should probably be part of some test-stem make target. + + # Disable the check around EXCLUDE_TESTS that requires double quote. We + # need it to be expanded. + # shellcheck disable=SC2086 + if runcmd timelimit -p -t 520 -s USR1 -T 30 -S ABRT \ + python3 "${STEM_PATH}/run_tests.py" \ + --tor src/app/tor \ + --integ --test control.controller \ + $EXCLUDE_TESTS \ + --test control.base_controller \ + --test process \ + --log TRACE \ + --log-file stem.log ; then + hooray "Stem tests have succeeded" + else + error "Stem output:" + runcmd tail -1000 "${STEM_PATH}"/test/data/tor_log + runcmd grep -v "SocketClosed" stem.log | tail -1000 + FAILED_TESTS="${FAILED_TESTS} stem" + fi + else + skipping "Stem: broken with <= 0.4.3. See bug tor#40077" + fi + end_section "Stem" fi # TODO: Coverage diff --git a/scripts/codegen/fuzzing_include_am.py b/scripts/codegen/fuzzing_include_am.py index b52b956f81..d5d5cb0154 100755 --- a/scripts/codegen/fuzzing_include_am.py +++ b/scripts/codegen/fuzzing_include_am.py @@ -6,16 +6,18 @@ from __future__ import print_function from __future__ import unicode_literals FUZZERS = """ + address + addressPTR consensus descriptor diff diff-apply extrainfo - hsdescv2 hsdescv3 + hsdescv3-inner + hsdescv3-middle http http-connect - iptsv2 microdesc socks strops @@ -32,7 +34,6 @@ FUZZING_LDFLAG = \ @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) @TOR_LDFLAGS_libevent@ FUZZING_LIBS = \ src/test/libtor-testing.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \ @TOR_LIBEVENT_LIBS@ $(TOR_LIBS_CRYPTLIB) \ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ @CURVE25519_LIBS@ \ @@ -47,11 +48,10 @@ oss-fuzz-prereqs: \ noinst_HEADERS += \ src/test/fuzz/fuzzing.h -LIBFUZZER = -lFuzzer LIBFUZZER_CPPFLAGS = $(FUZZING_CPPFLAGS) -DLLVM_FUZZ LIBFUZZER_CFLAGS = $(FUZZING_CFLAGS) -LIBFUZZER_LDFLAG = $(FUZZING_LDFLAG) -LIBFUZZER_LIBS = $(FUZZING_LIBS) $(LIBFUZZER) -lstdc++ +LIBFUZZER_LDFLAG = $(FUZZING_LDFLAG) -fsanitize=fuzzer +LIBFUZZER_LIBS = $(FUZZING_LIBS) -lstdc++ LIBOSS_FUZZ_CPPFLAGS = $(FUZZING_CPPFLAGS) -DLLVM_FUZZ LIBOSS_FUZZ_CFLAGS = $(FUZZING_CFLAGS) diff --git a/scripts/git/git-list-tor-branches.sh b/scripts/git/git-list-tor-branches.sh index 2bcd4722b4..d7142620d7 100755 --- a/scripts/git/git-list-tor-branches.sh +++ b/scripts/git/git-list-tor-branches.sh @@ -8,7 +8,7 @@ SCRIPT_NAME=$(basename "$0") function usage() { - echo "$SCRIPT_NAME [-h] [-l|-s|-b|-m] [-R]" + echo "$SCRIPT_NAME [-h] [-l|-s|-b|-m] [-R|-M]" echo echo " arguments:" echo " -h: show this help text" @@ -20,6 +20,7 @@ function usage() echo " ( branch parent path suffix parent_suffix ) arrays" echo echo " -R: omit release branches." + echo " -M: omit maint branches." } # list : just a list of branch names. @@ -27,9 +28,10 @@ function usage() # suffix: write a list of suffixes. # merge: branch, upstream, path, suffix, upstream suffix. mode="list" +skip_maint_branches="no" skip_release_branches="no" -while getopts "hblmsR" opt ; do +while getopts "hblmsRM" opt ; do case "$opt" in h) usage exit 0 @@ -42,6 +44,8 @@ while getopts "hblmsR" opt ; do ;; m) mode="merge" ;; + M) skip_maint_branches="yes" + ;; R) skip_release_branches="yes" ;; *) echo "Unknown option" @@ -73,13 +77,16 @@ branch() { # location: where the branch can be found. - if [[ "$brname" == "master" ]]; then - suffix="_master" + if [[ "$brname" == "main" ]]; then + suffix="_main" location="\$GIT_PATH/\$TOR_MASTER_NAME" elif [[ "$brname" =~ ^maint- ]]; then suffix="_${brname_nodots#maint-}" location="\$GIT_PATH/\$TOR_WKT_NAME/$brname" is_maint="yes" + if [[ "$skip_maint_branches" = "yes" ]]; then + return + fi elif [[ "$brname" =~ ^release- ]]; then suffix="_r${brname_nodots#release-}" location="\$GIT_PATH/\$TOR_WKT_NAME/$brname" @@ -136,15 +143,12 @@ finish() { # List of all branches. These must be in order, from oldest to newest, with # maint before release. -branch maint-0.3.5 -branch release-0.3.5 - -branch maint-0.4.4 -branch release-0.4.4 - branch maint-0.4.5 branch release-0.4.5 -branch master +branch maint-0.4.6 +branch release-0.4.6 + +branch main finish diff --git a/scripts/git/git-merge-forward.sh b/scripts/git/git-merge-forward.sh index 7c72f8478d..d5d663d558 100755 --- a/scripts/git/git-merge-forward.sh +++ b/scripts/git/git-merge-forward.sh @@ -12,8 +12,8 @@ function usage() echo " (default: run commands)" echo " -t: test branch mode: create new branches from the commits checked" echo " out in each maint directory. Call these branches prefix_035," - echo " prefix_040, ... , prefix_master." - echo " (default: merge forward maint-*, release-*, and master)" + echo " prefix_040, ... , prefix_main." + echo " (default: merge forward maint-*, release-*, and main)" echo " -u: in test branch mode, if a prefix_* branch already exists," echo " skip creating that branch. Use after a merge error, to" echo " restart the merge forward at the first unmerged branch." @@ -28,7 +28,7 @@ function usage() echo echo " optional:" echo " TOR_MASTER: the name of the directory containing the tor.git clone" - echo " The tor master git directory is \$GIT_PATH/\$TOR_MASTER" + echo " The primary tor git directory is \$GIT_PATH/\$TOR_MASTER" echo " (default: tor; current: $TOR_MASTER_NAME)" echo " TOR_WKT_NAME: the name of the directory containing the tor" echo " worktrees. The tor worktrees are:" @@ -45,7 +45,7 @@ function usage() # Where are all those git repositories? GIT_PATH=${TOR_FULL_GIT_PATH:-"FULL_PATH_TO_GIT_REPOSITORY_DIRECTORY"} -# The tor master git repository directory from which all the worktree have +# The main branch git repository directory from which all the worktree have # been created. TOR_MASTER_NAME=${TOR_MASTER_NAME:-"tor"} # The worktrees location (directory). @@ -106,7 +106,7 @@ DRY_RUN=0 # Controlled by the -t <test-branch-prefix> option. The test branch base # name option makes git-merge-forward.sh create new test branches: -# <tbbn>_035, <tbbn>_040, ... , <tbbn>_master, and merge forward. +# <tbbn>_035, <tbbn>_040, ... , <tbbn>_main, and merge forward. TEST_BRANCH_PREFIX= # Controlled by the -u option. The use existing option checks for existing diff --git a/scripts/git/git-pull-all.sh b/scripts/git/git-pull-all.sh index 52a5c6140c..bbe2576d8e 100755 --- a/scripts/git/git-pull-all.sh +++ b/scripts/git/git-pull-all.sh @@ -20,7 +20,7 @@ usage() echo echo " optional:" echo " TOR_MASTER: the name of the directory containing the tor.git clone" - echo " The tor master git directory is \$GIT_PATH/\$TOR_MASTER" + echo " The primary tor git directory is \$GIT_PATH/\$TOR_MASTER" echo " (default: tor; current: $TOR_MASTER_NAME)" echo " TOR_WKT_NAME: the name of the directory containing the tor" echo " worktrees. The tor worktrees are:" @@ -37,7 +37,7 @@ usage() # Where are all those git repositories? GIT_PATH=${TOR_FULL_GIT_PATH:-"FULL_PATH_TO_GIT_REPOSITORY_DIRECTORY"} -# The tor master git repository directory from which all the worktree have +# The primary tor git repository directory from which all the worktree have # been created. TOR_MASTER_NAME=${TOR_MASTER_NAME:-"tor"} # The worktrees location (directory). @@ -51,7 +51,7 @@ set -e eval "$(git-list-tor-branches.sh -b)" set +e -# The master branch path has to be the main repository thus contains the +# The main branch path has to be the main repository thus contains the # origin that will be used to fetch the updates. All the worktrees are created # from that repository. ORIGIN_PATH="$GIT_PATH/$TOR_MASTER_NAME" @@ -159,20 +159,7 @@ function goto_repo function fetch_origin { local cmd="git fetch origin" - printf " %s Fetching origin..." "$MARKER" - if [ $DRY_RUN -eq 0 ]; then - msg=$( eval "$cmd" 2>&1 ) - validate_ret $? "$msg" - else - printf "\\n %s\\n" "${IWTH}$cmd${CNRM}" - fi -} - -# Fetch tor-github pull requests. No arguments. -function fetch_tor_github -{ - local cmd="git fetch tor-github" - printf " %s Fetching tor-github..." "$MARKER" + printf "%s Fetching origin..." "$MARKER" if [ $DRY_RUN -eq 0 ]; then msg=$( eval "$cmd" 2>&1 ) validate_ret $? "$msg" @@ -185,7 +172,7 @@ function fetch_tor_github function fetch_tor_gitlab { local cmd="git fetch tor-gitlab" - printf " %s Fetching tor-gitlab..." "$MARKER" + printf "%s Fetching tor-gitlab..." "$MARKER" if [ $DRY_RUN -eq 0 ]; then msg=$( eval "$cmd" 2>&1 ) validate_ret $? "$msg" @@ -198,11 +185,10 @@ function fetch_tor_gitlab # Entry point # ############### -# First, fetch tor-github. +# Get into our origin repository. goto_repo "$ORIGIN_PATH" -fetch_tor_github -# Then tor-gitlab +# First, fetch tor-gitlab fetch_tor_gitlab # Then, fetch the origin. diff --git a/scripts/git/git-push-all.sh b/scripts/git/git-push-all.sh index 558ea8d01c..e5c16e615f 100755 --- a/scripts/git/git-push-all.sh +++ b/scripts/git/git-push-all.sh @@ -21,10 +21,10 @@ function usage() echo " -r: push to remote-name, rather than the default upstream remote." echo " (default: $DEFAULT_UPSTREAM_REMOTE, current: $UPSTREAM_REMOTE)" echo " -t: test branch mode: push test branches to remote-name. Pushes" - echo " branches prefix_035, prefix_040, ... , prefix_master." - echo " (default: push maint-*, release-*, and master)" + echo " branches prefix_035, prefix_040, ... , prefix_main." + echo " (default: push maint-*, release-*, and main)" echo " -s: push branches whose tips match upstream maint, release, or" - echo " master branches. The default is to skip these branches," + echo " main branches. The default is to skip these branches," echo " because they do not contain any new code. Use -s to test for" echo " CI environment failures, using code that previously passed CI." echo " (default: skip; current: $CURRENT_PUSH_SAME matching branches)" @@ -45,7 +45,7 @@ function usage() echo " (default: use the current directory for pushes;" echo " current: $TOR_FULL_GIT_PATH)" echo " TOR_MASTER: the name of the directory containing the tor.git clone" - echo " The tor master git directory is \$GIT_PATH/\$TOR_MASTER" + echo " The primary tor git directory is \$GIT_PATH/\$TOR_MASTER" echo " (default: tor; current: $TOR_MASTER_NAME)" echo echo " TOR_UPSTREAM_REMOTE_NAME: the default upstream remote." @@ -55,9 +55,9 @@ function usage() echo " Overridden by <git push options> after --." echo " (default: git push --atomic; current: $GIT_PUSH)" echo " TOR_PUSH_SAME: push branches whose tips match upstream maint," - echo " release, or master branches. Inverted by -s." + echo " release, or main branches. Inverted by -s." echo " (default: skip; current: $CURRENT_PUSH_SAME matching branches)" - echo " TOR_PUSH_DELAY: pushes the master and maint branches separately," + echo " TOR_PUSH_DELAY: pushes the main and maint branches separately," echo " so that CI runs in a sensible order." echo " (default: push all branches immediately; current: $PUSH_DELAY)" echo " we recommend that you set these env vars in your ~/.profile" @@ -71,7 +71,7 @@ set -e # Don't change this configuration - set the env vars in your .profile # -# The tor master git repository directory from which all the worktree have +# The primary tor git repository directory from which all the worktree have # been created. TOR_MASTER_NAME=${TOR_MASTER_NAME:-"tor"} # Which directory do we push from? @@ -87,7 +87,7 @@ UPSTREAM_REMOTE=${DEFAULT_UPSTREAM_REMOTE} # Add a delay between pushes, so CI runs on the most important branches first PUSH_DELAY=${TOR_PUSH_DELAY:-0} # Push (1) or skip (0) test branches that are the same as an upstream -# maint/master branch. Push if you are testing that the CI environment still +# maint/main branch. Push if you are testing that the CI environment still # works on old code, skip if you are testing new code in the branch. # Default: skip unchanged branches. # Inverted by the -s option. @@ -99,7 +99,7 @@ PUSH_SAME=${TOR_PUSH_SAME:-0} # Controlled by the -t <test-branch-prefix> option. The test branch prefix # option makes git-merge-forward.sh create new test branches: -# <tbp>_035, <tbp>_040, ... , <tbp>_master, and merge each branch forward into +# <tbp>_035, <tbp>_040, ... , <tbp>_main, and merge each branch forward into # the next one. TEST_BRANCH_PREFIX= @@ -213,7 +213,7 @@ if [ "$TEST_BRANCH_PREFIX" ]; then # upstream branches (they have already been tested) UPSTREAM_SKIP_SAME_AS="$UPSTREAM_BRANCHES $DEFAULT_UPSTREAM_BRANCHES" else - # Skip the local maint-*, release-*, master branches that are the same as the + # Skip the local maint-*, release-*, main branches that are the same as the # current upstream branches, but ignore the default upstream # (we want to update a non-default remote, even if it matches the default) UPSTREAM_SKIP_SAME_AS="$UPSTREAM_BRANCHES" @@ -264,8 +264,8 @@ if [ "$PUSH_DELAY" -le 0 ]; then else # Push the branches in optimal CI order, with a delay between each push PUSH_BRANCHES=$(echo "$PUSH_BRANCHES" | tr " " "\\n" | sort -V) - MASTER_BRANCH=$(echo "$PUSH_BRANCHES" | tr " " "\\n" | grep master) \ - || true # Skipped master branch + MASTER_BRANCH=$(echo "$PUSH_BRANCHES" | tr " " "\\n" | grep main$) \ + || true # Skipped main branch if [ -z "$TEST_BRANCH_PREFIX" ]; then MAINT_BRANCHES=$(echo "$PUSH_BRANCHES" | tr " " "\\n" | grep maint) \ || true # Skipped all maint branches @@ -273,7 +273,7 @@ else tr "\\n" " ") || true # Skipped all release branches else # Actually test branches based on maint branches - MAINT_BRANCHES=$(echo "$PUSH_BRANCHES" | tr " " "\\n" | grep -v master) \ + MAINT_BRANCHES=$(echo "$PUSH_BRANCHES" | tr " " "\\n" | grep -v main$) \ || true # Skipped all maint test branches # No release branches RELEASE_BRANCHES= @@ -295,9 +295,9 @@ else # shellcheck disable=SC2086 for b in $MASTER_BRANCH $MAINT_BRANCHES; do $GIT_PUSH "$@" "$UPSTREAM_REMOTE" "$b" - # If we are pushing more than one branch, delay. - # In the unlikely scenario where we are pushing maint without master, - # or maint without release, there may be an extra delay + # If we are pushing more than one branch, delay. In the unlikely scenario + # where we are pushing maint branches without the main branch, or maint + # without release, there may be an extra delay if [ "$MAINT_BRANCHES" ] || [ "$RELEASE_BRANCHES" ]; then sleep "$PUSH_DELAY" fi diff --git a/scripts/git/git-setup-dirs.sh b/scripts/git/git-setup-dirs.sh index 5a9ae41cbd..c502f74f58 100755 --- a/scripts/git/git-setup-dirs.sh +++ b/scripts/git/git-setup-dirs.sh @@ -22,7 +22,7 @@ function usage() echo echo " optional:" echo " TOR_MASTER: the name of the directory containing the tor.git clone" - echo " The tor master git directory is \$GIT_PATH/\$TOR_MASTER" + echo " The primary tor git directory is \$GIT_PATH/\$TOR_MASTER" echo " (default: tor; current: $TOR_MASTER_NAME)" echo " TOR_WKT_NAME: the name of the directory containing the tor" echo " worktrees. The tor worktrees are:" @@ -65,7 +65,7 @@ function usage() # Where are all those git repositories? GIT_PATH=${TOR_FULL_GIT_PATH:-"FULL_PATH_TO_GIT_REPOSITORY_DIRECTORY"} -# The tor master git repository directory from which all the worktree have +# The primary tor git repository directory from which all the worktree have # been created. TOR_MASTER_NAME=${TOR_MASTER_NAME:-"tor"} # The worktrees location (directory). @@ -102,7 +102,7 @@ set -e eval "$(git-list-tor-branches.sh -b)" set +e -# The master branch path has to be the main repository thus contains the +# The main branch path has to be the main repository thus contains the # origin that will be used to fetch the updates. All the worktrees are created # from that repository. ORIGIN_PATH="$GIT_PATH/$TOR_MASTER_NAME" @@ -519,11 +519,11 @@ for ((i=0; i<COUNT; i++)); do repo_path=${!WORKTREE[$i]:1:1} printf "%s Handling branch %s\\n" "$MARKER" "${BYEL}$branch${CNRM}" - # We cloned the repository, and master is the default branch - if [ "$branch" = "master" ]; then - if [ "$TOR_MASTER_NAME" != "master" ]; then - # Set up a master link in the worktree directory - make_symlink "$repo_path" "$GIT_PATH/$TOR_WKT_NAME/master" + # We cloned the repository, and main is the default branch + if [ "$branch" = "main" ]; then + if [ "$TOR_MASTER_NAME" != "main" ]; then + # Set up a main branch link in the worktree directory + make_symlink "$repo_path" "$GIT_PATH/$TOR_WKT_NAME/main" fi else # git makes worktree directories if they don't exist diff --git a/scripts/git/post-merge.git-hook b/scripts/git/post-merge.git-hook index eae4f999e7..b458630d26 100755 --- a/scripts/git/post-merge.git-hook +++ b/scripts/git/post-merge.git-hook @@ -36,8 +36,8 @@ check_for_script_update() { } cur_branch=$(git rev-parse --abbrev-ref HEAD) -if [ "$cur_branch" != "master" ]; then - echo "post-merge: Not a master branch. Skipping." +if [ "$cur_branch" != "main" ]; then + echo "post-merge: Not a main branch. Skipping." exit 0 fi diff --git a/scripts/git/pre-push.git-hook b/scripts/git/pre-push.git-hook index f0a3a250ec..0f016df592 100755 --- a/scripts/git/pre-push.git-hook +++ b/scripts/git/pre-push.git-hook @@ -2,9 +2,9 @@ # git pre-push hook script to: # 0) Call the pre-commit hook, if it is available -# 1) prevent "fixup!" and "squash!" commit from ending up in master, release-* +# 1) prevent "fixup!" and "squash!" commit from ending up in main, release-* # or maint-* -# 2) Disallow pushing branches other than master, release-* +# 2) Disallow pushing branches other than main, release-* # and maint-* to origin (e.g. gitweb.torproject.org) # # To install this script, copy it into .git/hooks/pre-push path in your @@ -39,7 +39,7 @@ remote_name=$(git remote --verbose | grep "$2" | awk '{print $1}' | head -n 1) ref_is_upstream_branch() { - if [ "$1" == "refs/heads/master" ] || + if [ "$1" == "refs/heads/main" ] || [[ "$1" == refs/heads/release-* ]] || [[ "$1" == refs/heads/maint-* ]]; then return 1 @@ -54,8 +54,8 @@ do : else if [ "$remote_sha" = $z40 ]; then - # New branch, examine commits not in master - range="master...$local_sha" + # New branch, examine commits not in main + range="main...$local_sha" else # Update to existing branch, examine new commits range="$remote_sha..$local_sha" diff --git a/scripts/maint/checkOptionDocs.pl.in b/scripts/maint/checkOptionDocs.pl.in index bb8008c2e8..2d4a7884f5 100644 --- a/scripts/maint/checkOptionDocs.pl.in +++ b/scripts/maint/checkOptionDocs.pl.in @@ -43,7 +43,7 @@ open(F, "@abs_top_srcdir@/doc/man/tor.1.txt") or die; while (<F>) { if (m!^(?:\[\[([A-za-z0-9_]+)\]\] *)?\*\*([A-Za-z0-9_]+)\*\*!) { $manPageOptions{$2} = 1; - print "Missing an anchor: $2\n" unless (defined $1 or $2 eq 'tor'); + print "Missing an anchor: $2\n" unless (defined $1 or $2 eq 'tor'); } } close F; diff --git a/scripts/maint/checkShellScripts.sh b/scripts/maint/checkShellScripts.sh index 0a423be29e..f7e260bbd2 100755 --- a/scripts/maint/checkShellScripts.sh +++ b/scripts/maint/checkShellScripts.sh @@ -41,7 +41,6 @@ rm -f "$TOPLEVEL/contrib/dist/suse/tor.sh" "$TOPLEVEL/contrib/dist/tor.sh" find "$TOPLEVEL/contrib" "$TOPLEVEL/doc" "$TOPLEVEL/scripts" "$TOPLEVEL/src" \ -name "*.sh" \ -not -path "$TOPLEVEL/src/ext/*" \ - -not -path "$TOPLEVEL/src/rust/registry/*" \ -exec shellcheck {} + # Check scripts that aren't named *.sh diff --git a/scripts/maint/checkSpace.pl b/scripts/maint/checkSpace.pl index 857ce6f6f1..8ecbf414cf 100755 --- a/scripts/maint/checkSpace.pl +++ b/scripts/maint/checkSpace.pl @@ -7,13 +7,13 @@ my $found = 0; my $COLON_POS = 10; sub msg { - $found = 1; - my $v = shift; - $v =~ /^\s*([^:]+):(.*)$/; - chomp(my $errtype = $1); - my $rest = $2; - my $padding = ' ' x ($COLON_POS - length $errtype); - print "$padding$errtype:$rest\n"; + $found = 1; + my $v = shift; + $v =~ /^\s*([^:]+):(.*)$/; + chomp(my $errtype = $1); + my $rest = $2; + my $padding = ' ' x ($COLON_POS - length $errtype); + print "$padding$errtype:$rest\n"; } my $C = 0; diff --git a/scripts/maint/check_config_macros.pl b/scripts/maint/check_config_macros.pl index bcde2beccc..1398b9984a 100755 --- a/scripts/maint/check_config_macros.pl +++ b/scripts/maint/check_config_macros.pl @@ -7,7 +7,7 @@ my @macros = (); open(F, 'orconfig.h.in'); while(<F>) { if (/^#undef +([A-Za-z0-9_]*)/) { - push @macros, $1; + push @macros, $1; } } close F; @@ -15,6 +15,6 @@ close F; for my $m (@macros) { my $s = `git grep '$m' src`; if ($s eq '') { - print "Unused: $m\n"; + print "Unused: $m\n"; } } diff --git a/scripts/maint/findMergedChanges.pl b/scripts/maint/findMergedChanges.pl index d6c4105b74..427f2b111d 100755 --- a/scripts/maint/findMergedChanges.pl +++ b/scripts/maint/findMergedChanges.pl @@ -9,7 +9,7 @@ sub nChanges { # requires perl 5.8. Avoids shell issues if we ever get a changes # file named by the parents of Little Johnny Tables. open F, "-|", "git", "log", "--no-merges", "--pretty=format:%H", $branches, "--", $fname - or die "$!"; + or die "$!"; my @changes = <F>; return scalar @changes } @@ -22,13 +22,13 @@ Usage: findMergedChanges.pl [--merged/--unmerged/--weird/--list] [--branch=<branchname] [--head=<branchname>] changes/* A change is "merged" if it has ever been merged to release-0.2.4 and it has had -no subsequent changes in master. +no subsequent changes in main. A change is "unmerged" if it has never been merged to release-0.2.4 and it -has had changes in master. +has had changes in main. A change is "weird" if it has been merged to release-0.2.4 and it *has* had -subsequent changes in master. +subsequent changes in main. Suggested application: findMergedChanges.pl --merged changes/* | xargs -n 1 git rm @@ -37,18 +37,18 @@ EOF } my $target_branch = "origin/release-0.2.4"; -my $head = "origin/master"; +my $head = "origin/main"; while (@ARGV and $ARGV[0] =~ /^--/) { my $flag = shift @ARGV; if ($flag =~ /^--(weird|merged|unmerged|list)/) { - $look_for_type = $1; + $look_for_type = $1; } elsif ($flag =~ /^--branch=(\S+)/) { $target_branch = $1; } elsif ($flag =~ /^--head=(\S+)/) { $head = $1; } else { - die "Unrecognized flag $flag"; + die "Unrecognized flag $flag"; } } @@ -58,16 +58,16 @@ for my $changefile (@ARGV) { my $type; if ($n_merged != 0 and $n_postmerged == 0) { - $type = "merged"; + $type = "merged"; } elsif ($n_merged == 0 and $n_postmerged != 0) { - $type = "unmerged"; + $type = "unmerged"; } else { - $type = "weird"; + $type = "weird"; } if ($type eq $look_for_type) { - print "$changefile\n"; + print "$changefile\n"; } elsif ($look_for_type eq 'list') { - printf "% 8s: %s\n", $type, $changefile; + printf "% 8s: %s\n", $type, $changefile; } } diff --git a/scripts/maint/format_changelog.py b/scripts/maint/format_changelog.py index 93ab56e257..32b47ffcbb 100755 --- a/scripts/maint/format_changelog.py +++ b/scripts/maint/format_changelog.py @@ -424,7 +424,7 @@ def bug_html(m): try: disp_prefix, url_prefix = ISSUE_PREFIX_MAP[prefix] except KeyError: - print("Can't figure out URL for {}{}".formt(prefix,bugno), + print("Can't figure out URL for {}{}".format(prefix,bugno), file=sys.stderr) return "{} {}{}".format(kind, prefix, bugno) diff --git a/scripts/maint/gen_ccls_file.sh b/scripts/maint/gen_ccls_file.sh index b1fa55c973..04e31d22a8 100755 --- a/scripts/maint/gen_ccls_file.sh +++ b/scripts/maint/gen_ccls_file.sh @@ -19,13 +19,13 @@ echo "clang" > "$CCLS_FILE" # Add these include so the ccls server can properly check new files that are # not in the compile_commands.json yet { - echo "-I." - echo "-I./src" - echo "-I./src/ext" - echo "-I./src/ext/trunnel" + echo "-I." + echo "-I./src" + echo "-I./src/ext" + echo "-I./src/ext/trunnel" } >> "$CCLS_FILE" # Add all defines (-D). for p in $PRIVATE_DEFS; do - echo "-D$p" >> "$CCLS_FILE" + echo "-D$p" >> "$CCLS_FILE" done diff --git a/scripts/maint/geoip/update_geoip.sh b/scripts/maint/geoip/update_geoip.sh index 9289e7a969..743683ab62 100755 --- a/scripts/maint/geoip/update_geoip.sh +++ b/scripts/maint/geoip/update_geoip.sh @@ -5,7 +5,7 @@ set -e DIR=$(cd "$(dirname "$0")" && pwd) TMP=$(mktemp -d) -location update +location --quiet update location dump "$TMP/geoip-dump.txt" OLDDIR=$(pwd) diff --git a/scripts/maint/practracker/includes.py b/scripts/maint/practracker/includes.py index a5ee728824..46630d987f 100755 --- a/scripts/maint/practracker/includes.py +++ b/scripts/maint/practracker/includes.py @@ -40,11 +40,13 @@ def warn(msg): print(msg, file=sys.stderr) def fname_is_c(fname): - """ Return true iff 'fname' is the name of a file that we should - search for possibly disallowed #include directives. """ - if fname.endswith(".h") or fname.endswith(".c"): + """ + Return true if 'fname' is the name of a file that we should + search for possibly disallowed #include directives. + """ + if fname.endswith((".c", ".h")): bname = os.path.basename(fname) - return not (bname.startswith(".") or bname.startswith("#")) + return not bname.startswith((".", "#")) else: return False diff --git a/scripts/maint/practracker/test_practracker.sh b/scripts/maint/practracker/test_practracker.sh index e29b9106de..bb734ad9cd 100755 --- a/scripts/maint/practracker/test_practracker.sh +++ b/scripts/maint/practracker/test_practracker.sh @@ -1,15 +1,15 @@ #!/bin/sh -# Fail if any subprocess fails unexpectedly +# Fail this script if any subprocess fails unexpectedly. set -e umask 077 unset TOR_DISABLE_PRACTRACKER TMPDIR="" -clean () { +clean() { if [ -n "$TMPDIR" ] && [ -d "$TMPDIR" ]; then - rm -rf "$TMPDIR" + rm -rf "$TMPDIR" fi } trap clean EXIT HUP INT TERM @@ -27,7 +27,7 @@ PRACTRACKER_DIR="scripts/maint/practracker" TMPDIR="$(mktemp -d -t pracktracker.test.XXXXXX)" if test -z "${TMPDIR}" || test ! -d "${TMPDIR}" ; then echo >&2 "mktemp failed." - exit 1; + exit 1 fi DATA="${PRACTRACKER_DIR}/testdata" @@ -43,6 +43,7 @@ run_practracker() { --terse \ "${DATA}/" "$@" || echo "practracker exit status: $?" } + compare() { # we can't use cmp because we need to use -b for windows diff -b -u "$@" > "${TMPDIR}/test-diff" || true diff --git a/scripts/maint/practracker/util.py b/scripts/maint/practracker/util.py index c52ca2fbbf..6ab10a8de7 100644 --- a/scripts/maint/practracker/util.py +++ b/scripts/maint/practracker/util.py @@ -7,8 +7,7 @@ import os # We don't want to run metrics for unittests, automatically-generated C files, # external libraries or git leftovers. -EXCLUDE_SOURCE_DIRS = {"src/test/", "src/trunnel/", "src/rust/", - "src/ext/" } +EXCLUDE_SOURCE_DIRS = {"src/test/", "src/trunnel/", "src/ext/" } EXCLUDE_FILES = {"orconfig.h"} diff --git a/scripts/maint/run_calltool.sh b/scripts/maint/run_calltool.sh index b0268322f4..025a49cd03 100755 --- a/scripts/maint/run_calltool.sh +++ b/scripts/maint/run_calltool.sh @@ -5,8 +5,8 @@ set -e if test "x$CALLTOOL_PATH" != "x"; then - PYTHONPATH="${CALLTOOL_PATH}:${PYTHONPATH}" - export PYTHONPATH + PYTHONPATH="${CALLTOOL_PATH}:${PYTHONPATH}" + export PYTHONPATH fi mkdir -p callgraph @@ -14,8 +14,8 @@ mkdir -p callgraph SUBITEMS="fn_graph fn_invgraph fn_scc fn_scc_weaklinks module_graph module_invgraph module_scc module_scc_weaklinks" for calculation in $SUBITEMS; do - echo "======== $calculation" - python -m calltool "$calculation" > callgraph/"$calculation" + echo "======== $calculation" + python -m calltool "$calculation" > callgraph/"$calculation" done cat <<EOF > callgraph/README diff --git a/scripts/maint/updateRustDependencies.sh b/scripts/maint/updateRustDependencies.sh deleted file mode 100755 index 6d0587351f..0000000000 --- a/scripts/maint/updateRustDependencies.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Tor Project, Inc. -# Copyright (c) 2018 isis agora lovecruft -# See LICENSE for license information -# -# updateRustDependencies.sh -# ------------------------- -# Update our vendored Rust dependencies, either adding/removing -# dependencies and/or upgrading current dependencies to newer -# versions. -# -# To use this script, first add your dependencies, exactly specifying -# their versions, into the appropriate *crate-level* Cargo.toml in -# src/rust/ (i.e. *not* /src/rust/Cargo.toml, but instead the one for -# your crate). -# -# Next, run this script. Then, go into src/ext/rust and commit the -# changes to the tor-rust-dependencies repo. - -set -e - -HERE=$(dirname "$(realpath "$0")") -TOPLEVEL=$(dirname "$(dirname "$HERE")") -TOML="$TOPLEVEL/src/rust/Cargo.toml" -VENDORED="$TOPLEVEL/src/ext/rust/crates" -CARGO=$(command -v cargo) - -if ! test -f "$TOML" ; then - printf "Error: Couldn't find workspace Cargo.toml in expected location: %s\\n" "$TOML" -fi - -if ! test -d "$VENDORED" ; then - printf "Error: Couldn't find directory for Rust dependencies! Expected location: %s\\n" "$VENDORED" -fi - -if test -z "$CARGO" ; then - printf "Error: cargo must be installed and in your \$PATH\\n" -fi - -if test -z "$(cargo --list | grep vendor)" ; then - printf "Error: cargo-vendor not installed\\n" -fi - -$CARGO vendor -v --locked --explicit-version --no-delete --sync "$TOML" "$VENDORED" diff --git a/src/app/config/config.c b/src/app/config/config.c index 2877bc1e6a..15addd5be4 100644 --- a/src/app/config/config.c +++ b/src/app/config/config.c @@ -193,6 +193,7 @@ static const config_abbrev_t option_abbrevs_[] = { PLURAL(AuthDirBadDirCC), PLURAL(AuthDirBadExitCC), PLURAL(AuthDirInvalidCC), + PLURAL(AuthDirMiddleOnlyCC), PLURAL(AuthDirRejectCC), PLURAL(EntryNode), PLURAL(ExcludeNode), @@ -331,6 +332,8 @@ static const config_var_t option_vars_[] = { V(AuthDirBadExitCCs, CSV, ""), V(AuthDirInvalid, LINELIST, NULL), V(AuthDirInvalidCCs, CSV, ""), + V(AuthDirMiddleOnly, LINELIST, NULL), + V(AuthDirMiddleOnlyCCs, CSV, ""), V(AuthDirReject, LINELIST, NULL), V(AuthDirRejectCCs, CSV, ""), OBSOLETE("AuthDirRejectUnlisted"), @@ -616,6 +619,7 @@ static const config_var_t option_vars_[] = { V(ConnectionPadding, AUTOBOOL, "auto"), V(RefuseUnknownExits, AUTOBOOL, "auto"), V(CircuitPadding, BOOL, "1"), + V(ReconfigDropsBridgeDescs, BOOL, "0"), V(ReducedCircuitPadding, BOOL, "0"), V(RejectPlaintextPorts, CSV, ""), V(RelayBandwidthBurst, MEMUNIT, "0"), @@ -668,8 +672,11 @@ static const config_var_t option_vars_[] = { VAR("UseEntryGuards", BOOL, UseEntryGuards_option, "1"), OBSOLETE("UseEntryGuardsAsDirGuards"), V(UseGuardFraction, AUTOBOOL, "auto"), + V(VanguardsLiteEnabled, AUTOBOOL, "auto"), V(UseMicrodescriptors, AUTOBOOL, "auto"), OBSOLETE("UseNTorHandshake"), + VAR("__AlwaysCongestionControl", BOOL, AlwaysCongestionControl, "0"), + VAR("__SbwsExit", BOOL, SbwsExit, "0"), V_IMMUTABLE(User, STRING, NULL), OBSOLETE("UserspaceIOCPBuffers"), OBSOLETE("V1AuthoritativeDirectory"), @@ -2309,6 +2316,8 @@ options_act,(const or_options_t *old_options)) } if (transition_affects_guards) { + if (options->ReconfigDropsBridgeDescs) + routerlist_drop_bridge_descriptors(); if (guards_update_all()) { abandon_circuits = 1; } @@ -5468,6 +5477,77 @@ pt_parse_transport_line(const or_options_t *options, return r; } +/** + * Parse a flag describing an extra dirport for a directory authority. + * + * Right now, the supported format is exactly: + * `{upload,download,voting}=http://[IP:PORT]/`. + * Other URL schemes, and other suffixes, might be supported in the future. + * + * Only call this function if `flag` starts with one of the above strings. + * + * Return 0 on success, and -1 on failure. + * + * If `ds` is provided, then add any parsed dirport to `ds`. If `ds` is NULL, + * take no action other than parsing. + **/ +static int +parse_dirauth_dirport(dir_server_t *ds, const char *flag) +{ + tor_assert(flag); + + auth_dirport_usage_t usage; + + if (!strcasecmpstart(flag, "upload=")) { + usage = AUTH_USAGE_UPLOAD; + } else if (!strcasecmpstart(flag, "download=")) { + usage = AUTH_USAGE_DOWNLOAD; + } else if (!strcasecmpstart(flag, "vote=")) { + usage = AUTH_USAGE_VOTING; + } else { + // We shouldn't get called with a flag that we don't recognize. + tor_assert_nonfatal_unreached(); + return -1; + } + + const char *eq = strchr(flag, '='); + tor_assert(eq); + const char *target = eq + 1; + + // Find the part inside the http://{....}/ + if (strcmpstart(target, "http://")) { + log_warn(LD_CONFIG, "Unsupported URL scheme in authority flag %s", flag); + return -1; + } + const char *addr = target + strlen("http://"); + + const char *eos = strchr(addr, '/'); + size_t addr_len; + if (eos && strcmp(eos, "/")) { + log_warn(LD_CONFIG, "Unsupported URL prefix in authority flag %s", flag); + return -1; + } else if (eos) { + addr_len = eos - addr; + } else { + addr_len = strlen(addr); + } + + // Finally, parse the addr:port part. + char *addr_string = tor_strndup(addr, addr_len); + tor_addr_port_t dirport; + memset(&dirport, 0, sizeof(dirport)); + int rv = tor_addr_port_parse(LOG_WARN, addr_string, + &dirport.addr, &dirport.port, -1); + if (ds != NULL && rv == 0) { + trusted_dir_server_add_dirport(ds, usage, &dirport); + } else if (rv == -1) { + log_warn(LD_CONFIG, "Unable to parse address in authority flag %s",flag); + } + + tor_free(addr_string); + return rv; +} + /** Read the contents of a DirAuthority line from <b>line</b>. If * <b>validate_only</b> is 0, and the line is well-formed, and it * shares any bits with <b>required_type</b> or <b>required_type</b> @@ -5488,6 +5568,7 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type, char v3_digest[DIGEST_LEN]; dirinfo_type_t type = 0; double weight = 1.0; + smartlist_t *extra_dirports = smartlist_new(); memset(v3_digest, 0, sizeof(v3_digest)); @@ -5556,6 +5637,12 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type, } ipv6_addrport_ptr = &ipv6_addrport; } + } else if (!strcasecmpstart(flag, "upload=") || + !strcasecmpstart(flag, "download=") || + !strcasecmpstart(flag, "vote=")) { + // We'll handle these after creating the authority object. + smartlist_add(extra_dirports, flag); + flag = NULL; // prevent double-free. } else { log_warn(LD_CONFIG, "Unrecognized flag '%s' on DirAuthority line", flag); @@ -5599,6 +5686,13 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type, goto err; } + if (validate_only) { + SMARTLIST_FOREACH_BEGIN(extra_dirports, const char *, cp) { + if (parse_dirauth_dirport(NULL, cp) < 0) + goto err; + } SMARTLIST_FOREACH_END(cp); + } + if (!validate_only && (!required_type || required_type & type)) { dir_server_t *ds; if (required_type) @@ -5610,16 +5704,23 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type, ipv6_addrport_ptr, digest, v3_digest, type, weight))) goto err; + + SMARTLIST_FOREACH_BEGIN(extra_dirports, const char *, cp) { + if (parse_dirauth_dirport(ds, cp) < 0) + goto err; + } SMARTLIST_FOREACH_END(cp); dir_server_add(ds); } r = 0; goto done; - err: + err: r = -1; - done: + done: + SMARTLIST_FOREACH(extra_dirports, char*, s, tor_free(s)); + smartlist_free(extra_dirports); SMARTLIST_FOREACH(items, char*, s, tor_free(s)); smartlist_free(items); tor_free(addrport); diff --git a/src/app/config/fallback_dirs.inc b/src/app/config/fallback_dirs.inc index 87c1886e83..0f32081029 100644 --- a/src/app/config/fallback_dirs.inc +++ b/src/app/config/fallback_dirs.inc @@ -3,1100 +3,1102 @@ /* timestamp=20210412000000 */ /* source=offer-list */ // -// Generated on: Fri, 04 Feb 2022 15:49:02 +0000 +// Generated on: Fri, 25 Mar 2022 13:07:13 +0000 -"140.78.100.21 orport=5443 id=6E3508CB2374D411CD41FEE8ECDF70DA3A2F7A28" -/* nickname=INSRelay21at5443 */ +"149.28.183.149 orport=9001 id=BCA35F70CB0E7A583FC6ECB83F755B083E9E2DFB" +" ipv6=[2001:19f0:5801:836:5400:1ff:fef8:30ea]:9001" +/* nickname=oenx */ /* extrainfo=0 */ /* ===== */ , -"88.196.80.132 orport=443 id=86CDD0D92AB972538416A382D99666736CDDF141" -/* nickname=RyderIII */ +"95.216.212.222 orport=19001 id=72614C16C578D6732A9D9079A0905E8159BC44E4" +" ipv6=[2a01:4f9:c010:2697::1]:19001" +/* nickname=bornhack2 */ /* extrainfo=0 */ /* ===== */ , -"213.239.217.68 orport=4433 id=FFBC69467B37D6AC66598BBD295F9B0D74119ADC" -/* nickname=plan9leia */ +"94.130.239.50 orport=9001 id=66A98A5245B6B3F5B4140E04FAEB12085FC6A505" +" ipv6=[2a01:4f8:13b:110d::2]:9001" +/* nickname=HRMB */ /* extrainfo=0 */ /* ===== */ , -"185.220.100.247 orport=9100 id=B891CB6370CF7C51C6FB24D80947AFB7ED463D00" -" ipv6=[2a0b:f4c0:16c:9::1]:9100" -/* nickname=niftygrolantor */ +"135.181.67.210 orport=443 id=DC7E7D9AB7AD52F03B856E6DC278E9D92BF19B33" +" ipv6=[2a01:4f9:4b:4e97::6666]:443" +/* nickname=s6tor2 */ /* extrainfo=0 */ /* ===== */ , -"192.121.108.236 orport=9001 id=C5F0591A16BD68EB88170D921B0E331F180E624B" -/* nickname=HjelmEnterprises01 */ +"95.216.33.58 orport=443 id=56927E61B51E6F363FB55498150A6DDFCF7077F2" +" ipv6=[2a01:4f9:2a:2145::2]:443" +/* nickname=Akka */ /* extrainfo=0 */ /* ===== */ , -"104.244.72.7 orport=9000 id=035F813195F0CB9F567EDFDF60C6745CA36BA0BD" -" ipv6=[2605:6400:30:ed94:5152:73e1:5e88:35f4]:9000" -/* nickname=Quetzalcoatl */ +"46.38.237.221 orport=9001 id=D30E9D4D639068611D6D96861C95C2099140B805" +" ipv6=[2a03:4000:2:e5::1]:9001" +/* nickname=mine */ /* extrainfo=0 */ /* ===== */ , -"46.126.164.243 orport=443 id=7B28971D4A29995784E3066B9D87E42E9C685F3A" -/* nickname=torified */ +"95.217.112.245 orport=80 id=4D70F05DD308A2EA5B671E440879BFADAC92860F" +" ipv6=[2a01:4f9:4a:2e4e::2]:80" +/* nickname=arbitraryTessa1 */ /* extrainfo=0 */ /* ===== */ , -"99.45.175.117 orport=443 id=515100EDE19C0F5E0CADD391DE33E0DE14B00FDD" -" ipv6=[2600:1700:6972:1200:dea6:32ff:fec5:ff87]:443" -/* nickname=pi87 */ +"212.112.156.88 orport=6247 id=807C1F0D6A729268C1F8E2AC72C8EAE2D9D9396F" +/* nickname=localPenpal1 */ /* extrainfo=0 */ /* ===== */ , -"54.38.219.251 orport=443 id=C303038FDCC72805A160FF64E994333A49ECDA71" -" ipv6=[2001:470:73f7::7]:443" -/* nickname=Fission12 */ +"85.209.51.85 orport=9001 id=FE23B0B9493E42A6B8F77473597A10EEA5D1AEDD" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"185.183.194.90 orport=443 id=4CEAFCE5841C0DAE30164B4F59452F7F4D818A67" -" ipv6=[2001:1620:425a:6fde::10]:443" -/* nickname=QOnan */ +"119.59.110.153 orport=443 id=44D9262953FF8D30AA6638A995F2BCD3A2F9FACC" +/* nickname=always1 */ /* extrainfo=0 */ /* ===== */ , -"199.249.230.179 orport=443 id=3A1BC65DF03ECD50FDF7CFF9C5A4E049FCB9C1AF" -" ipv6=[2620:7:6001::179]:80" -/* nickname=Quintex90 */ +"46.119.241.8 orport=11000 id=89CB5D29F7CE52E87DCAEEA55AE8E90FE0EE6FC3" +/* nickname=oxyviq */ /* extrainfo=0 */ /* ===== */ , -"185.220.101.10 orport=9443 id=DA9ABAEA49FBF9E75E9EC020380E361688A3B23E" -" ipv6=[2a0b:f4c2::10]:9443" -/* nickname=artikel10ber20 */ +"185.247.226.89 orport=9001 id=ED0C39728C0410A1A6173FE0F8C1C9667DDF7D66" +/* nickname=Hydra78 */ /* extrainfo=0 */ /* ===== */ , -"67.3.185.13 orport=443 id=EC4B6AF202EFE752C4D9E2FBD092C4EAE779ADA1" -/* nickname=Unnamed */ +"185.244.167.15 orport=6080 id=A093F8B6417975A4F4C7AD10EE1234D0E745CF72" +/* nickname=lmtor5 */ /* extrainfo=0 */ /* ===== */ , -"104.244.77.73 orport=9001 id=2FE81C1FD45AC593193F04DF781980257E4BCD03" -/* nickname=Hydra62 */ +"74.96.74.70 orport=8234 id=085527CBD6485FD475AC983FA8683A2D9028BAA8" +/* nickname=pastly01 */ /* extrainfo=0 */ /* ===== */ , -"185.4.134.104 orport=9001 id=C6E3910CBADCA6D2D7E932AB31A038EDD6A6FB79" -" ipv6=[2a02:c500:2:110::2d49]:9001" -/* nickname=Assange023gr */ +"149.248.12.40 orport=443 id=98AE47D851D777DE832CDCA28817063A89D2168E" +" ipv6=[2001:19f0:6001:38d4:5400:3ff:fe8b:65f6]:443" +/* nickname=PerplesTorRelay */ /* extrainfo=0 */ /* ===== */ , -"82.223.14.245 orport=443 id=9C5AFD49AAE4E0272BAD780C6DD71CE1A36012A6" -" ipv6=[2001:ba0:1800:91::1]:443" -/* nickname=coffswifi4 */ +"94.130.246.106 orport=9001 id=1C0736CF3744A3B87C2D2269B8BD3388C7E60552" +" ipv6=[2a01:4f8:10b:3344:106::106]:9001" +/* nickname=FreedomFries2 */ /* extrainfo=0 */ /* ===== */ , -"87.118.116.103 orport=443 id=26C28F29B611DF4DE23ACF5D9DC1EB4895EF5E8B" -" ipv6=[2001:1b60:3:221:4134:101:0:1]:443" -/* nickname=artikel5ev4 */ +"64.187.229.206 orport=8168 id=09F9F2DCC9E05B91DDDF0B61149719AF7A481A15" +/* nickname=gbt2USicebeer25 */ /* extrainfo=0 */ /* ===== */ , -"80.98.81.157 orport=9001 id=2D8A907F61CAED48170963B76BE4FB0ED33E5E88" -/* nickname=nCT8d6e5bW2v */ +"95.217.180.216 orport=9001 id=EEFFC0D532AB63BB3E9CAEADA822971F6D3AE8D6" +" ipv6=[2a01:4f9:c010:84f4::1]:9001" +/* nickname=stateiscriminalorg */ /* extrainfo=0 */ /* ===== */ , -"108.184.13.208 orport=9001 id=D195E5CE8AE77BAC91673E6CFB7BD0AF57281646" -/* nickname=OhNoAnotherRelay01 */ +"51.79.204.46 orport=9001 id=9BF600D6C06A3FBE28216C58CD241A89931CBE7D" +/* nickname=Hydra52 */ /* extrainfo=0 */ /* ===== */ , -"195.54.33.64 orport=9001 id=54D1F9D1EE2CBC48F8F4BBF9CF0A0E7ED45FE6B7" -/* nickname=Assange042de */ +"90.129.255.31 orport=9001 id=9DA5284A51021A711ECAA677C81E5408222B9F2A" +/* nickname=Bifrost */ /* extrainfo=0 */ /* ===== */ , -"91.143.88.62 orport=443 id=F9246DEF2B653807236DA134F2AEAB103D58ABFE" -" ipv6=[2a02:180:6:1::3d8]:443" -/* nickname=Freebird31 */ +"173.208.220.86 orport=443 id=40633180E3BAE1D91F77BAD274EF84DFE2FDB1D7" +" ipv6=[2604:4300:a:279::86]:443" +/* nickname=jstark1809c03 */ /* extrainfo=0 */ /* ===== */ , -"199.249.230.78 orport=443 id=CB7C0D841FE376EF43F7845FF201B0290C0A239E" -" ipv6=[2620:7:6001::ffff:c759:e64e]:80" -/* nickname=QuintexAirVPN25 */ +"64.187.229.180 orport=4290 id=1F2EC0DB59ED988CB017A802980A242215631DEB" +/* nickname=gbtUSicebeer06b */ /* extrainfo=0 */ /* ===== */ , -"78.47.178.97 orport=8080 id=1CA811478AB30F5DE80825E15F95AF18DCD32B2F" -" ipv6=[2a01:4f8:c0c:57ef::1]:8080" -/* nickname=mig5rezo */ +"65.21.85.98 orport=9001 id=A22B1C2EF2255987F8AB8AA0B1A8E23F5023EEB8" +" ipv6=[2a01:4f9:3a:271f:3::64]:9001" +/* nickname=Init6TorRelay */ /* extrainfo=0 */ /* ===== */ , -"84.75.28.247 orport=9201 id=175D63EFB9176BFADD306843960BFC085A2ABA93" -/* nickname=bluemax666 */ +"104.244.72.248 orport=9001 id=8D1117EFBC91270AE1FCE55E21F9D250985AFAB3" +/* nickname=Hydra32 */ /* extrainfo=0 */ /* ===== */ , -"140.78.100.29 orport=5443 id=795D165D2AD5E7FFE28573924F92895D08E0170D" -/* nickname=INSRelay29at5443 */ +"85.195.235.248 orport=9001 id=103336165A0D2EFCAD3605339843A0A7710B8B92" +" ipv6=[2a02:168:a403:13:5054:ff:fe21:7c4c]:9001" +/* nickname=RelayStation */ /* extrainfo=0 */ /* ===== */ , -"141.105.67.58 orport=443 id=B15C0071EAF508AAEE29DB9D07607C84AA2DDEB3" -/* nickname=cytherea */ +"81.17.18.62 orport=9001 id=617C95FCF5F00E98E73E35A71C066ED20614F26D" +/* nickname=FreeExit */ /* extrainfo=0 */ /* ===== */ , -"193.105.73.80 orport=9001 id=9DC8B0282A8D3C45212167C454B503243BC93957" -/* nickname=akira */ +"195.154.250.239 orport=443 id=DD5DA21CC5036533AE2010DE2C7E72BE2CDF9C5E" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"51.15.246.170 orport=443 id=C0DAAAE5EE461BBE13945FE4B52F32ABDC6BC376" -" ipv6=[2001:bc8:47b0:1756::1]:443" -/* nickname=mitsuha */ +"85.91.153.163 orport=9001 id=07B8FC5B66719C355FABF84B4F5E0131E127DF01" +/* nickname=homeplanet */ /* extrainfo=0 */ /* ===== */ , -"194.59.46.2 orport=9001 id=A6E3A3C6CE962E917A12E586AE750805899C117B" -/* nickname=dewebit */ +"82.66.10.17 orport=9001 id=94403FF8E84EFD9EEEAC0C7603B0834B5C28AE07" +/* nickname=bigbrother23470 */ /* extrainfo=0 */ /* ===== */ , -"88.198.91.74 orport=443 id=44DC23661E05DEFD94398936D9334987ABCB6E5E" -" ipv6=[2a01:4f8:160:6092:d7bd:a39:3e52:b65d]:443" -/* nickname=currentlane */ +"199.195.248.80 orport=443 id=8EEDA34CE6D6E605ED3179278F45882654923280" +" ipv6=[2605:6400:10:c5d:2eac:83ca:95db:bca4]:443" +/* nickname=Quetzalcoatl */ /* extrainfo=0 */ /* ===== */ , -"141.98.103.251 orport=43344 id=4AB1F36362042FCA7100A283599122B6D107E826" -/* nickname=amun3062 */ +"217.160.9.229 orport=443 id=F0C9C07D1B7C6FC8547F52CAC1015B4A79E2AC1A" +" ipv6=[2001:8d8:1800:5b8::1]:443" +/* nickname=TTIGermany2 */ /* extrainfo=0 */ /* ===== */ , -"138.197.150.159 orport=443 id=75CF0F66FE18C3116AAB7B678899151DB762B795" -/* nickname=hrck */ +"65.21.179.41 orport=9001 id=0F597F9BFF5302E6C53617817627C68EE52147BF" +" ipv6=[2a01:4f9:c010:6cb4::1]:9001" +/* nickname=BatsoupXYZ */ /* extrainfo=0 */ /* ===== */ , -"104.244.79.234 orport=9100 id=A15676F5F0F2BA7B1CA54446DDB46BEE6F699A95" -" ipv6=[2605:6400:30:eeec:4913:c3c1:eec2:151a]:9100" -/* nickname=Quetzalcoatl */ +"69.197.188.142 orport=9030 id=CB64547FBC4A4BF1D07F42C555B5BC8F25145B24" +" ipv6=[2604:4300:a:229::142]:9030" +/* nickname=jstark1809a03 */ /* extrainfo=0 */ /* ===== */ , -"107.173.159.48 orport=9001 id=4141FDA554F56E9E24DA41153B5C1A756EE43249" -/* nickname=lamprlogin */ +"18.18.82.17 orport=9001 id=656347EBA74F6320B85192EE22F805CF50098711" +/* nickname=hwds */ /* extrainfo=0 */ /* ===== */ , -"163.172.169.253 orport=9001 id=04A28A62F27D9C4A60F9ED0C4264E98B988C65A3" -" ipv6=[2001:bc8:47a4:e0a::1]:9001" -/* nickname=darknebula */ +"108.173.92.215 orport=443 id=D90A78790098F7C0639DC2D3A8016948EAE5E2B1" +/* nickname=myNiceBionicRelay */ /* extrainfo=0 */ /* ===== */ , -"24.53.51.144 orport=9002 id=C473C772282D5078E5137C1DB83B62224D5B42DD" -/* nickname=ClericalSummoning */ +"190.211.254.210 orport=9001 id=046A2841A526E3D5690ED33D568E9891C39503D8" +/* nickname=LAGARGOUILLEVIF */ /* extrainfo=0 */ /* ===== */ , -"195.154.237.147 orport=443 id=FE1B74C7CEE0493613929A92F9A1D890E58DC649" -/* nickname=unnamed */ +"140.78.100.14 orport=5443 id=C1CA4E603F152E8C86E864F4FBF1162A3BFDF587" +/* nickname=INSRelay14at5443 */ /* extrainfo=0 */ /* ===== */ , -"185.162.251.94 orport=9001 id=9C1E47FF205F349D69D569AE7ED15366A5554A46" -" ipv6=[2a03:4000:1a:5de:6489:b7ff:fe8f:8434]:9001" -/* nickname=Piratenpartei04 */ +"91.143.80.230 orport=443 id=ACBBB426CE1D0641A590BF1FC1CF05416FC0FF6F" +" ipv6=[2a02:180:6:1::2efc]:443" +/* nickname=Planetclaire62 */ /* extrainfo=0 */ /* ===== */ , -"192.42.253.215 orport=9001 id=568B6913AE5123EDBA304909A569AFE8F9E73C4C" -/* nickname=OrwellianNightmare */ +"185.163.204.100 orport=443 id=2958F4F335830EE573977A8AB2B88ADB75818984" +" ipv6=[2a10:c800:1:bcb::1]:443" +/* nickname=CityOfZion */ /* extrainfo=0 */ /* ===== */ , -"185.220.101.51 orport=10051 id=04749CD6A6BE1C0B14EE63DFD0F13EEB9EFEE8AB" -" ipv6=[2a0b:f4c2:2::51]:10051" -/* nickname=ForPrivacyNET */ +"198.98.107.209 orport=8443 id=B6E48634105DA227F09577D7B55C9F905C7AD4D3" +/* nickname=utxobrrelay */ /* extrainfo=0 */ /* ===== */ , -"97.93.202.22 orport=9001 id=9BEED1E03101B2BC9393C560FCF13A1E46E49352" -/* nickname=TheToadHole */ +"199.249.230.180 orport=443 id=6748BA531097A930776F90E20B6EFBA3519A23C0" +" ipv6=[2620:7:6001::180]:80" +/* nickname=Quintex91 */ /* extrainfo=0 */ /* ===== */ , -"78.42.186.218 orport=9001 id=80654A16C954422C9A1B6DBEFBB6A32157A8BAB5" -/* nickname=northwind84 */ +"195.154.119.203 orport=9001 id=54F5D800DD9783FCF2200E80EF3D1A867A3F6D6B" +/* nickname=nix */ /* extrainfo=0 */ /* ===== */ , -"194.145.150.15 orport=443 id=326853AA78DA467E997E6040ADD0DCFF840E0CB5" -" ipv6=[2001:1578:200:10::c]:443" -/* nickname=Unnamed */ +"185.196.2.251 orport=9001 id=C49E3E34591172A5340A1D37E5B4E3D0B91E0F15" +/* nickname=Assange028usX */ /* extrainfo=0 */ /* ===== */ , -"81.7.16.182 orport=443 id=51E1CF613FD6F9F11FE24743C91D6F9981807D82" -" ipv6=[2a02:180:1:1::517:10b6]:993" -/* nickname=torpidsDEisppro3 */ +"46.23.91.159 orport=9001 id=0A325DEE061FE2E1B25D956C39BC989EFADB73C0" +" ipv6=[2a03:6000:6f65:620::159]:9001" +/* nickname=blowfish */ /* extrainfo=0 */ /* ===== */ , -"178.17.174.162 orport=9001 id=E685733A4A2F184AB320846094651806A62627B5" -" ipv6=[2a00:1dc0:caff:db::e9d6]:9001" -/* nickname=Hydra76 */ +"82.64.238.84 orport=1930 id=A8503903F97FF27F5D1C3CA38817329F581925E6" +" ipv6=[2a01:e0a:5e4:1d0::acab]:1930" +/* nickname=TransRights */ /* extrainfo=0 */ /* ===== */ , -"107.189.8.230 orport=9001 id=B845B963455133613C9694FD46D0432945A00871" -/* nickname=TSFORT1 */ +"185.220.101.34 orport=10134 id=5B7EA9EDEE7C144ABC28EB86C52C1353E753A008" +" ipv6=[2a0b:f4c2:2::34]:10134" +/* nickname=ForPrivacyNET */ /* extrainfo=0 */ /* ===== */ , -"213.95.149.22 orport=9001 id=7574975BA76DE0726231FC916DD70B09B3824CE5" -" ipv6=[2001:780:107:b::85]:9001" -/* nickname=smurfix */ +"62.212.239.172 orport=9001 id=6C49AADEA57D39DC8FF7A77AA32F268FDC42E2A3" +/* nickname=uqtilephataz */ /* extrainfo=0 */ /* ===== */ , -"107.189.12.238 orport=9000 id=E84F41FA1D1FA303FD7A99A35E50ACEF4269868C" -" ipv6=[2605:6400:30:eff9:35d3:a7ce:167c:2141]:9000" -/* nickname=Quetzalcoatl */ +"101.174.45.97 orport=443 id=3B8DE9B7FAFCBD421F7635FA17085BCAB31271E2" +/* nickname=MallsBalls */ /* extrainfo=0 */ /* ===== */ , -"198.211.40.226 orport=9001 id=CB5700E1FB46FC98251DD8F0852B63A3B78DB830" -/* nickname=jaalkabil */ +"178.238.236.41 orport=1337 id=F66798B757FFCC02841E2937F8F59A6DFB33ED36" +" ipv6=[2a02:c205:2034:1631::1]:1337" +/* nickname=ebTorRelay */ /* extrainfo=0 */ /* ===== */ , -"157.230.112.120 orport=19001 id=6CDE3363F9F9AD5A6EA484DEFB58217CC9685E31" -" ipv6=[2a03:b0c0:3:e0::374:c001]:19001" -/* nickname=nsq */ +"185.220.101.59 orport=10059 id=6E16D38C5AC170E5608817B66625C5F34F21D96E" +" ipv6=[2a0b:f4c2:2::59]:10059" +/* nickname=ForPrivacyNET */ /* extrainfo=0 */ /* ===== */ , -"102.130.113.42 orport=9001 id=066FE3C4E07A18EA53B2828F753D3788D58D771D" -/* nickname=Psyduck */ +"23.129.64.219 orport=443 id=6214618C6C796ABC4F075116E650BB7A18A4FE81" +" ipv6=[2620:18c:0:192::219]:443" +/* nickname=EO */ /* extrainfo=0 */ /* ===== */ , -"165.227.174.150 orport=9001 id=FFB605C86D606991ADED7842269FA25A03B4A4D0" -/* nickname=Unnamed */ +"193.218.118.145 orport=9001 id=3AD29FE1241B73595F99BA2C6D830AF0B6874043" +" ipv6=[2a0f:e586:f:f::145]:9001" +/* nickname=Hydra18 */ /* extrainfo=0 */ /* ===== */ , -"45.151.167.10 orport=8443 id=A14D96E6C4C3A5AF3D7E57AC0A85AE82BDFB0F4B" -" ipv6=[2001:678:e3c::a]:8443" -/* nickname=artikel10ams01 */ +"185.244.164.51 orport=6080 id=17DB9140304F8CA5394100CBBA5EAC89557DE086" +/* nickname=lmtor2 */ /* extrainfo=0 */ /* ===== */ , -"194.32.107.220 orport=443 id=3CF935BB48C27EA0FEA4D6B9025A566364C38E92" -" ipv6=[2a03:94e0:ffff:194:32:107:0:220]:443" -/* nickname=FlashElk */ +"198.98.61.102 orport=9100 id=D68912EB5A673AEC17958D1E9CA3F0BBB094D1F3" +" ipv6=[2605:6400:10:7e5:1a31:fd1b:e17b:dec2]:9100" +/* nickname=Quetzalcoatl */ /* extrainfo=0 */ /* ===== */ , -"114.23.164.80 orport=9001 id=CB81BCFD44FC142616BB5983648BD8AF01930789" -/* nickname=ss23voyager */ +"178.32.220.61 orport=9001 id=79B39F8D53DACC9A63975FBC346301D8D0D36034" +/* nickname=grocock */ /* extrainfo=0 */ /* ===== */ , -"199.195.251.54 orport=9001 id=E09782C5F119131D5DF3C77B83E3214697AB6376" -/* nickname=dappertr */ +"75.11.56.228 orport=8443 id=1C92EA9DFA9E277FA6F023740BE30AD6736D026A" +/* nickname=HHx1 */ /* extrainfo=0 */ /* ===== */ , -"104.244.72.120 orport=9000 id=D11665375F333356E21A0FE2B6AAF7B91B9916DA" -" ipv6=[2605:6400:30:f772:ff34:e615:9cef:6f9a]:9000" -/* nickname=Quetzalcoatl */ +"89.161.26.78 orport=9030 id=35AA93C56EA5769219AC3809F9EC2586E139F973" +/* nickname=anus11 */ /* extrainfo=0 */ /* ===== */ , -"185.225.69.90 orport=443 id=8C612213C4B5C154FA90847F36FBF36DB78AB1AC" -/* nickname=davy */ +"213.226.71.164 orport=9001 id=CC2179A97D4EC55BFA56B27F2300C53162CEBB6E" +/* nickname=Assange019de */ /* extrainfo=0 */ /* ===== */ , -"185.220.102.251 orport=443 id=FDCFEA18CC64461455DE5EA3FC31834C6B42FEC7" -" ipv6=[2a0b:f4c1:2::251]:443" -/* nickname=Digitalcourage4ip4a */ +"167.114.144.76 orport=9001 id=8DBA2482DA4A285790C5D9262B501D4E7BE4A71A" +/* nickname=FreeMirrorOrgCA2 */ /* extrainfo=0 */ /* ===== */ , -"95.211.138.7 orport=9001 id=5CE3AD8AD04ADE66C0037A3CF5F7F7A40D48A20B" -/* nickname=polizeierziehung */ +"95.217.112.243 orport=443 id=3F43D0584A2613C9DB631382FF486DC6B95EA1C8" +" ipv6=[2a01:4f9:4a:2e4e::3]:443" +/* nickname=arbitraryTessa2 */ /* extrainfo=0 */ /* ===== */ , -"78.47.18.110 orport=80 id=F8D27B163B9247B232A2EEE68DD8B698695C28DE" -" ipv6=[2a01:4f8:120:4023::110]:80" -/* nickname=fluxe3 */ +"167.86.126.10 orport=443 id=54630AD43B3588B82B05A7223437CD0F57345CE1" +" ipv6=[2a02:c207:3005:4270::1]:443" +/* nickname=Zollkriminalamt2 */ /* extrainfo=0 */ /* ===== */ , -"144.217.95.12 orport=9001 id=8885EA6F74A694825B13B8A7080F6CF164DF74FB" -" ipv6=[2607:5300:201:3000::49be]:9001" -/* nickname=Unnamed */ +"178.170.10.39 orport=9001 id=02D634ADD9B41677D2834BF2C5203B6833DE7380" +" ipv6=[2a00:c70:130:1::529]:9001" +/* nickname=Fearless2 */ /* extrainfo=0 */ /* ===== */ , -"104.244.73.13 orport=9000 id=13FBC97516DC854399E70BC7CA9A4513FFD4F08C" -" ipv6=[2605:6400:30:f916:2d21:9c43:1935:81f7]:9000" -/* nickname=Quetzalcoatl */ +"139.99.192.138 orport=443 id=89D1CA6FDA85CE2183781052AB23A4FA237D9601" +/* nickname=FreeMirrorOrgAU */ /* extrainfo=0 */ /* ===== */ , -"176.10.99.208 orport=443 id=7E006A46A222CE42F84B4A175698B3B593A7B3B7" -/* nickname=AccessNow008 */ +"172.92.148.221 orport=9001 id=4E9796481C1E75F75D57E8C1FC8C8ED111433316" +/* nickname=brwyatt2 */ /* extrainfo=0 */ /* ===== */ , -"79.143.177.247 orport=9001 id=75093A959F344BC6B304EFFEDE1019F46548A3C2" -" ipv6=[2a02:c205:2023:7000::1]:9001" -/* nickname=O1G */ +"52.214.94.163 orport=9001 id=430672CD7162FA88AB49D891C38567799F346333" +/* nickname=Isidore */ /* extrainfo=0 */ /* ===== */ , -"163.172.76.56 orport=9001 id=03BD56B5072FB07D2B4D79E2FB04366D415EF3EC" -/* nickname=Totonicapanp6 */ +"209.121.40.97 orport=56392 id=6B309C69AC2C62E59801A9A196720B5ED4C182B1" +/* nickname=Tulip */ /* extrainfo=0 */ /* ===== */ , -"178.17.174.79 orport=9001 id=BBDE12C320FD1C3FFBEC15202F46D5620FC1444E" -" ipv6=[2a00:1dc0:cafe::a3f6:4721]:9001" -/* nickname=hanktor */ +"97.70.74.194 orport=500 id=29D497625B4E498AB93F2B2EE05A9749D5646EB8" +/* nickname=Pine64relay */ /* extrainfo=0 */ /* ===== */ , -"119.59.110.153 orport=80 id=5A6AD8BFBA74F646822996EC03FD3484353A41B3" -/* nickname=always2 */ +"149.56.185.56 orport=9001 id=A69221A7EC7498D2F88A0FB795261013FA36CAAE" +/* nickname=Truie */ /* extrainfo=0 */ /* ===== */ , -"192.160.102.164 orport=9001 id=823AA81E277F366505545522CEDC2F529CE4DC3F" -" ipv6=[2620:132:300c:c01d::4]:9002" -/* nickname=snowfall */ +"185.195.71.244 orport=443 id=0111BA9B604669E636FFD5B503F382A4B7AD6E80" +/* nickname=DigiGesTor1e1 */ /* extrainfo=0 */ /* ===== */ , -"185.22.174.119 orport=9001 id=D2169E641B2C10CACEA266D31370479200BB9AD7" -" ipv6=[2a00:1838:36:115::8a3d]:9001" -/* nickname=FlashBear */ +"88.214.35.37 orport=443 id=7B81C41D53CF1918F806DE9468B088661A270886" +/* nickname=vaN1ph07 */ /* extrainfo=0 */ /* ===== */ , -"152.70.64.30 orport=9001 id=8765C6AFF62C266A38D8C73A76604A5B1669FAA7" -" ipv6=[2603:c024:8001:dfea:2::]:9001" -/* nickname=plithismos */ +"194.88.143.66 orport=443 id=2096BCFEBB95A1134F39FCF8CEB076FF41A2B48B" +/* nickname=freja */ /* extrainfo=0 */ /* ===== */ , -"51.75.206.12 orport=9100 id=4837A6DFFC8E3681D70AD9E8D057C029093DA2F7" -" ipv6=[2001:41d0:305:2100::7cb4]:9100" -/* nickname=KherNl */ +"142.44.247.102 orport=443 id=36414078C521BA19168260F6DF23C97995976289" +/* nickname=yatr */ /* extrainfo=0 */ /* ===== */ , -"51.68.204.139 orport=9001 id=9AB93B5422149E5DFF4BE6A3814E2F6D9648DB6A" -" ipv6=[2001:41d0:800:158b::]:9001" -/* nickname=atomcats */ +"217.160.251.63 orport=29001 id=787768FEF9FBFE2D9B8E0214019A7F9960D39206" +/* nickname=viennaOnTheGo */ /* extrainfo=0 */ /* ===== */ , -"52.47.91.150 orport=9001 id=C6EF115D997317A32C784AC0F9944AE0581CA37E" -/* nickname=LSRodentNinjaRelay */ +"82.165.169.47 orport=9001 id=BA053C72E476C1EB9D05237D0D6A289C18FBE8E7" +/* nickname=straDEicebeer02b */ /* extrainfo=0 */ /* ===== */ , -"198.98.59.35 orport=9100 id=6E736FF4BA2845381A2FEE4DEE6CC565C5A7D781" -" ipv6=[2605:6400:10:542:d124:fa7a:9141:db6c]:9100" -/* nickname=Quetzalcoatl */ +"37.221.67.54 orport=443 id=6F72987187EB48223995BEFA721755932660D0D7" +" ipv6=[2001:678:6d4:6030::4dea:105]:443" +/* nickname=DTFNODE75 */ /* extrainfo=0 */ /* ===== */ , -"65.108.3.114 orport=1066 id=0C3D5E19E3C75B505C8ACD26F89DCA2DF970553E" -" ipv6=[2a01:4f9:6a:528d::a]:1066" -/* nickname=HORUS1 */ +"144.217.80.80 orport=443 id=A61B56A50D13DC29DBB23C6A033FA3F0C57420CF" +/* nickname=Elias */ /* extrainfo=0 */ /* ===== */ , -"173.212.239.78 orport=9201 id=3B3F451BD58F96DC0E8EB7D01F209FC8803C33DF" -" ipv6=[2a02:c207:2031:2233::1]:9201" -/* nickname=Assange009de2 */ +"198.244.209.242 orport=443 id=55FBCC5A40A8CED2159C3D2EF1CCF672A450FB22" +" ipv6=[2a0e:b107:777:9002::]:443" +/* nickname=Umi */ /* extrainfo=0 */ /* ===== */ , -"45.61.186.108 orport=9100 id=5756D9C403D89B79AFE69D50BB0682BA318319FB" -" ipv6=[2605:6400:40:fedc:e3d4:d2c1:5a61:7a97]:9100" -/* nickname=Quetzalcoatl */ +"23.129.64.136 orport=443 id=9425164E47E7B8F2AA66944FBDC38CFAFB3E0B7C" +" ipv6=[2620:18c:0:192::136]:443" +/* nickname=AutomaticArrestLine */ /* extrainfo=0 */ /* ===== */ , -"212.16.170.158 orport=443 id=3FEBFB6A491D30CACC2C2995EDB41717A6F94E95" -/* nickname=remedy */ +"23.175.145.46 orport=9001 id=86A133457F67AC12B9E0A674B7216467747C2A1C" +/* nickname=hopUSicebeer02 */ /* extrainfo=0 */ /* ===== */ , -"45.62.210.14 orport=9001 id=0FB5D0E2B14B19C9080A5BD38DEC649587FEC262" -/* nickname=nodv23 */ +"108.48.11.213 orport=9001 id=6FC8D3B152054906417CB1EE0642265747C7F689" +" ipv6=[2001:470:7:a0e::2]:9001" +/* nickname=jubei */ /* extrainfo=0 */ /* ===== */ , -"185.94.223.112 orport=9001 id=5645739E8EF72CA7D9EE1E12678B51A6FF8711C1" -/* nickname=5h4d0wNet */ +"193.189.100.200 orport=443 id=E5D7D35357E9C55B47E2ADDE73199153888BD4CB" +" ipv6=[2a0f:df00:0:255::200]:443" +/* nickname=TORKeFFORG7 */ /* extrainfo=0 */ /* ===== */ , -"151.115.41.209 orport=443 id=F6D34AA29FC551A5E1706D164B44809D6DC09240" -/* nickname=tirz */ +"185.220.102.254 orport=993 id=D13692D97236C0B8E8E19EA2DD952B5C4F9010BB" +" ipv6=[2a0b:f4c1:2::254]:993" +/* nickname=Digitalcourage4ip7b */ /* extrainfo=0 */ /* ===== */ , -"37.252.187.129 orport=9001 id=79B207AD51842FA215D956B9307B3D01CD347368" -" ipv6=[2a00:63c1:c:129::2]:9001" -/* nickname=1d1dchang3th3c0nf1g */ +"51.81.35.71 orport=443 id=20CD933EDC7260B19040475B24FD6B01B73E94BB" +" ipv6=[2604:2dc0:101:200::8c3]:443" +/* nickname=FissionEx6 */ /* extrainfo=0 */ /* ===== */ , -"51.158.148.230 orport=993 id=F9E32D4058F7F35E9BC4F1D8C3B2DAA0C4466660" -" ipv6=[2001:bc8:2dd2:2000::1]:993" -/* nickname=KagamineLenTwilight */ +"209.141.46.81 orport=9001 id=B3195576E1E6A8F342C312A2F0D1AFCAAF5A5EDF" +" ipv6=[2605:6400:20:5ef::]:9001" +/* nickname=plithismos */ /* extrainfo=0 */ /* ===== */ , -"199.249.230.158 orport=443 id=90BF7147B422A1BABEFA503656EBD17987424441" -" ipv6=[2620:7:6001::158]:80" -/* nickname=Quintex69 */ +"185.220.101.8 orport=8443 id=119D595A81A67D6C1E4D66B747717FD95225F9F8" +" ipv6=[2a0b:f4c2::8]:8443" +/* nickname=artikel10ber15 */ /* extrainfo=0 */ /* ===== */ , -"193.108.117.209 orport=443 id=7600680249A22080ECC6173FBBF64D6FCF330A61" -/* nickname=Ichotolot62 */ +"37.122.208.220 orport=9001 id=1F0CBF9F9DE1E372F969BA31D2D214F3CA5DDECD" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"94.26.73.162 orport=9001 id=215616527FB97ED5BE0BF8D2166BDB44EEB6A840" -/* nickname=Assange013us */ +"46.183.217.5 orport=443 id=A1F400765D2959DF5EB1AF7A9ECCCE589526D53B" +/* nickname=DTFNODE56 */ /* extrainfo=0 */ /* ===== */ , -"51.158.187.110 orport=443 id=04C3468BE24740347CBCC00534C940DBCBCABC82" -" ipv6=[2001:bc8:1824:421::1]:443" -/* nickname=aaron0x10c */ +"64.187.229.190 orport=8130 id=5B197E1E96647200E8726F90EE66DCC3906431AA" +/* nickname=gbtUSicebeer26b */ /* extrainfo=0 */ /* ===== */ , -"148.251.7.156 orport=9001 id=14308846BD3FF2FB32981F0F0A6BED40F0DC7731" -" ipv6=[2a01:4f8:201:61a6::2]:9001" -/* nickname=Dalite */ +"78.231.131.6 orport=9001 id=5C57C415874DFA2B5D622298585B68F58DA9AF81" +" ipv6=[2a01:e34:ee78:3060:230:48ff:fe81:f1c6]:9001" +/* nickname=LabraTor */ /* extrainfo=0 */ /* ===== */ , -"47.181.71.250 orport=443 id=D2368BAEDAC94AF05AB32EC391346A2968379C31" -/* nickname=Nickkkkk */ +"109.70.100.1 orport=443 id=530277866466A1425F43A73DBFCB5FC7410C9852" +" ipv6=[2a03:e600:100::1]:443" +/* nickname=spargel */ /* extrainfo=0 */ /* ===== */ , -"81.169.186.16 orport=29001 id=C265517257154ABD003861F2B914E350B011AAE2" -" ipv6=[2a01:238:429c:9600:40e6:e961:9cf7:31d1]:29001" -/* nickname=viennaOnTheRun */ +"37.191.199.95 orport=8443 id=79E48A3242DB3515700F8925FA8E6323F8D51D7D" +" ipv6=[2a00:c440:70:88b:216:3eff:fea6:13cc]:8443" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"146.185.189.197 orport=443 id=1944F3A473CB77B12BDB4E3D15963A24DF58E4E7" -/* nickname=Thrones */ +"89.163.128.29 orport=443 id=9F5068310818ED7C70B0BC4087AB55CB12CB4377" +" ipv6=[2001:4ba0:ffff:237::cafe]:443" +/* nickname=Doedel26 */ /* extrainfo=0 */ /* ===== */ , -"37.191.206.77 orport=8443 id=3FFDFB5A9A278C7C303745606DB5B68FC5B9FADF" -/* nickname=Unnamed */ +"198.98.57.24 orport=9001 id=D3BAB67D1079EA080B83F158D69CA270FA44486B" +" ipv6=[2605:6400:10:664::]:9001" +/* nickname=plithismos */ /* extrainfo=0 */ /* ===== */ , -"199.249.230.69 orport=443 id=C78AFFEEE320EA0F860961763E613FD2FAC855F5" -" ipv6=[2620:7:6001::ffff:c759:e645]:80" -/* nickname=Quintex46 */ +"173.67.45.94 orport=443 id=34133CC3192CF7538089B14511400DF21BA5A077" +/* nickname=Harambe */ /* extrainfo=0 */ /* ===== */ , -"95.211.205.138 orport=443 id=8B6B10A0AED89408E509D4422EC926C89C7933D0" -/* nickname=laurita */ +"87.140.73.81 orport=9001 id=CC977CAC791AC03BA742D61B9A4074E1A07509AC" +" ipv6=[2003:a:1109:5100:6a05:caff:fe12:9111]:9001" +/* nickname=KarlRanseieristTot */ /* extrainfo=0 */ /* ===== */ , -"104.57.231.26 orport=443 id=1F772DD93DA20A6745E334BAFFC7B9765876BB11" -/* nickname=ballers1 */ +"64.187.229.203 orport=7111 id=5FAE1B44FF752DF3EBF4BDD30FFADEAC8180CA78" +/* nickname=gbt2UDicebeer20b */ /* extrainfo=0 */ /* ===== */ , -"176.9.40.131 orport=443 id=1CD48F4ED0F1821FFBF1940802A13EEFD4C27502" -" ipv6=[2a01:4f8:150:518e::2]:443" -/* nickname=Piratenpartei00 */ +"199.249.230.151 orport=443 id=DE4F7A7B2DF8689B1F8D23ABA9E320D17638EAFD" +" ipv6=[2620:7:6001::151]:80" +/* nickname=Quintex62 */ /* extrainfo=0 */ /* ===== */ , -"90.202.106.141 orport=9001 id=863BD07491BD53C75C9BA186CD1DAD46F65B62BF" -/* nickname=satori */ +"108.61.211.153 orport=45531 id=2889D778367BFBE2D594E95524E3FB908B49AA02" +" ipv6=[2001:19f0:6c01:17a0:5400:3ff:fe55:94e4]:45531" +/* nickname=nognu */ /* extrainfo=0 */ /* ===== */ , -"162.250.191.15 orport=9001 id=1C3C4AEF036D1202EEC623228EBA5FB71931E2A3" -/* nickname=Assange020ca */ +"190.10.8.50 orport=443 id=BDC1174C794B556C47B7CCE61FFE65FB16727B6C" +/* nickname=cragg */ /* extrainfo=0 */ /* ===== */ , -"85.7.221.196 orport=9001 id=209B6DC8584D0DBC569DBA8DAE88B567A24C9467" -/* nickname=cercatrova */ +"185.244.164.106 orport=6080 id=6AD59F2DA87F44532D0B472407481AB4F9A9DC4B" +/* nickname=lmtor1 */ /* extrainfo=0 */ /* ===== */ , -"151.237.82.153 orport=9001 id=3864A437EDAEBF7859B9CC71348E1214BEE5BF62" -/* nickname=Unnamed */ +"185.119.117.140 orport=443 id=85DE3ED56989A4F54D50D82DD87A91DC2F30ECDF" +" ipv6=[2a00:63c1:13:140::2]:443" +/* nickname=letsdoitAT */ /* extrainfo=0 */ /* ===== */ , -"46.226.107.206 orport=10400 id=B0C17B973F4DBFE3662DC149BCCD8098666C298B" -" ipv6=[2001:4b98:dc0:43:f816:3eff:feed:683f]:10400" -/* nickname=periskop */ +"104.244.79.196 orport=9100 id=59A5BACFE32B6CA0F8F67B6621B3E8B89312CB7A" +" ipv6=[2605:6400:30:f568:5a52:a2bd:d2e1:c41a]:9100" +/* nickname=Quetzalcoatl */ /* extrainfo=0 */ /* ===== */ , -"87.15.33.124 orport=9001 id=1DC42BD783671E2879457224758837E67FC7E64C" -/* nickname=AnonimaCasalserugo */ +"85.234.184.211 orport=9001 id=55665B9DB5E8EAD9B15833AA3289A32B710C2AC8" +/* nickname=AU0 */ /* extrainfo=0 */ /* ===== */ , -"107.189.28.84 orport=9100 id=3863FD538658F6671631E78CEBB2693FB42DFA7D" -" ipv6=[2605:6400:30:f09e:c57f:a8fd:ce14:6f3b]:9100" -/* nickname=Quetzalcoatl */ +"23.129.64.214 orport=443 id=B3BEE41AC2562A0198F4B0DF206C41C85D2F59A7" +" ipv6=[2620:18c:0:192::214]:443" +/* nickname=EO */ /* extrainfo=0 */ /* ===== */ , -"2.56.98.121 orport=9005 id=7F844518369C1A572F3211F40D16F04D76F12878" -/* nickname=BienwaldKA05 */ +"136.243.92.194 orport=9001 id=6E1CEDC61F3707C549B88FB9380E4A750621FCB8" +" ipv6=[2a01:4f8:171:501::2]:9001" +/* nickname=bavariaboys */ /* extrainfo=0 */ /* ===== */ , -"82.221.128.191 orport=443 id=D5228FA5AA9FDB3825E6F199AFA9F9E6F9526A17" -/* nickname=SmokeAspectRangers */ +"104.244.74.121 orport=443 id=2C26CBACAB3B83142A54637CA30FF130C9BD331F" +" ipv6=[2605:6400:30:f6ed:c6a7:9997:d411:cb21]:443" +/* nickname=Quetzalcoatl */ /* extrainfo=0 */ /* ===== */ , -"185.25.50.199 orport=9000 id=1B9C26C1DAB190EAD3EBADB70914E0949ADC2588" -/* nickname=sqrrm */ +"94.23.29.204 orport=443 id=76543749510CD00CB16E1DD4940CAA8FAC727F58" +" ipv6=[2001:41d0:2:1ecc::]:443" +/* nickname=TORfrance */ /* extrainfo=0 */ /* ===== */ , -"5.2.70.141 orport=9001 id=8454D200E13A41A93F4B6523740EBC78505D0DF0" -" ipv6=[2a04:52c0:101:39e::]:9001" -/* nickname=Unnamed */ +"136.49.90.172 orport=8443 id=EC0ABA811E4EB33DAD8BC8B7037D862BF4F3AA28" +/* nickname=mortimerAtx */ /* extrainfo=0 */ /* ===== */ , -"45.33.123.222 orport=9001 id=37FCDCAFAAA17742BE58A36382A768E21B65B34C" -" ipv6=[2600:3c00::f03c:91ff:fe96:466c]:9001" -/* nickname=PictureEnchanter */ +"171.25.193.235 orport=80 id=5D8EEBCC17764DD213CD17B9A56844E41EEDA174" +" ipv6=[2001:67c:289c:2::235]:80" +/* nickname=DFRI12 */ /* extrainfo=0 */ /* ===== */ , -"130.225.244.90 orport=9001 id=AC7C0F9D57DADAD5D8F4568EE1543EF3E22A47CE" -" ipv6=[2001:878:346:1cf9:446a:c4eb:4548:7062]:9001" -/* nickname=dotsrcRelay2 */ +"78.47.169.189 orport=9001 id=586803B7EDF9E28D99B54097724287FB7109771A" +" ipv6=[2a01:4f8:c2c:d4e4::1]:9001" +/* nickname=guenthergraubein */ /* extrainfo=0 */ /* ===== */ , -"185.112.146.188 orport=9001 id=85D3D0C3D4699AFA897FE9DD9270BAACBBE3E3F1" -/* nickname=Unnamed */ +"149.28.247.216 orport=443 id=A8C82220A1196E52A2140CF4E89DF9F672FD9B03" +/* nickname=Raphanus */ /* extrainfo=0 */ /* ===== */ , -"65.50.203.5 orport=9001 id=BA348901BC6A0FE4DA86C53433414A3124934FCF" -/* nickname=UEUEUEU */ +"188.40.128.246 orport=9001 id=AD19490C7DBB26D3A68EFC824F67E69B0A96E601" +" ipv6=[2a01:4f8:221:1ac1:dead:beef:7005:9001]:9001" +/* nickname=sputnik */ /* extrainfo=0 */ /* ===== */ , -"109.201.133.100 orport=443 id=973607526BE9C8FDA03EBBAF527D67AE6FFD65DD" -/* nickname=eddy */ +"138.59.18.105 orport=88 id=2728AD264284944DBDDDFE0C6DBE656A85A93602" +/* nickname=TheMind */ /* extrainfo=0 */ /* ===== */ , -"85.241.106.203 orport=9001 id=2CD5474E33D12629156B92FBD61FAAB22D07B0F7" -/* nickname=onYourOwn */ +"136.243.149.82 orport=443 id=4856C97DC4F2271BC896DF9CABD217EE2D869D68" +" ipv6=[2a01:4f8:171:17d1::2]:443" +/* nickname=mordoc */ /* extrainfo=0 */ /* ===== */ , -"185.130.44.108 orport=443 id=D8A1F5A8EA1AF53E3414B9C48FE6B10C31ACC9B2" -" ipv6=[2a07:e01:2:13::2]:443" -/* nickname=privexse1exit */ +"37.221.66.248 orport=443 id=A28D6C0BAA9EEBD288713357C46CF6EF081EF673" +" ipv6=[2001:678:6d4:6020::4dea:105]:443" +/* nickname=DTFNODE64 */ /* extrainfo=0 */ /* ===== */ , -"193.218.118.158 orport=9001 id=0A56985BBDDB5FD1FAA8C9133C7115961AA6C370" -/* nickname=Privacy9001 */ +"82.64.243.112 orport=9001 id=225A8EA367DF3073433E0A845DDDA26D2357E4C6" +/* nickname=Manureva */ /* extrainfo=0 */ /* ===== */ , -"74.208.120.64 orport=443 id=46053D5D5916F20C333406F16911711AB55164C0" -/* nickname=Schlaraffenland */ +"5.196.73.184 orport=9001 id=D27D76E827E92997AC6BCB3E87FF6E61EC070994" +" ipv6=[2001:41d0:e:7b8::1]:9001" +/* nickname=roubaix */ /* extrainfo=0 */ /* ===== */ , -"198.98.60.97 orport=443 id=30C472441D910A8BCDA571F2637C80119E76D082" -" ipv6=[2605:6400:10:36b:1cb3:5586:cdb7:31ea]:443" -/* nickname=Quetzalcoatl */ +"185.22.173.180 orport=443 id=E6563BE3E45BDFE375DFE4476925CB9979251982" +" ipv6=[2a00:1838:36:20e::a752]:443" +/* nickname=bauruine */ /* extrainfo=0 */ /* ===== */ , -"185.220.100.249 orport=9100 id=887CAB501A9DB68A2C44EDF98BF50B0304EED8B6" -" ipv6=[2a0b:f4c0:16c:7::1]:9100" -/* nickname=niftykostchtchie */ +"202.65.65.253 orport=9001 id=B3C72F42D4C84012F981AC1AE0EED36237B352B9" +/* nickname=leaninglibertarian */ /* extrainfo=0 */ /* ===== */ , -"85.25.213.211 orport=80 id=CE47F0356D86CF0A1A2008D97623216D560FB0A8" -/* nickname=BeastieJoy61 */ +"66.165.241.228 orport=9001 id=1B963D0CB5CF120BF95CC211F9A577AB09620EFD" +/* nickname=kibble */ /* extrainfo=0 */ /* ===== */ , -"141.136.52.7 orport=9001 id=F85B74A470159AADD7D1C2398CE1813371BB6ACF" +"144.91.92.99 orport=9001 id=18ECBFC3A6834CB67414640C7F1E765E542CED2C" /* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"31.201.16.30 orport=443 id=E8ED405E47A477D92D9EFB201FADF28FF7FBAF5D" -/* nickname=Tortue */ +"50.65.174.148 orport=9001 id=E690103F3E388A3D9C125936F1AE5C64C1A26D51" +" ipv6=[2604:3d09:667f:e110::37f]:9001" +/* nickname=affinezeussv */ /* extrainfo=0 */ /* ===== */ , -"185.100.85.132 orport=443 id=5F875CFB7E2ED0D24E85A5A8B8904A3650AB1ED8" -/* nickname=vandergriff */ +"139.162.43.196 orport=443 id=408134B4EA3E0005A00ABE5F4819E75DCBD9BAB6" +" ipv6=[2400:8901::f03c:92ff:fe83:d27e]:443" +/* nickname=JAEN */ /* extrainfo=0 */ /* ===== */ , -"213.167.242.183 orport=9001 id=5E114AD608428C23B38CCC77DA22E4CD0C27F2CE" -" ipv6=[2001:4b98:dc2:55:216:3eff:fee8:6e97]:9001" -/* nickname=TitounNet */ +"104.244.74.28 orport=9001 id=2DB8A946826D0CB4F5C3A8264628DD0F16F6612D" +" ipv6=[2605:6400:30:f63d:1:ca11:911:1]:9001" +/* nickname=a9Exit */ /* extrainfo=0 */ /* ===== */ , -"199.249.230.156 orport=443 id=139C86C4C9BC94E89BAF79B15EBFDF9396DD5BB0" -" ipv6=[2620:7:6001::156]:80" -/* nickname=Quintex67 */ +"185.56.171.94 orport=9001 id=08394C4873C8A71BE9F53593F9B4AD694BFCDB90" +/* nickname=pengy */ /* extrainfo=0 */ /* ===== */ , -"91.143.88.2 orport=443 id=ED7F2BE5D2AC7FCF821A909E2486FFFB95D65272" -" ipv6=[2a02:180:6:1::2efd]:443" -/* nickname=Planetclaire63 */ +"5.2.78.126 orport=9001 id=E5DEA9F6570207DB9841CA04C240BCDCFEC3200D" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"77.123.155.45 orport=443 id=C0E6A667064385B9CB5A685CEB06B85EDDA6AA00" -/* nickname=FreedomForParrots2 */ +"79.160.242.140 orport=8379 id=F3BA9A70CC0AA14AD325ADEA11FAF438360BC98C" +/* nickname=SomeOrdinaryDude */ /* extrainfo=0 */ /* ===== */ , -"163.172.211.128 orport=443 id=241ED37B98E822F328B8D883EF8ECA3ADAB0EE12" -" ipv6=[2001:bc8:3fec:b00:b007::]:443" -/* nickname=Casper12 */ +"185.220.101.55 orport=10055 id=8CDF4A75AE7631A015E020CFF9DCE9536CE4C56B" +" ipv6=[2a0b:f4c2:2::55]:10055" +/* nickname=ForPrivacyNET */ /* extrainfo=0 */ /* ===== */ , -"107.189.30.230 orport=9001 id=B12536F2F1BBFE0B47FAAD0D5D05BFAEC6C2DE9F" -/* nickname=Hydra40 */ +"15.188.107.107 orport=9001 id=7E8597BB39D4C7EDC4ABF7538B6531655A2DA334" +/* nickname=Carrie */ /* extrainfo=0 */ /* ===== */ , -"185.203.116.252 orport=443 id=70D0893564051D9B6DF3B6E0519DDE6061D4895E" -" ipv6=[2a07:5741:0:f87::1]:443" -/* nickname=Valhalla */ +"185.170.114.243 orport=443 id=0AF39940AF968CFDA2BF7A601EF3304E06F44BB6" +" ipv6=[2a03:4000:15:a68:58bb:1aff:fe4e:768f]:443" +/* nickname=privacyexit */ /* extrainfo=0 */ /* ===== */ , -"42.191.94.69 orport=9001 id=B974F0C815C707F57F97CD159874770692BDA7EA" -/* nickname=chrRelay */ +"200.122.181.101 orport=443 id=3AF69B3ECCB000879CA1BCD0B36B619DBF712291" +/* nickname=Karai */ /* extrainfo=0 */ /* ===== */ , -"31.6.70.71 orport=9001 id=7F3D20E72A24ED2EBD92AA9C430B805BA389D02B" -" ipv6=[2a02:2430:3:2500::321e:67c4]:9001" -/* nickname=PolishTatraSheepdog */ +"108.197.232.51 orport=9001 id=2751A18D2966DB9A955FAE0BD7D7431B9E2FECA4" +/* nickname=bsdtorbrokencode */ /* extrainfo=0 */ /* ===== */ , -"199.249.230.112 orport=443 id=D25210CE07C49F2A4F2BC7A506EB0F5EA7F5E2C2" -" ipv6=[2620:7:6001::112]:80" -/* nickname=QuintexPhoulRules */ +"87.92.149.38 orport=9001 id=D0C5E8087436C99AE629326763405D22C2E5AB06" +/* nickname=xiellettalio */ /* extrainfo=0 */ /* ===== */ , -"147.92.88.67 orport=9001 id=901592FBE2A2335F5DC3A5434600B9A4F9D9C68E" -" ipv6=[2604:21c0:100:1::cafe]:9001" -/* nickname=SillyRelay */ +"185.173.235.70 orport=9001 id=94A30F2975B1F96C66CDFBF3C8E72C5C49325C57" +" ipv6=[2a0b:b7c4:1:141f::1]:9001" +/* nickname=avega */ /* extrainfo=0 */ /* ===== */ , -"198.251.68.144 orport=9001 id=83AEDBDB4BE3AD0ED91850BF1A521B843077759E" -/* nickname=focaltohr */ +"49.212.166.38 orport=9090 id=B20FA6C1B2B0F7548EC8434A46F3611700C057BD" +/* nickname=sakura */ /* extrainfo=0 */ /* ===== */ , -"54.36.120.156 orport=443 id=D0273C8566CC9AECE4C762376C9B066FE0F1DADD" -/* nickname=Kimchi */ +"51.15.232.19 orport=21 id=D49BB7514C78F68303D879AF7C3D5D67148F599B" +" ipv6=[2001:bc8:600:2340::1]:21" +/* nickname=Layer13 */ /* extrainfo=0 */ /* ===== */ , -"185.220.102.244 orport=443 id=1C7700A94DBBFECFA234C1ADD0D23FB87D1D7599" -" ipv6=[2a0b:f4c1:2::244]:443" -/* nickname=Digitalcourage4ipea */ +"109.70.100.15 orport=8080 id=74FAE33B21FFFFDC6FA11384664023AC8DFDDA4C" +" ipv6=[2a03:e600:100::15]:8080" +/* nickname=pfefferoni */ /* extrainfo=0 */ /* ===== */ , -"68.67.32.31 orport=9001 id=964B4E8A75263A69769541F2764563DABDD995D2" -/* nickname=MHcXthX9Eb34WYyEN7H */ +"81.17.18.58 orport=9001 id=273078B94467558842963CE0A02B2D058E2824E9" +/* nickname=FreeExit */ /* extrainfo=0 */ /* ===== */ , -"195.176.3.20 orport=8443 id=08CE3DBFDAA27DB6C044A677AF68D7235C2AFC85" -" ipv6=[2001:620:20d0::20]:8443" -/* nickname=DigiGesTor4e4 */ +"194.147.84.214 orport=443 id=CAB5C92B0E8B7EA3028E8BA1D16D358A04838A2D" +" ipv6=[2a00:b700:5::5:36d]:443" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"94.140.115.114 orport=443 id=879B036468D30AB1A2195F96D2C91F3CAA8D1DC2" -/* nickname=kbtr7lv */ +"51.68.231.5 orport=9001 id=BD4F563001A4611931BAD674C18C48357717C517" +/* nickname=CuriousLoophole */ /* extrainfo=0 */ /* ===== */ , -"23.129.64.140 orport=443 id=1228111A6D4AFC619ED3A70079A3A0B678476A43" -" ipv6=[2620:18c:0:192::140]:443" -/* nickname=BeGayDoCrimes */ +"185.220.101.7 orport=8443 id=26D384E24BBD1506616446622BE13232A649450F" +" ipv6=[2a0b:f4c2::7]:8443" +/* nickname=artikel10ber13 */ /* extrainfo=0 */ /* ===== */ , -"213.141.71.102 orport=4433 id=C15A8BE46A0025371C3C41247CF8911AD82A7A1C" -/* nickname=rainyValbo */ +"213.164.206.124 orport=9001 id=47FC19DBE2B42BB481C65191276670B3D589F075" +/* nickname=Hydra59 */ /* extrainfo=0 */ /* ===== */ , -"45.62.244.154 orport=9001 id=45F80CFCE0FF65EAE012049BAF66084F76E6D68B" -/* nickname=Machiavelli */ +"159.69.53.97 orport=443 id=790E15D541E063DA7B99678DFE339115DF6D44A3" +" ipv6=[2a01:4f8:c010:6501::]:443" +/* nickname=katakomben */ /* extrainfo=0 */ /* ===== */ , -"170.239.86.145 orport=443 id=5414065F98A160F630DAE0689973FC66D7EA62E9" -/* nickname=DTFNODE04 */ +"95.90.110.202 orport=9292 id=84FF05983C7537E8BCF6FDCF6D1688C46B684471" +/* nickname=Taeuschland */ /* extrainfo=0 */ /* ===== */ , -"37.9.231.195 orport=443 id=13F7EAE731CA4600951986921E08ECAB9B1D2AF6" -" ipv6=[2001:4b78:2006:ffc3::1]:443" -/* nickname=CanopoIT */ +"5.2.76.221 orport=443 id=66F741F53BE5124384BA77895156B6E9976D3FA4" +/* nickname=jehovax */ /* extrainfo=0 */ /* ===== */ , -"37.120.171.230 orport=9001 id=E8965A79FB2F335194141E8968755524840C44B6" -" ipv6=[2a03:4000:6:543f:78b2:4fff:fe7b:fb6a]:9001" -/* nickname=Piratenpartei08 */ +"72.23.65.169 orport=9001 id=903CA67D0DEB74CFBB01432840A26CB8C6C18FDF" +/* nickname=nottryingtobelame */ /* extrainfo=0 */ /* ===== */ , -"93.115.241.194 orport=443 id=B594EFDDBA2A8F12DEF827DFEE6992A6EB310B2A" -/* nickname=heaney */ +"51.15.80.14 orport=443 id=F98CE40031795D3704365019EA9F8AC56AE2994B" +" ipv6=[2001:bc8:1824:a06::1]:443" +/* nickname=torproxy01 */ /* extrainfo=0 */ /* ===== */ , -"185.239.222.243 orport=443 id=9B12C0D5A3435004F3DE149F83E752E44522E297" -" ipv6=[2a09:2681:101:9001::4]:443" -/* nickname=BM04 */ +"141.105.67.58 orport=443 id=B15C0071EAF508AAEE29DB9D07607C84AA2DDEB3" +/* nickname=cytherea */ /* extrainfo=0 */ /* ===== */ , -"31.164.176.95 orport=19927 id=D23F48B37526F904EECB3C8ED0747EF254C11BB4" -" ipv6=[2001:1711:fa4b:5f1:222:15ff:fe47:96b5]:19927" -/* nickname=tantricsnake */ +"90.186.18.185 orport=9001 id=5AEAA32FE69683F8B1271E4A331F16A21BF808B7" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"157.90.38.9 orport=443 id=42A51FFF7AB2A2F396CB924B56676F09BCB52245" -/* nickname=SoySauceR */ +"54.39.176.60 orport=443 id=22A6BE98D201B101C32661739967BF4DED12EF96" +" ipv6=[2607:5300:201:2100::b8]:443" +/* nickname=Seccom03 */ /* extrainfo=0 */ /* ===== */ , -"93.115.86.4 orport=443 id=CE863C22AD5ABBEAF606AE35A22781C409D895E5" -/* nickname=mj4 */ +"185.220.101.11 orport=9443 id=F82E2221121EB77A2DE3E6941027265027EA2378" +" ipv6=[2a0b:f4c2::11]:9443" +/* nickname=artikel10ber22 */ /* extrainfo=0 */ /* ===== */ , -"136.243.60.188 orport=9001 id=675CFAC38BE3C9A26C3A2DD7CBC0E616F68624CA" -" ipv6=[2a01:4f8:212:1b8b:3::8]:9001" -/* nickname=mullbinde5 */ +"104.244.75.33 orport=9001 id=A0A91967046F7A9BC3154C7B3C3FDE34C02B1017" +/* nickname=Hydra27 */ /* extrainfo=0 */ /* ===== */ , -"77.23.162.55 orport=9999 id=11C9529C9D0671545EAEF80DFE209AD977BCE908" -/* nickname=mekansm */ +"107.150.32.250 orport=8126 id=510A04CBB9C410FC57F585AB1D8DB45C0AD9CF1B" +/* nickname=who9USicebeer24 */ /* extrainfo=0 */ /* ===== */ , -"212.74.233.19 orport=9003 id=126E438B6921882FC17F1FC32AAC617300561938" -/* nickname=Bathtub */ +"188.68.36.209 orport=59001 id=FF87E49EF33078B04A5DE26AAE170DDF8BAE139F" +" ipv6=[2a03:4000:13:33::1]:59001" +/* nickname=MehlTor1 */ /* extrainfo=0 */ /* ===== */ , -"94.140.115.16 orport=443 id=A191F6309396DAD373FE7E4D1EF64B40F38A3637" -" ipv6=[2a02:7aa0:4000::29]:443" -/* nickname=rinderwahnRelay6L */ +"51.15.89.218 orport=443 id=F0F5074A6DADD3DC22E1FAA18FD6D89CBC52771A" +" ipv6=[2001:bc8:1830:2732::1]:443" +/* nickname=dc6jgk7c */ /* extrainfo=0 */ /* ===== */ , -"192.166.245.122 orport=443 id=F9AEA07ACE06E8E7D55E10FFBAE037E8C833FA93" -/* nickname=DTFNODE46 */ +"138.19.114.10 orport=9001 id=8AAEF20820F0F6BD145407FC9A9B0B5F612C7F9A" +/* nickname=FreeKowloon */ /* extrainfo=0 */ /* ===== */ , -"94.140.115.146 orport=9001 id=3B2EB73B3C61E9C302479B44D881E049049BF048" -/* nickname=Yanush3 */ +"109.70.100.70 orport=443 id=AF1E88B00582CD82EAB68C50211DEA47429D5E8B" +" ipv6=[2a03:e600:100::70]:443" +/* nickname=zebra */ /* extrainfo=0 */ /* ===== */ , -"37.187.9.31 orport=9001 id=1E26A119172E2EBFC299D5B2DE26B9652D3B7F34" -/* nickname=hxcsys */ +"193.183.98.224 orport=443 id=7CBC1D4754EF3A62C15CB48C08029C99009E2ECF" +" ipv6=[2a00:dcc0:dead:b2e0::1]:443" +/* nickname=Rigel2IT */ /* extrainfo=0 */ /* ===== */ , -"90.146.176.221 orport=9003 id=65F86FD8B92C3AC01887D86B2171E657D5C19F79" -/* nickname=eclipse03 */ +"45.58.156.78 orport=80 id=8F14815FB60BBB23E4BC46E162E37C1428EA1CCD" +/* nickname=mortals2 */ /* extrainfo=0 */ /* ===== */ , -"185.100.87.192 orport=9443 id=C962D865AE72B6F2EF08E77F3B15894B9539C2B6" -" ipv6=[2a06:1700:0:12::2]:9443" -/* nickname=artikel10buc04 */ +"109.70.100.18 orport=443 id=BE0AC3B6692085308CA766F9E03736D1CAAED6F3" +" ipv6=[2a03:e600:100::18]:443" +/* nickname=spinat */ /* extrainfo=0 */ /* ===== */ , -"130.180.111.194 orport=9010 id=3DF28C6A21F9F063FA1640F7367BE8143816D40F" -/* nickname=DerRaffke */ +"78.92.238.33 orport=9001 id=E094E77AFD40C080301951AF2CC297975B9358B7" +/* nickname=kishaver */ /* extrainfo=0 */ /* ===== */ , -"172.81.131.111 orport=9001 id=12836441FEAC9AEE13A144A64E51AB2AD98885B4" -/* nickname=TheEndOfTheInternet */ +"185.103.110.14 orport=9001 id=6D4D5193A0E290C027FE6B66731133F70946A155" +/* nickname=Assange026fi */ /* extrainfo=0 */ /* ===== */ , -"104.244.79.6 orport=9100 id=EF4CD1F369E8080DFB5A46187CFA9768D7857082" -" ipv6=[2605:6400:30:f920:4cbe:d6a6:82b1:4e22]:9100" -/* nickname=Quetzalcoatl */ +"64.187.229.204 orport=8162 id=19A293C92895A951DB61DF39EBD0DCD014155764" +/* nickname=gbt2USicebeer22 */ /* extrainfo=0 */ /* ===== */ , -"107.189.13.254 orport=9000 id=392BEFDCB026A568E077786E79FDE589A9C0E451" -" ipv6=[2605:6400:30:ee75:46fc:7871:dfeb:8ad3]:9000" +"104.244.75.88 orport=443 id=95B6BBE822D883AF830583808BDD4CF9C41C6B10" +" ipv6=[2605:6400:30:eded:dac1:93d6:e5b4:db9c]:443" /* nickname=Quetzalcoatl */ /* extrainfo=0 */ /* ===== */ , -"51.15.218.190 orport=443 id=8927AD37F39D10C3F4CFDD5213606E4881CCF6B0" -/* nickname=tirz */ +"51.75.65.102 orport=9001 id=05402AEC738554C5308FB07CA68961D5326D5D4A" +" ipv6=[2001:41d0:701:1100::291b]:9001" +/* nickname=gh0stx74 */ /* extrainfo=0 */ /* ===== */ , -"205.185.124.164 orport=9001 id=7B67A3AD2395536FD15CB97588A0BC1A015AC267" -/* nickname=stubbornoxen */ +"173.212.239.78 orport=9201 id=3B3F451BD58F96DC0E8EB7D01F209FC8803C33DF" +" ipv6=[2a02:c207:2031:2233::1]:9201" +/* nickname=Assange009de2 */ /* extrainfo=0 */ /* ===== */ , -"91.201.65.91 orport=443 id=57C6DF5B93E54EB9C8DB90029D9E9A1111BD34D2" -" ipv6=[2a06:f905:1:100::4e]:443" -/* nickname=rinderwahnRelay12L */ +"139.99.238.17 orport=8443 id=84899424AEEB06870BBCD89873BD2824FACB5230" +" ipv6=[2402:1f00:8100:400::3a8]:8443" +/* nickname=rinderwahnR33L2 */ /* extrainfo=0 */ /* ===== */ , -"195.154.164.243 orport=443 id=AC66FFA4AB35A59EBBF5BF4C70008BF24D8A7A5C" -" ipv6=[2001:bc8:399f:f000::1]:993" -/* nickname=torpidsFRonline3 */ +"185.220.103.118 orport=443 id=4679F867618E6666762DD586AF3F098CECD01C0F" +/* nickname=psychopomp2 */ /* extrainfo=0 */ /* ===== */ , -"142.252.252.254 orport=8081 id=7488F5265C5E331EB4F1CE5D750685492627464F" -/* nickname=Altrosky4 */ +"45.79.218.205 orport=9001 id=9AED373BD9415E83BDCFC735FCA288178829459A" +" ipv6=[2600:3c02::f03c:91ff:fed5:bb1f]:9001" +/* nickname=Torrible */ /* extrainfo=0 */ /* ===== */ , -"95.217.248.169 orport=9001 id=F08A3744CA6568ED28545C2B7C1BE7D8BA27CBDE" -" ipv6=[2a01:4f9:4a:f230::10:4]:9001" -/* nickname=winR */ +"37.187.104.111 orport=9001 id=90C2000180D9588C7641E865A448ABC14F40547F" +" ipv6=[2001:41d0:a:386f::1]:9001" +/* nickname=AkashaShrooms */ /* extrainfo=0 */ /* ===== */ , -"163.44.173.37 orport=443 id=ED7FDF68D504AEED4E28C6396B3E4A4ED04406B9" -/* nickname=Unnamed */ +"135.125.55.228 orport=443 id=B737FB6CBF7E514DD8D8B432A1497B9DBD0C45DA" +/* nickname=freedomRelay */ /* extrainfo=0 */ /* ===== */ , -"158.255.1.112 orport=443 id=76B4FEDD0696D924A407CFAB50B6E574B28CCDCA" -/* nickname=vladimir */ +"193.56.240.72 orport=443 id=8F13803626F39053931CA7F7F94778C0BF88A9F8" +/* nickname=tor6 */ /* extrainfo=0 */ /* ===== */ , -"102.130.119.48 orport=9001 id=A636F3A27D9C10713C7A77ED00183DE8727E3D84" -/* nickname=axeTorA */ +"185.100.87.253 orport=9443 id=6980C6EDA41DB872CCACBDDB22DFACC6642746E7" +" ipv6=[2a06:1700:0:15::2]:9443" +/* nickname=artikel10buc08 */ /* extrainfo=0 */ /* ===== */ , -"109.70.100.11 orport=443 id=96E095D5CDBFC3988DEB708EC155346472402C32" -" ipv6=[2a03:e600:100::11]:443" -/* nickname=karfiol */ +"83.229.73.246 orport=443 id=19C4D1C77641600753E93F760909FC95BFBA94F3" +/* nickname=kt */ /* extrainfo=0 */ /* ===== */ , -"85.195.255.85 orport=9001 id=A3AFBDEE30238E44899C9F8B7666D12B09C8EE32" -/* nickname=isthisthereallife */ +"3.121.167.65 orport=9001 id=8F5ACB40B42628045E6D8CA4CB103CDAEB112A3E" +/* nickname=Martell */ /* extrainfo=0 */ /* ===== */ , -"116.203.50.182 orport=8080 id=00E1649E69FF91D7F01E74A5E62EF14F7D9915E4" -" ipv6=[2a01:4f8:1c1c:b16b::1]:8080" -/* nickname=dragonhoard */ +"185.129.62.2 orport=9001 id=07ACFB0801E4F74F5610F870B5FCBB5539DBCBD1" +" ipv6=[2a06:d380:0:103::2]:9001" +/* nickname=kramse02 */ /* extrainfo=0 */ /* ===== */ , -"213.164.204.165 orport=9001 id=43ED841926B5DA9487032D789A31B5E74A7525E2" -/* nickname=Hydra14 */ +"70.35.196.166 orport=9001 id=5BD7616D1C63E8AEEFACF1EB07BA30845599FD2E" +/* nickname=3skiptownnight3 */ /* extrainfo=0 */ /* ===== */ , -"213.164.204.152 orport=9001 id=E1D2328D0DB2A06EE85ABD9D8D75CC5DBDDFDA5C" -/* nickname=Hydra8 */ +"188.68.53.92 orport=80 id=6B549CBB615423CD57ECEF0EF4A72054FE088C24" +" ipv6=[2a03:4000:6:e34b:7cf3:194b:368:22d]:80" +/* nickname=schattenbahnhof1 */ /* extrainfo=0 */ /* ===== */ , -"45.61.186.166 orport=9000 id=B0CF3131A8097FFAF9E9B54566F12A2C6E560C48" -" ipv6=[2605:6400:40:feca:bc44:119e:7d58:8792]:9000" -/* nickname=Quetzalcoatl */ +"144.76.37.242 orport=8443 id=645DE9BF7A2E858F8A6B45F1F530371176D0238A" +/* nickname=coco */ /* extrainfo=0 */ /* ===== */ , -"195.176.3.23 orport=443 id=BCF55F865EE6EF17E25EFEAF851BC429F190B85D" -" ipv6=[2001:620:20d0::23]:443" -/* nickname=DigiGesTor5e1 */ +"76.14.124.111 orport=9002 id=7C82F364ADAFA1A5036996675BC0B15D65CB7867" +/* nickname=mutualaid */ /* extrainfo=0 */ /* ===== */ , -"194.182.179.34 orport=443 id=EFE89ECF4EE11613A19248777EBBA28719BF5FF7" -" ipv6=[2a04:c47:e00:7cdf:4b9:a0ff:fe00:2f0]:443" -/* nickname=Slavyanka */ +"51.15.76.60 orport=8443 id=83BE87E4239F75A6E32E191205366E04B175193F" +" ipv6=[2a0e:8f02:213d:1205:5942:a4fd:9faf:542a]:8443" +/* nickname=TorillaTavataan4 */ /* extrainfo=0 */ /* ===== */ , -"138.59.18.106 orport=443 id=0BADD9510440C9BF3A728F2CB630836FF98142B2" -/* nickname=Albis */ +"136.243.3.194 orport=8000 id=03D1EF3EF2BE5145150C58ACC72519DD860E61BA" +" ipv6=[2a01:4f8:211:1d41::2]:8000" +/* nickname=blackfox */ /* extrainfo=0 */ /* ===== */ , -"148.251.66.75 orport=9001 id=4BC6B5DA381A0044E81CA7B6170D46588C060ADA" -/* nickname=ChlewigenRelay */ +"50.7.186.38 orport=443 id=7FF94320963B5CDAF9A072CE9BEE9B4F1F2B383C" +/* nickname=lebreton */ /* extrainfo=0 */ /* ===== */ , -"37.157.254.114 orport=443 id=18671DE5092C67883BFB2450C3267B92618BEC66" -" ipv6=[2001:4ba0:ffff:1ce::3]:443" -/* nickname=ForPrivacyNET */ +"192.26.105.195 orport=443 id=8EC00D79203162101A6B4839DC746205DE69A69E" +" ipv6=[2a0e:8f02:213d:5432:4232:14fd:aa21:52ad]:443" +/* nickname=TorillaTavataan1 */ /* extrainfo=0 */ /* ===== */ , -"72.89.32.196 orport=9001 id=67F5AC35DBA20D22A0178BFB6F4AC076C3B16829" -/* nickname=hubble */ +"199.249.230.179 orport=443 id=3A1BC65DF03ECD50FDF7CFF9C5A4E049FCB9C1AF" +" ipv6=[2620:7:6001::179]:80" +/* nickname=Quintex90 */ /* extrainfo=0 */ /* ===== */ , -"185.220.101.17 orport=9443 id=6E3DD22CF40499F67CCADC5C024397748C0E63B4" -" ipv6=[2a0b:f4c2::17]:9443" -/* nickname=artikel10ber34 */ +"185.217.95.25 orport=443 id=A1FC8E424167AD70B6FA4953D9348BCD82CEB788" +/* nickname=Galactica */ /* extrainfo=0 */ /* ===== */ , -"94.75.194.221 orport=9001 id=38F21DEE29E40DCDF9460A80662B7723562CA008" -/* nickname=trabajando */ +"185.191.204.254 orport=443 id=AF4997738E0CFC014CD04FB09A670D2C5F1E79A4" +/* nickname=DuckYou */ /* extrainfo=0 */ /* ===== */ , -"78.47.14.99 orport=9001 id=A1688972E4AA4F24C4C9AA2372CD387B82834C40" -" ipv6=[2a01:4f8:c17:13aa::1]:9001" -/* nickname=whatnick2 */ +"185.220.101.9 orport=9443 id=D2F15E74954597E41E155449A0CE9B4DB892DFFD" +" ipv6=[2a0b:f4c2::9]:9443" +/* nickname=artikel10ber18 */ /* extrainfo=0 */ /* ===== */ , -"89.163.164.202 orport=443 id=FF9FC6D130FA26AE3AE8B23688691DC419F0F22E" -" ipv6=[2001:4ba0:cafe:12a1::]:443" -/* nickname=rinderwahnRelay3L */ +"162.247.74.201 orport=443 id=0011BD2485AD45D984EC4159C88FC066E5E3300E" +/* nickname=CalyxInstitute14 */ /* extrainfo=0 */ /* ===== */ , -"94.100.6.30 orport=9001 id=669102E6FA8E116AC05FE823B0634B44499944E3" -/* nickname=Quiv */ +"153.126.128.94 orport=9001 id=CB040846C647F338EE1950C6CC03267102088C50" +" ipv6=[2401:2500:102:3000:153:126:128:94]:9001" +/* nickname=torrelay0001 */ /* extrainfo=0 */ /* ===== */ , -"82.48.198.112 orport=9443 id=94F367A130296C9EB92BE32E25AAEB7F227DE0D6" -/* nickname=FreeZion */ +"54.36.166.86 orport=9001 id=99339F3E68BCCC1391BF14C821D80766FE0C5956" +/* nickname=Unnamed */ /* extrainfo=0 */ /* ===== */ , -"140.78.100.41 orport=8443 id=C9525872E3AA926402D8998085A409C7BBDFAE59" -/* nickname=INSRelay41at8443 */ +"116.203.140.74 orport=9001 id=BC7ACFAC04854C77167C7D66B7E471314ED8C410" +" ipv6=[2a01:4f8:c0c:e646::1]:9001" +/* nickname=YagaTorRelay */ /* extrainfo=0 */ /* ===== */ , -"185.82.219.109 orport=443 id=2B34099ED2BC598C4745C96C873FD73A445646BD" -/* nickname=RunningOnFumes4 */ +"3.225.115.238 orport=9001 id=905EB77A63857E6EFCF04D734A547B0995D85C3B" +/* nickname=LeoR */ /* extrainfo=0 */ /* ===== */ , -"159.89.87.126 orport=143 id=9D07DFA6472B80277798D73234348CEF02F2E7D5" -/* nickname=incircuitryrelay */ +"51.81.93.109 orport=443 id=F5612A75455800DCD427C8FD919EF5CCE1D51952" +/* nickname=Sol */ /* extrainfo=0 */ /* ===== */ , -"45.61.185.114 orport=9100 id=5E4EBE4078DFBE6CA4648C4D32EEBFE6D822CACB" -" ipv6=[2605:6400:40:fec5:3c19:b3c1:b8a1:1f27]:9100" -/* nickname=Quetzalcoatl */ +"140.78.100.37 orport=8443 id=CFB535715442BC0E9F6AF224A794BBFA02D0B343" +/* nickname=INSRelay37at8443 */ /* extrainfo=0 */ /* ===== */ , -"51.15.197.24 orport=443 id=FBCD904030EA49971E4766A9009DEE96F2FEC4F4" -" ipv6=[2001:bc8:630:299::1]:443" -/* nickname=charlie */ +"172.107.241.110 orport=9001 id=518EF153BB7676943D3DFBCA469CF5B9AF5C5F3C" +/* nickname=twincaravan5 */ /* extrainfo=0 */ /* ===== */ , -"205.185.115.163 orport=443 id=ABCE9719136F55FB44608274DA2CA9F64237AD27" -/* nickname=Unnamed */ +"96.253.78.108 orport=443 id=924B24AFA7F075D059E8EEB284CC400B33D3D036" +/* nickname=NSDFreedom */ /* extrainfo=0 */ /* ===== */ , -"178.170.42.112 orport=9001 id=6CF8862649ED845917BF35EA4F7986F782CCFFCE" -" ipv6=[2a00:c70:1:178:170:42:112:8]:9001" -/* nickname=mullbinde7 */ +"51.81.93.37 orport=443 id=889944F540C155E7E32C909B9E1424677689AD4D" +/* nickname=Mowgli */ /* extrainfo=0 */ /* ===== */ , -"176.10.99.207 orport=443 id=0516085D6CAC40ED4CDCEFDFC5CCF6B00DE61DED" -/* nickname=AccessNow007 */ +"87.120.254.105 orport=443 id=63E094A5447799673C1141134058F948074EAA63" +/* nickname=ESCAPE */ /* extrainfo=0 */ /* ===== */ , -"198.98.59.35 orport=9000 id=9376A43695CBB66C256DCC87932EE885EA9AF5EC" -" ipv6=[2605:6400:10:542:d124:fa7a:9141:db6c]:9000" -/* nickname=Quetzalcoatl */ +"92.246.84.133 orport=443 id=780D50DCCD7F3C831E5E750F41866497C1263F76" +" ipv6=[2a0d:c2c0:1:4::2]:443" +/* nickname=artikel5ev12 */ /* extrainfo=0 */ /* ===== */ , diff --git a/src/app/config/or_options_st.h b/src/app/config/or_options_st.h index 151b77c457..290a2bb9b4 100644 --- a/src/app/config/or_options_st.h +++ b/src/app/config/or_options_st.h @@ -293,6 +293,13 @@ struct or_options_t { * disabled. */ int CircuitPadding; + /** Boolean: if true, then this client will discard cached bridge + * descriptors on a setconf or other config change that impacts guards + * or bridges (see options_transition_affects_guards() for exactly which + * config changes trigger it). Useful for tools that test bridge + * reachability by fetching fresh descriptors. */ + int ReconfigDropsBridgeDescs; + /** Boolean: if true, then this client will only use circuit padding * algorithms that are known to use a low amount of overhead. If false, * we will use all available circuit padding algorithms. @@ -492,6 +499,9 @@ struct or_options_t { struct smartlist_t *NodeFamilySets; struct config_line_t *AuthDirBadExit; /**< Address policy for descriptors to * mark as bad exits. */ + /** Address policy for descriptors to mark as only suitable for the + * middle position in circuits. */ + struct config_line_t *AuthDirMiddleOnly; struct config_line_t *AuthDirReject; /**< Address policy for descriptors to * reject. */ struct config_line_t *AuthDirInvalid; /**< Address policy for descriptors to @@ -505,6 +515,7 @@ struct or_options_t { */ struct smartlist_t *AuthDirBadExitCCs; struct smartlist_t *AuthDirInvalidCCs; + struct smartlist_t *AuthDirMiddleOnlyCCs; struct smartlist_t *AuthDirRejectCCs; /**@}*/ @@ -587,6 +598,15 @@ struct or_options_t { * If 0, use value from NumEntryGuards. */ int NumPrimaryGuards; /**< How many primary guards do we want? */ + /** Boolean: Switch to toggle the vanguards-lite subsystem */ + int VanguardsLiteEnabled; + + /** Boolean: Switch to override consensus to enable congestion control */ + int AlwaysCongestionControl; + + /** Boolean: Switch to specify this is an sbws measurement exit */ + int SbwsExit; + int RephistTrackTime; /**< How many seconds do we keep rephist info? */ /** Should we always fetch our dir info on the mirror schedule (which * means directly from the authorities) no matter our other config? */ diff --git a/src/app/include.am b/src/app/include.am index 2e2180deca..5494d904a3 100644 --- a/src/app/include.am +++ b/src/app/include.am @@ -17,7 +17,6 @@ src_app_tor_SOURCES = src/app/main/tor_main.c src_app_tor_LDFLAGS = @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) \ @TOR_LDFLAGS_libevent@ @TOR_STATIC_LDFLAGS@ src_app_tor_LDADD = libtor.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ $(TOR_LIBS_CRYPTLIB) \ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @CURVE25519_LIBS@ @TOR_SYSTEMD_LIBS@ \ diff --git a/src/app/main/main.c b/src/app/main/main.c index bc9d535a07..b73d722963 100644 --- a/src/app/main/main.c +++ b/src/app/main/main.c @@ -27,6 +27,8 @@ #include "core/or/channel.h" #include "core/or/channelpadding.h" #include "core/or/circuitpadding.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_flow.h" #include "core/or/circuitlist.h" #include "core/or/command.h" #include "core/or/connection_or.h" @@ -100,12 +102,6 @@ #include <systemd/sd-daemon.h> #endif /* defined(HAVE_SYSTEMD) */ -#ifdef HAVE_RUST -// helper function defined in Rust to output a log message indicating if tor is -// running with Rust enabled. See src/rust/tor_util -void rust_log_welcome_string(void); -#endif - /********* PROTOTYPES **********/ static void dumpmemusage(int severity); @@ -609,10 +605,6 @@ tor_init(int argc, char *argv[]) tor_compress_log_init_warnings(); } -#ifdef HAVE_RUST - rust_log_welcome_string(); -#endif /* defined(HAVE_RUST) */ - /* Warn _if_ the tracing subsystem is built in. */ tracing_log_warning(); @@ -630,6 +622,8 @@ tor_init(int argc, char *argv[]) * until we get a consensus */ channelpadding_new_consensus_params(NULL); circpad_new_consensus_params(NULL); + congestion_control_new_consensus_params(NULL); + flow_control_new_consensus_params(NULL); /* Initialize circuit padding to defaults+torrc until we get a consensus */ circpad_machines_init(); @@ -1343,6 +1337,13 @@ tor_run_main(const tor_main_configuration_t *tor_cfg) pubsub_connect(); if (get_options()->Sandbox && get_options()->command == CMD_RUN_TOR) { +#ifdef ENABLE_FRAGILE_HARDENING + log_warn(LD_CONFIG, "Sandbox is enabled but this Tor was built using " + "fragile compiler hardening. The sandbox may be unable to filter " + "requests to open files and directories and its overall " + "effectiveness will be reduced."); +#endif + sandbox_cfg_t* cfg = sandbox_init_filter(); if (sandbox_init(cfg)) { diff --git a/src/config/geoip b/src/config/geoip index 6174d36e03..7be97b9e68 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -7,7 +7,7 @@ # # Location Database Export # -# Generated: Fri, 04 Feb 2022 05:51:31 GMT +# Generated: Fri, 25 Mar 2022 06:19:41 GMT # Vendor: IPFire Project # License: CC BY-SA 4.0 # @@ -112,7 +112,9 @@ 33554432,34603007,FR 34603008,34604543,EU 34604544,34605055,DE -34605056,34612223,EU +34605056,34608127,EU +34608128,34608639,RU +34608640,34612223,EU 34612224,34612735,IL 34612736,34620415,EU 34620416,34620927,SE @@ -131,7 +133,9 @@ 34659328,34660351,GR 34660352,34673663,EU 34673664,34674687,DE -34674688,34733055,EU +34674688,34705407,EU +34705408,34706175,RU +34706176,34733055,EU 34733056,34734079,DE 34734080,34754559,EU 34754560,34758655,GR @@ -139,7 +143,9 @@ 34796032,34796543,NL 34796544,34803711,EU 34803712,34807807,IT -34807808,34861055,EU +34807808,34845951,EU +34845952,34846207,RU +34846208,34861055,EU 34861056,34865151,DE 34865152,34866175,EU 34866176,34867199,IT @@ -262,9 +268,7 @@ 37268480,37270527,US 37270528,37271551,RU 37271552,37272575,LT -37272576,37273087,GB -37273088,37273343,US -37273344,37273599,GB +37272576,37273599,US 37273600,37274623,NL 37274624,37276671,GB 37276672,37277695,AM @@ -276,16 +280,15 @@ 37281024,37281279,RU 37281280,37281791,US 37281792,37282815,NL -37282816,37284863,US +37282816,37283839,RU +37283840,37284863,TR 37284864,37285887,DE 37285888,37286911,RU 37286912,37287423,DE 37287424,37288959,US 37288960,37289215,DE 37289216,37289983,US -37289984,37290239,FI -37290240,37290495,KZ -37290496,37291007,FI +37289984,37291007,FI 37291008,37292031,ES 37292032,37293055,PL 37293056,37294079,NL @@ -323,7 +326,8 @@ 37318656,37319679,UA 37319680,37320703,AP 37320704,37320959,EU -37320960,37321471,NL +37320960,37321215,GB +37321216,37321471,NL 37321472,37321727,GB 37321728,37322751,HK 37322752,37323775,ES @@ -384,11 +388,9 @@ 37367040,37367295,GB 37367296,37367551,DK 37367552,37367807,GB -37367808,37368063,HR -37368064,37368831,SI +37367808,37368831,HR 37368832,37369855,DE -37369856,37370367,FR -37370368,37370879,NL +37369856,37370879,NL 37370880,37371903,AT 37371904,37372927,MD 37372928,37373951,RU @@ -430,7 +432,7 @@ 37402624,37403647,IT 37403648,37404671,ES 37404672,37405695,NL -37405696,37407743,US +37405696,37407743,DE 37407744,37408767,UA 37408768,37409791,IT 37409792,37410815,NL @@ -463,7 +465,9 @@ 37434368,37434879,JO 37434880,37435391,SA 37435392,37436415,DE -37436416,37437439,US +37436416,37436671,US +37436672,37436927,GB +37436928,37437439,US 37437440,37438463,BE 37438464,37440511,FR 37440512,37442559,RU @@ -631,7 +635,10 @@ 84416512,84417023,US 84417024,84417535,SG 84417536,84418559,RU -84418560,84419583,LU +84418560,84418815,NL +84418816,84419071,GB +84419072,84419327,NL +84419328,84419583,LU 84419584,84420607,RU 84420608,84420863,NL 84420864,84421119,US @@ -691,7 +698,7 @@ 84594688,84598783,DE 84598784,84600831,IQ 84600832,84602879,GB -84602880,84606975,AZ +84602880,84606975,NL 84606976,84609023,AT 84609024,84610047,GB 84610048,84610303,ZM @@ -795,9 +802,11 @@ 86160384,86160895,NL 86160896,86161407,UA 86161408,86163455,IT -86163456,86165503,GB +86163456,86165503,LT 86165504,86166527,DE -86166528,86167551,AP +86166528,86167039,LT +86167040,86167295,UA +86167296,86167551,LT 86167552,86171647,IR 86171648,86173695,DE 86173696,86175743,NL @@ -885,7 +894,7 @@ 86824960,86827007,LV 86827008,86831103,GB 86831104,86833151,FI -86833152,86833407,CY +86833152,86833407,BR 86833408,86833663,SG 86833664,86834175,NL 86834176,86834431,UA @@ -1004,7 +1013,8 @@ 87762944,87763967,KZ 87763968,87766527,RU 87766528,87766783,UA -87766784,87768063,RU +87766784,87767039,CZ +87767040,87768063,RU 87768064,87772671,ES 87772672,87772927,CZ 87772928,87773183,IT @@ -1032,7 +1042,8 @@ 87804928,87805951,RU 87805952,87806975,KZ 87806976,87807999,ES -87808000,87818239,CZ +87808000,87809023,RU +87809024,87818239,CZ 87818240,87883775,PL 87883776,87885823,IT 87885824,87889919,RU @@ -1159,9 +1170,7 @@ 89352192,89354239,IT 89354240,89356287,AE 89356288,89358335,IT -89358336,89358847,DE -89358848,89359103,AT -89359104,89370111,DE +89358336,89370111,DE 89370112,89370623,RU 89370624,89374719,DE 89374720,89382911,GB @@ -1238,8 +1247,7 @@ 90707968,90710015,IT 90710016,90718207,UA 90718208,90720255,EU -90720256,90721023,US -90721024,90721279,JP +90720256,90721279,RU 90721280,90722303,US 90722304,90724351,FI 90724352,90726399,CH @@ -1424,9 +1432,7 @@ 93753344,93755391,IE 93755392,93756415,GB 93756416,93757439,FR -93757440,93764095,GB -93764096,93764351,KZ -93764352,93765631,GB +93757440,93765631,GB 93765632,93782015,SE 93782016,93789439,GB 93789440,93789695,IT @@ -1485,9 +1491,10 @@ 94023424,94023935,ES 94023936,94024447,DE 94024448,94024703,ES -94024704,94024959,RO +94024704,94024959,DE 94024960,94025215,EE -94025216,94025983,GB +94025216,94025471,SE +94025472,94025983,GB 94025984,94026239,ES 94026240,94026495,RO 94026496,94026751,ES @@ -1640,49 +1647,11 @@ 95374848,95375359,LY 95375360,95377407,NL 95377408,95387647,RU -95387648,95387903,GB -95387904,95388927,DE -95388928,95389183,AU -95389184,95389695,DE -95389696,95389951,GB -95389952,95390207,US -95390208,95391231,DE -95391232,95391487,AE -95391488,95391999,RU -95392000,95393791,DE -95393792,95394047,GB -95394048,95395327,AU -95395328,95395583,DE -95395584,95395839,GB -95395840,95398399,DE -95398400,95398655,GB -95398656,95400447,DE -95400448,95400703,GB -95400704,95401471,DE -95401472,95401727,GB -95401728,95403519,DE -95403520,95403775,GB -95403776,95404799,DE -95404800,95405055,GB -95405056,95405567,DE -95405568,95405823,GB -95405824,95406335,DE -95406336,95407359,GB -95407360,95407871,US -95407872,95408639,DE -95408640,95409151,GB -95409152,95409663,DE -95409664,95409919,US -95409920,95410175,DE -95410176,95410431,US -95410432,95410687,DE -95410688,95410943,GB -95410944,95416319,DE -95416320,95416831,US -95416832,95417087,GB -95417088,95420415,DE +95387648,95420415,DE 95420416,95551487,TR -95551488,95555583,AZ +95551488,95552511,AZ +95552512,95553535,NL +95553536,95555583,AZ 95555584,95556095,NL 95556096,95556607,AE 95556608,95556863,NL @@ -1729,9 +1698,8 @@ 95695872,95696895,US 95696896,95697919,FR 95697920,95698175,GB -95698176,95698431,BR -95698432,95698687,DE -95698688,95698943,FR +95698176,95698687,DE +95698688,95698943,AP 95698944,95699967,DE 95699968,95700991,IT 95700992,95702015,FI @@ -1742,12 +1710,14 @@ 95704064,95705087,NL 95705088,95706111,DE 95706112,95707135,RU -95707136,95708159,AP +95707136,95707647,HK +95707648,95707903,AP +95707904,95708159,HK 95708160,95708415,UA 95708416,95709183,RU 95709184,95710207,TR 95710208,95711231,IT -95711232,95712255,FI +95711232,95712255,GB 95712256,95713279,CH 95713280,95714303,HU 95714304,95715327,NL @@ -1793,8 +1763,7 @@ 95749632,95750143,US 95750144,95751167,IE 95751168,95752191,GB -95752192,95752959,TR -95752960,95753215,BG +95752192,95753215,TR 95753216,95754239,EU 95754240,95754495,RU 95754496,95754751,RO @@ -1819,9 +1788,10 @@ 95765248,95765503,NZ 95765504,95766527,IT 95766528,95767551,GB -95767552,95768063,LU +95767552,95767807,NL +95767808,95768063,LU 95768064,95768319,GB -95768320,95768575,LU +95768320,95768575,JP 95768576,95769599,BG 95769600,95770111,TR 95770112,95770367,EU @@ -1852,16 +1822,16 @@ 95785984,95786751,US 95786752,95787007,DE 95787008,95788031,DK -95788032,95789055,MD -95789056,95789823,US -95789824,95790079,TR +95788032,95789311,MD +95789312,95789567,US +95789568,95790079,TR 95790080,95790591,US 95790592,95790847,CA 95790848,95791871,NL 95791872,95792127,IN 95792128,95793151,FR -95793152,95794175,US -95794176,95795199,GB +95793152,95794431,US +95794432,95795199,GB 95795200,95796223,US 95796224,95797247,PL 95797248,95798271,IT @@ -1906,7 +1876,7 @@ 95822336,95822591,US 95822592,95822847,GB 95822848,95823615,RU -95823616,95823871,NL +95823616,95823871,IT 95823872,95824895,DE 95824896,95825919,IR 95825920,95826175,PT @@ -1927,7 +1897,7 @@ 95838208,95839231,UA 95839232,95839999,US 95840000,95840255,GB -95840256,95841279,US +95840256,95841279,NL 95841280,95841791,TR 95841792,95842303,DE 95842304,95843327,HU @@ -1965,7 +1935,8 @@ 95869952,95870975,GB 95870976,95871999,RU 95872000,95873023,DE -95873024,95875071,AT +95873024,95874047,GB +95874048,95875071,AT 95875072,95876095,IT 95876096,95877119,TR 95877120,95878143,CH @@ -2110,8 +2081,8 @@ 96239616,96240639,RU 96240640,96241663,LU 96241664,96244735,RU -96244736,96245247,LU -96245248,96245503,RU +96244736,96244991,LU +96244992,96245503,RU 96245504,96245759,JP 96245760,96246783,KZ 96246784,96249855,RU @@ -2259,42 +2230,8 @@ 98746368,98762751,TR 98762752,98893823,RU 98893824,98959359,TR -98959360,98961407,DE -98961408,98961919,FR -98961920,98993407,DE -98993408,98993663,GB -98993664,98997759,DE -98997760,98998271,FR -98998272,98998527,DE -98998528,98998783,GB -98998784,98999551,DE -98999552,99000063,GB -99000064,99024895,DE -99024896,99025151,GB -99025152,99025407,DE -99025408,99025663,NL -99025664,99026943,DE -99026944,99027199,GB -99027200,99027455,DE -99027456,99027711,PL -99027712,99028991,DE -99028992,99029503,GB -99029504,99030783,DE -99030784,99031039,US -99031040,99031295,DE -99031296,99031551,GB -99031552,99045119,DE -99045120,99045375,NL -99045376,99049471,DE -99049472,99049983,GB -99049984,99053055,DE -99053056,99053567,GB -99053568,99085567,DE -99085568,99085823,GB -99085824,99090431,DE -99090432,99391487,IR -99391488,99392511,AE -99392512,99614719,IR +98959360,99090431,DE +99090432,99614719,IR 99614720,99876863,SE 99876864,100139007,SA 100139008,100204543,UA @@ -2302,7 +2239,7 @@ 100237312,100245503,IT 100245504,100247551,DE 100247552,100249599,CH -100249600,100253695,MD +100249600,100253695,US 100253696,100261887,RU 100261888,100270079,NO 100270080,100302847,IR @@ -2320,11 +2257,12 @@ 100403200,100404223,ES 100404224,100405247,AT 100405248,100406271,IT -100406272,100406527,NL -100406528,100407295,RU +100406272,100406783,NL +100406784,100407039,DE +100407040,100407295,SK 100407296,100408063,EU 100408064,100409343,RU -100409344,100410367,EU +100409344,100410367,DE 100410368,100411391,GB 100411392,100412415,CZ 100412416,100413439,IT @@ -2337,7 +2275,8 @@ 100419840,100420351,GB 100420352,100420607,AE 100420608,100421887,GB -100421888,100422399,AE +100421888,100422143,AE +100422144,100422399,GB 100422400,100422655,KR 100422656,100423679,IT 100423680,100424703,FR @@ -2386,8 +2325,8 @@ 100457472,100458495,GB 100458496,100459519,DE 100459520,100460543,PL -100460544,100460799,CH -100460800,100461567,US +100460544,100461055,DE +100461056,100461567,US 100461568,100462591,RS 100462592,100463615,IT 100463616,100464639,NO @@ -2420,7 +2359,7 @@ 100488448,100488703,TW 100488704,100488959,NL 100488960,100489215,US -100489216,100490239,ES +100489216,100490239,NL 100490240,100491263,DE 100491264,100492287,IR 100492288,100493311,RU @@ -2478,9 +2417,7 @@ 100538112,100538367,DE 100538368,100538623,ES 100538624,100538879,DE -100538880,100539135,NL -100539136,100539391,DE -100539392,100539647,GB +100538880,100539647,GB 100539648,100539903,US 100539904,100540415,ES 100540416,100544511,US @@ -2600,7 +2537,8 @@ 234374144,234374399,CH 234374400,234374911,JP 234374912,234375167,MY -234375168,234381311,US +234375168,234375423,IL +234375424,234381311,US 234381312,234381567,IE 234381568,234381823,DE 234381824,234382079,JP @@ -2615,7 +2553,8 @@ 234384128,234384383,SG 234384384,234384639,US 234384640,234384895,AU -234384896,234385663,US +234384896,234385151,MY +234385152,234385663,US 234385664,234385919,IE 234385920,234386175,BR 234386176,234386431,JP @@ -2646,12 +2585,14 @@ 234952704,234953727,CN 234953728,234954751,SG 234954752,234971135,NZ -234971136,234972159,AP +234971136,234971903,HK +234971904,234972159,AP 234972160,234973183,BD 234973184,234974207,PK 234974208,234975231,CN 234975232,234976255,SG -234976256,234979327,IN +234976256,234978303,IN +234978304,234979327,MN 234979328,235012095,MY 235012096,235077631,AU 235077632,235143167,JP @@ -2807,7 +2748,11 @@ 263716864,263847935,BH 263847936,263979007,US 263979008,264044543,FR -264044544,264306687,US +264044544,264110079,US +264110080,264111103,IL +264111104,264114175,US +264114176,264118271,IL +264118272,264306687,US 264306688,264306943,IN 264306944,264307199,JP 264307200,264307455,SG @@ -2872,7 +2817,8 @@ 266746624,266746879,JP 266746880,266747135,KR 266747136,266747391,IE -266747392,266751999,US +266747392,266747647,IL +266747648,266751999,US 266752000,266752255,DE 266752256,266752511,KR 266752512,266752767,FR @@ -2935,8 +2881,10 @@ 266783744,266784511,US 266784512,266784767,KR 266784768,266785279,US -266785280,266785791,AU -266785792,266797055,US +266785280,266786303,AU +266786304,266786559,US +266786560,266786815,IN +266786816,266797055,US 266797056,266862591,BR 266862592,267059199,US 267059200,267124735,CA @@ -2948,12 +2896,17 @@ 267918336,267919359,GB 267919360,267920383,SE 267920384,267921407,KR -267921408,269221887,US +267921408,267923455,US +267923456,267925503,IL +267925504,269221887,US 269221888,269222655,BR 269222656,269222911,US 269222912,269223423,CA 269223424,269224191,HK -269224192,269484031,US +269224192,269224959,SE +269224960,269225727,IL +269225728,269226495,GB +269226496,269484031,US 269484032,269549567,SE 269549568,271712255,US 271712256,271843327,AU @@ -3053,7 +3006,10 @@ 391643136,391675903,DE 391675904,391692287,US 391692288,391700479,AF -391700480,391806975,US +391700480,391790591,US +391790592,391791615,GB +391791616,391791871,CA +391791872,391806975,US 391806976,391823359,DE 391823360,391839743,FR 391839744,391860223,US @@ -3217,49 +3173,93 @@ 394482176,394482431,PR 394483712,394483967,US 394485760,394486015,US +394487808,394488063,US 394489856,394490111,CA +394491904,394492159,CA 394493952,394494207,US +394496000,394496255,US 394498048,394498303,US +394500096,394500351,US 394502144,394502655,US +394504192,394504447,US 394506240,394506495,US +394508288,394508543,US 394510336,394510591,US +394512384,394512639,US 394514432,394514687,KN +394516480,394516735,US 394518528,394518783,US +394520576,394520831,US 394522624,394522879,US +394524672,394524927,US +394528768,394529023,US 394530816,394531071,US +394532864,394533119,US 394534912,394535167,US +394536960,394537215,US 394539008,394539263,PR +394541056,394541311,US 394543104,394543359,US 394547200,394547455,US +394547712,394547967,US +394549248,394549503,US 394551296,394551551,US +394553344,394553599,CA 394555392,394555647,US +394557440,394557695,US 394559488,394559743,US +394561536,394562047,US 394563584,394563839,AG +394565632,394565887,PR 394567680,394567935,CA +394569728,394569983,US 394571776,394572031,CA +394573824,394574079,US 394575872,394576383,CA +394577920,394578175,CA 394579968,394580223,US +394582016,394582271,US 394584064,394584575,US +394586112,394586367,US 394588160,394588415,US +394590208,394590463,CA 394592256,394592511,US 394592512,394592767,HK 394592768,394593535,US 394593536,394593791,HK 394593792,394594047,US +394594304,394594559,US 394596352,394596607,US +394598400,394598655,US 394600448,394600703,US +394602496,394602751,US 394604544,394605055,US +394606592,394607103,US 394608640,394608895,CA 394612736,394612991,US +394613248,394613503,US +394614784,394615039,US 394616832,394617087,US +394618880,394619135,US 394620928,394621183,CA +394622976,394623231,PR 394625024,394625279,NL +394627072,394627327,US +394631168,394631423,US 394633216,394633471,US +394635264,394635519,CA 394637312,394637567,US +394639360,394639615,US +394643456,394643711,US 394645504,394645759,CA +394647552,394647807,US 394649600,394649855,US +394651648,394651903,US +394655744,394655999,US 394657792,394658047,US +394659840,394660095,PR 394661888,394662399,US +394663936,394664191,US 394665984,394666239,CA 394670080,394670335,CA 394674176,394674431,US @@ -3286,7 +3286,6 @@ 394764288,394764543,US 394768384,394768639,CA 394772480,394772735,CA -394772736,394772991,?? 394776576,394776831,US 394780672,394780927,US 394784768,394785023,US @@ -3811,7 +3810,7 @@ 397041664,397041919,US 397045760,397046015,US 397053952,397054463,US -397058048,397059071,US +397058048,397059327,US 397062144,397062399,US 397066240,397066495,US 397070336,397070847,US @@ -3826,7 +3825,7 @@ 397086720,397086975,US 397090816,397091071,US 397094912,397095167,US -397099008,397099263,US +397099008,397099519,US 397103104,397103359,US 397107200,397107455,US 397111296,397111551,US @@ -3864,8 +3863,8 @@ 397254656,397254911,PR 397258752,397259007,US 397262848,397263103,US -397266944,397267455,US -397271040,397271295,US +397266944,397267711,US +397271040,397271551,US 397275136,397275391,US 397279232,397280255,US 397283328,397283583,US @@ -3949,7 +3948,7 @@ 397615104,397615359,US 397619200,397619455,US 397623296,397623551,US -397627392,397627647,US +397627392,397627903,US 397631488,397631743,US 397635584,397635839,US 397639680,397639935,US @@ -4198,11 +4197,13 @@ 402200320,402200575,AP 402200576,402223103,US 402223104,402227199,CA -402227200,402235903,US +402227200,402235647,US +402235648,402235903,CA 402235904,402236159,NL -402236160,402238719,US -402238720,402238975,CA -402238976,402243583,US +402236160,402236671,CA +402236672,402238719,US +402238720,402239487,CA +402239488,402243583,US 402243584,402247679,CA 402247680,402253823,US 402253824,402255871,NL @@ -4229,7 +4230,9 @@ 405012480,405143551,CA 405143552,405180415,US 405180416,405184511,CA -405184512,405368831,US +405184512,405307391,US +405307392,405323775,DE +405323776,405368831,US 405368832,405372927,JP 405372928,405798911,US 405798912,405831679,CA @@ -4645,15 +4648,7 @@ 461108224,461109247,NL 461109248,461110271,IN 461110272,461111295,BD -461111296,461123839,AP -461123840,461124351,VN -461124352,461124863,AP -461124864,461125631,VN -461125632,461126399,AP -461126400,461126655,HK -461126656,461126911,AP -461126912,461127167,HK -461127168,461127679,AP +461111296,461127679,AP 461127680,461131775,AU 461131776,461135871,ID 461135872,461144063,AU @@ -4737,7 +4732,8 @@ 520325120,520327167,FR 520327168,520329215,DE 520329216,520330239,SE -520330240,520330751,NL +520330240,520330495,NL +520330496,520330751,BG 520330752,520331263,SE 520331264,520339455,IT 520339456,520343551,UA @@ -4813,8 +4809,7 @@ 520595456,520596223,MK 520596224,520596479,DE 520596480,520596991,MK -520596992,520597247,BG -520597248,520597503,MK +520596992,520597503,BG 520597504,520597759,DE 520597760,520598015,NL 520598016,520600831,DE @@ -4850,7 +4845,7 @@ 520888320,520896511,DE 520896512,520898047,BE 520898048,520899583,US -520899584,520900607,JP +520899584,520900607,RU 520900608,520901887,SE 520901888,520902143,DE 520902144,520902655,SE @@ -4930,7 +4925,7 @@ 521048064,521052159,IR 521052160,521052671,RO 521052672,521052927,US -521052928,521053183,RO +521052928,521053183,IT 521053184,521054207,SY 521054208,521056255,GR 521056256,521057279,LT @@ -5072,9 +5067,7 @@ 521790464,521791231,CY 521791232,521791487,RU 521791488,521791999,IR -521792000,521792767,EU -521792768,521793023,KZ -521793024,521793535,EU +521792000,521793535,EU 521793536,521795583,RU 521795584,521797631,PL 521797632,521928703,IT @@ -5112,7 +5105,8 @@ 522182656,522190847,CZ 522190848,522715135,FR 522715136,522715647,IR -522715648,522717183,ES +522715648,522716415,TR +522716416,522717183,US 522717184,522719231,RU 522719232,522721279,UA 522721280,522723327,UZ @@ -5123,7 +5117,7 @@ 522754560,522764287,RU 522764288,522764543,UA 522764544,522764799,US -522764800,522765055,GB +522764800,522765055,RU 522765056,522766335,US 522766336,522767359,RU 522767360,522768895,US @@ -5225,11 +5219,7 @@ 523038720,523042815,RU 523042816,523075583,NO 523075584,523108351,HR -523108352,523113215,HU -523113216,523113471,RO -523113472,523119615,HU -523119616,523120639,RO -523120640,523173887,HU +523108352,523173887,HU 523173888,523182079,BA 523182080,523190271,IR 523190272,523192319,FI @@ -5296,7 +5286,9 @@ 528720896,528721919,US 528721920,528723967,PL 528723968,528726015,ES -528726016,528736255,RU +528726016,528727039,RU +528727040,528727551,DK +528727552,528736255,RU 528736256,528740351,SK 528740352,528742399,IT 528742400,528744447,RU @@ -5342,9 +5334,7 @@ 528860160,528860671,JP 528860672,528860927,US 528860928,528861183,GB -528861184,528876799,RU -528876800,528877055,NL -528877056,528887807,RU +528861184,528887807,RU 528887808,528891903,PL 528891904,528900095,UA 528900096,528902143,SK @@ -5391,10 +5381,11 @@ 529800960,529803263,RU 529803264,529805311,CZ 529805312,529805823,RU -529805824,529806079,CZ -529806080,529809407,UA +529805824,529809407,UA 529809408,529817599,CZ -529817600,529818623,RU +529817600,529817855,RU +529817856,529818111,CZ +529818112,529818623,RU 529818624,529819647,UZ 529819648,529825791,RU 529825792,529826303,IT @@ -5427,7 +5418,8 @@ 529848320,529849087,RU 529849088,529849599,CZ 529849600,529849855,UA -529849856,529854463,RU +529849856,529850111,CZ +529850112,529854463,RU 529854464,529855487,UZ 529855488,529855743,RU 529855744,529855999,UA @@ -5518,8 +5510,8 @@ 531382784,531383295,RU 531383296,531383551,DE 531383552,531383807,UA -531383808,531384063,DE -531384064,531386367,NL +531383808,531384831,DE +531384832,531386367,NL 531386368,531398655,DE 531398656,531400703,RU 531400704,531402751,UA @@ -5567,7 +5559,9 @@ 532205312,532205567,LU 532205568,532212735,RU 532212736,532212991,CZ -532212992,532214783,RU +532212992,532214271,RU +532214272,532214527,NL +532214528,532214783,RU 532214784,532215807,LU 532215808,532221951,RU 532221952,532223999,IT @@ -5630,9 +5624,10 @@ 532365824,532366079,US 532366080,532366335,DE 532366336,532366591,ES -532366592,532367359,DE +532366592,532366847,FR +532366848,532367359,DE 532367360,532367615,GB -532367616,532367871,US +532367616,532367871,FR 532367872,532368127,DE 532368128,532368639,SG 532368640,532370431,DE @@ -5699,9 +5694,7 @@ 533266432,533331967,NL 533331968,533397503,UA 533397504,533463039,KW -533463040,533463295,RU -533463296,533463551,LU -533463552,533463807,RU +533463040,533463807,RU 533463808,533464063,DE 533464064,533465087,US 533465088,533465343,PH @@ -5711,7 +5704,7 @@ 533466112,533466367,BG 533466368,533466623,CH 533466624,533469695,US -533469696,533470207,BR +533469696,533470207,RU 533470208,533471231,US 533471232,533475327,FR 533475328,533475583,AT @@ -5777,7 +5770,7 @@ 533861120,533862399,NL 533862400,533864447,GB 533864448,533866239,TR -533866240,533866495,GB +533866240,533866495,US 533866496,533889023,TR 533889024,533891071,GB 533891072,533893119,RU @@ -6050,7 +6043,9 @@ 620232704,620494847,CN 620494848,620625919,NP 620625920,620691455,CN -620691456,620699647,IN +620691456,620697599,IN +620697600,620698623,US +620698624,620699647,IN 620699648,620700671,PK 620700672,620701439,JP 620701440,620701695,AU @@ -6064,8 +6059,7 @@ 620709888,620711935,AU 620711936,620712959,BD 620712960,620715007,IN -620715008,620715519,US -620715520,620716031,HR +620715008,620716031,US 620716032,620716287,TW 620716288,620716543,PH 620716544,620716799,SG @@ -6180,8 +6174,7 @@ 621392128,621392383,CY 621392384,621392639,GE 621392640,621392895,HU -621392896,621393151,IT -621393152,621393919,CY +621392896,621393919,CY 621393920,621395967,DE 621395968,621398015,CZ 621398016,621400063,TR @@ -6620,7 +6613,8 @@ 624803840,624812031,DE 624812032,624812287,RU 624812288,624812543,US -624812544,624813055,PA +624812544,624812799,BR +624812800,624813055,PA 624813056,624813311,IL 624813312,624813567,KZ 624813568,624813823,US @@ -6630,11 +6624,7 @@ 624818176,624820223,ES 624820224,624885759,BE 624885760,624918527,BG -624918528,624930303,IR -624930304,624930559,KZ -624930560,624939519,IR -624939520,624939775,KZ -624939776,624951295,IR +624918528,624951295,IR 624951296,625475583,FR 625475584,625483775,ES 625483776,625485823,IT @@ -6659,9 +6649,9 @@ 625512448,625514495,DE 625514496,625516543,GG 625516544,625518591,BE -625518592,625518847,DE -625518848,625519103,US -625519104,625520639,DE +625518592,625519103,US +625519104,625519615,NL +625519616,625520639,US 625520640,625522687,RU 625522688,625524735,SE 625524736,625541119,FR @@ -6785,9 +6775,7 @@ 628236288,628236543,NL 628236544,628237567,DE 628237568,628237823,HK -628237824,628242687,DE -628242688,628242943,RU -628242944,628244479,DE +628237824,628244479,DE 628244480,628246527,FR 628246528,628248575,MT 628248576,628250367,FI @@ -6893,8 +6881,7 @@ 628847616,628848639,GB 628848640,628850687,DE 628850688,628867071,SE -628867072,628868095,AP -628868096,628869119,US +628867072,628869119,AP 628869120,628871167,PL 628871168,628871935,NL 628871936,628873215,US @@ -6951,13 +6938,7 @@ 629879040,629879807,RU 629879808,629880063,DE 629880064,629882879,RU -629882880,629883135,GB -629883136,629883391,AU -629883392,629883903,EU -629883904,629884159,AU -629884160,629884415,US -629884416,629884671,EU -629884672,629884927,AU +629882880,629884927,EU 629884928,629886975,PL 629886976,629889023,RU 629889024,629891071,IT @@ -6986,7 +6967,7 @@ 629993728,629993983,RU 629993984,629994239,TR 629994240,629994495,RO -629994496,629994751,GB +629994496,629994751,US 629994752,629995007,RU 629995008,629995263,DE 629995264,629995775,RU @@ -7037,7 +7018,7 @@ 630501376,630503423,BE 630503424,630509567,NL 630509568,630511615,TR -630511616,630512127,GB +630511616,630512127,DO 630512128,630512639,MD 630512640,630513663,GB 630513664,630515711,IT @@ -7096,7 +7077,7 @@ 630989312,630989567,US 630989568,630990335,RO 630990336,630990847,JE -630990848,630992895,US +630990848,630992895,CH 630992896,630996991,IR 630996992,630997503,GB 630997504,630997759,NL @@ -7290,9 +7271,7 @@ 635103232,635105279,HU 635105280,635105535,NL 635105536,635105791,US -635105792,635106815,NL -635106816,635107071,EU -635107072,635107327,NL +635105792,635107327,NL 635107328,635109375,DE 635109376,635174911,FI 635174912,635183103,GB @@ -7320,7 +7299,8 @@ 635260928,635261951,RU 635261952,635262975,FR 635262976,635263999,CZ -635264000,635265023,US +635264000,635264767,US +635264768,635265023,DE 635265024,635266047,IT 635266048,635267071,PL 635267072,635268095,SE @@ -7329,7 +7309,7 @@ 635269632,635269887,DE 635269888,635270143,US 635270144,635271167,CZ -635271168,635272191,BG +635271168,635272191,TR 635272192,635273215,GB 635273216,635281407,UA 635281408,635284479,RO @@ -7366,7 +7346,9 @@ 635733248,635733503,IR 635733504,635733759,DE 635733760,635735039,IR -635735040,635748351,DE +635735040,635737343,DE +635737344,635737599,NL +635737600,635748351,DE 635748352,635764735,IE 635764736,635830271,UA 635830272,635842559,DE @@ -7549,8 +7531,8 @@ 637337600,637403135,NO 637403136,637534207,IR 637534208,638034175,US -638034176,638040063,PK -638040064,638230527,US +638034176,638042111,PK +638042112,638230527,US 638230528,638234111,PK 638234112,638234367,US 638234368,638234623,PK @@ -7558,9 +7540,20 @@ 639287296,639303679,HK 639303680,640212991,US 640212992,640221183,HK -640221184,641032191,US -641032192,641040383,HK -641040384,641747967,US +640221184,641028095,US +641028096,641040383,HK +641040384,641122303,US +641122304,641130495,HK +641130496,641167359,US +641167360,641171455,HK +641171456,641187839,US +641187840,641192959,HK +641192960,641204223,AP +641204224,641400831,US +641400832,641433599,HK +641433600,641679359,US +641679360,641687551,HK +641687552,641747967,US 641747968,641748991,HK 641748992,641752063,US 641752064,641752319,HK @@ -7580,27 +7573,29 @@ 643722240,643723263,AP 643723264,644602367,US 644602368,644602623,RU -644602624,645030911,US +644602624,644835839,US +644835840,644836351,CA +644836352,644987903,US +644987904,644988927,CA +644988928,645030911,US 645030912,645031935,RU -645031936,645918719,US -645918720,645920767,AP -645920768,646346751,US +645031936,645483519,US +645483520,645484031,CA +645484032,646346751,US 646346752,646347263,AP 646347264,647158015,US 647158016,647158271,AP 647158272,647208959,US -647208960,647209471,AP +647208960,647209471,HK 647209472,647210495,US -647210496,647211519,AP -647211520,647211775,HK +647210496,647211775,HK 647211776,647212031,US 647212032,647212287,HK 647212288,647212543,US -647212544,647213055,AP -647213056,647217151,HK +647212544,647217151,HK 647217152,653443071,US -653443072,653451263,DE -653451264,654311423,US +653443072,653459455,DE +653459456,654311423,US 654311424,654311679,CN 654311680,654311935,AU 654311936,654376959,CN @@ -7611,8 +7606,8 @@ 655360000,656408575,KR 656408576,658505727,PK 658505728,661454847,CN -661454848,661460223,AP -661460224,661463551,HK +661454848,661460479,AP +661460480,661463551,HK 661463552,661466367,AP 661466368,661473023,HK 661473024,661473279,PH @@ -7813,7 +7808,7 @@ 692968448,692969471,CD 692969472,692971519,MU 692971520,692973567,SZ -692973568,692975615,US +692973568,692975615,MU 692975616,692977663,CI 692977664,692978687,MU 692978688,692979711,ZA @@ -7990,7 +7985,7 @@ 693952768,693958655,MU 693958656,693960703,CM 693960704,693993471,TZ -693993472,694026239,US +693993472,694026239,MU 694026240,694026495,MA 694026496,694091775,MZ 694091776,694157311,SD @@ -8291,9 +8286,8 @@ 702066688,702066943,PT 702066944,702067455,ID 702067456,702067711,GB -702067712,702067967,ZA -702067968,702068223,NL -702068224,702068991,ZA +702067712,702068735,NL +702068736,702068991,ZA 702068992,702069503,ID 702069504,702069759,GB 702069760,702070271,DE @@ -8472,7 +8466,7 @@ 702510080,702511103,ZM 702511104,702512127,ZA 702512128,702513151,MZ -702513152,702514175,MU +702513152,702514175,NG 702514176,702515199,SL 702515200,702516223,NG 702516224,702517247,BW @@ -8573,7 +8567,7 @@ 710962176,711065599,CN 711065600,711131135,HK 711131136,711160831,CN -711160832,711161855,HK +711160832,711161855,AU 711161856,711163903,CN 711163904,711165951,JP 711165952,711166463,MY @@ -8632,29 +8626,108 @@ 717881344,720437247,CN 720437248,720502783,AU 720502784,725614591,CN -725614592,729849855,SG +725614592,727482367,SG +727482368,727515135,HK +727515136,729808895,SG +729808896,729825279,HK +729825280,729841663,SG +729841664,729849855,KR 729849856,729858047,IN -729858048,729939967,SG -729939968,730005503,US -730005504,730071039,SG +729858048,729866239,TH +729866240,729874431,JP +729874432,729882623,HK +729882624,729890815,ID +729890816,729939967,HK +729939968,729989119,US +729989120,729997311,CA +729997312,730005503,JP +730005504,730021887,DE +730021888,730071039,RU 730071040,730071551,HK -730071552,730185727,SG -730185728,730193919,JP -730193920,730300415,SG +730071552,730087423,SG +730087424,730087935,GB +730087936,730088703,SG +730088704,730088959,PK +730088960,730089471,JP +730089472,730089983,SG +730089984,730090239,US +730090240,730090495,PK +730090496,730092031,SG +730092032,730092287,TH +730092288,730093567,SG +730093568,730093823,RU +730093824,730094079,ID +730094080,730094591,SG +730094592,730094847,BD +730094848,730095103,MY +730095104,730095615,SG +730095616,730136575,HK +730136576,730144767,JP +730144768,730152959,SG +730152960,730161151,KR +730161152,730169343,TH +730169344,730177535,ID +730177536,730193919,JP +730193920,730202111,KR +730202112,730251263,SG +730251264,730259455,HK +730259456,730267647,SG +730267648,730300415,HK 730300416,730316799,US -730316800,730333183,SG +730316800,730324991,BR +730324992,730333183,SG 730333184,731381759,CN -731381760,731430911,SG +731381760,731382783,SG +731382784,731383039,ID +731383040,731383807,PH +731383808,731384575,SG +731384576,731384831,IQ +731384832,731385087,EG +731385088,731385343,NP +731385344,731385855,HK +731385856,731386367,BR +731386368,731386623,AE +731386624,731386879,AR +731386880,731387135,PE +731387136,731387391,CL +731387392,731387647,US +731387648,731388415,HK +731388416,731389439,DE +731389440,731390975,TH +731390976,731391487,BR +731391488,731393023,SG +731393024,731393535,DE +731393536,731393791,TH +731393792,731394047,BR +731394048,731394303,US +731394304,731394559,CL +731394560,731394815,SG +731394816,731395071,AR +731395072,731395327,PE +731395328,731395583,HK +731395584,731395839,SG +731395840,731396095,EG +731396096,731396351,SG +731396352,731396607,AE +731396608,731397375,SG +731397376,731397887,BR +731397888,731430911,SG 731430912,731439103,IN 731439104,731447295,TH 731447296,731480063,US 731480064,731512831,JP 731512832,731611135,HK -731611136,731709439,SG +731611136,731643903,KR +731643904,731709439,SG 731709440,731742207,DE 731742208,731758591,BR 731758592,731774975,ID -731774976,731906047,SG +731774976,731807743,DE +731807744,731840511,RU +731840512,731844607,HK +731844608,731873279,SG +731873280,731889663,US +731889664,731906047,HK 731906048,734396415,CN 734396416,734527487,HK 734527488,734789631,KR @@ -8712,8 +8785,7 @@ 736158720,736160767,HK 736160768,736161791,PK 736161792,736162815,CN -736162816,736163839,HK -736163840,736164351,AP +736162816,736164351,HK 736164352,736164863,NZ 736164864,736166911,IN 736166912,736167935,SG @@ -8922,7 +8994,7 @@ 736502784,736505855,IN 736505856,736506879,GB 736506880,736507903,PH -736507904,736508927,DE +736507904,736508927,JP 736508928,736509951,KH 736509952,736510975,IN 736510976,736513023,CN @@ -8966,7 +9038,8 @@ 736547840,736548863,IN 736548864,736549887,KR 736549888,736559103,CN -736559104,736562175,HK +736559104,736561151,HK +736561152,736562175,KR 736562176,736563199,US 736563200,736564223,HK 736564224,736565247,BD @@ -8998,7 +9071,8 @@ 736615424,736616447,KH 736616448,736617471,MY 736617472,736618495,PH -736618496,736621567,IN +736618496,736619519,US +736619520,736621567,IN 736621568,736622591,JP 736622592,736624639,IN 736624640,736886783,JP @@ -9047,17 +9121,12 @@ 737147904,737148927,MY 737148928,737149951,CN 737149952,737151999,IN -737152000,737152511,AP -737152512,737152767,HK -737152768,737153023,AP -737153024,737154047,HK +737152000,737154047,HK 737154048,737155071,MY 737155072,737156095,TW 737156096,737157119,HK 737157120,737158143,NZ -737158144,737158655,HK -737158656,737158911,AP -737158912,737159167,HK +737158144,737159167,AP 737159168,737160191,AU 737160192,737161215,TW 737161216,737162239,HK @@ -9142,10 +9211,7 @@ 737326080,737327103,CN 737327104,737328127,SG 737328128,737331199,CN -737331200,737331455,US -737331456,737331711,AP -737331712,737331967,US -737331968,737332223,AP +737331200,737332223,AP 737332224,737333247,CN 737333248,737335295,IN 737335296,737337343,CN @@ -9160,7 +9226,7 @@ 737346560,737350655,CN 737350656,737350911,AU 737350912,737351679,NZ -737351680,737352703,CN +737351680,737352703,PS 737352704,737352959,HK 737352960,737353727,AP 737353728,737353983,PS @@ -9168,12 +9234,12 @@ 737354240,737354751,PS 737354752,737355775,IN 737355776,737356799,GB -737356800,737359871,HK +737356800,737357823,HK +737357824,737358847,AU +737358848,737359871,HK 737359872,737361919,NZ 737361920,737363455,HK -737363456,737364223,AP -737364224,737364479,HK -737364480,737364991,AP +737363456,737364991,AP 737364992,737367039,IN 737367040,737368063,CA 737368064,737369087,CN @@ -9182,7 +9248,7 @@ 737371136,737371647,AP 737371648,737371903,HK 737371904,737372159,AP -737372160,737373183,HK +737372160,737373183,AU 737373184,737374207,AP 737374208,737375743,AU 737375744,737375999,SG @@ -9198,16 +9264,12 @@ 737384448,737385471,ID 737385472,737386495,CN 737386496,737387519,MN -737387520,737388543,HK -737388544,737389055,AP -737389056,737389311,HK -737389312,737389567,AP +737387520,737389567,HK 737389568,737390591,IN 737390592,737391615,US 737391616,737392639,CN 737392640,737393663,ID -737393664,737394687,HK -737394688,737395711,AP +737393664,737395711,HK 737395712,737396735,NZ 737396736,737397759,AU 737397760,737398783,BD @@ -9310,8 +9372,7 @@ 737593088,737593343,TH 737593344,737594367,BD 737594368,737596415,HK -737596416,737596671,CN -737596672,737597439,US +737596416,737597439,CN 737597440,737598463,TW 737598464,737600511,PK 737600512,737601535,CN @@ -9370,7 +9431,9 @@ 737712128,737713151,IN 737713152,737714175,FM 737714176,737715199,JP -737715200,737718015,HK +737715200,737717247,HK +737717248,737717759,SG +737717760,737718015,HK 737718016,737718271,AP 737718272,737727487,CN 737727488,737728511,ID @@ -9395,7 +9458,7 @@ 737747968,737748479,HK 737748480,737748991,SG 737748992,737750015,AF -737750016,737750271,JP +737750016,737750271,AU 737750272,737750527,KR 737750528,737750783,IN 737750784,737752063,HK @@ -9405,7 +9468,8 @@ 737758208,737759231,HK 737759232,737760255,AP 737760256,737761279,IN -737761280,737762815,HK +737761280,737762303,AU +737762304,737762815,HK 737762816,737763327,JP 737763328,737765375,HK 737765376,737768447,TH @@ -9487,8 +9551,7 @@ 737868800,737869823,IN 737869824,737870847,ES 737870848,737872895,CN -737872896,737873919,HK -737873920,737874431,AP +737872896,737874431,HK 737874432,737874943,MY 737874944,737876991,HK 737876992,737878015,AP @@ -9588,7 +9651,7 @@ 737991680,737992191,IN 737992192,737992703,ID 737992704,737993727,CN -737993728,737994751,AP +737993728,737994751,HK 737994752,737995775,MY 737995776,737996799,ID 737996800,737997823,JP @@ -9632,7 +9695,7 @@ 738118656,738119679,IN 738119680,738120703,CN 738120704,738121727,IN -738121728,738122751,AP +738121728,738122751,HK 738122752,738128895,CN 738128896,738129919,KR 738129920,738135039,CN @@ -9660,7 +9723,7 @@ 738154496,738156543,TW 738156544,738157567,CN 738157568,738159615,SG -738159616,738160639,AP +738159616,738160639,PS 738160640,738161663,KH 738161664,738163711,HK 738163712,738164735,SG @@ -9692,9 +9755,13 @@ 738193408,738194431,TH 738194432,738195455,CN 738195456,738197503,KR -738197504,747161855,US +738197504,738525183,US +738525184,738590719,SE +738590720,747161855,US 747161856,747162111,AU -747162112,748307967,US +747162112,747372543,US +747372544,747438079,SE +747438080,748307967,US 748307968,748308223,GR 748308224,748327167,US 748327168,748327423,GR @@ -9724,17 +9791,18 @@ 755261952,755262463,BO 755262464,755263487,AR 755263488,755269631,BR -755269632,755270655,HN +755269632,755270655,GT 755270656,755271679,BR 755271680,755272703,HN 755272704,755277823,BR 755277824,755279871,AR 755279872,755280895,CL -755280896,755281919,HN +755280896,755281919,US 755281920,755287039,BR 755287040,755288063,US 755288064,755289087,EC -755289088,755290111,HN +755289088,755289599,GB +755289600,755290111,US 755290112,755292159,BR 755292160,755293183,AR 755293184,755301375,BR @@ -9753,7 +9821,7 @@ 755315712,755316735,MX 755316736,755317759,PE 755317760,755318783,CR -755318784,755319807,HN +755318784,755319807,US 755319808,755320831,PE 755320832,755321855,BR 755321856,755322879,HN @@ -9776,7 +9844,7 @@ 755368960,755371007,AR 755371008,755378175,BR 755378176,755379199,DO -755379200,755381247,HN +755379200,755381247,ES 755381248,755383295,BR 755383296,755384319,MX 755384320,755394559,BR @@ -9814,13 +9882,13 @@ 755492864,755493887,BR 755493888,755494911,HN 755494912,755499007,AR -755499008,755500031,SI +755499008,755500031,BA 755500032,755501055,ES 755501056,755502079,NO 755502080,755503103,ES 755503104,755503359,SG 755503360,755503615,NL -755503616,755503871,AR +755503616,755503871,BR 755503872,755504127,PL 755504128,755505151,US 755505152,755505407,TR @@ -9840,7 +9908,8 @@ 755516672,755516927,BE 755516928,755517183,AU 755517184,755517439,DK -755517440,755518463,US +755517440,755517951,IQ +755517952,755518463,US 755518464,755519487,ES 755519488,755520511,NL 755520512,755521535,IE @@ -9975,7 +10044,7 @@ 755637248,755638271,HU 755638272,755639295,RU 755639296,755640319,FR -755640320,755641343,RU +755640320,755641343,NL 755641344,755642367,FR 755642368,755643391,RS 755643392,755644415,RU @@ -10017,7 +10086,7 @@ 755672576,755672831,NL 755672832,755673087,CA 755673088,755674111,CH -755674112,755675135,AP +755674112,755675135,HK 755675136,755676159,CH 755676160,755677183,FR 755677184,755677439,GB @@ -10036,7 +10105,7 @@ 755684608,755684863,TH 755684864,755685119,TW 755685120,755685375,VN -755685376,755686399,RU +755685376,755686399,MD 755686400,755687423,IT 755687424,755688447,FR 755688448,755689471,NL @@ -10079,13 +10148,15 @@ 755714048,755714559,BH 755714560,755714815,AE 755714816,755715071,BH -755715072,755715583,AP +755715072,755715583,HK 755715584,755715839,TW 755715840,755716095,AP 755716096,755717119,US 755717120,755718143,FI 755718144,755718399,CA -755718400,755719423,US +755718400,755718655,US +755718656,755719167,CA +755719168,755719423,US 755719424,755720191,RU 755720192,755721215,TR 755721216,755722239,IE @@ -10109,7 +10180,7 @@ 755736576,755737599,AE 755737600,755738623,BE 755738624,755739647,IE -755739648,755740671,GB +755739648,755740671,FR 755740672,755740927,DE 755740928,755741183,ES 755741184,755741439,GB @@ -10121,7 +10192,7 @@ 755742720,755742975,KR 755742976,755743231,CA 755743232,755743743,US -755743744,755744255,IR +755743744,755744255,GB 755744256,755744767,HK 755744768,755745023,LT 755745024,755745279,EE @@ -10163,15 +10234,14 @@ 755771392,755772415,HU 755772416,755773439,US 755773440,755774463,DE -755774464,755776511,TR +755774464,755774975,IN +755774976,755776511,TR 755776512,755777535,FR 755777536,755778559,RU 755778560,755779583,EU 755779584,755780607,RU 755780608,755781631,DE -755781632,755781887,SG -755781888,755782143,TR -755782144,755782655,US +755781632,755782655,US 755782656,755783679,TR 755783680,755784703,US 755784704,755785727,DE @@ -10219,7 +10289,7 @@ 755822592,755823615,RO 755823616,755824639,NL 755824640,755825663,PL -755825664,755826687,US +755825664,755826687,SK 755826688,755827711,NL 755827712,755828735,GB 755828736,755829759,ES @@ -10272,7 +10342,8 @@ 755862528,755863551,HU 755863552,755864575,IT 755864576,755865087,US -755865088,755865599,ES +755865088,755865343,GB +755865344,755865599,US 755865600,755866623,GB 755866624,755867647,FR 755867648,755868671,HK @@ -10286,8 +10357,7 @@ 755873536,755873791,FR 755873792,755874047,NL 755874048,755874303,ES -755874304,755874559,DE -755874560,755874815,NL +755874304,755874815,NL 755874816,755875839,TR 755875840,755876863,DE 755876864,755877631,GB @@ -10305,8 +10375,8 @@ 755886080,755887103,US 755887104,755888127,DE 755888128,755889151,DK -755889152,755889663,HK -755889664,755891199,US +755889152,755889407,HK +755889408,755891199,US 755891200,755891711,NL 755891712,755892223,SG 755892224,755893247,NL @@ -10386,7 +10456,8 @@ 755956736,755957759,GB 755957760,755958783,ES 755958784,755959807,DK -755959808,755960831,DE +755959808,755960319,DE +755960320,755960831,HK 755960832,755961855,US 755961856,755962879,SE 755962880,755963135,RO @@ -10400,8 +10471,7 @@ 755968256,755968511,CZ 755968512,755968767,NL 755968768,755969023,AZ -755969024,755969279,RS -755969280,755970047,SI +755969024,755970047,RS 755970048,755971071,ES 755971072,755971327,DE 755971328,755972095,AT @@ -10458,7 +10528,9 @@ 757188608,757189119,CA 757189120,757194751,US 757194752,757198847,IT -757198848,757600255,US +757198848,757497855,US +757497856,757498111,AP +757498112,757600255,US 757600256,757604351,CA 757604352,757612543,US 757612544,757616639,CA @@ -10535,7 +10607,9 @@ 757968896,757973759,US 757973760,757974015,CA 757974016,757983231,US -757989376,758700031,US +757989376,758695935,US +758695936,758696191,BR +758696192,758700031,US 758700032,758702079,CA 758702080,758704127,GR 758704128,758705663,GB @@ -10550,11 +10624,14 @@ 758824960,758841343,CA 758841344,758859775,US 758859776,758861823,CA -758861824,758871039,US +758861824,758865919,US +758870016,758871039,US 758871040,758871295,EU 758871296,758880255,US 758880256,758881279,HK -758881280,758886399,US +758881280,758884607,US +758884608,758884863,NL +758884864,758886399,US 758886400,758887423,CA 758887424,758889471,US 758889472,758890495,CA @@ -10577,15 +10654,13 @@ 759179264,759180287,SG 759180288,759181311,ID 759181312,759182335,NZ -759182336,759182847,AP -759182848,759183103,HK -759183104,759183359,AP +759182336,759183359,AP 759183360,759184383,AU 759184384,759185407,NZ 759185408,759186431,HK 759186432,759187455,AU 759187456,759187967,SG -759187968,759188479,AP +759187968,759188479,HK 759188480,759189503,TH 759189504,759190527,PH 759190528,759191551,IN @@ -10593,8 +10668,7 @@ 759192576,759193599,IN 759193600,759195647,ID 759195648,759196671,IN -759196672,759197695,HK -759197696,759198207,AP +759196672,759198207,HK 759198208,759198719,NP 759198720,759199743,NZ 759199744,759200767,PH @@ -10622,7 +10696,10 @@ 759233536,759234559,ID 759234560,759235583,SG 759235584,759236607,NZ -759236608,759237631,LU +759236608,759236863,LU +759236864,759237119,US +759237120,759237375,LU +759237376,759237631,EU 759237632,759238655,AU 759238656,759242751,CN 759242752,759243775,HK @@ -10641,7 +10718,8 @@ 759254784,759255039,PT 759255040,759256063,SM 759256064,759258111,DK -759258112,759260159,GB +759258112,759259135,NL +759259136,759260159,GB 759260160,759261183,IL 759261184,759263231,FR 759263232,759264255,IR @@ -10654,7 +10732,7 @@ 759272448,759273471,AR 759273472,759274495,MX 759274496,759282687,BR -759282688,759283711,HN +759282688,759283711,CR 759283712,759285759,BR 759285760,759286015,CO 759286016,759286271,BR @@ -10674,7 +10752,7 @@ 759300096,759301119,KW 759301120,759302143,CH 759302144,759303167,NL -759303168,759304191,RU +759303168,759304191,MD 759304192,759305215,IT 759305216,759306239,PL 759306240,759307263,KZ @@ -10726,7 +10804,7 @@ 759350272,759351295,LT 759351296,759352319,HU 759352320,759353343,IT -759353344,759353599,DE +759353344,759353599,NL 759353600,759353855,US 759353856,759354367,AU 759354368,759355391,ES @@ -10754,7 +10832,8 @@ 759370752,759371775,UA 759371776,759372799,RU 759372800,759373823,DE -759373824,759374847,RU +759373824,759374591,RU +759374592,759374847,NL 759374848,759375871,RO 759375872,759376895,IT 759376896,759377919,AT @@ -10771,7 +10850,8 @@ 759384064,759385087,GB 759385088,759386111,DE 759386112,759387135,FR -759387136,759388159,DE +759387136,759387903,GB +759387904,759388159,DE 759388160,759389183,BG 759389184,759390207,DK 759390208,759390463,AU @@ -10782,7 +10862,7 @@ 759392256,759394303,NL 759394304,759395327,IT 759395328,759396351,MD -759396352,759397375,UA +759396352,759397375,NL 759397376,759398399,IT 759398400,759399423,EE 759399424,759400447,US @@ -10860,7 +10940,7 @@ 759629568,759629823,CO 759629824,759630847,CL 759630848,759631871,BR -759631872,759632895,HN +759631872,759632895,US 759632896,759635967,BR 759635968,759636991,PE 759636992,759638015,EC @@ -10957,13 +11037,15 @@ 760264704,760265727,US 760265728,760266751,DE 760266752,760267007,US -760267008,760267775,GB +760267008,760267263,DE +760267264,760267775,GB 760267776,760268799,ES 760268800,760269823,CA 760269824,760270847,RU 760270848,760272383,LU 760272384,760272895,GB -760272896,760274175,RU +760272896,760273919,NL +760273920,760274175,RU 760274176,760274943,US 760274944,760275967,ES 760275968,760276991,FR @@ -10983,11 +11065,13 @@ 760289792,760290303,CA 760290304,760291327,GE 760291328,760292351,AP -760292352,760293375,US +760292352,760292607,TR +760292608,760293375,US 760293376,760293887,SK 760293888,760294399,CZ 760294400,760295423,DE -760295424,760297983,NL +760295424,760297471,NL +760297472,760297983,GB 760297984,760298495,TR 760298496,760299519,FR 760299520,760300543,IT @@ -11002,7 +11086,8 @@ 760310784,760311807,HU 760311808,760313087,DE 760313088,760313343,IT -760313344,760313855,CA +760313344,760313599,US +760313600,760313855,CA 760313856,760314879,PL 760314880,760315903,ES 760315904,760316159,US @@ -11012,7 +11097,8 @@ 760318976,760319999,TR 760320000,760321023,IQ 760321024,760321279,CA -760321280,760322047,US +760321280,760321791,US +760321792,760322047,BR 760322048,760323071,ES 760323072,760324095,IT 760324096,760324351,GB @@ -11035,7 +11121,10 @@ 760338432,760339455,DE 760339456,760341503,NL 760341504,760343551,DE -760343552,760346879,US +760343552,760344575,US +760344576,760344831,GB +760344832,760346623,US +760346624,760346879,DE 760346880,760347647,GB 760347648,760347903,LT 760347904,760348159,MD @@ -11048,11 +11137,13 @@ 760352000,760352255,TR 760352256,760352767,US 760352768,760353791,FI -760353792,760354815,SG +760353792,760354815,CA 760354816,760355839,GB 760355840,760356351,RO 760356352,760356863,RU -760356864,760357887,LT +760356864,760357375,LT +760357376,760357631,DE +760357632,760357887,LT 760357888,760358911,CH 760358912,760359423,FR 760359424,760359679,AE @@ -11065,7 +11156,7 @@ 760364032,760365055,IQ 760365056,760367103,NL 760367104,760368127,US -760368128,760369151,AP +760368128,760369151,HK 760369152,760369407,SE 760369408,760369663,CZ 760369664,760369919,DE @@ -11182,14 +11273,12 @@ 760464384,760465407,LI 760465408,760466431,NL 760466432,760466687,IT -760466688,760467199,NL -760467200,760467455,KN -760467456,760468479,NL +760466688,760468479,NL 760468480,760469503,CZ 760469504,760470527,BG 760470528,760470783,SE 760470784,760471551,EU -760471552,760472575,CA +760471552,760472575,RU 760472576,760473599,FR 760473600,760474623,NL 760474624,760475135,HK @@ -11285,8 +11374,7 @@ 760546048,760546303,JP 760546304,760547327,IM 760547328,760548351,PL -760548352,760548863,AT -760548864,760549119,TK +760548352,760549119,AT 760549120,760549375,ZA 760549376,760550399,IT 760550400,760551423,BE @@ -11302,7 +11390,7 @@ 760560640,760561663,GB 760561664,760563711,RU 760563712,760564735,SE -760564736,760565759,AP +760564736,760565759,HK 760565760,760566783,FR 760566784,760567039,US 760567040,760567551,CR @@ -11334,7 +11422,7 @@ 760585728,760586239,US 760586240,760587263,NL 760587264,760588287,IT -760588288,760589311,FR +760588288,760589311,HK 760589312,760590335,CZ 760590336,760591359,FR 760591360,760592383,ES @@ -11347,7 +11435,7 @@ 760595200,760595455,US 760595456,760596479,IM 760596480,760597503,DE -760597504,760598527,HU +760597504,760598527,RU 760598528,760599551,PL 760599552,760600575,RU 760600576,760601599,DE @@ -11461,8 +11549,7 @@ 760685568,760686591,IT 760686592,760687615,NL 760687616,760688639,LT -760688640,760689151,GB -760689152,760689663,AE +760688640,760689663,BR 760689664,760690687,AP 760690688,760691711,FR 760691712,760691967,GB @@ -11496,8 +11583,7 @@ 760714240,760715263,DE 760715264,760715519,US 760715520,760715775,HK -760715776,760716031,NL -760716032,760716287,UA +760715776,760716287,NL 760716288,760717311,DE 760717312,760717567,EU 760717568,760717823,DE @@ -11536,8 +11622,8 @@ 760743168,760744959,NL 760744960,760745727,HK 760745728,760745983,AP -760745984,760747007,NL -760747008,760749055,US +760745984,760748031,NL +760748032,760749055,US 760749056,760750079,GB 760750080,760751103,TR 760751104,760752127,NL @@ -11550,7 +11636,7 @@ 760755200,760756223,RU 760756224,760757247,BE 760757248,760758271,GB -760758272,760759295,US +760758272,760759295,SK 760759296,760760319,FR 760760320,760761343,IL 760761344,760762367,NL @@ -11560,7 +11646,8 @@ 760765440,760766463,HU 760766464,760766719,PL 760766720,760766975,TR -760766976,760767487,AE +760766976,760767231,AE +760767232,760767487,DO 760767488,760767743,HU 760767744,760767999,DE 760768000,760768511,US @@ -11575,9 +11662,7 @@ 760774656,760775679,AT 760775680,760776703,FR 760776704,760776959,TR -760776960,760777215,UA -760777216,760777471,TR -760777472,760777727,UA +760776960,760777727,UA 760777728,760778751,FR 760778752,760779775,GB 760779776,760780799,US @@ -11626,7 +11711,8 @@ 760813312,760813567,CY 760813568,760814591,RU 760814592,760815615,GB -760815616,760817663,US +760815616,760816639,US +760816640,760817663,NL 760817664,760818687,ES 760818688,760820735,US 760820736,760821759,RU @@ -11680,7 +11766,7 @@ 760862720,760863743,JP 760863744,760864767,ES 760864768,760866815,RU -760866816,760867839,AP +760866816,760867839,HK 760867840,760868863,IR 760868864,760869119,GB 760869120,760869375,AE @@ -11707,8 +11793,7 @@ 760883456,760884223,GB 760884224,760884479,RU 760884480,760884735,ES -760884736,760885247,RU -760885248,760886271,HU +760884736,760886271,RU 760886272,760887295,ES 760887296,760888319,CH 760888320,760889343,RU @@ -11756,9 +11841,10 @@ 760926208,760927231,HK 760927232,760928255,SE 760928256,760929279,RU -760929280,760929535,DE +760929280,760929535,US 760929536,760929791,GB -760929792,760930303,DE +760929792,760930047,DE +760930048,760930303,US 760930304,760931327,FR 760931328,760932351,SG 760932352,760933375,IT @@ -11783,11 +11869,11 @@ 760944384,760944639,CA 760944640,760945663,US 760945664,760946687,CZ -760946688,760947711,US -760947712,760948735,GB +760946688,760948735,GB 760948736,760949759,FR 760949760,760950783,AT -760950784,760951807,NL +760950784,760951295,BR +760951296,760951807,NL 760951808,760952831,RU 760952832,760953855,NL 760953856,760955135,DE @@ -11798,7 +11884,7 @@ 760956928,760957951,GB 760957952,760958975,DE 760958976,760961023,US -760961024,760962047,CA +760961024,760962047,BR 760962048,760962303,CH 760962304,760962559,GB 760962560,760962815,AT @@ -11820,20 +11906,19 @@ 760977408,760978431,IR 760978432,760979455,DE 760979456,760980479,RU -760980480,760980991,GB -760980992,760981503,AE +760980480,760981503,BR 760981504,760982527,IL 760982528,760983551,ES 760983552,760984575,FR 760984576,760985599,CZ 760985600,760986623,IT -760986624,760988415,US +760986624,760988159,US +760988160,760988415,GB 760988416,760988671,AR 760988672,760989695,DE 760989696,760990719,NL 760990720,760991743,LI -760991744,760991999,GB -760992000,760992767,NL +760991744,760992767,NL 760992768,760993791,DE 760993792,760994815,UA 760994816,760995839,UZ @@ -11878,7 +11963,7 @@ 761021952,761022463,LU 761022464,761023487,ES 761023488,761023743,NL -761023744,761023999,GB +761023744,761023999,HK 761024000,761024511,NL 761024512,761025535,AU 761025536,761026559,US @@ -11900,7 +11985,7 @@ 761041920,761042943,IT 761042944,761043967,AU 761043968,761044479,NL -761044480,761044991,AP +761044480,761044991,HK 761044992,761047039,US 761047040,761048063,NL 761048064,761050111,RU @@ -11993,7 +12078,7 @@ 761121536,761121791,GB 761121792,761122815,IT 761122816,761123839,ES -761123840,761124863,RU +761123840,761124863,MD 761124864,761125375,JP 761125376,761125631,US 761125632,761125887,GB @@ -12019,7 +12104,7 @@ 761143040,761143295,ES 761143296,761144319,GB 761144320,761145343,NL -761145344,761146367,AP +761145344,761146367,HK 761146368,761147391,NL 761147392,761148415,DE 761148416,761149951,TR @@ -12033,8 +12118,7 @@ 761156608,761157631,DE 761157632,761158655,CH 761158656,761159679,UA -761159680,761160191,GB -761160192,761160703,AE +761159680,761160703,BR 761160704,761161727,ES 761161728,761162751,RU 761162752,761163775,DE @@ -12083,19 +12167,17 @@ 761203200,761203455,IT 761203456,761203711,SK 761203712,761204223,US -761204224,761204479,AE +761204224,761204479,GB 761204480,761205247,US -761205248,761205759,GB -761205760,761206015,AE -761206016,761206527,GB -761206528,761206783,AE +761205248,761205503,NL +761205504,761206783,GB 761206784,761207807,BR 761207808,761208831,RU 761208832,761209599,LT 761209600,761209855,US 761209856,761210111,AE 761210112,761210367,IN -761210368,761210623,US +761210368,761210623,RO 761210624,761210879,AE 761210880,761211903,NL 761211904,761212927,HU @@ -12124,7 +12206,7 @@ 761231616,761232383,US 761232384,761233407,AT 761233408,761233663,VN -761233664,761233919,DE +761233664,761233919,RU 761233920,761234431,MA 761234432,761235455,US 761235456,761236479,RU @@ -12147,9 +12229,7 @@ 761250816,761251839,ES 761251840,761252351,NL 761252352,761252863,RU -761252864,761253119,DE -761253120,761253375,TR -761253376,761253887,DE +761252864,761253887,DE 761253888,761254143,DK 761254144,761254911,DE 761254912,761255935,US @@ -12161,9 +12241,9 @@ 761260032,761260799,TR 761260800,761261055,UA 761261056,761262335,NL -761262336,761262591,GB +761262336,761262591,IM 761262592,761262847,MM -761262848,761263103,AU +761262848,761263103,AT 761263104,761264127,OM 761264128,761265151,US 761265152,761266175,NL @@ -12268,8 +12348,8 @@ 762443776,762444799,IN 762444800,762446847,CN 762446848,762447871,SG -762448384,762448639,AP -762448896,762449919,AP +762448384,762448639,HK +762448896,762449919,HK 762449920,762450943,JP 762450944,762451967,PH 762451968,762452991,HK @@ -12282,7 +12362,7 @@ 762459136,762460159,CN 762460160,762467327,IN 762467328,762469375,BD -762469376,762470399,HK +762469376,762470399,KR 762470400,762471423,CN 762471424,762473471,HK 762473472,762474495,AP @@ -12397,8 +12477,7 @@ 762592256,762594303,HK 762594304,762595327,IN 762595328,762596351,JP -762596352,762597375,AP -762597376,762598399,HK +762596352,762598399,HK 762598400,762599423,IN 762599424,762600447,SG 762600448,762601471,JP @@ -12500,13 +12579,13 @@ 762756096,762757119,NZ 762757120,762770431,IN 762770432,762771455,BD -762771456,762772479,HK +762771456,762772479,NL 762772736,762773503,AP 762773504,762775551,HK 762775552,762783743,IN 762783744,762784767,CH 762784768,762786815,IN -762786816,762787839,AP +762786816,762787839,HK 762787840,762788863,IN 762788864,762792959,CN 762792960,762796031,VN @@ -12571,7 +12650,7 @@ 762876928,762877951,SG 762877952,762879231,HK 762879232,762879487,JP -762879488,762879743,AP +762879488,762879743,HK 762879744,762879999,JP 762880000,762881023,IN 762881024,762882047,CN @@ -12727,11 +12806,10 @@ 763166464,763166719,EU 763166720,763167743,HK 763167744,763168767,MM -763168768,763169791,HK -763169792,763171839,AP +763168768,763171839,HK 763171840,763172863,SG 763172864,763173887,CN -763174912,763175935,AP +763174912,763175935,HK 763175936,763177983,IN 763177984,763179007,CN 763179008,763179775,AP @@ -12811,7 +12889,7 @@ 763280384,763281407,IN 763281408,763282431,AU 763282432,763285503,IN -763285504,763286527,SG +763285504,763286527,US 763286528,763287551,CN 763287552,763288575,HK 763288576,763289599,CN @@ -12838,7 +12916,7 @@ 763313152,763314175,TH 763314176,763321343,IN 763321344,763322367,AU -763322368,763323391,AP +763322368,763323391,HK 763323392,763326463,IN 763326464,763327487,HK 763327488,763328511,SG @@ -12888,8 +12966,7 @@ 763379712,763380735,NL 763380736,763381759,HU 763381760,763382783,US -763382784,763383039,NL -763383040,763383295,US +763382784,763383295,NL 763383296,763383551,DE 763383552,763383807,US 763383808,763385087,GB @@ -12944,10 +13021,10 @@ 763415552,763415807,RU 763415808,763416063,BY 763416064,763416575,RU -763416576,763417599,AP +763416576,763417599,HK 763417600,763418623,GB 763418624,763419647,PL -763419648,763420415,AP +763419648,763420415,HK 763420416,763420671,GB 763420672,763421695,FI 763421696,763422719,RU @@ -12959,7 +13036,7 @@ 763427840,763428863,LI 763428864,763429119,KZ 763429120,763430911,RU -763430912,763431935,AP +763430912,763431935,HK 763431936,763432191,GB 763432192,763432959,RO 763432960,763433983,EU @@ -13054,7 +13131,7 @@ 763503104,763503615,GB 763503616,763504639,KW 763504640,763505663,RU -763505664,763506687,GB +763505664,763506687,NL 763506688,763507711,FR 763507712,763507967,NL 763507968,763508223,US @@ -13068,7 +13145,7 @@ 763513344,763513855,US 763513856,763514879,LT 763514880,763515135,CA -763515136,763515391,NL +763515136,763515391,UA 763515392,763515647,SE 763515648,763515903,US 763515904,763516159,GB @@ -13088,7 +13165,7 @@ 763523840,763524095,HU 763524096,763524607,IT 763524608,763524863,SE -763524864,763525119,NL +763524864,763525119,GB 763525120,763526143,IM 763526144,763528191,NL 763528192,763529471,ES @@ -13107,17 +13184,18 @@ 763534336,763535359,TR 763535360,763536383,ES 763536384,763537407,GI -763537408,763539455,RU +763537408,763538431,MD +763538432,763539455,RU 763539456,763540479,GB 763540480,763541503,KR 763541504,763542015,US -763542016,763542527,JP -763542528,763543551,RU +763542016,763542271,JP +763542272,763543551,RU 763543552,763544575,DE 763544576,763546623,NL 763546624,763547647,AT 763547648,763548671,PL -763548672,763549183,BR +763548672,763549183,RU 763549184,763549695,KG 763549696,763550719,NL 763550720,763551743,FR @@ -13128,13 +13206,13 @@ 763555840,763556863,HU 763556864,763557887,UA 763557888,763558911,CZ -763558912,763559167,NL -763559168,763559679,US +763558912,763559423,NL +763559424,763559679,US 763559680,763559935,NL 763559936,763560959,TR 763560960,763561983,BZ 763561984,763563007,IT -763563008,763564031,HU +763563008,763564031,RU 763564032,763564799,AT 763564800,763565055,BG 763565056,763566079,LB @@ -13151,7 +13229,7 @@ 763576320,763577343,DE 763577344,763578367,RU 763578368,763579391,HU -763579392,763580415,GB +763579392,763580415,NL 763580416,763581439,ES 763581440,763581951,NL 763581952,763582207,DE @@ -13178,17 +13256,14 @@ 763599104,763599615,DE 763599616,763599871,JP 763599872,763600895,HK -763600896,763601407,BR +763600896,763601407,RU 763601408,763601663,CO 763601664,763601919,GB 763601920,763602943,UA 763602944,763603967,CH 763603968,763604991,ES -763604992,763605503,HK -763605504,763605759,AP -763605760,763606015,HK -763606016,763607039,GB -763607040,763607551,US +763604992,763606015,HK +763606016,763607551,US 763607552,763608063,HK 763608064,763609087,SE 763609088,763610111,US @@ -13221,9 +13296,8 @@ 763633920,763634175,US 763634176,763634431,ES 763634432,763634687,AT -763634688,763635199,BR -763635200,763635711,RU -763635712,763636735,GB +763634688,763635711,RU +763635712,763636735,US 763636736,763637759,SE 763637760,763638271,ES 763638272,763638527,RU @@ -13239,7 +13313,7 @@ 763644416,763644671,ES 763644672,763644927,PL 763644928,763645951,NL -763645952,763646975,JP +763645952,763646975,DE 763646976,763647999,KZ 763648000,763649023,DE 763649024,763650047,UA @@ -13270,11 +13344,11 @@ 763666432,763667455,KZ 763667456,763668479,DE 763668480,763670527,IR -763670528,763671039,BR +763670528,763671039,RU 763671040,763671551,IT 763671552,763672063,TR 763672064,763672575,UA -763672576,763672831,DE +763672576,763672831,NL 763672832,763673087,US 763673088,763673343,AU 763673344,763673599,CN @@ -13386,8 +13460,8 @@ 763753728,763753983,CZ 763753984,763754239,NL 763754240,763754495,GB -763754496,763755007,NL -763755008,763755519,US +763754496,763755263,NL +763755264,763755519,BG 763755520,763755775,NL 763755776,763756031,US 763756032,763756287,NL @@ -13397,9 +13471,7 @@ 763757568,763758591,GB 763758592,763759615,EU 763759616,763759871,NL -763759872,763760127,GB -763760128,763760383,US -763760384,763760639,RU +763759872,763760639,RU 763760640,763760895,GB 763760896,763761151,CH 763761152,763761407,GB @@ -13428,14 +13500,14 @@ 763779328,763779583,NO 763779584,763779839,DE 763779840,763780095,ES -763780096,763781119,HU +763780096,763781119,RU 763781120,763783167,DE 763783168,763784191,CA 763784192,763784447,DE 763784448,763784959,US 763784960,763785215,JP 763785216,763786239,EE -763786240,763787263,SG +763786240,763787263,CA 763787264,763788287,SE 763788288,763789311,RU 763789312,763789567,NL @@ -13447,7 +13519,7 @@ 763792384,763792639,US 763792640,763792895,BR 763792896,763793151,US -763793152,763793407,GB +763793152,763793407,MX 763793408,763794431,HK 763794432,763794943,CH 763794944,763795199,FR @@ -13456,9 +13528,9 @@ 763796480,763797503,US 763797504,763798527,RO 763798528,763799551,GB -763799552,763800575,AP -763800576,763801599,UA -763801600,763802111,NL +763799552,763800575,HK +763800576,763801087,UA +763801088,763802111,NL 763802112,763802623,US 763802624,763803647,RU 763803648,763804159,NL @@ -13490,7 +13562,7 @@ 763821824,763822079,RU 763822080,763823103,US 763823104,763824127,NL -763824128,763825151,US +763824128,763825151,BR 763825152,763826175,RU 763826176,763828223,DE 763828224,763829247,IT @@ -13501,9 +13573,9 @@ 763831552,763832063,US 763832064,763832319,NL 763832320,763833343,JP -763833344,763833855,DE +763833344,763833855,HK 763833856,763834111,AP -763834112,763834367,DE +763834112,763834367,HK 763834368,763835391,JP 763835392,763836415,ES 763836416,763837439,NL @@ -13590,12 +13662,11 @@ 763896832,763897855,DK 763897856,763898879,RO 763898880,763899903,HK -763899904,763900927,GB +763899904,763900927,NL 763900928,763901951,GE 763901952,763902975,KZ 763902976,763903999,US -763904000,763904767,NL -763904768,763905023,DE +763904000,763905023,NL 763905024,763905279,RU 763905280,763905535,DE 763905536,763906047,FI @@ -13652,7 +13723,7 @@ 763951360,763952127,RU 763952128,763953151,NL 763953152,763954175,RO -763954176,763955199,AT +763954176,763955199,US 763955200,763956223,HK 763956224,763957247,ES 763957248,763957759,TR @@ -13674,15 +13745,14 @@ 763969280,763970559,NL 763970560,763970815,DE 763970816,763971071,US -763971072,763971327,DE -763971328,763971583,SA +763971072,763971583,DE 763971584,763973631,ES 763973632,763973887,NL 763973888,763974143,IL 763974144,763974399,US 763974400,763974911,NL 763974912,763975167,RU -763975168,763975423,NO +763975168,763975423,NL 763975424,763975679,US 763975680,763976703,NL 763976704,763977727,DE @@ -13696,15 +13766,14 @@ 763981824,763982847,RU 763982848,763983871,DE 763983872,763984895,HU -763984896,763985151,IT -763985152,763985663,AE +763984896,763985663,GB 763985664,763985919,TR 763985920,763986943,CZ 763986944,763987199,AE 763987200,763987711,GB 763987712,763987967,AE 763987968,763988991,ES -763988992,763990015,SG +763988992,763990015,CA 763990016,763991039,FR 763991040,763991295,DE 763991296,763991807,FR @@ -13725,7 +13794,8 @@ 764002304,764002815,TR 764002816,764003327,DE 764003328,764004351,US -764004352,764004863,DE +764004352,764004607,FR +764004608,764004863,DE 764004864,764005119,IE 764005120,764005375,DE 764005376,764006399,NL @@ -13745,15 +13815,13 @@ 764016128,764016639,US 764016640,764017663,HR 764017664,764018687,RU -764018688,764019199,DE -764019200,764019711,NL +764018688,764019711,NL 764019712,764019967,DE 764019968,764020223,NL 764020224,764020479,GB 764020480,764020735,RU 764020736,764021759,HU -764021760,764022271,TR -764022272,764022783,US +764021760,764022783,US 764022784,764023807,NL 764023808,764024831,AT 764024832,764025343,NL @@ -13771,7 +13839,7 @@ 764037120,764037375,DE 764037376,764037631,RU 764037632,764037887,GB -764037888,764038143,SC +764037888,764038143,RU 764038144,764039167,US 764039168,764040191,HK 764040192,764040447,IT @@ -13780,7 +13848,8 @@ 764040960,764041215,RO 764041216,764042239,HU 764042240,764043263,CA -764043264,764044543,DE +764043264,764044287,DE +764044288,764044543,NL 764044544,764045055,US 764045056,764045311,CN 764045312,764046335,CZ @@ -13836,7 +13905,8 @@ 764084480,764084735,BE 764084736,764084991,CH 764084992,764085247,AE -764085248,764086271,JP +764085248,764085759,JP +764085760,764086271,HK 764086272,764087295,US 764087296,764088319,GB 764088320,764089343,RU @@ -13866,11 +13936,11 @@ 764109824,764110847,IR 764110848,764111103,AR 764111104,764111359,TR -764111360,764111871,US +764111360,764111871,DE 764111872,764112895,RU 764112896,764113919,DE -764113920,764115455,NL -764115456,764115967,US +764113920,764115711,NL +764115712,764115967,US 764115968,764116991,RU 764116992,764118015,CH 764118016,764119039,RU @@ -13878,7 +13948,9 @@ 764121088,764122111,RU 764122112,764123135,DE 764123136,764124159,RU -764124160,764127231,NL +764124160,764125695,NL +764125696,764125951,JO +764125952,764127231,NL 764127232,764128255,RU 764128256,764129279,NL 764129280,764130303,RU @@ -13904,7 +13976,7 @@ 764147712,764148735,DE 764148736,764149759,NL 764149760,764150783,NO -764150784,764151551,JP +764150784,764151551,RU 764151552,764151807,US 764151808,764153855,NL 764153856,764154879,RU @@ -13921,7 +13993,7 @@ 764165120,764166655,RU 764166656,764166911,GB 764166912,764167167,NL -764167168,764168191,US +764167168,764168191,BR 764168192,764171263,RU 764171264,764172287,IT 764172288,764172799,US @@ -13933,7 +14005,10 @@ 764177408,764178431,FR 764178432,764180479,DE 764180480,764181503,UA -764181504,764183551,DE +764181504,764182527,DE +764182528,764183039,JP +764183040,764183295,EU +764183296,764183551,DE 764183552,764184575,NL 764184576,764185599,GB 764185600,764186623,NL @@ -13954,7 +14029,8 @@ 764195840,764197375,DE 764197376,764197887,US 764197888,764198911,NL -764198912,764199935,GB +764198912,764199423,GB +764199424,764199935,NL 764199936,764200959,IT 764200960,764201983,AU 764201984,764202495,CN @@ -13968,7 +14044,8 @@ 764209152,764210175,HU 764210176,764211199,LT 764211200,764212223,CZ -764212224,764213247,US +764212224,764212735,NL +764212736,764213247,US 764213248,764214271,NL 764214272,764215295,GB 764215296,764216319,PL @@ -14009,7 +14086,9 @@ 764243968,764244991,FR 764244992,764245503,NL 764245504,764246015,IE -764246016,764247039,US +764246016,764246527,US +764246528,764246783,DE +764246784,764247039,US 764247040,764248063,NL 764248064,764249087,US 764249088,764250111,RO @@ -14043,13 +14122,12 @@ 764268544,764269567,RU 764269568,764270079,NL 764270080,764270335,BR -764270336,764270591,US +764270336,764270591,IT 764270592,764271615,NL 764271616,764272639,AU 764272640,764273663,TR 764273664,764274687,IT -764274688,764275455,TR -764275456,764275711,BG +764274688,764275711,TR 764275712,764276735,NL 764276736,764277759,ES 764277760,764278783,US @@ -14088,7 +14166,7 @@ 764304384,764306431,US 764306432,764307455,EE 764307456,764307967,DE -764307968,764308223,SG +764307968,764308223,JP 764308224,764308479,NL 764308480,764309503,FR 764309504,764310527,DE @@ -14118,8 +14196,7 @@ 764327936,764328959,IT 764328960,764329983,IR 764329984,764331007,RO -764331008,764331263,GB -764331264,764332031,JO +764331008,764332031,JO 764332032,764333055,CY 764333056,764334079,NL 764334080,764334847,RU @@ -14142,7 +14219,8 @@ 764344320,764345343,CA 764345344,764346367,RU 764346368,764347391,DE -764347392,764349439,US +764347392,764348671,US +764348672,764349439,LT 764349440,764350463,GB 764350464,764351487,DE 764351488,764352511,RU @@ -14199,7 +14277,7 @@ 764395776,764396031,US 764396032,764396287,NL 764396288,764396543,FR -764396544,764397567,NL +764396544,764397567,GB 764397568,764397823,BG 764397824,764398079,NL 764398080,764398335,RU @@ -14218,8 +14296,7 @@ 764409856,764410879,NL 764410880,764411903,US 764411904,764412159,DE -764412160,764412415,TR -764412416,764412927,RU +764412160,764412927,RU 764412928,764413951,EE 764413952,764414975,IE 764414976,764415999,ES @@ -14240,13 +14317,11 @@ 764427264,764428287,IT 764428288,764429311,RU 764429312,764430335,US -764430336,764430591,NL -764430592,764431103,AU -764431104,764431359,NL +764430336,764431359,NL 764431360,764432383,NO -764432384,764433407,US +764432384,764433407,AP 764433408,764434431,AT -764434432,764435455,PT +764434432,764435455,BR 764435456,764436479,FR 764436480,764437503,GB 764437504,764438527,IT @@ -14280,7 +14355,7 @@ 764464128,764465151,ES 764465152,764466175,AT 764466176,764466431,TR -764466432,764466687,NL +764466432,764466687,UA 764466688,764467199,TR 764467200,764468223,NL 764468224,764469247,RU @@ -14335,13 +14410,14 @@ 764500736,764500991,RU 764500992,764502015,DK 764502016,764504063,GB -764504064,764505087,JP +764504064,764505087,BR 764505088,764506111,NL 764506112,764507135,FR 764507136,764508159,RU 764508160,764509183,US 764509184,764510207,FR -764510208,764511231,US +764510208,764510719,US +764510720,764511231,NL 764511232,764512255,ES 764512256,764513279,GB 764513280,764514303,NL @@ -14388,8 +14464,7 @@ 764555264,764556287,SE 764556288,764556543,PL 764556544,764556799,NZ -764556800,764557055,HK -764557056,764557311,US +764556800,764557311,US 764557312,764558335,NL 764558336,764559359,US 764559360,764560383,RU @@ -14403,7 +14478,8 @@ 764567552,764568575,LU 764568576,764569599,NL 764569600,764570111,SG -764570112,764570623,US +764570112,764570367,ID +764570368,764570623,US 764570624,764571647,CZ 764571648,764572671,HK 764572672,764574463,US @@ -14416,9 +14492,7 @@ 764580864,764581887,ES 764581888,764582911,RU 764582912,764583935,GB -764583936,764584191,ES -764584192,764584447,TR -764584448,764584959,HK +764583936,764584959,EU 764584960,764586495,RU 764586496,764586751,UA 764586752,764587007,RU @@ -14442,7 +14516,8 @@ 764601344,764602367,RU 764602368,764603391,SI 764603392,764604415,DE -764604416,764605439,AU +764604416,764604927,IR +764604928,764605439,US 764605440,764606463,SK 764606464,764607487,FI 764607488,764608511,DE @@ -14454,8 +14529,7 @@ 764612608,764613631,ES 764613632,764614655,FR 764614656,764615679,HK -764615680,764616191,NL -764616192,764616447,US +764615680,764616447,NL 764616448,764616703,RU 764616704,764617727,US 764617728,764618751,DE @@ -14466,10 +14540,11 @@ 764622592,764622847,EU 764622848,764623359,DE 764623360,764623871,BZ -764623872,764624895,AU +764623872,764624383,AU +764624384,764624639,US +764624640,764624895,AU 764624896,764625919,PS -764625920,764626943,CA -764626944,764627967,SG +764625920,764627967,CA 764627968,764628991,IR 764628992,764630015,RU 764630016,764631039,US @@ -14561,8 +14636,7 @@ 764701696,764702719,FR 764702720,764703743,DE 764703744,764704767,LI -764704768,764705791,NL -764705792,764706047,DE +764704768,764706047,NL 764706048,764706303,US 764706304,764706559,AU 764706560,764706815,CN @@ -14570,7 +14644,7 @@ 764707840,764709887,US 764709888,764711935,NL 764711936,764712959,US -764712960,764713983,UA +764712960,764713983,NL 764713984,764715007,FR 764715008,764716031,EU 764716032,764716287,RU @@ -14606,7 +14680,7 @@ 764740608,764741631,EU 764741632,764743679,NL 764743680,764744703,AP -764744704,764745727,CA +764744704,764745727,BR 764745728,764746751,UA 764746752,764747775,BR 764747776,764748799,AT @@ -14645,12 +14719,12 @@ 764774400,764775423,DK 764775424,764776447,FR 764776448,764777471,NL -764777472,764778495,AP +764777472,764778495,US 764778496,764779519,FR 764779520,764780543,JP 764780544,764781823,US 764781824,764782335,DE -764782336,764782591,GB +764782336,764782591,US 764782592,764783615,NL 764783616,764784127,US 764784128,764784639,GB @@ -14672,7 +14746,8 @@ 764797952,764798975,ES 764798976,764799999,UA 764800000,764801023,CH -764801024,764801535,BG +764801024,764801279,ES +764801280,764801535,BG 764801536,764802047,DE 764802048,764803071,RU 764803072,764804095,NL @@ -14692,7 +14767,7 @@ 764815360,764816383,NL 764816384,764817407,MD 764817408,764818431,US -764818432,764818687,JP +764818432,764818687,DE 764818688,764818943,AU 764818944,764819455,JP 764819456,764819711,DE @@ -14716,10 +14791,10 @@ 764828928,764829183,NZ 764829184,764829439,PL 764829440,764829695,NL -764829696,764830719,AT +764829696,764830719,US 764830720,764831743,LI 764831744,764832767,NL -764832768,764833023,RU +764832768,764833023,IL 764833024,764833791,US 764833792,764834047,DE 764834048,764834815,RU @@ -14730,13 +14805,11 @@ 764839936,764840959,DE 764840960,764841983,AU 764841984,764843007,US -764843008,764844031,FR +764843776,764844031,?? 764844032,764845055,DE 764845056,764846079,NL 764846080,764847103,SE -764847104,764849151,US -764849152,764849407,TR -764849408,764849663,US +764847104,764849663,US 764849664,764850175,TR 764850176,764851199,SE 764851200,764852223,MD @@ -14754,7 +14827,8 @@ 764863488,764864511,GB 764864512,764865535,NL 764865536,764866559,AP -764866560,764867327,GB +764866560,764866815,IE +764866816,764867327,GB 764867328,764867583,UA 764867584,764868607,NL 764868608,764869631,FR @@ -14782,10 +14856,10 @@ 764890112,764891135,IQ 764891136,764892159,TR 764892160,764893183,NL -764893184,764893439,BG +764893184,764893439,TR 764893440,764893695,GB -764893696,764893951,US -764893952,764895231,DE +764893696,764894207,US +764894208,764895231,DE 764895232,764895487,AP 764895488,764896255,RU 764896256,764898303,NL @@ -14821,7 +14895,7 @@ 764925696,764925951,DE 764925952,764926975,PL 764926976,764927999,FR -764928000,764929023,DE +764928000,764929023,ES 764929024,764930559,RU 764930560,764931071,IQ 764931072,764932095,UA @@ -14844,7 +14918,10 @@ 764945408,764945919,US 764945920,764946431,IT 764946432,764947455,AT -764947456,764948479,DE +764947456,764947711,BR +764947712,764947967,DE +764947968,764948223,BR +764948224,764948479,DE 764948480,764949503,NO 764949504,764950527,AT 764950528,764951039,NL @@ -14889,10 +14966,9 @@ 764983040,764983295,ES 764983296,764984319,FR 764984320,764984831,NL -764984832,764985343,DE -764985344,764986623,NL -764986624,764986879,GB -764986880,764988159,NL +764984832,764985087,DE +764985088,764985343,US +764985344,764988159,NL 764988160,764988415,FR 764988416,764989439,DE 764989440,764990463,NL @@ -14905,7 +14981,7 @@ 764994304,764995583,DE 764995584,764996607,GB 764996608,764997631,NL -764997632,764998655,LT +764997632,764998655,GB 764998656,764999679,DE 764999680,765000703,NL 765000704,765001727,GB @@ -14915,7 +14991,8 @@ 765004800,765005823,RU 765005824,765006847,NL 765006848,765007103,GB -765007104,765008895,NL +765007104,765007871,NL +765007872,765008895,DE 765008896,765009919,RU 765009920,765010943,NL 765010944,765011967,DE @@ -14946,9 +15023,9 @@ 765031424,765032447,IQ 765032448,765033471,SE 765033472,765033727,ES -765033728,765033983,RU +765033728,765033983,GB 765033984,765034495,US -765034496,765035519,AP +765034496,765035519,HK 765035520,765036543,GB 765036544,765037567,CH 765037568,765038591,AT @@ -14977,8 +15054,9 @@ 765053952,765054975,FR 765054976,765055999,UA 765056000,765057023,AM -765057024,765057791,NL -765057792,765058047,TR +765057024,765057535,NL +765057536,765057791,US +765057792,765058047,NL 765058048,765059071,US 765059072,765059839,RU 765059840,765060095,DE @@ -14989,8 +15067,7 @@ 765061120,765062143,AT 765062144,765063167,AU 765063168,765064191,DE -765064192,765065215,US -765065216,765066239,TR +765064192,765066239,US 765066240,765067263,NL 765067264,765067519,RU 765067520,765067775,KZ @@ -15023,7 +15100,7 @@ 765089792,765090815,GE 765090816,765091839,DE 765091840,765092351,FR -765092352,765092607,HK +765092352,765092607,DE 765092608,765092863,FR 765092864,765093887,IE 765093888,765094911,US @@ -15043,9 +15120,9 @@ 765104128,765105151,PL 765105152,765106175,GB 765106176,765107199,US -765107200,765107455,TR -765107456,765107711,KR -765107712,765108223,TR +765107200,765107711,GB +765107712,765107967,KR +765107968,765108223,TR 765108224,765109247,RU 765109248,765110271,NL 765110272,765111295,FR @@ -15099,12 +15176,13 @@ 765149184,765150207,GB 765150208,765151231,NL 765151232,765152255,TR -765152256,765152511,CH +765152256,765152511,NL 765152512,765152767,AL 765152768,765153279,CH 765153280,765154303,UA 765154304,765155327,DE -765155328,765156351,PH +765155328,765155839,HK +765155840,765156351,PH 765156352,765157375,RU 765157376,765158399,SE 765158400,765159423,GB @@ -15123,7 +15201,7 @@ 765171712,765172735,SE 765172736,765173759,NL 765173760,765174783,CA -765174784,765175807,US +765174784,765175807,GB 765175808,765176831,FR 765176832,765177855,DE 765177856,765178879,FR @@ -15183,7 +15261,7 @@ 765230080,765231103,DE 765231104,765232127,HU 765232128,765233151,FR -765233152,765234175,HU +765233152,765234175,CY 765234176,765235199,MK 765235200,765236223,US 765236224,765237247,RU @@ -15225,8 +15303,8 @@ 765272064,765272831,NL 765272832,765273087,IT 765273088,765273343,US -765273344,765273599,RU -765273600,765274111,US +765273344,765273855,NL +765273856,765274111,US 765274112,765275135,GB 765275136,765276159,DE 765276160,765277183,NL @@ -15258,8 +15336,8 @@ 765294336,765294591,EU 765294592,765295615,NL 765295616,765296639,DE -765296640,765297151,US -765297152,765298687,NL +765296640,765297663,US +765297664,765298687,NL 765298688,765298943,RU 765298944,765299199,DE 765299200,765299711,NL @@ -15295,7 +15373,7 @@ 765328384,765329407,SI 765329408,765330431,ES 765330432,765331455,PL -765331456,765332479,US +765331456,765332479,NL 765332480,765333503,TR 765333504,765334527,RS 765334528,765335551,HK @@ -15303,15 +15381,16 @@ 765336576,765337599,BG 765337600,765338367,US 765338368,765338623,HK -765338624,765338879,NL -765338880,765340671,DE +765338624,765339135,NL +765339136,765340671,DE 765340672,765340927,US 765340928,765341183,RU 765341184,765341439,NL 765341440,765341695,RU 765341696,765342719,UA 765342720,765343743,EE -765343744,765344767,US +765343744,765344511,US +765344512,765344767,TR 765344768,765345791,EU 765345792,765346815,DE 765346816,765347839,FR @@ -15332,7 +15411,7 @@ 765360128,765361151,IR 765361152,765362175,GB 765362176,765363199,UA -765363200,765364223,RO +765363200,765364223,GB 765364224,765365247,TR 765365248,765366271,LU 765366272,765367295,IE @@ -15352,7 +15431,8 @@ 765376512,765377535,NL 765377536,765378559,RU 765378560,765379583,CA -765379584,765380351,US +765379584,765380095,NL +765380096,765380351,US 765380352,765380607,NL 765380608,765381631,US 765381632,765382655,NL @@ -15415,7 +15495,7 @@ 765427712,765427967,IL 765427968,765428223,US 765428224,765428735,IL -765428736,765429759,RO +765428736,765429759,GB 765429760,765430783,RU 765430784,765432831,NL 765432832,765433855,IR @@ -15557,7 +15637,7 @@ 765721600,765725695,BR 765725696,765726719,DO 765726720,765727743,AR -765727744,765728767,MX +765727744,765728767,US 765728768,765739007,BR 765739008,765740031,EC 765740032,765750271,BR @@ -15603,7 +15683,9 @@ 765878272,765879295,BR 765879296,765880319,MX 765880320,765881343,BR -765881344,765882367,MX +765881344,765881855,US +765881856,765882111,MX +765882112,765882367,US 765882368,765890559,BR 765890560,765891583,CL 765891584,765898751,BR @@ -15678,7 +15760,10 @@ 766074880,766075135,PA 766075136,766075391,BR 766075392,766075903,CO -766075904,766076927,PE +766075904,766076159,US +766076160,766076415,EC +766076416,766076671,PA +766076672,766076927,PE 766076928,766077951,AR 766077952,766078975,BR 766078976,766079999,PY @@ -15702,7 +15787,8 @@ 766115072,766115327,CO 766115328,766117887,BR 766117888,766118911,AR -766118912,766119935,HN +766118912,766119167,DE +766119168,766119935,US 766119936,766123007,BR 766123008,766124031,SV 766124032,766125055,HN @@ -15718,7 +15804,9 @@ 766144512,766147583,BR 766147584,766148607,CO 766148608,766149631,PY -766149632,766150655,CO +766149632,766150143,CO +766150144,766150399,AR +766150400,766150655,CL 766150656,766162943,BR 766162944,766163967,AR 766163968,766164991,MX @@ -15730,7 +15818,9 @@ 766175232,766176255,SV 766176256,766177279,BR 766177280,766178303,CO -766178304,766181375,MX +766178304,766178559,MX +766178560,766180863,US +766180864,766181375,MX 766181376,766190591,BR 766190592,766191615,AR 766191616,766193663,BR @@ -15761,7 +15851,9 @@ 766237696,766238719,CL 766238720,766239743,AR 766239744,766248959,BR -766248960,766249983,PE +766248960,766249215,PE +766249216,766249471,ES +766249472,766249983,PE 766249984,766251007,BR 766251008,766252031,AR 766252032,766253055,BR @@ -15813,7 +15905,7 @@ 766345216,766346239,CL 766346240,766355455,BR 766355456,766356479,AR -766356480,766358527,BR +766356480,766358783,BR 766358784,766359551,AR 766359552,766361599,BR 766361600,766362623,AR @@ -15924,7 +16016,10 @@ 766570496,766574591,BR 766574592,766575615,DO 766575616,766578687,BR -766578688,766579711,PY +766578688,766578943,PY +766578944,766579199,GT +766579200,766579455,PY +766579456,766579711,GT 766579712,766580735,PE 766580736,766584831,BR 766584832,766585855,MX @@ -15971,7 +16066,6 @@ 766657536,766658559,AR 766658560,766659583,MX 766659584,766660607,BR -766660608,766661631,?? 766661632,766662655,AR 766662656,766663679,MX 766663680,766664703,BR @@ -16038,7 +16132,7 @@ 766799872,766800127,CO 766800128,766800383,BR 766800384,766800639,PY -766800896,766801919,BR +766800640,766801919,BR 766801920,766802943,BZ 766802944,766803967,EC 766803968,766807039,BR @@ -16116,7 +16210,7 @@ 766949376,766949887,BR 766949888,766950399,AR 766950400,766950655,NI -766950656,766950911,BR +766950656,766950911,RU 766950912,766951423,CO 766951424,766958591,BR 766958592,766959615,AR @@ -16189,7 +16283,7 @@ 767107072,767109887,BR 767109888,767110143,CR 767110144,767112191,BR -767112192,767113215,HN +767112192,767113215,US 767113216,767131647,BR 767131648,767132671,PA 767132672,767136767,BR @@ -16227,7 +16321,7 @@ 767200768,767201279,BR 767201280,767202303,VE 767202304,767203327,CL -767203328,767204351,HN +767203328,767204351,US 767204352,767215615,BR 767215616,767216639,VE 767216640,767217663,AR @@ -16328,7 +16422,7 @@ 767430400,767430655,AR 767430656,767431679,CL 767431680,767442943,BR -767442944,767443967,HN +767442944,767443967,US 767443968,767446015,BR 767446016,767447039,MX 767447040,767448063,BR @@ -16352,7 +16446,9 @@ 767477760,767486975,BR 767486976,767489023,MX 767489024,767492095,BR -767492096,767493119,CO +767492096,767492351,CL +767492352,767492607,AR +767492608,767493119,CO 767493120,767494143,AR 767494144,767503359,BR 767503360,767504383,CO @@ -16400,7 +16496,10 @@ 767623168,767688703,AP 767688704,767695359,US 767695360,767695615,IQ -767695616,767702783,US +767695616,767695871,TR +767695872,767700991,US +767700992,767702015,DO +767702016,767702783,US 767702784,767703039,EC 767703040,767705087,TW 767705088,767713279,US @@ -16412,13 +16511,16 @@ 767755264,767755519,ZA 767755520,767756031,NG 767756032,767756287,KE -767756288,767758335,AP +767756288,767756799,US +767756800,767757055,AP +767757056,767758079,US +767758080,767758335,AP 767758336,767760895,HK 767760896,767761407,DO 767761408,767762431,PH 767762432,767770111,HK -767770112,767772159,AP -767772160,767772671,US +767770112,767771647,AP +767771648,767772671,US 767772672,767773439,HK 767773440,767773695,US 767773696,767773951,DO @@ -16448,9 +16550,7 @@ 767792640,767793151,HK 767793152,767793407,AP 767793408,767793663,US -767793664,767793919,AP -767793920,767794175,US -767794176,767795199,AP +767793664,767795199,AP 767795200,767804415,HK 767804416,767804927,US 767804928,767805439,HK @@ -16466,22 +16566,25 @@ 767817728,767818239,ID 767818240,767818495,EU 767818496,767819775,HK -767819776,767827711,US +767819776,767823871,US +767823872,767825919,IN +767825920,767827711,US 767827712,767827967,ID 767827968,767836159,US 767836160,767852543,AP 767852544,767868927,US 767868928,767885311,HK 767885312,767887359,ZA -767887360,767889407,US -767889408,767901695,ZA +767887360,767893503,US +767893504,767901695,ZA 767901696,767918079,AP 767918080,767924479,HK 767924480,767924735,US 767924736,767925247,HK 767925248,767925503,US 767925504,767926271,HK -767926272,767950847,US +767926272,767934463,US +767934464,767950847,ZA 767950848,768016383,PK 768016384,768049151,AP 768049152,768053247,NL @@ -16491,7 +16594,9 @@ 768057344,768061951,US 768061952,768062207,NP 768062208,768063231,HK -768063232,768081919,US +768063232,768063487,US +768063488,768063743,PE +768063744,768081919,US 768081920,768085503,HK 768085504,768086527,JP 768086528,768104447,HK @@ -16545,8 +16650,7 @@ 768410624,768411647,AU 768411648,768425983,US 768425984,768434175,ZA -768434176,768438271,SA -768438272,768442367,ZA +768434176,768442367,SA 768442368,768450559,HK 768450560,768451327,US 768451328,768452095,HK @@ -16560,7 +16664,9 @@ 768475136,768540671,PK 768540672,768541695,US 768541696,768542207,AP -768542208,768546815,HK +768542208,768545791,HK +768545792,768546047,GB +768546048,768546815,HK 768546816,768547839,AP 768547840,768556543,HK 768556544,768557055,AP @@ -16579,7 +16685,9 @@ 769409024,769425407,US 769425408,769458175,ZA 769458176,769459199,MU -769459200,769460223,CD +769459200,769459455,CD +769459456,769459711,CR +769459712,769460223,CD 769460224,769461247,UG 769461248,769462271,ZA 769462272,769464319,MU @@ -16621,6 +16729,7 @@ 769680384,769682431,AR 769682432,769684479,BR 769684480,769685503,EC +769685504,769686527,BR 769686528,769687551,AR 769687552,769690623,BR 769690624,769691647,AR @@ -16637,9 +16746,12 @@ 769706496,769706751,CR 769706752,769707007,AR 769707008,769713151,BR -769713152,769714175,HN +769713152,769713407,US +769713408,769713663,HN +769713664,769714175,US 769714176,769719295,BR -769719296,769720319,HN +769719296,769719551,HN +769719552,769720319,US 769720320,769721343,AR 769721344,769727487,BR 769727488,769728511,AR @@ -16922,7 +17034,8 @@ 770244608,770245631,BR 770245632,770246655,CO 770246656,770260991,BR -770260992,770262015,GT +770260992,770261759,GT +770261760,770262015,PA 770262016,770263039,AR 770263040,770264063,CO 770264064,770268159,BR @@ -17031,12 +17144,13 @@ 770519040,770520063,DO 770520064,770521087,AR 770521088,770528255,BR -770528256,770529279,HN +770528256,770529279,US 770529280,770530303,TT 770530304,770540543,BR 770540544,770542591,CL 770542592,770549759,BR -770549760,770550783,HN +770549760,770550271,HN +770550272,770550783,US 770550784,770551807,PE 770551808,770552831,AR 770552832,770553855,BR @@ -17061,7 +17175,7 @@ 770609152,770610175,CO 770610176,770611199,BR 770611200,770612223,CL -770612224,770613247,HN +770612224,770613247,US 770613248,770617343,BR 770617344,770617855,CL 770617856,770618111,BR @@ -17173,7 +17287,9 @@ 771349504,771350527,ID 771351552,771355647,IN 771355648,771356671,HK -771356672,771361791,IN +771356672,771358719,IN +771358720,771358975,AP +771358976,771361791,IN 771361792,771363839,CN 771363840,771364863,BD 771364864,771365119,GB @@ -17218,7 +17334,7 @@ 771436544,771437567,IN 771437568,771438591,CN 771438592,771439615,BD -771439616,771440639,IN +771439616,771440639,LT 771440640,771441663,HK 771441664,771442687,IN 771442688,771443711,ID @@ -17234,12 +17350,12 @@ 771482624,771483647,BD 771483648,771485695,IN 771485696,771486207,JP -771486208,771486719,AP +771486208,771486719,HK 771486720,771487743,IN 771488768,771489791,IN 771489792,771503103,CN 771503104,771505151,BD -771505152,771506175,AP +771505152,771506175,HK 771506176,771507199,TH 771507200,771511295,IN 771511296,771535871,CN @@ -17294,9 +17410,11 @@ 771751936,771817471,RU 771817472,771948543,TR 771948544,771949567,EU -771949568,771966975,RU -771966976,771969023,US -771969024,771990527,RU +771949568,771956735,RU +771956736,771960831,US +771960832,771977215,RU +771977216,771978239,HK +771978240,771990527,RU 771990528,771991551,HK 771991552,772001791,RU 772001792,772003839,US @@ -17306,7 +17424,8 @@ 772210688,772276223,IE 772276224,772277247,RU 772277248,772278783,CZ -772278784,772282623,RU +772278784,772282367,RU +772282368,772282623,CZ 772282624,772282879,KZ 772282880,772283135,RU 772283136,772283391,KG @@ -17336,12 +17455,14 @@ 772315392,772317183,RU 772317184,772321279,CZ 772321280,772323327,HK -772323328,772325887,CZ +772323328,772323583,NL +772323584,772325375,BY +772325376,772325887,CZ 772325888,772326399,US 772326400,772327423,HK 772327424,772327935,US 772327936,772328191,HK -772328192,772328447,US +772328192,772328447,NL 772328448,772329471,CZ 772329472,772339967,RU 772339968,772340223,KZ @@ -17653,7 +17774,9 @@ 773654528,773656575,RU 773656576,773658623,PL 773658624,773659647,US -773659648,773660671,ES +773659648,773660159,ES +773660160,773660415,HN +773660416,773660671,ES 773660672,773662719,AT 773662720,773664767,DE 773664768,773666815,ES @@ -17762,11 +17885,9 @@ 773865472,773873663,RU 773873664,773881855,JO 773881856,773890047,DK -773890048,773891839,AZ -773891840,773892351,TR -773892352,773895167,AZ -773895168,773897215,TR -773897216,773898239,AZ +773890048,773895167,AZ +773895168,773896191,TR +773896192,773898239,AZ 773898240,773906431,PS 773906432,773922815,GB 773922816,773931007,UA @@ -17823,18 +17944,19 @@ 774176768,774184959,IT 774184960,774193151,GB 774193152,774201599,ES -774201600,774202111,US -774202112,774202367,TR -774202368,774202623,US -774202624,774202879,GB -774202880,774203391,US +774201600,774201855,US +774201856,774202367,TR +774202368,774203391,US 774203392,774203647,GB -774203648,774204159,US -774204160,774204927,GB +774203648,774204415,US +774204416,774204671,GB +774204672,774204927,US 774204928,774205183,DE -774205184,774205951,GB -774205952,774206207,US -774206208,774206463,GB +774205184,774205439,US +774205440,774205695,GB +774205696,774205951,US +774205952,774206207,TR +774206208,774206463,US 774206464,774206719,TR 774206720,774206975,US 774206976,774207231,ES @@ -17949,7 +18071,7 @@ 778463232,778463487,RO 778463488,778463743,GB 778463744,778463999,TR -778464000,778464255,GG +778464000,778464255,IM 778464256,778465279,RO 778465280,778466303,IT 778466304,778466815,GB @@ -17967,7 +18089,7 @@ 778480128,778480639,GB 778480640,778480895,NL 778480896,778481151,RO -778481152,778481407,TR +778481152,778481407,US 778481408,778481663,RO 778481664,778481919,NL 778481920,778482687,GB @@ -17997,14 +18119,12 @@ 778678272,778678527,DE 778678528,778698751,FR 778698752,778764287,TR -778764288,778767871,HU -778767872,778768383,RO -778768384,778825471,HU +778764288,778825471,HU 778825472,778825727,BG 778825728,778829823,HU 778829824,778895359,DE 778895360,778960895,LV -778960896,779026431,DE +778960896,779026431,US 779026432,779091967,RU 779091968,779223039,PL 779223040,779354111,DE @@ -18144,20 +18264,15 @@ 782313728,782314495,RU 782314496,782315519,NL 782315520,782317567,RU -782317568,782317823,AU -782317824,782318079,IL -782318080,782318335,IN -782318336,782318591,JP -782318592,782318847,NL -782318848,782319103,DE -782319104,782319359,UA -782319360,782319615,BY +782317568,782319615,NL 782319616,782335999,ME 782336000,782352383,RU 782352384,782354943,IQ 782354944,782356479,SY -782356480,782357503,GB -782357504,782360575,NL +782356480,782357503,US +782357504,782358527,NL +782358528,782359551,US +782359552,782360575,NL 782360576,782368767,YE 782368768,782385151,UA 782385152,782401535,SE @@ -18208,7 +18323,8 @@ 783142912,783147007,RU 783147008,783151103,FI 783151104,783153151,US -783153152,783155199,RO +783153152,783154175,DE +783154176,783155199,RO 783155200,783157247,PL 783157248,783159295,RU 783159296,783161343,CZ @@ -18543,7 +18659,9 @@ 786950144,786952191,DE 786952192,786953215,FR 786953216,786956287,NL -786956288,786968575,RU +786956288,786960383,RU +786960384,786961407,US +786961408,786968575,RU 786968576,786972671,EU 786972672,786984959,RU 786984960,786987007,US @@ -18702,7 +18820,8 @@ 787729664,787730175,RU 787730176,787730687,NL 787730688,787731711,RU -787731712,787732223,NL +787731712,787731967,PL +787731968,787732223,NL 787732224,787732479,LU 787732480,787732991,NL 787732992,787733759,RU @@ -18773,7 +18892,11 @@ 787905536,787906559,SE 787906560,787939327,GR 787939328,787972095,GB -787972096,787975679,FR +787972096,787974143,FR +787974144,787974655,DE +787974656,787975167,FR +787975168,787975423,AT +787975424,787975679,FR 787975680,787980287,US 787980288,787988479,FR 787988480,787996671,AT @@ -18911,7 +19034,7 @@ 788421632,788422655,RU 788422656,788424703,FI 788424704,788424959,ES -788424960,788425215,US +788424960,788425215,BR 788425216,788425727,UA 788425728,788425983,NL 788425984,788426495,RU @@ -19019,7 +19142,9 @@ 825419776,825420799,TH 825420800,825421823,MY 825421824,825425919,NZ -825425920,825491455,US +825425920,825458687,US +825458688,825466879,DE +825466880,825491455,US 825491456,825753599,CN 825753600,826277887,KR 826277888,828375039,CN @@ -19139,7 +19264,17 @@ 845418496,845419007,CA 845419008,845420287,US 845420288,845545471,CA -845545472,846364159,US +845545472,846341119,US +846341120,846341631,NL +846341632,846341887,US +846341888,846342143,NL +846342144,846346751,US +846346752,846347007,NL +846347008,846347519,US +846347520,846347775,NL +846347776,846348031,US +846348032,846348287,NL +846348288,846364159,US 846364160,846364415,NL 846364416,846442495,US 846442496,846446591,CA @@ -19157,7 +19292,8 @@ 856227840,856621055,GB 856621056,856653823,NL 856653824,856686591,FR -856686592,856883199,DE +856686592,856817663,IL +856817664,856883199,DE 856883200,856948735,GB 856948736,857210879,FR 857210880,857800703,DE @@ -19224,9 +19360,7 @@ 860146688,860147711,GB 860147712,860148479,FR 860148480,860149759,GB -860149760,860150015,FR -860150016,860150271,GB -860150272,860150783,FR +860149760,860150783,FR 860150784,860151295,GB 860151296,860155903,FR 860155904,860156159,PL @@ -19441,11 +19575,11 @@ 867368960,867401727,IT 867401728,867434495,GB 867434496,867565567,US -867565568,867696639,IT +867565568,867696639,GB 867696640,867827711,US 867827712,867958783,GB 867958784,868089855,US -868089856,868220927,IT +868089856,868220927,GB 868220928,868351999,US 868352000,868417535,GB 868417536,868417791,PL @@ -19846,10 +19980,13 @@ 886817536,886819071,JP 886819072,886819327,US 886819328,886820863,KR -886820864,886833151,US +886820864,886821631,DE +886821632,886833151,US 886833152,886964223,SG 886964224,889192447,US -889192448,905969663,DE +889192448,897581055,DE +897581056,897581311,NL +897581312,905969663,DE 905969664,908328959,US 908328960,908334591,FR 908334592,908334847,GB @@ -20026,7 +20163,21 @@ 922484736,922615807,AU 922615808,922746879,SG 922746880,956301311,US -956301312,960561151,BE +956301312,956366847,CH +956366848,956432383,BE +956432384,956563455,CH +956563456,956825599,BE +956825600,957677567,CH +957677568,957743103,BE +957743104,958267391,CH +958267392,958398463,BE +958398464,958595071,CH +958595072,958660607,BE +958660608,958791679,CH +958791680,958857215,BE +958857216,959381503,CH +959381504,959447039,BE +959447040,960561151,CH 960561152,960626687,DE 960626688,960659455,GB 960659456,960692223,DE @@ -20091,7 +20242,7 @@ 961207296,961208319,UY 961208320,961212415,VE 961212416,961216511,BE -961216512,961282047,EU +961216512,961282047,CH 961282048,961314815,MX 961314816,961363967,US 961363968,961380351,BE @@ -20152,7 +20303,8 @@ 961781760,961785855,LS 961785856,961794047,BE 961794048,961798143,MG -961798144,961871871,BE +961798144,961806335,BE +961806336,961871871,CH 961871872,961937407,DE 961937408,961945599,RU 961945600,961953791,FI @@ -20266,9 +20418,10 @@ 964689920,964952063,FR 964952064,965017599,US 965017600,965083135,GB -965083136,965115903,?? -965148672,968097791,CH -968097792,968622079,BE +965083136,965148671,CA +965148672,967835647,CH +967835648,968097791,US +968097792,968622079,CH 968622080,968623103,GB 968623104,968623359,JO 968623360,968623615,BE @@ -20301,25 +20454,47 @@ 968637696,968637951,SG 968637952,968638207,BE 968638208,968638463,IN -968638464,968753151,BE +968638464,968687615,BE +968687616,968753151,CH 968753152,968761343,NL 968761344,968818687,CH 968818688,968867839,BE 968867840,968884223,DE -968884224,968949759,BE -968949760,969015295,CH -969015296,969226751,BE +968884224,969015295,CH +969015296,969146367,BE +969146368,969211903,CH +969211904,969226751,BE 969226752,969227007,HK 969227008,969227263,US 969227264,969227519,GB 969227520,969227775,US 969227776,969228031,SG 969228032,969228287,NL -969228288,972423167,BE +969228288,969277439,BE +969277440,969342975,CH +969342976,969474047,BE +969474048,969539583,CH +969539584,969670655,BE +969670656,969736191,CH +969736192,969801727,BE +969801728,969867263,CH +969867264,970981375,BE +970981376,971374591,CH +971374592,971440127,BE +971440128,971571199,CH +971571200,971702271,BE +971702272,971767807,CH +971767808,971833343,BE +971833344,971898879,CH +971898880,971964415,BE +971964416,972095487,CH +972095488,972226559,BE +972226560,972423167,CH 972423168,972488703,EU -972488704,972750847,BE -972750848,972816383,EU -972816384,973078527,BE +972488704,972685311,CH +972685312,972750847,BE +972750848,972947455,CH +972947456,973078527,BE 973078528,973209599,JP 973209600,973275135,IN 973275136,973471743,JP @@ -20630,7 +20805,7 @@ 1023950848,1023954943,ID 1023954944,1023959039,JP 1023959040,1023967231,AU -1023967232,1023975423,IN +1023967232,1023975423,DE 1023975424,1023979519,CN 1023979520,1023983615,CA 1023983616,1023999999,SG @@ -20873,12 +21048,12 @@ 1040187392,1040252927,IL 1040252928,1040318463,GR 1040318464,1040383999,CH -1040384000,1040384255,DE +1040384000,1040384255,US 1040384256,1040384511,ID -1040384512,1040385023,US +1040384512,1040385023,IT 1040385024,1040385279,ID 1040385280,1040385535,NL -1040385536,1040385791,DE +1040385536,1040385791,HK 1040385792,1040386047,ID 1040386048,1040386559,DE 1040386560,1040387071,US @@ -20898,8 +21073,7 @@ 1040390400,1040390655,DE 1040390656,1040390911,UA 1040390912,1040391167,PL -1040391168,1040391423,DE -1040391424,1040391679,RO +1040391168,1040391679,RO 1040391680,1040391935,GE 1040391936,1040392191,ID 1040392192,1040392447,DE @@ -20933,9 +21107,7 @@ 1040399872,1040400127,NL 1040400128,1040400383,RU 1040400384,1040416767,GB -1040416768,1040418815,SE -1040418816,1040419071,KZ -1040419072,1040424959,SE +1040416768,1040424959,SE 1040424960,1040433151,PL 1040433152,1040449535,GB 1040449536,1040457727,FR @@ -21037,7 +21209,9 @@ 1041728256,1041728767,IT 1041728768,1041729023,FR 1041729024,1041729279,IT -1041729280,1041730815,FR +1041729280,1041730303,FR +1041730304,1041730559,GB +1041730560,1041730815,FR 1041730816,1041731071,IT 1041731072,1041733887,FR 1041733888,1041734143,IT @@ -21129,7 +21303,9 @@ 1042304512,1042305023,KZ 1042305024,1042306047,RU 1042306048,1042306559,KZ -1042306560,1042309119,RU +1042306560,1042308095,RU +1042308096,1042308607,KZ +1042308608,1042309119,RU 1042309120,1042317311,GB 1042317312,1042350079,ES 1042350080,1042415615,RU @@ -21213,8 +21389,8 @@ 1043900416,1043901183,UG 1043901184,1043906559,GB 1043906560,1043910655,ES -1043910656,1043912703,GB -1043912704,1043913215,ZM +1043910656,1043912959,GB +1043912960,1043913215,UG 1043913216,1043913471,SS 1043913472,1043916799,GB 1043916800,1043917055,NG @@ -21261,7 +21437,9 @@ 1044496384,1044512767,EE 1044512768,1044578303,DK 1044578304,1044578559,DE -1044578560,1044580863,GB +1044578560,1044579583,GB +1044579584,1044579839,DE +1044579840,1044580863,GB 1044580864,1044581119,DE 1044581120,1044581375,GB 1044581376,1044581887,DE @@ -21288,9 +21466,7 @@ 1044594176,1044594431,GB 1044594432,1044594943,DE 1044594944,1044595199,GB -1044595200,1044595455,DE -1044595456,1044595711,GB -1044595712,1044596223,DE +1044595200,1044596223,DE 1044596224,1044626175,GB 1044626176,1044626431,DK 1044626432,1044627711,GB @@ -21330,14 +21506,15 @@ 1044660992,1044661247,SE 1044661248,1044661759,NL 1044661760,1044662015,BG -1044662016,1044662783,NL +1044662016,1044662527,NL +1044662528,1044662783,TR 1044662784,1044663039,UA 1044663040,1044663295,DE 1044663296,1044663551,NL 1044663552,1044663807,FR 1044663808,1044664063,ES 1044664064,1044664319,LT -1044664320,1044664575,GB +1044664320,1044664575,IT 1044664576,1044664831,NL 1044664832,1044665087,DE 1044665088,1044665343,UA @@ -21398,9 +21575,7 @@ 1045020672,1045037055,NO 1045037056,1045119231,GR 1045119232,1045119743,AL -1045119744,1045129983,GR -1045129984,1045130495,KZ -1045130496,1045135359,GR +1045119744,1045135359,GR 1045135360,1045168127,DE 1045168128,1045205503,RU 1045205504,1045206015,US @@ -21534,7 +21709,7 @@ 1046791168,1046792191,IT 1046792192,1046793215,NL 1046793216,1046794239,GB -1046794240,1046794495,MX +1046794240,1046794495,BR 1046794496,1046794751,US 1046794752,1046796287,GB 1046796288,1046797311,US @@ -21609,7 +21784,7 @@ 1047157760,1047158015,RO 1047158016,1047158271,CH 1047158272,1047158527,TR -1047158528,1047158783,DE +1047158528,1047158783,SK 1047158784,1047166975,RU 1047166976,1047199743,FR 1047199744,1047265279,DK @@ -22691,7 +22866,9 @@ 1053341440,1053343999,EU 1053344000,1053344255,FI 1053344256,1053344511,GB -1053344512,1053347839,EU +1053344512,1053346815,EU +1053346816,1053347327,NL +1053347328,1053347839,EU 1053347840,1053348351,NL 1053348352,1053348863,EU 1053348864,1053349119,NL @@ -22704,9 +22881,7 @@ 1053354240,1053360127,EU 1053360128,1053364223,ES 1053364224,1053368319,CZ -1053368320,1053373183,SE -1053373184,1053373439,KZ -1053373440,1053376511,SE +1053368320,1053376511,SE 1053376512,1053392895,HU 1053392896,1053401087,FR 1053401088,1053409279,DE @@ -22716,7 +22891,7 @@ 1053564928,1053565183,RU 1053565184,1053565439,NL 1053565440,1053566207,RU -1053566208,1053566463,CY +1053566208,1053566463,TR 1053566464,1053566719,RU 1053566720,1053566975,NL 1053566976,1053567231,SE @@ -22852,7 +23027,7 @@ 1054277632,1054343167,KW 1054343168,1054351359,NL 1054351360,1054359551,UA -1054359552,1054361599,RO +1054359552,1054361599,US 1054361600,1054362623,GB 1054362624,1054363647,DE 1054363648,1054364671,GB @@ -22869,7 +23044,8 @@ 1054416896,1054425087,DE 1054425088,1054441471,GR 1054441472,1054449663,AZ -1054449664,1054457855,RU +1054449664,1054453759,NL +1054453760,1054457855,RU 1054457856,1054474239,RO 1054474240,1054539775,AT 1054539776,1054605311,IL @@ -23045,7 +23221,9 @@ 1071483648,1073115135,US 1073115136,1073115391,SE 1073115392,1073115647,IE -1073115648,1073124351,US +1073115648,1073121023,US +1073121024,1073121279,BR +1073121280,1073124351,US 1073124352,1073124607,AT 1073124608,1073126655,US 1073126656,1073126911,GB @@ -23148,10 +23326,14 @@ 1076578560,1076578815,ES 1076578816,1076579327,SE 1076579328,1076579583,US -1076579584,1076579839,RO +1076579584,1076579839,DK 1076579840,1076580351,IT 1076580352,1076584447,GB -1076584448,1076592639,US +1076584448,1076584959,IT +1076584960,1076585471,NL +1076585472,1076590591,US +1076590592,1076591615,DE +1076591616,1076592639,US 1076592640,1076609023,IE 1076609024,1076690943,US 1076690944,1076707327,SG @@ -23216,7 +23398,7 @@ 1078820864,1078897151,US 1078897152,1078897663,HK 1078897664,1079318527,US -1079318528,1079319039,?? +1079318528,1079319039,BR 1079319552,1079320575,US 1079320576,1079328767,CA 1079328768,1079459839,US @@ -23457,9 +23639,7 @@ 1091751936,1091756031,CY 1091756032,1091862527,US 1091862528,1091895295,IQ -1091895296,1091899135,FI -1091899136,1091899391,DE -1091899392,1091917311,FI +1091895296,1091917311,FI 1091917312,1091917567,DE 1091917568,1091960831,FI 1091960832,1092075519,US @@ -23600,11 +23780,10 @@ 1110929408,1110933503,BM 1110933504,1111195647,US 1111195648,1111212031,CA -1111212032,1111212287,US +1111212032,1111212543,US 1111212800,1111218175,US 1111218176,1111218431,VI -1111218432,1111219455,US -1111219712,1111228415,US +1111218432,1111228415,US 1111228416,1111244799,AR 1111244800,1111916543,US 1111916544,1111949311,CA @@ -23768,7 +23947,6 @@ 1118478336,1118483455,US 1118483456,1118484479,CA 1118484480,1118511103,US -1118511104,1118511615,?? 1118513152,1118515199,US 1118515200,1118519295,CA 1118519296,1118527487,US @@ -23784,7 +23962,7 @@ 1119207424,1119289343,US 1119289344,1119354879,CA 1119354880,1119428607,US -1119428608,1119432703,VI +1119428608,1119432703,?? 1119432704,1119436799,CA 1119436800,1119440895,US 1119440896,1119444991,CA @@ -23865,7 +24043,14 @@ 1122242560,1122433023,US 1122433024,1122434047,PR 1122434048,1122451455,US -1122451456,1122455551,EC +1122451456,1122451711,ES +1122451712,1122451967,US +1122451968,1122452479,EC +1122452480,1122452735,CO +1122452736,1122452991,BR +1122452992,1122453247,ES +1122453248,1122453503,GB +1122453504,1122455551,EC 1122455552,1122476031,US 1122476032,1122480127,PR 1122480128,1122500607,US @@ -23893,7 +24078,9 @@ 1123602432,1123651583,US 1123651584,1123655679,JM 1123655680,1123778559,US -1123778560,1123792895,ZA +1123778560,1123782655,ZA +1123782656,1123786751,US +1123786752,1123792895,ZA 1123792896,1123793407,US 1123793408,1123794943,ZA 1123794944,1123848191,US @@ -24190,7 +24377,9 @@ 1162018816,1162022911,CA 1162022912,1162027007,US 1162027008,1162031103,ZA -1162031104,1162059775,US +1162031104,1162057215,US +1162057216,1162057471,BR +1162057472,1162059775,US 1162059776,1162067967,CA 1162067968,1162215423,US 1162215424,1162280959,CA @@ -24232,7 +24421,9 @@ 1163812864,1163813119,MY 1163813120,1163813375,TH 1163813376,1163813631,PH -1163813632,1163814911,HK +1163813632,1163813887,HK +1163813888,1163814399,IN +1163814400,1163814911,HK 1163814912,1163815423,TH 1163815424,1163815935,MY 1163815936,1163816959,HK @@ -24249,7 +24440,6 @@ 1168158720,1168211967,US 1168211968,1168220159,CA 1168220160,1168228351,US -1168228352,1168228863,?? 1168230144,1168230399,?? 1168230400,1168232959,US 1168232960,1168234495,CA @@ -24260,9 +24450,7 @@ 1168424960,1168459775,US 1168459776,1168460287,HK 1168460288,1168460543,RU -1168460544,1168460799,US -1168460800,1168461311,AP -1168461312,1168461823,HK +1168460544,1168461823,HK 1168461824,1168465919,CA 1168465920,1168474111,US 1168474112,1168506879,CA @@ -24515,9 +24703,7 @@ 1249003520,1249005567,CA 1249005568,1249010687,US 1249010688,1249011711,CA -1249011712,1249016831,US -1249016832,1249017855,?? -1249017856,1249019903,US +1249011712,1249019903,US 1249019904,1249020927,CA 1249020928,1249023999,US 1249024000,1249025023,CA @@ -24745,11 +24931,14 @@ 1294206976,1294209023,US 1294209024,1294213119,RO 1294213120,1294218751,US -1294218752,1294219775,RO +1294218752,1294219519,RO +1294219520,1294219775,NL 1294219776,1294220287,DE -1294220288,1294220799,RO +1294220288,1294220543,NL +1294220544,1294220799,RO 1294220800,1294221311,ES -1294221312,1294221823,RO +1294221312,1294221567,RO +1294221568,1294221823,PL 1294221824,1294222335,DE 1294222336,1294225407,US 1294225408,1294227455,GB @@ -24781,19 +24970,18 @@ 1294893056,1294925823,RS 1294925824,1294958591,DE 1294958592,1294962175,UA -1294962176,1294962687,US +1294962176,1294962431,NL +1294962432,1294962687,US 1294962688,1294963711,UA -1294963712,1294964735,US -1294964736,1294966783,GB +1294963712,1294966783,GB 1294966784,1294971391,UA 1294971392,1294972927,US -1294972928,1294980095,UA -1294980096,1294980607,TR +1294972928,1294979583,UA +1294979584,1294980607,TR 1294980608,1294987263,UA 1294987264,1294987775,TR 1294987776,1294988287,AP -1294988288,1294989311,GB -1294989312,1294991359,UA +1294988288,1294991359,GB 1294991360,1295024639,CZ 1295024640,1295025151,SK 1295025152,1295056895,CZ @@ -24911,7 +25099,7 @@ 1296578560,1296580607,FI 1296580608,1296582655,CH 1296582656,1296584703,IE -1296584704,1296584959,AU +1296584704,1296584959,SK 1296584960,1296585215,TR 1296585216,1296585471,NL 1296585472,1296585727,RU @@ -24967,10 +25155,7 @@ 1296659200,1296660223,GB 1296660224,1296660479,CY 1296660480,1296662527,GB -1296662528,1296662783,TR -1296662784,1296663807,KZ -1296663808,1296664319,TR -1296664320,1296664575,KZ +1296662528,1296664575,KZ 1296664576,1296666623,RU 1296666624,1296670719,GB 1296670720,1296672767,ES @@ -25012,14 +25197,18 @@ 1296736256,1296738303,NO 1296738304,1296738815,CH 1296738816,1296739327,FI -1296739328,1296740351,CH -1296740352,1296744447,RU +1296739328,1296742399,CH +1296742400,1296744447,RU 1296744448,1296746495,GB 1296746496,1296747519,NO 1296747520,1296748543,HU 1296748544,1296750591,FR 1296750592,1296752639,NO -1296752640,1296754687,BA +1296752640,1296752895,BA +1296752896,1296753151,US +1296753152,1296754175,BA +1296754176,1296754431,US +1296754432,1296754687,BA 1296754688,1296756735,DE 1296756736,1296758783,FR 1296758784,1296760831,RS @@ -25158,7 +25347,9 @@ 1297293312,1297294079,GB 1297294080,1297294335,DE 1297294336,1297294591,BG -1297294592,1297295359,TR +1297294592,1297294847,NL +1297294848,1297295103,UA +1297295104,1297295359,TR 1297295360,1297296383,PL 1297296384,1297296895,US 1297296896,1297297407,NL @@ -25228,7 +25419,8 @@ 1297347584,1297348351,IL 1297348352,1297348607,FI 1297348608,1297349631,CY -1297349632,1297350655,US +1297349632,1297349887,BR +1297349888,1297350655,US 1297350656,1297416191,FR 1297416192,1297481727,BG 1297481728,1297514495,GB @@ -25286,8 +25478,7 @@ 1297760256,1297776639,LT 1297776640,1297777407,DE 1297777408,1297777663,TR -1297777664,1297779199,DE -1297779200,1297779455,IN +1297777664,1297779455,DE 1297779456,1297779711,MD 1297779712,1297779967,DE 1297779968,1297780223,TR @@ -25298,29 +25489,29 @@ 1297782272,1297782527,MD 1297782528,1297782783,LT 1297782784,1297783295,TR -1297783296,1297783551,NL -1297783552,1297783807,MD -1297783808,1297784063,DE -1297784064,1297784319,TR -1297784320,1297784831,US -1297784832,1297785855,DE -1297785856,1297786111,TR +1297783296,1297783807,MD +1297783808,1297784319,DE +1297784320,1297785855,US +1297785856,1297786111,IN 1297786112,1297786367,US 1297786368,1297786623,MD -1297786624,1297788159,DE +1297786624,1297787135,DE +1297787136,1297788159,US 1297788160,1297788415,TR -1297788416,1297788927,DE +1297788416,1297788671,DE +1297788672,1297788927,US 1297788928,1297789183,FI -1297789184,1297789439,DE +1297789184,1297789439,US 1297789440,1297789695,MD -1297789696,1297790463,TR -1297790464,1297790719,US -1297790720,1297790975,DE +1297789696,1297790207,TR +1297790208,1297790463,NL +1297790464,1297790975,US 1297790976,1297791231,TR -1297791232,1297791487,IN -1297791488,1297791743,DE +1297791232,1297791487,MD +1297791488,1297791743,US 1297791744,1297791999,FI -1297792000,1297792511,DE +1297792000,1297792255,TR +1297792256,1297792511,DE 1297792512,1297792767,MD 1297792768,1297793023,TR 1297793024,1297809407,SA @@ -25457,7 +25648,9 @@ 1298710528,1298726911,CZ 1298726912,1298727935,RS 1298727936,1298728191,US -1298728192,1298743295,RS +1298728192,1298731007,RS +1298731008,1298731263,US +1298731264,1298743295,RS 1298743296,1298759679,FI 1298759680,1298776063,RU 1298776064,1298792447,SE @@ -25555,8 +25748,7 @@ 1306307584,1306307839,NL 1306307840,1306312703,RU 1306312704,1306312959,CA -1306312960,1306313215,GB -1306313216,1306313471,FR +1306312960,1306313471,NL 1306313472,1306313727,CA 1306313728,1306314751,BG 1306314752,1306315775,ES @@ -25935,7 +26127,6 @@ 1310240768,1310242815,RU 1310242816,1310244863,HU 1310244864,1310246911,EE -1310246912,1310248959,CH 1310248960,1310251007,IM 1310251008,1310255103,RU 1310255104,1310257151,CZ @@ -26060,7 +26251,9 @@ 1311326208,1311328255,BE 1311328256,1311330303,NL 1311330304,1311332351,ES -1311332352,1311337727,RU +1311332352,1311337215,RU +1311337216,1311337471,BY +1311337472,1311337727,RU 1311337728,1311337983,BY 1311337984,1311338495,RU 1311338496,1311340543,AT @@ -26221,8 +26414,7 @@ 1317552128,1317568511,ES 1317568512,1317584895,CZ 1317584896,1317585919,RU -1317585920,1317587967,US -1317587968,1317588991,TR +1317585920,1317588991,US 1317588992,1317599231,RU 1317599232,1317601023,US 1317601024,1317601279,DE @@ -26305,7 +26497,7 @@ 1317981184,1317982207,HU 1317982208,1317983231,TR 1317983232,1317984255,ES -1317984256,1317984511,NL +1317984256,1317984511,US 1317984512,1317984767,HU 1317984768,1317985023,US 1317985024,1317985279,NL @@ -26395,7 +26587,8 @@ 1319051264,1319059455,UA 1319059456,1319067647,PL 1319067648,1319075839,DE -1319075840,1319076863,BG +1319075840,1319076607,BG +1319076608,1319076863,TR 1319076864,1319077887,FR 1319077888,1319078911,BG 1319078912,1319079935,US @@ -26403,7 +26596,9 @@ 1319080960,1319081215,FR 1319081216,1319081727,BG 1319081728,1319081983,SE -1319081984,1319084031,BG +1319081984,1319083007,BG +1319083008,1319083263,TR +1319083264,1319084031,BG 1319084032,1319092223,KW 1319092224,1319100415,IT 1319100416,1319108607,RU @@ -26522,7 +26717,8 @@ 1332645888,1332649983,RS 1332649984,1332652031,GB 1332652032,1332652543,SE -1332652544,1332653055,US +1332652544,1332652799,US +1332652800,1332653055,GB 1332653056,1332654079,NL 1332654080,1332656127,US 1332656128,1332657151,GB @@ -26531,7 +26727,8 @@ 1332662272,1332666367,UA 1332666368,1332666623,NL 1332666624,1332666879,CZ -1332666880,1332667391,RU +1332666880,1332667135,RU +1332667136,1332667391,GB 1332667392,1332667647,NL 1332667648,1332667903,SA 1332667904,1332668159,NL @@ -26666,7 +26863,9 @@ 1334402560,1334409215,FR 1334409216,1334409471,PT 1334409472,1334411263,FR -1334411264,1334422015,RU +1334411264,1334412543,RU +1334412544,1334412799,NL +1334412800,1334422015,RU 1334422016,1334422527,KZ 1334422528,1334423551,RU 1334423552,1334424575,KZ @@ -26909,7 +27108,9 @@ 1336850432,1336852479,RU 1336852480,1336868863,FR 1336868864,1336885247,RU -1336885248,1336901631,RS +1336885248,1336898815,RS +1336898816,1336899071,US +1336899072,1336901631,RS 1336901632,1336918015,IR 1336918016,1336934399,PL 1336934400,1337458687,IL @@ -27175,7 +27376,7 @@ 1347022848,1347023103,TJ 1347023104,1347023359,FR 1347023360,1347023615,US -1347023616,1347023871,ES +1347023616,1347023871,BR 1347023872,1347024127,US 1347024128,1347024383,PL 1347024384,1347024895,NL @@ -27663,7 +27864,9 @@ 1348456448,1348460543,BH 1348460544,1348464639,SI 1348464640,1348468735,CZ -1348468736,1348548607,RO +1348468736,1348511231,RO +1348511232,1348511487,HU +1348511488,1348548607,RO 1348548608,1348549631,MD 1348549632,1348599807,RO 1348599808,1348730879,HU @@ -27770,6 +27973,7 @@ 1355857920,1355862015,JP 1355862016,1355864063,DE 1355864064,1355865343,GB +1355865344,1355865599,TR 1355865600,1355866111,GB 1355866112,1355868159,LT 1355868160,1355870207,DE @@ -27987,8 +28191,8 @@ 1357880832,1357881087,AT 1357881088,1357886463,EU 1357886464,1357887487,US -1357887488,1357888511,FR -1357888512,1357891071,EU +1357887488,1357887999,FR +1357888000,1357891071,EU 1357891072,1357891327,NL 1357891328,1357891839,EU 1357891840,1357892095,RU @@ -28114,7 +28318,7 @@ 1358254080,1358258175,MD 1358258176,1358259199,RS 1358259200,1358260223,DK -1358260224,1358261247,AP +1358260224,1358261247,HK 1358261248,1358261503,TW 1358261504,1358262271,IN 1358262272,1358266367,RU @@ -28355,8 +28559,8 @@ 1359119360,1359120383,IT 1359120384,1359121919,DE 1359121920,1359122431,ES -1359122432,1359123711,DE -1359123712,1359123967,NL +1359122432,1359123455,DE +1359123456,1359123967,NL 1359123968,1359124479,DE 1359124480,1359132671,GB 1359132672,1359133183,ES @@ -28421,7 +28625,8 @@ 1360039936,1360044031,AT 1360044032,1360048127,SE 1360048128,1360048639,GB -1360048640,1360052223,DE +1360048640,1360050175,DE +1360050176,1360052223,GB 1360052224,1360056319,HU 1360056320,1360057343,RU 1360057344,1360058367,ES @@ -28474,9 +28679,7 @@ 1360226560,1360228095,ES 1360228096,1360228351,GB 1360228352,1360232447,FI -1360232448,1360234495,RU -1360234496,1360234751,NL -1360234752,1360236543,RU +1360232448,1360236543,RU 1360236544,1360240639,AT 1360240640,1360244735,ES 1360244736,1360248831,GB @@ -28520,7 +28723,7 @@ 1360379904,1360383999,PL 1360384000,1360389119,SE 1360389120,1360390143,ES -1360390144,1360391167,GB +1360390144,1360391167,AL 1360391168,1360392191,BR 1360392192,1360396287,EE 1360396288,1360400383,RU @@ -28709,7 +28912,7 @@ 1361002496,1361006591,GB 1361006592,1361010687,DK 1361010688,1361018879,GB -1361018880,1361022975,AT +1361018880,1361022975,MD 1361022976,1361027071,IT 1361027072,1361035263,IR 1361035264,1361036287,US @@ -28817,7 +29020,7 @@ 1364885504,1364889599,GB 1364889600,1364893695,IR 1364893696,1364897791,CZ -1364897792,1364898815,EU +1364897792,1364898815,TR 1364898816,1364899839,RU 1364899840,1364900863,CH 1364900864,1364901375,SG @@ -28958,7 +29161,9 @@ 1369554944,1369559039,PL 1369559040,1369563135,RU 1369563136,1369564159,GB -1369564160,1369565183,US +1369564160,1369564415,IQ +1369564416,1369564671,AR +1369564672,1369565183,US 1369565184,1369566207,IT 1369566208,1369566463,TR 1369566464,1369567231,US @@ -29333,7 +29538,7 @@ 1382203648,1382204671,GB 1382204672,1382204927,FR 1382204928,1382205183,DE -1382205184,1382205439,FR +1382205184,1382205439,CA 1382205440,1382212607,EU 1382212608,1382212863,FR 1382212864,1382213375,EU @@ -29423,7 +29628,10 @@ 1383243776,1383251967,YE 1383251968,1383260159,CZ 1383260160,1383268351,RU -1383268352,1383271935,US +1383268352,1383268607,MD +1383268608,1383268863,AU +1383268864,1383269375,MD +1383269376,1383271935,US 1383271936,1383272191,FR 1383272192,1383272447,BZ 1383272448,1383276031,DE @@ -29439,8 +29647,7 @@ 1383322880,1383323135,PL 1383323136,1383323391,IL 1383323392,1383323647,PL -1383323648,1383324415,EU -1383324416,1383324671,US +1383323648,1383324671,EU 1383324672,1383324927,FI 1383324928,1383325695,RU 1383325696,1383333887,GB @@ -29551,9 +29758,7 @@ 1384710144,1384726527,RO 1384726528,1384742911,BG 1384742912,1384759295,RU -1384759296,1384766975,SY -1384766976,1384767231,LB -1384767232,1384775679,SY +1384759296,1384775679,SY 1384775680,1384792063,RU 1384792064,1384808447,FR 1384808448,1384809471,EU @@ -29596,7 +29801,9 @@ 1384890368,1384923135,DE 1384923136,1384939519,RU 1384939520,1384940287,US -1384940288,1384955903,LT +1384940288,1384953343,LT +1384953344,1384953855,US +1384953856,1384955903,LT 1384955904,1384972287,RU 1384972288,1384988671,DE 1384988672,1385005055,FI @@ -29821,11 +30028,12 @@ 1387565568,1387565823,BE 1387565824,1387566079,ES 1387566080,1387566335,CH -1387566336,1387566591,NL -1387566592,1387566847,NO +1387566336,1387566847,NL 1387566848,1387567103,PL 1387567104,1387573247,US -1387573248,1387577343,DK +1387573248,1387573503,AE +1387573504,1387575295,DE +1387575296,1387577343,OM 1387577344,1387593727,IR 1387593728,1387659263,FI 1387659264,1387790335,SE @@ -29899,11 +30107,7 @@ 1388683264,1388691455,CH 1388691456,1388699647,NL 1388699648,1388707839,SE -1388707840,1388708095,LT -1388708096,1388708607,LB -1388708608,1388708863,LT -1388708864,1388709375,LB -1388709376,1388709887,LT +1388707840,1388709887,LT 1388709888,1388710911,LB 1388710912,1388711167,IQ 1388711168,1388711423,RU @@ -30483,9 +30687,9 @@ 1402150912,1402151935,US 1402151936,1402156031,GB 1402156032,1402157055,US -1402157056,1402158079,GB +1402157056,1402158079,DE 1402158080,1402158591,US -1402158592,1402158847,TR +1402158592,1402158847,GB 1402158848,1402159103,ES 1402159104,1402175487,IT 1402175488,1402191871,IE @@ -30497,14 +30701,15 @@ 1402195968,1402196223,SC 1402196224,1402196479,RU 1402196480,1402196991,SC -1402196992,1402198015,US +1402196992,1402198015,NL 1402198016,1402198527,GB 1402198528,1402199551,RU 1402199552,1402200063,CA 1402200064,1402202111,SC 1402202112,1402203135,US 1402203136,1402204159,RU -1402204160,1402206207,GR +1402204160,1402205183,GR +1402205184,1402206207,DE 1402206208,1402207231,US 1402207232,1402208255,GR 1402208256,1402224639,CZ @@ -30800,7 +31005,8 @@ 1407151872,1407156223,GB 1407156224,1407164415,LV 1407164416,1407172607,PT -1407172608,1407180799,GB +1407172608,1407176703,GB +1407176704,1407180799,NO 1407180800,1407188991,PT 1407188992,1407320063,IT 1407320064,1407451135,SE @@ -30834,7 +31040,9 @@ 1407525632,1407525887,US 1407525888,1407526399,CA 1407526400,1407526655,ES -1407526656,1407529983,US +1407526656,1407526911,US +1407526912,1407528959,SG +1407528960,1407529983,US 1407529984,1407531519,GB 1407531520,1407532287,CA 1407532288,1407533055,GB @@ -30866,7 +31074,7 @@ 1407545856,1407546111,CA 1407546112,1407546367,US 1407546368,1407547391,CA -1407547392,1407549439,US +1407547392,1407549439,SG 1407549440,1407582207,RU 1407582208,1407614975,PL 1407614976,1407680511,ES @@ -30921,31 +31129,18 @@ 1408590848,1408591103,BE 1408591104,1408598015,GB 1408598016,1408630783,FI -1408630784,1408634879,RO -1408634880,1408663551,DE +1408630784,1408663551,DE 1408663552,1408696319,RU 1408696320,1408729087,NL 1408729088,1408761855,ES 1408761856,1409286143,SE 1409286144,1409362943,HU 1409362944,1409363967,BG -1409363968,1409377791,HU -1409377792,1409378047,RO -1409378048,1409380607,HU -1409380608,1409380863,RO -1409380864,1409391103,HU +1409363968,1409391103,HU 1409391104,1409391359,BG -1409391360,1409392383,HU -1409392384,1409392639,RO -1409392640,1409409535,HU -1409409536,1409409791,RO -1409409792,1409413119,HU +1409391360,1409413119,HU 1409413120,1409415167,BG -1409415168,1409423359,HU -1409423360,1409423615,RO -1409423616,1409430015,HU -1409430016,1409430783,RO -1409430784,1409436159,HU +1409415168,1409436159,HU 1409436160,1409436415,BG 1409436416,1409548287,HU 1409548288,1409810431,FR @@ -30983,7 +31178,8 @@ 1410220800,1410221055,AT 1410221056,1410222335,FR 1410222336,1410222591,DE -1410222592,1410223103,FR +1410222592,1410222847,FR +1410222848,1410223103,IE 1410223104,1410223359,IT 1410223360,1410223615,ES 1410223616,1410225663,FR @@ -30996,15 +31192,7 @@ 1410267392,1410267647,AT 1410267648,1410267903,CH 1410267904,1410269183,FR -1410269184,1410279679,LT -1410279680,1410279935,EE -1410279936,1410303999,LT -1410304000,1410306047,LV -1410306048,1410318335,LT -1410318336,1410319359,LV -1410319360,1410322431,LT -1410322432,1410326527,LV -1410326528,1410334719,LT +1410269184,1410334719,LT 1410334720,1410342911,ES 1410342912,1410351103,SK 1410351104,1410359295,CH @@ -31105,8 +31293,8 @@ 1410760704,1410762751,RU 1410762752,1410764799,JP 1410764800,1410765823,RU -1410765824,1410766847,JP -1410766848,1410768895,RU +1410765824,1410766591,JP +1410766592,1410768895,RU 1410768896,1410777087,GB 1410777088,1410785279,RU 1410785280,1410793471,SA @@ -31236,7 +31424,11 @@ 1412258560,1412258815,DE 1412258816,1412300799,GB 1412300800,1412333567,DE -1412333568,1412361215,LT +1412333568,1412344575,LT +1412344576,1412344831,DE +1412344832,1412351999,LT +1412352000,1412352255,US +1412352256,1412361215,LT 1412361216,1412362239,US 1412362240,1412366335,LT 1412366336,1412399103,SK @@ -31248,7 +31440,7 @@ 1412408832,1412409343,FI 1412409344,1412412159,RU 1412412160,1412412415,UA -1412412416,1412412671,GB +1412412416,1412412671,CH 1412412672,1412413439,RU 1412413440,1412413951,DE 1412413952,1412415487,RU @@ -31294,7 +31486,9 @@ 1412833536,1412833791,NL 1412833792,1412834047,RO 1412834048,1412834303,NL -1412834304,1412835327,RU +1412834304,1412834559,RU +1412834560,1412834815,TH +1412834816,1412835327,RU 1412835328,1412836351,NL 1412836352,1412837375,RU 1412837376,1412838399,US @@ -31504,9 +31698,7 @@ 1425293312,1425309695,CZ 1425309696,1425326079,NL 1425326080,1425342463,SE -1425342464,1425346559,NL -1425346560,1425350655,US -1425350656,1425354751,NL +1425342464,1425354751,NL 1425354752,1425357055,SE 1425357056,1425357311,US 1425357312,1425358847,SE @@ -31516,7 +31708,7 @@ 1425408000,1425424383,NL 1425424384,1425426431,DE 1425426432,1425428479,KW -1425428480,1425428735,UA +1425428480,1425428735,NL 1425428736,1425429247,RU 1425429248,1425429503,NL 1425429504,1425429759,UA @@ -31546,14 +31738,14 @@ 1425467392,1425469439,CH 1425469440,1425471487,DK 1425471488,1425473535,DE -1425473536,1425473791,US +1425473536,1425473791,GB 1425473792,1425474047,GG 1425474048,1425475583,US 1425475584,1425477631,NL 1425477632,1425477887,RO 1425477888,1425478143,GB 1425478144,1425478655,ES -1425478656,1425478911,TR +1425478656,1425478911,US 1425478912,1425479167,GB 1425479168,1425479679,RO 1425479680,1425479935,ES @@ -31597,7 +31789,8 @@ 1425825024,1425825279,BD 1425825280,1425825791,GB 1425825792,1425826815,IL -1425826816,1425827839,AP +1425826816,1425827327,AP +1425827328,1425827839,HK 1425827840,1425828095,GB 1425828096,1425828351,HR 1425828352,1425828607,JO @@ -31680,12 +31873,13 @@ 1426624512,1426626559,US 1426626560,1426627583,TR 1426627584,1426629631,US -1426629632,1426630655,AU +1426629632,1426630655,GB 1426630656,1426630911,LT 1426630912,1426631679,US 1426631680,1426632703,IT 1426632704,1426633727,SE -1426633728,1426634751,AP +1426633728,1426634239,HK +1426634240,1426634751,AP 1426634752,1426635775,RU 1426635776,1426636031,FR 1426636032,1426636287,IT @@ -31742,7 +31936,7 @@ 1427898368,1427910655,RU 1427910656,1427912703,AU 1427912704,1427913727,GB -1427913728,1427914751,JP +1427913728,1427914751,RU 1427914752,1427931135,BE 1427931136,1427947519,PL 1427947520,1427963903,RU @@ -31827,7 +32021,8 @@ 1432039424,1432043519,GB 1432043520,1432051711,ES 1432051712,1432056831,RU -1432056832,1432057343,RO +1432056832,1432057087,CH +1432057088,1432057343,RO 1432057344,1432058623,RU 1432058624,1432058879,UA 1432058880,1432059903,RU @@ -32085,7 +32280,25 @@ 1434778112,1434778367,GB 1434778368,1434779647,CY 1434779648,1434812415,GB -1434812416,1434845183,IR +1434812416,1434814719,IR +1434814720,1434814975,TR +1434814976,1434821887,IR +1434821888,1434822143,US +1434822144,1434822911,IR +1434822912,1434823167,TR +1434823168,1434829311,IR +1434829312,1434829567,TR +1434829568,1434835199,IR +1434835200,1434835455,US +1434835456,1434839551,IR +1434839552,1434839807,TR +1434839808,1434840063,IR +1434840064,1434840319,US +1434840320,1434840575,IR +1434840576,1434840831,TR +1434840832,1434844415,IR +1434844416,1434844671,US +1434844672,1434845183,IR 1434845184,1434877951,FI 1434877952,1434910719,IE 1434910720,1434943487,CZ @@ -32113,9 +32326,7 @@ 1436105216,1436105471,TR 1436105472,1436106751,US 1436106752,1436107007,TR -1436107008,1436112895,US -1436112896,1436113919,DE -1436113920,1436116991,US +1436107008,1436116991,US 1436116992,1436118015,DE 1436118016,1436122879,US 1436122880,1436123135,EE @@ -32148,7 +32359,7 @@ 1436433408,1436434431,PL 1436434432,1436436479,GB 1436436480,1436438527,LV -1436438528,1436440575,IT +1436438528,1436440575,NO 1436440576,1436442623,RU 1436442624,1436444671,TR 1436444672,1436446719,BE @@ -32162,7 +32373,7 @@ 1436454656,1436454911,GB 1436454912,1436455167,AZ 1436455168,1436455679,NL -1436455680,1436455935,TR +1436455680,1436455935,DE 1436455936,1436456959,AZ 1436456960,1436459007,GB 1436459008,1436461055,NL @@ -32172,8 +32383,7 @@ 1436464640,1436465151,DE 1436465152,1436465407,RU 1436465408,1436465663,RO -1436465664,1436466175,RU -1436466176,1436467199,UZ +1436465664,1436467199,RU 1436467200,1436469247,DE 1436469248,1436471295,NL 1436471296,1436473343,BE @@ -32263,8 +32473,13 @@ 1438400512,1438433279,SE 1438433280,1438515199,GB 1438515200,1438531583,DE -1438531584,1438536703,FR -1438536704,1438539775,DE +1438531584,1438532351,FR +1438532352,1438532607,NL +1438532608,1438536703,FR +1438536704,1438536959,GB +1438536960,1438537215,BE +1438537216,1438537727,FR +1438537728,1438539775,DE 1438539776,1438547967,NL 1438547968,1438553343,DE 1438553344,1438553599,GB @@ -32281,7 +32496,9 @@ 1438574592,1438578687,PL 1438578688,1438580735,DE 1438580736,1438646271,DK -1438646272,1438662655,RU +1438646272,1438658559,RU +1438658560,1438659071,NL +1438659072,1438662655,RU 1438662656,1438679039,ES 1438679040,1438695423,RU 1438695424,1438711807,FR @@ -32337,7 +32554,8 @@ 1439305728,1439309823,DK 1439309824,1439318015,PL 1439318016,1439322111,DK -1439322112,1439322623,US +1439322112,1439322367,US +1439322368,1439322623,FI 1439322624,1439323135,DE 1439323136,1439323391,RU 1439323392,1439323647,ES @@ -32358,8 +32576,7 @@ 1439345664,1439346687,US 1439346688,1439350783,RU 1439350784,1439351295,UZ -1439351296,1439351551,DE -1439351552,1439351807,NL +1439351296,1439351807,NL 1439351808,1439352831,GB 1439352832,1439353087,DE 1439353088,1439353343,FI @@ -32373,7 +32590,7 @@ 1439369216,1439369471,NZ 1439369472,1439369727,PL 1439369728,1439371007,NL -1439371008,1439371263,DE +1439371008,1439371263,AT 1439371264,1439372287,NL 1439372288,1439372543,DE 1439372544,1439372799,SG @@ -32435,7 +32652,9 @@ 1439452928,1439453183,RO 1439453184,1439457279,IR 1439457280,1439457791,DE -1439457792,1439459327,RO +1439457792,1439458047,RO +1439458048,1439458303,HU +1439458304,1439459327,RO 1439459328,1439459839,IR 1439459840,1439460607,RO 1439460608,1439460863,NL @@ -32481,8 +32700,7 @@ 1439495680,1439495935,RO 1439495936,1439496191,NL 1439496192,1439496703,RO -1439496704,1439496959,GB -1439496960,1439497215,TR +1439496704,1439497215,GB 1439497216,1439497471,RO 1439497472,1439497727,NL 1439497728,1439497983,RO @@ -32564,7 +32782,9 @@ 1439726592,1439727615,LT 1439727616,1439728639,DE 1439728640,1439729663,NL -1439729664,1439730687,US +1439729664,1439729919,US +1439729920,1439730175,TR +1439730176,1439730687,US 1439730688,1439731711,ES 1439731712,1439732735,FR 1439732736,1439733759,KE @@ -32628,8 +32848,8 @@ 1439789056,1439790079,IT 1439790080,1439791103,DK 1439791104,1439791359,UA -1439791360,1439791871,TR -1439791872,1439792127,UA +1439791360,1439791615,TR +1439791616,1439792127,UA 1439792128,1439793151,CZ 1439793152,1439793407,IE 1439793408,1439794175,NL @@ -32656,7 +32876,8 @@ 1439815680,1439815935,IT 1439815936,1439816191,IL 1439816192,1439816703,NL -1439816704,1439817727,US +1439816704,1439817471,US +1439817472,1439817727,DE 1439817728,1439818751,FR 1439818752,1439819775,US 1439819776,1439820799,LU @@ -32667,19 +32888,20 @@ 1439823872,1439824895,AL 1439824896,1439825151,JP 1439825152,1439825407,US -1439825408,1439825919,HK +1439825408,1439825663,HK +1439825664,1439825919,US 1439825920,1439956991,GB 1439956992,1440251903,DE 1440251904,1440284671,SK 1440284672,1440317439,FI -1440317440,1440317695,DE +1440317440,1440317695,US 1440317696,1440317951,ES 1440317952,1440318463,BG 1440318464,1440320511,ES 1440320512,1440320767,BG 1440320768,1440321535,ES 1440321536,1440321791,BE -1440321792,1440322047,AR +1440321792,1440322047,TR 1440322048,1440322559,ES 1440322560,1440323071,BG 1440323072,1440325631,ES @@ -32757,7 +32979,7 @@ 1441472512,1441480703,RU 1441480704,1441481727,DE 1441481728,1441482751,ES -1441482752,1441483775,US +1441482752,1441483775,TR 1441483776,1441484799,GB 1441484800,1441485823,RU 1441485824,1441486847,BA @@ -32798,7 +33020,7 @@ 1441645568,1441646335,PL 1441646336,1441646591,NL 1441646592,1441646847,FR -1441646848,1441647103,TR +1441646848,1441647103,US 1441647104,1441647359,PL 1441647360,1441647615,US 1441647616,1441647871,PL @@ -32838,7 +33060,7 @@ 1441734912,1441735423,MD 1441735424,1441735679,RU 1441735680,1441736703,NL -1441736704,1441737215,US +1441736704,1441737215,CY 1441737216,1441737727,RU 1441737728,1441738751,US 1441738752,1441740799,NL @@ -32846,7 +33068,9 @@ 1441742848,1441751039,CZ 1441751040,1441759231,DE 1441759232,1441763327,ES -1441763328,1441765119,BG +1441763328,1441764607,BG +1441764608,1441764863,TR +1441764864,1441765119,BG 1441765120,1441765375,TR 1441765376,1441767423,BG 1441767424,1441775615,IT @@ -32859,26 +33083,37 @@ 1442512896,1442578431,ES 1442578432,1442643967,NO 1442643968,1442709503,EE -1442709504,1442728959,LV -1442728960,1442729215,LT -1442729216,1442731519,DE -1442731520,1442733823,LV -1442733824,1442735103,LT -1442735104,1442735871,LV -1442735872,1442740223,DE +1442709504,1442727679,LV +1442727680,1442727935,LT +1442727936,1442728191,LV +1442728192,1442728959,LT +1442728960,1442731007,DE +1442731008,1442731519,US +1442731520,1442733055,LV +1442733056,1442735871,LT +1442735872,1442736127,US +1442736128,1442740223,DE 1442740224,1442741247,LV -1442741248,1442742015,DE +1442741248,1442742015,US 1442742016,1442742271,LV 1442742272,1442743295,DE 1442743296,1442744831,LV -1442744832,1442745343,DE -1442745344,1442750207,LV +1442744832,1442745343,US +1442745344,1442745599,LV +1442745600,1442745855,LT +1442745856,1442747647,LV +1442747648,1442747903,LT +1442747904,1442748159,LV +1442748160,1442749439,LT +1442749440,1442750207,LV 1442750208,1442750463,LT 1442750464,1442750719,LV 1442750720,1442750975,LT 1442750976,1442752511,LV -1442752512,1442753023,LT -1442753024,1442775039,LV +1442752512,1442753279,LT +1442753280,1442754559,LV +1442754560,1442755071,LT +1442755072,1442775039,LV 1442775040,1442779135,CZ 1442779136,1442779647,GB 1442779648,1442780159,DE @@ -32918,7 +33153,9 @@ 1445375744,1445375999,US 1445376000,1445377023,LT 1445377024,1445377535,US -1445377536,1445379327,LT +1445377536,1445378559,LT +1445378560,1445379071,DE +1445379072,1445379327,LT 1445379328,1445379839,US 1445379840,1445382143,LT 1445382144,1445382399,US @@ -32962,7 +33199,9 @@ 1446576128,1446608895,IR 1446608896,1446641663,BY 1446641664,1446674431,SI -1446674432,1446707199,DK +1446674432,1446694911,DK +1446694912,1446696959,NL +1446696960,1446707199,DK 1446707200,1446739967,AT 1446739968,1446772735,HU 1446772736,1446805503,SA @@ -33009,7 +33248,8 @@ 1449657856,1449658111,IT 1449658112,1449658367,RO 1449658368,1449658623,NL -1449658624,1449659135,RO +1449658624,1449658879,HU +1449658880,1449659135,RO 1449659136,1449659391,GB 1449659392,1449659647,GG 1449659648,1449659903,RO @@ -33059,7 +33299,7 @@ 1449711616,1449712639,GB 1449712640,1449713151,RO 1449713152,1449714175,US -1449714176,1449714431,NL +1449714176,1449714431,GB 1449714432,1449714687,LT 1449714688,1449714943,GB 1449714944,1449715199,IT @@ -33073,13 +33313,11 @@ 1449722368,1449722879,GB 1449722880,1449723135,RO 1449723136,1449723391,DE -1449723392,1449723647,GB -1449723648,1449723903,TR +1449723392,1449723903,GB 1449723904,1449724159,IT 1449724160,1449724415,RO 1449724416,1449724927,GG -1449724928,1449725183,GB -1449725184,1449725439,TR +1449724928,1449725439,GB 1449725440,1449725695,IT 1449725696,1449726463,RO 1449726464,1449726719,NL @@ -33268,7 +33506,8 @@ 1449880576,1449881087,US 1449881088,1449881343,IT 1449881344,1449881599,RO -1449881600,1449883647,PL +1449881600,1449882623,PL +1449882624,1449883647,FR 1449883648,1449885695,BE 1449885696,1449889791,KZ 1449889792,1449893887,IR @@ -33316,7 +33555,8 @@ 1450102784,1450106879,RU 1450106880,1450115071,SK 1450115072,1450123263,RU -1450123264,1450131455,AT +1450123264,1450130431,AT +1450130432,1450131455,ES 1450131456,1450139647,UA 1450139648,1450147839,PL 1450147840,1450151935,CH @@ -33349,7 +33589,41 @@ 1451229184,1455423487,GB 1455423488,1459617791,FR 1459617792,1461714943,IT -1461714944,1462763519,IE +1461714944,1461766911,IE +1461766912,1461767167,GB +1461767168,1461787135,IE +1461787136,1461787391,GB +1461787392,1461864703,IE +1461864704,1461864959,GB +1461864960,1461880319,IE +1461880320,1461880575,GB +1461880576,1461886975,IE +1461886976,1461887231,GB +1461887232,1461900287,IE +1461900288,1461900543,GB +1461900544,1461990655,IE +1461990656,1461990911,GB +1461990912,1462055423,IE +1462055424,1462055679,GB +1462055680,1462111743,IE +1462111744,1462111999,GB +1462112000,1462283519,IE +1462283520,1462283775,GB +1462283776,1462292991,IE +1462292992,1462293247,GB +1462293248,1462374911,IE +1462374912,1462375167,GB +1462375168,1462394111,IE +1462394112,1462394367,GB +1462394368,1462407935,IE +1462407936,1462408191,GB +1462408192,1462427135,IE +1462427136,1462427391,GB +1462427392,1462513919,IE +1462513920,1462514175,GB +1462514176,1462747135,IE +1462747136,1462747391,GB +1462747392,1462763519,IE 1462763520,1463812095,DK 1463812096,1464074239,BE 1464074240,1464336383,IL @@ -33459,8 +33733,8 @@ 1467371776,1467383807,DE 1467383808,1467400191,BG 1467400192,1467416575,RU -1467416576,1467416831,AE -1467416832,1467432959,SG +1467416576,1467417087,AE +1467417088,1467432959,SG 1467432960,1467435519,BG 1467435520,1467435775,GB 1467435776,1467436031,BG @@ -33531,7 +33805,9 @@ 1467546624,1467546879,LU 1467546880,1467551743,BG 1467551744,1467552255,NL -1467552256,1467556095,BG +1467552256,1467553535,BG +1467553536,1467553791,IS +1467553792,1467556095,BG 1467556096,1467556351,LU 1467556352,1467557631,BG 1467557632,1467557887,US @@ -33555,11 +33831,11 @@ 1467578880,1467579903,US 1467579904,1467580415,IL 1467580416,1467582463,BG -1467582464,1467584511,US +1467582464,1467584511,GB 1467584512,1467592703,BG 1467592704,1467596799,SA 1467596800,1467600895,DE -1467600896,1467602943,CA +1467600896,1467602943,GB 1467602944,1467603967,BG 1467603968,1467604735,US 1467604736,1467604991,BG @@ -33621,7 +33897,7 @@ 1475115008,1475117055,KW 1475117056,1475119103,GB 1475119104,1475121151,BH -1475121152,1475121407,PT +1475121152,1475121407,BR 1475121408,1475121663,NO 1475121664,1475121919,CZ 1475121920,1475122175,MD @@ -33635,7 +33911,8 @@ 1475125760,1475126015,ES 1475126016,1475126527,NL 1475126528,1475126783,US -1475126784,1475127295,GB +1475126784,1475127039,AU +1475127040,1475127295,GB 1475127296,1475129343,FI 1475129344,1475130367,BE 1475130368,1475131391,ES @@ -33707,9 +33984,10 @@ 1475250176,1475250431,CH 1475250432,1475250687,AT 1475250688,1475251199,ES -1475251200,1475251711,CH +1475251200,1475251455,DE +1475251456,1475251711,CH 1475251712,1475251967,AT -1475251968,1475252223,CH +1475251968,1475252223,DE 1475252224,1475254271,FR 1475254272,1475256319,UA 1475256320,1475258367,BE @@ -33797,10 +34075,8 @@ 1475657728,1475674111,SK 1475674112,1475690495,DE 1475690496,1475706879,CH -1475706880,1475723263,RU -1475723264,1475725567,GB -1475725568,1475726079,RU -1475726080,1475732479,GB +1475706880,1475727359,RU +1475727360,1475732479,GB 1475732480,1475732991,RU 1475732992,1475737343,GB 1475737344,1475737599,UA @@ -33808,7 +34084,9 @@ 1475737856,1475738111,SE 1475738112,1475739135,RU 1475739136,1475739647,GB -1475739648,1475749887,BG +1475739648,1475749119,BG +1475749120,1475749375,GR +1475749376,1475749887,BG 1475749888,1475750911,IQ 1475750912,1475756031,BG 1475756032,1475772415,GB @@ -33843,9 +34121,9 @@ 1475903488,1475903999,IR 1475904000,1475904255,GB 1475904256,1475907583,IR -1475907584,1475907839,GB +1475907584,1475907839,EU 1475907840,1475911167,IR -1475911168,1475911423,GB +1475911168,1475911423,EU 1475911424,1475911679,IR 1475911680,1475919871,MD 1475919872,1475928063,EU @@ -33881,8 +34159,7 @@ 1476068864,1476069119,TR 1476069120,1476069375,NL 1476069376,1476071423,GB -1476071424,1476073471,NL -1476073472,1476073727,TR +1476071424,1476073727,NL 1476073728,1476073983,DE 1476073984,1476075519,TR 1476075520,1476083711,NL @@ -33896,8 +34173,7 @@ 1476085760,1476086271,RU 1476086272,1476086527,UA 1476086528,1476086783,RU -1476086784,1476087039,DE -1476087040,1476087295,RU +1476086784,1476087295,DE 1476087296,1476087551,CA 1476087552,1476100095,RU 1476100096,1476108287,IR @@ -34065,8 +34341,8 @@ 1484235776,1484236031,IN 1484236032,1484237311,LT 1484237312,1484237823,NL -1484237824,1484238335,LT -1484238336,1484238847,US +1484237824,1484238079,LT +1484238080,1484238847,US 1484238848,1484259327,LT 1484259328,1484783615,FR 1484783616,1484849151,DE @@ -34085,7 +34361,7 @@ 1485254656,1485258751,RU 1485258752,1485259775,ES 1485259776,1485260031,IR -1485260032,1485260287,US +1485260032,1485260287,GB 1485260288,1485260543,IS 1485260544,1485260799,NO 1485260800,1485261823,DK @@ -34136,11 +34412,10 @@ 1486333952,1486335999,SE 1486336000,1486338047,KZ 1486338048,1486340095,RU -1486340096,1486340351,NL +1486340096,1486340351,DE 1486340352,1486340607,AZ 1486340608,1486340863,TR -1486340864,1486341375,NL -1486341376,1486342143,AZ +1486340864,1486342143,NL 1486342144,1486344191,RU 1486344192,1486346239,ES 1486346240,1486349823,GB @@ -34282,7 +34557,8 @@ 1490124800,1490141183,SA 1490141184,1490157567,HU 1490157568,1490166783,RU -1490166784,1490167807,US +1490166784,1490167295,US +1490167296,1490167807,NL 1490167808,1490173951,RU 1490173952,1490190335,PT 1490190336,1490191615,GB @@ -34360,9 +34636,16 @@ 1490501632,1490518015,DE 1490518016,1490534399,RU 1490534400,1490550783,DE -1490550784,1490601983,LT +1490550784,1490555647,LT +1490555648,1490555903,US +1490555904,1490575359,LT +1490575360,1490577407,US +1490577408,1490583551,LT +1490583552,1490585599,US +1490585600,1490601983,LT 1490601984,1490604031,ES -1490604032,1490616319,LT +1490604032,1490608127,LT +1490608128,1490616319,US 1490616320,1490681855,DE 1490681856,1490682879,RO 1490682880,1490683903,NL @@ -34378,7 +34661,7 @@ 1490689280,1490690047,UA 1490690048,1490691071,ES 1490691072,1490692095,IE -1490692096,1490693119,MD +1490692096,1490693119,NL 1490693120,1490693375,JP 1490693376,1490693631,NL 1490693632,1490693887,US @@ -34399,9 +34682,7 @@ 1490707968,1490708479,NL 1490708480,1490710527,DE 1490710528,1490710783,LU -1490710784,1490711039,NL -1490711040,1490711295,RU -1490711296,1490711551,NL +1490710784,1490711551,NL 1490711552,1490712063,IL 1490712064,1490712575,NL 1490712576,1490713599,RO @@ -34410,18 +34691,21 @@ 1490715648,1490716671,NL 1490716672,1490717695,RS 1490717696,1490718719,LB -1490718720,1490719743,HK +1490718720,1490719743,PL 1490719744,1490720767,GB 1490720768,1490721791,NL 1490721792,1490722815,ES 1490722816,1490723839,DE 1490723840,1490724351,LT 1490724352,1490724863,US -1490724864,1490725887,RU +1490724864,1490725887,NL 1490725888,1490726911,US 1490726912,1490727935,DK 1490727936,1490728959,UA -1490728960,1490729983,RU +1490728960,1490729215,MD +1490729216,1490729471,CZ +1490729472,1490729727,FI +1490729728,1490729983,CA 1490729984,1490731007,UA 1490731008,1490732031,HK 1490732032,1490733055,FR @@ -34508,7 +34792,8 @@ 1494426112,1494426367,US 1494426368,1494426623,JP 1494426624,1494427647,NL -1494427648,1494428671,FR +1494427648,1494428159,FR +1494428160,1494428671,BR 1494428672,1494428927,DE 1494428928,1494429183,GB 1494429184,1494430719,DE @@ -34623,10 +34908,12 @@ 1495153920,1495154175,TR 1495154176,1495154687,EU 1495154688,1495154943,AU -1495154944,1495158015,EU +1495154944,1495155711,EU +1495155712,1495156735,US +1495156736,1495158015,EU 1495158016,1495158271,US 1495158272,1495158527,EU -1495158528,1495158783,HK +1495158528,1495158783,SG 1495158784,1495159295,GB 1495159296,1495159807,FR 1495159808,1495160063,SG @@ -34674,7 +34961,8 @@ 1495228416,1495230463,NL 1495230464,1495234559,RU 1495234560,1495234815,AE -1495234816,1495235583,AT +1495234816,1495235071,RS +1495235072,1495235583,AT 1495235584,1495235839,GB 1495235840,1495236351,JP 1495236352,1495236607,NL @@ -34697,7 +34985,7 @@ 1495261184,1495263231,PT 1495263232,1495265279,GB 1495265280,1495265791,DE -1495265792,1495266047,RU +1495265792,1495266047,CY 1495266048,1495267327,US 1495267328,1495269375,SE 1495269376,1495277567,IR @@ -34797,7 +35085,7 @@ 1495362560,1495363583,ES 1495363584,1495364607,KZ 1495364608,1495364863,GB -1495364864,1495365375,TR +1495364864,1495365375,PT 1495365376,1495367679,RO 1495367680,1495368191,IR 1495368192,1495368959,RO @@ -34833,7 +35121,7 @@ 1495400448,1495400703,ES 1495400704,1495400959,HR 1495400960,1495401215,RS -1495401216,1495401471,RO +1495401216,1495401471,DE 1495401472,1495401727,ES 1495401728,1495401983,RO 1495401984,1495402239,IT @@ -34874,9 +35162,9 @@ 1495441920,1495442431,SY 1495442432,1495443455,GB 1495443456,1495443967,IR -1495443968,1495444223,RO +1495443968,1495444223,NL 1495444224,1495444479,US -1495444480,1495444735,TR +1495444480,1495444735,KR 1495444736,1495445247,RO 1495445248,1495445503,TR 1495445504,1495446015,IR @@ -34901,8 +35189,7 @@ 1495461632,1495461887,IT 1495461888,1495463935,SE 1495463936,1495465983,IR -1495465984,1495466495,RO -1495466496,1495467007,DE +1495465984,1495467007,DE 1495467008,1495468031,RO 1495468032,1495470079,MD 1495470080,1495472127,NL @@ -34930,8 +35217,7 @@ 1495480832,1495481343,IR 1495481344,1495481855,RO 1495481856,1495482367,ES -1495482368,1495483391,AE -1495483392,1495484415,IR +1495482368,1495484415,IR 1495484416,1495484671,US 1495484672,1495485439,RO 1495485440,1495485695,NL @@ -34951,7 +35237,7 @@ 1495495424,1495496703,RO 1495496704,1495497727,IR 1495497728,1495498239,RO -1495498240,1495498495,TR +1495498240,1495498495,IN 1495498496,1495498751,US 1495498752,1495499775,RO 1495499776,1495500287,IR @@ -35031,7 +35317,7 @@ 1495566848,1495567359,GB 1495567360,1495567615,RO 1495567616,1495567871,GB -1495567872,1495568127,TR +1495567872,1495568127,IE 1495568128,1495571199,RO 1495571200,1495571455,IT 1495571456,1495572479,MD @@ -35053,11 +35339,11 @@ 1495586816,1495587839,DE 1495587840,1495588863,GB 1495588864,1495589119,RO -1495589120,1495589375,TR +1495589120,1495589375,FI 1495589376,1495589887,IR 1495589888,1495590143,IT 1495590144,1495590655,RO -1495590656,1495590911,TR +1495590656,1495590911,GB 1495590912,1495592959,US 1495592960,1495596031,RO 1495596032,1495596543,IR @@ -35100,9 +35386,10 @@ 1495631872,1495632127,US 1495632128,1495632383,ES 1495632384,1495632639,IE -1495632640,1495632895,RO +1495632640,1495632895,DE 1495632896,1495633151,GB -1495633152,1495633919,RO +1495633152,1495633407,DE +1495633408,1495633919,RO 1495633920,1495636991,IR 1495636992,1495640063,RO 1495640064,1495641087,IR @@ -35123,7 +35410,7 @@ 1495654400,1495655423,ES 1495655424,1495656447,US 1495656448,1495656959,RO -1495656960,1495657215,TR +1495656960,1495657215,GB 1495657216,1495657471,RO 1495657472,1495658495,US 1495658496,1495662591,IR @@ -35202,7 +35489,8 @@ 1495747584,1495748607,MD 1495748608,1495749631,RO 1495749632,1495750655,MD -1495750656,1495751423,RO +1495750656,1495750911,DE +1495750912,1495751423,RO 1495751424,1495751679,NL 1495751680,1495751935,IT 1495751936,1495752703,RO @@ -35212,7 +35500,7 @@ 1495756032,1495756799,RO 1495756800,1495758847,MD 1495758848,1495759359,RO -1495759360,1495759615,TR +1495759360,1495759615,TH 1495759616,1495759871,RO 1495759872,1495760127,ES 1495760128,1495760895,RO @@ -35264,11 +35552,11 @@ 1495797760,1495802623,RO 1495802624,1495802879,DK 1495802880,1495803135,RO -1495803136,1495803391,TR +1495803136,1495803391,IL 1495803392,1495803903,PK 1495803904,1495804159,RO 1495804160,1495804415,GB -1495804416,1495804671,RO +1495804416,1495804671,DE 1495804672,1495804927,US 1495804928,1495805439,GB 1495805440,1495805951,RO @@ -35382,7 +35670,7 @@ 1495920640,1495922687,IR 1495922688,1495924735,LU 1495924736,1495926783,IT -1495926784,1495927039,TR +1495926784,1495927039,SG 1495927040,1495927295,RO 1495927296,1495927551,GB 1495927552,1495927807,RO @@ -35391,7 +35679,8 @@ 1495931136,1495931391,IT 1495931392,1495932159,RO 1495932160,1495932415,GB -1495932416,1495932927,RO +1495932416,1495932671,DE +1495932672,1495932927,RO 1495932928,1495933439,IR 1495933440,1495933695,TR 1495933696,1495934975,RO @@ -35451,7 +35740,7 @@ 1495977984,1495978751,IR 1495978752,1495979007,HU 1495979008,1495979263,NL -1495979264,1495979519,TR +1495979264,1495979519,US 1495979520,1495979775,RO 1495979776,1495980031,US 1495980032,1495982079,RO @@ -35468,7 +35757,8 @@ 1495994368,1495995391,RO 1495995392,1495996415,KZ 1495996416,1495997439,RO -1495997440,1495998719,TR +1495997440,1495998463,TR +1495998464,1495998719,SG 1495998720,1495998975,DE 1495998976,1495999487,IT 1495999488,1495999999,IR @@ -35628,7 +35918,8 @@ 1496131584,1496132607,MD 1496132608,1496133631,RO 1496133632,1496137727,IR -1496137728,1496138495,RO +1496137728,1496138239,RO +1496138240,1496138495,DE 1496138496,1496138751,BG 1496138752,1496139263,IR 1496139264,1496139775,US @@ -35710,9 +36001,9 @@ 1496216576,1496217599,CH 1496217600,1496217855,RO 1496217856,1496218111,DE -1496218112,1496218367,RO +1496218112,1496218367,AT 1496218368,1496218623,NL -1496218624,1496218879,RO +1496218624,1496218879,AT 1496218880,1496219135,DE 1496219136,1496219647,RS 1496219648,1496220671,RO @@ -35797,7 +36088,9 @@ 1496316416,1496317183,RO 1496317184,1496317439,GG 1496317440,1496317951,RO -1496317952,1497366527,DE +1496317952,1496977407,DE +1496977408,1496978431,AT +1496978432,1497366527,DE 1497366528,1498415103,PL 1498415104,1499463679,FR 1499463680,1499594751,IT @@ -35808,7 +36101,9 @@ 1499996160,1500004351,GB 1500004352,1500014079,RU 1500014080,1500014335,UZ -1500014336,1500018943,RU +1500014336,1500015359,RU +1500015360,1500015615,NL +1500015616,1500018943,RU 1500018944,1500019199,TJ 1500019200,1500019711,GB 1500019712,1500020735,RU @@ -35841,7 +36136,7 @@ 1500170752,1500171007,RU 1500171008,1500171263,GB 1500171264,1500171519,NL -1500171520,1500171775,GB +1500171520,1500171775,US 1500171776,1500172031,DE 1500172032,1500172287,NL 1500172288,1500174335,AT @@ -35907,7 +36202,11 @@ 1500643328,1500774399,PT 1500774400,1500788735,LT 1500788736,1500788991,US -1500788992,1500794367,LT +1500788992,1500792319,LT +1500792320,1500792575,NL +1500792576,1500792831,LT +1500792832,1500793855,US +1500793856,1500794367,LT 1500794368,1500794879,US 1500794880,1500798975,LT 1500798976,1500799231,US @@ -35929,25 +36228,37 @@ 1500814848,1500815103,US 1500815104,1500815615,LT 1500815616,1500815871,US -1500815872,1500819199,LT +1500815872,1500817663,LT +1500817664,1500817919,DE +1500817920,1500819199,LT 1500819200,1500819455,US 1500819456,1500819711,LT 1500819712,1500819967,US -1500819968,1500824575,LT +1500819968,1500820479,LT +1500820480,1500821503,US +1500821504,1500824575,LT 1500824576,1500824831,US 1500824832,1500826623,LT 1500826624,1500826879,US 1500826880,1500827135,LT 1500827136,1500827391,US -1500827392,1500829695,LT -1500829696,1500829951,US +1500827392,1500828671,LT +1500828672,1500829951,US 1500829952,1500830207,LT 1500830208,1500830463,US 1500830464,1500831743,LT 1500831744,1500833791,US -1500833792,1500867839,LT +1500833792,1500846847,LT +1500846848,1500847103,DE +1500847104,1500862207,LT +1500862208,1500862463,DE +1500862464,1500866559,LT +1500866560,1500867583,US +1500867584,1500867839,LT 1500867840,1500868095,US -1500868096,1500898815,LT +1500868096,1500871679,LT +1500871680,1500871935,DE +1500871936,1500898815,LT 1500898816,1500899071,US 1500899072,1500905471,LT 1500905472,1501036543,IT @@ -35961,9 +36272,7 @@ 1502478336,1502605311,SI 1502605312,1502606335,HR 1502606336,1502609407,SI -1502609408,1502621439,DE -1502621440,1502621695,NL -1502621696,1502625791,DE +1502609408,1502625791,DE 1502625792,1502642175,SA 1502642176,1502658559,IR 1502658560,1502674943,AT @@ -36091,8 +36400,8 @@ 1505316096,1505316351,RO 1505316352,1505316607,SK 1505316608,1505316863,US -1505316864,1505318399,RU -1505318400,1505319423,JP +1505316864,1505318911,RU +1505318912,1505319423,JP 1505319424,1505320959,RU 1505320960,1505329151,AT 1505329152,1505332223,IE @@ -36347,7 +36656,11 @@ 1506835200,1506835455,KZ 1506835456,1506836479,RU 1506836480,1506838527,IL -1506838528,1506849791,RU +1506838528,1506838783,RU +1506838784,1506839039,NL +1506839040,1506840063,RU +1506840064,1506840319,NL +1506840320,1506849791,RU 1506849792,1506850815,US 1506850816,1506859519,RU 1506859520,1506860031,NL @@ -36406,7 +36719,9 @@ 1507718144,1507718911,NO 1507718912,1507721215,SE 1507721216,1507753983,GB -1507753984,1507786751,RU +1507753984,1507775487,RU +1507775488,1507776511,DE +1507776512,1507786751,RU 1507786752,1507787007,KZ 1507787008,1507787263,RU 1507787264,1507787519,KZ @@ -36423,7 +36738,9 @@ 1507792896,1507805183,RU 1507805184,1507806207,CY 1507806208,1507809279,RU -1507809280,1507811327,IT +1507809280,1507810047,IT +1507810048,1507810303,PL +1507810304,1507811327,IT 1507811328,1507815423,RU 1507815424,1507817471,KZ 1507817472,1507819519,RU @@ -36431,7 +36748,9 @@ 1507852288,1508114431,FR 1508114432,1508376575,PL 1508376576,1508392959,GE -1508392960,1508442111,RU +1508392960,1508423679,RU +1508423680,1508424703,UZ +1508424704,1508442111,RU 1508442112,1508458495,DK 1508458496,1508466687,DE 1508466688,1508468735,NO @@ -36802,13 +37121,14 @@ 1532762112,1532763135,BG 1532763136,1532764159,IE 1532764160,1532764415,IT -1532764416,1532764671,BG -1532764672,1532764927,TR +1532764416,1532764927,TR 1532764928,1532765183,BG 1532765184,1532765439,RO 1532765440,1532765695,ES 1532765696,1532766207,US -1532766208,1532772351,BG +1532766208,1532768511,BG +1532768512,1532768767,TR +1532768768,1532772351,BG 1532772352,1532772607,ES 1532772608,1532774143,BG 1532774144,1532774399,CH @@ -36832,7 +37152,8 @@ 1532793088,1532794879,IR 1532794880,1532795903,CH 1532795904,1532796927,IR -1532796928,1532797439,GB +1532796928,1532797183,SG +1532797184,1532797439,GB 1532797440,1532797951,IT 1532797952,1532798975,IR 1532798976,1532799999,BG @@ -36938,7 +37259,8 @@ 1533488896,1533489151,JP 1533489152,1533491199,ES 1533491200,1533493247,AM -1533493248,1533497343,RU +1533493248,1533495295,CH +1533495296,1533497343,RU 1533497344,1533497599,NL 1533497600,1533497855,US 1533497856,1533498367,NL @@ -37112,7 +37434,7 @@ 1535386624,1535387647,DK 1535387648,1535388671,NL 1535388672,1535389695,FR -1535389696,1535390719,AP +1535389696,1535390719,HK 1535390720,1535391743,SE 1535391744,1535391999,HK 1535392000,1535392255,EU @@ -37134,7 +37456,8 @@ 1535406080,1535407103,PL 1535407104,1535408127,ES 1535408128,1535409663,US -1535409664,1535410175,MD +1535409664,1535409919,MD +1535409920,1535410175,RU 1535410176,1535411199,GB 1535411200,1535412223,GR 1535412224,1535412479,CH @@ -37151,7 +37474,7 @@ 1535422464,1535423487,SE 1535423488,1535424511,CH 1535424512,1535425535,US -1535425536,1535426559,RU +1535425536,1535426559,MD 1535426560,1535427583,AZ 1535427584,1535427839,NL 1535427840,1535428095,FI @@ -37317,30 +37640,31 @@ 1536541184,1536541695,SE 1536541696,1536542719,PL 1536542720,1536542975,TR -1536542976,1536543231,RU -1536543232,1536546047,PL -1536546048,1536546303,RU -1536546304,1536546559,PL +1536542976,1536543231,PL +1536543232,1536543743,RU +1536543744,1536546559,PL 1536546560,1536546815,RU 1536546816,1536547327,PL 1536547328,1536547583,RU -1536547584,1536548095,PL +1536547584,1536547839,US +1536547840,1536548095,PL 1536548096,1536548351,RU -1536548352,1536548863,PL +1536548352,1536548863,US 1536548864,1536549375,NO 1536549376,1536549631,ES 1536549632,1536549887,US 1536549888,1536550143,PL 1536550144,1536550399,TR -1536550400,1536550655,RU -1536550656,1536550911,PL +1536550400,1536550911,SK 1536550912,1536551423,RU 1536551424,1536551679,PL 1536551680,1536551935,RU 1536551936,1536552447,TR -1536552448,1536552959,PL -1536552960,1536553215,RU -1536553216,1536557055,PL +1536552448,1536552703,US +1536552704,1536553727,RU +1536553728,1536553983,US +1536553984,1536556031,SK +1536556032,1536557055,RU 1536557056,1536573439,FI 1536573440,1536579071,RS 1536579072,1536579327,CS @@ -37386,7 +37710,9 @@ 1538843648,1538844159,PL 1538844160,1538847231,RU 1538847232,1538847743,PL -1538847744,1538850815,RU +1538847744,1538848255,RU +1538848256,1538848511,DE +1538848512,1538850815,RU 1538850816,1538859007,KZ 1538859008,1538875391,RU 1538875392,1538883583,RS @@ -37402,11 +37728,13 @@ 1538949120,1538957311,AT 1538957312,1538965503,DE 1538965504,1538966015,IR -1538966016,1538966527,CA +1538966016,1538966527,NL 1538966528,1538967551,US 1538967552,1538968575,GR -1538968576,1538969599,US -1538969600,1538972671,GR +1538968576,1538969599,DE +1538969600,1538970623,GR +1538970624,1538971647,NL +1538971648,1538972671,GR 1538972672,1538973695,MF 1538973696,1538981887,JO 1538981888,1538990079,ES @@ -37437,9 +37765,7 @@ 1539107840,1539110399,RU 1539110400,1539110911,US 1539110912,1539111935,CY -1539111936,1539112447,BG -1539112448,1539112703,US -1539112704,1539112959,FR +1539111936,1539112959,BG 1539112960,1539115007,PL 1539115008,1539117055,AE 1539117056,1539123199,PL @@ -37905,7 +38231,6 @@ 1539570688,1539571199,EE 1539571200,1539571711,AM 1539571712,1539572735,UA -1539572736,1539573759,RU 1539573760,1539575807,PL 1539575808,1539576831,IT 1539576832,1539577855,AT @@ -37960,7 +38285,8 @@ 1539628032,1539629055,US 1539629056,1539630079,BG 1539630080,1539631103,UA -1539631104,1539633151,RU +1539631104,1539632127,DK +1539632128,1539633151,RU 1539633152,1539634175,SE 1539634176,1539638271,RU 1539638272,1539639295,UA @@ -37976,7 +38302,7 @@ 1539648512,1539649023,CY 1539649024,1539649535,LB 1539649536,1539650559,UA -1539650560,1539651583,RU +1539650560,1539651327,RU 1539651584,1539651839,UA 1539651840,1539652095,RU 1539652096,1539652607,UA @@ -37993,7 +38319,7 @@ 1539662848,1539663871,IL 1539663872,1539664895,RU 1539664896,1539665919,BE -1539665920,1539666943,UA +1539665920,1539666943,RU 1539666944,1539667967,CZ 1539667968,1539668991,ES 1539668992,1539670015,RU @@ -38119,7 +38445,7 @@ 1539727872,1539728127,RU 1539728128,1539728383,GB 1539728384,1539728639,PL -1539728640,1539728895,UA +1539728640,1539728895,KZ 1539728896,1539729151,SA 1539729152,1539729407,NL 1539729408,1539729663,RU @@ -38219,8 +38545,7 @@ 1539755776,1539756031,FR 1539756032,1539756287,RU 1539756288,1539756543,PL -1539756544,1539756799,RU -1539757056,1539757567,RU +1539756544,1539757567,RU 1539757568,1539757823,SI 1539757824,1539758079,RU 1539758080,1539758335,HR @@ -38361,7 +38686,7 @@ 1539794688,1539794943,FR 1539794944,1539795199,RO 1539795200,1539795455,PL -1539795456,1539795711,US +1539795456,1539795711,UA 1539795712,1539795967,SA 1539795968,1539796223,ES 1539796224,1539796479,MC @@ -38390,7 +38715,7 @@ 1539802624,1539802879,IS 1539802880,1539803135,NL 1539803136,1539803391,GB -1539803392,1539803647,RU +1539803392,1539803647,CZ 1539803648,1539804159,UA 1539804160,1539804671,PL 1539804672,1539804927,SI @@ -38398,19 +38723,20 @@ 1539805184,1539805439,UA 1539805440,1539805695,AT 1539805696,1539805951,CH -1539805952,1539806207,RU +1539805952,1539806207,CZ 1539806208,1539806463,FI 1539806464,1539806719,RU 1539806720,1539806975,BG 1539806976,1539807231,GB 1539807232,1539807487,FR -1539807488,1539807999,RU +1539807488,1539807743,RU +1539807744,1539807999,CZ 1539808000,1539808255,HU 1539808256,1539808511,RU 1539808512,1539808767,GB 1539808768,1539809023,DE 1539809024,1539809279,GB -1539809280,1539809535,RU +1539809280,1539809535,CZ 1539809536,1539809791,SI 1539809792,1539810047,DE 1539810048,1539810303,LT @@ -38539,9 +38865,12 @@ 1539868160,1539868671,DK 1539868672,1539869695,RU 1539869696,1539870719,ES +1539870720,1539870975,CH +1539870976,1539871231,GB +1539871232,1539871487,RU +1539871488,1539871743,NL 1539871744,1539871999,US -1539872000,1539872255,TR -1539872256,1539872511,RU +1539872000,1539872511,RU 1539872512,1539872767,US 1539872768,1539873791,SE 1539873792,1539874815,UA @@ -38686,7 +39015,7 @@ 1540016128,1540017151,DE 1540017152,1540018175,RU 1540018176,1540018431,NL -1540018432,1540018687,GB +1540018432,1540018687,HK 1540018688,1540018943,NL 1540018944,1540019199,TR 1540019200,1540020223,UA @@ -38889,7 +39218,7 @@ 1540225024,1540226047,GB 1540226048,1540227071,RU 1540227072,1540227583,GB -1540227584,1540227839,LT +1540227584,1540227839,US 1540227840,1540228607,UA 1540228608,1540229119,PL 1540229120,1540229631,AT @@ -38985,8 +39314,7 @@ 1540278272,1540278783,UA 1540278784,1540279807,AT 1540279808,1540280319,RO -1540280320,1540280575,DE -1540280576,1540280831,US +1540280320,1540280831,DE 1540280832,1540281343,PL 1540281344,1540281855,RU 1540281856,1540282367,DE @@ -38995,7 +39323,6 @@ 1540283392,1540284415,RU 1540284416,1540284927,AT 1540284928,1540285439,UA -1540285440,1540285951,DE 1540285952,1540286207,DK 1540286208,1540286463,IT 1540286464,1540287487,GB @@ -39007,7 +39334,8 @@ 1540291072,1540291583,BE 1540291584,1540292095,UA 1540292096,1540292607,RU -1540292608,1540293119,US +1540292608,1540292863,US +1540292864,1540293119,TR 1540293120,1540293631,DK 1540293632,1540294655,RU 1540294656,1540294911,KZ @@ -39100,13 +39428,12 @@ 1540343808,1540344831,PL 1540344832,1540345087,BE 1540345088,1540345343,IR -1540345344,1540345855,IL 1540345856,1540346367,FR 1540346368,1540346879,UA 1540346880,1540347391,GB 1540347392,1540347903,DK 1540347904,1540348415,RO -1540348416,1540348927,UA +1540348416,1540348927,RU 1540348928,1540349439,GB 1540349440,1540349951,NO 1540349952,1540350463,UA @@ -39120,7 +39447,7 @@ 1540354048,1540354559,IL 1540354560,1540355071,PL 1540355072,1540355583,UA -1540355584,1540356351,RU +1540355584,1540356095,RU 1540356352,1540356607,UA 1540356608,1540357119,DE 1540357120,1540357631,RU @@ -39204,6 +39531,7 @@ 1540379136,1540379391,CH 1540379392,1540379647,DE 1540379648,1540379903,RU +1540379904,1540380159,FR 1540380160,1540380415,IL 1540380416,1540380671,NL 1540380672,1540380927,SI @@ -39359,7 +39687,7 @@ 1540423680,1540423935,SE 1540423936,1540424191,PL 1540424192,1540424447,AT -1540424448,1540424703,ES +1540424448,1540424703,CH 1540424704,1540424959,PL 1540424960,1540425215,RO 1540425216,1540425471,US @@ -39383,7 +39711,7 @@ 1540430592,1540430847,PL 1540430848,1540431103,CH 1540431104,1540431359,FI -1540431360,1540431615,NO +1540431360,1540431871,NO 1540431872,1540432127,HR 1540432128,1540432383,AT 1540432384,1540432639,GB @@ -39406,7 +39734,8 @@ 1540436736,1540436991,UA 1540436992,1540437247,DE 1540437248,1540437503,CH -1540437504,1540438015,UA +1540437504,1540437759,RU +1540437760,1540438015,UA 1540438016,1540438271,PL 1540438272,1540438527,FR 1540438528,1540438783,PL @@ -39422,7 +39751,6 @@ 1540441344,1540441855,RU 1540441856,1540442111,GB 1540442112,1540442367,RU -1540442368,1540442623,GB 1540442624,1540442879,IE 1540442880,1540443135,AT 1540443136,1540443391,RU @@ -39543,7 +39871,7 @@ 1540477184,1540477439,SK 1540477440,1540477695,UA 1540477696,1540477951,NL -1540477952,1540478207,NO +1540477952,1540478207,GB 1540478208,1540478463,NL 1540478464,1540478719,UA 1540478720,1540478975,SK @@ -39754,6 +40082,7 @@ 1540635136,1540635391,FR 1540635392,1540635647,RO 1540635648,1540635903,RU +1540635904,1540636159,UA 1540636160,1540636415,RO 1540636416,1540636671,LV 1540636672,1540637183,RU @@ -39787,13 +40116,15 @@ 1540644864,1540645119,AL 1540645120,1540645375,RU 1540645376,1540645631,FR -1540645632,1540646143,NL +1540645632,1540645887,NL +1540645888,1540646143,SC 1540646144,1540646399,RO 1540646400,1540646655,PS +1540646656,1540646911,RU 1540646912,1540647167,NL 1540647168,1540647423,GB 1540647424,1540647679,DE -1540647680,1540647935,NL +1540647680,1540647935,SC 1540647936,1540648191,GB 1540648192,1540648447,CH 1540648448,1540648959,RO @@ -39849,10 +40180,10 @@ 1540662272,1540662527,SA 1540662528,1540662783,PL 1540663040,1540663295,IT -1540663296,1540663551,RU +1540663296,1540663551,PL +1540663552,1540663807,BE 1540663808,1540664063,PL 1540664064,1540664319,RU -1540664320,1540664575,PL 1540664576,1540665087,UA 1540665088,1540665343,ES 1540665344,1540665599,NL @@ -40006,6 +40337,7 @@ 1540706816,1540707071,FR 1540707072,1540707327,AT 1540707328,1540707583,HR +1540707584,1540707839,IT 1540707840,1540708095,RO 1540708096,1540708351,RU 1540708352,1540708607,PL @@ -40017,7 +40349,7 @@ 1540710400,1540710655,PL 1540710656,1540710911,FI 1540710912,1540711167,DE -1540711168,1540711423,RU +1540711168,1540711423,UZ 1540711424,1540711679,CH 1540711680,1540711935,RO 1540711936,1540712191,FR @@ -40168,7 +40500,7 @@ 1540765696,1540766719,RU 1540766720,1540767743,IT 1540767744,1540768255,US -1540768256,1540768511,FR +1540768256,1540768511,AP 1540768512,1540768767,US 1540768768,1540769791,RU 1540769792,1540770815,IT @@ -40205,7 +40537,7 @@ 1540799488,1540800511,NL 1540800512,1540801535,CZ 1540801536,1540802559,RU -1540802560,1540803583,MD +1540802560,1540803583,US 1540803584,1540804607,RU 1540804608,1540805631,UA 1540805632,1540806655,RU @@ -40301,7 +40633,6 @@ 1540891136,1540891391,NL 1540891392,1540891647,DE 1540891648,1540891903,CH -1540891904,1540892159,GB 1540892160,1540892415,IT 1540892416,1540892671,FR 1540892672,1540892927,CH @@ -40388,7 +40719,6 @@ 1540915456,1540915967,RU 1540915968,1540916479,NL 1540916480,1540916735,UA -1540916736,1540916991,PL 1540916992,1540917247,UA 1540917248,1540917503,FI 1540917504,1540918015,GB @@ -40580,7 +40910,6 @@ 1540985856,1540986111,BG 1540986112,1540986367,AT 1540986368,1540986623,PL -1540986624,1540986879,FR 1540986880,1540987135,PL 1540987136,1540987391,LV 1540987392,1540987647,FR @@ -40604,7 +40933,6 @@ 1540992000,1540992255,FR 1540992256,1540992511,AT 1540992512,1540993279,DE -1540993280,1540993535,LB 1540993536,1540993791,RU 1540993792,1540994047,UA 1540994048,1540994303,RU @@ -40639,12 +40967,10 @@ 1541001472,1541001727,SE 1541001728,1541001983,NL 1541001984,1541002239,FI -1541002240,1541002495,RU 1541002496,1541002751,AT 1541002752,1541003007,DE 1541003264,1541003519,GB 1541003520,1541004031,PL -1541004032,1541004287,IL 1541004288,1541004543,RU 1541004544,1541004799,PL 1541004800,1541005055,SI @@ -40828,7 +41154,6 @@ 1541151488,1541151743,FR 1541151744,1541151999,NL 1541152000,1541152255,HU -1541152256,1541152511,NL 1541152512,1541152767,RU 1541152768,1541153023,PL 1541153024,1541153279,RU @@ -41046,7 +41371,7 @@ 1541210112,1541210623,RU 1541210624,1541211135,CZ 1541211136,1541211647,SK -1541211648,1541212159,UA +1541211648,1541212159,RU 1541212160,1541212671,DE 1541212672,1541213183,MT 1541213184,1541213695,DE @@ -41141,7 +41466,7 @@ 1541261824,1541262335,SA 1541262336,1541262847,DE 1541262848,1541263359,DK -1541263360,1541263871,NL +1541263360,1541263871,GB 1541263872,1541264383,UA 1541264384,1541264895,CZ 1541264896,1541265407,PL @@ -41175,7 +41500,7 @@ 1541283840,1541285887,UA 1541285888,1541286399,PL 1541286400,1541286655,UA -1541286656,1541286911,JP +1541286656,1541286911,FR 1541286912,1541287935,DE 1541287936,1541288959,RU 1541288960,1541289983,CZ @@ -41288,7 +41613,6 @@ 1541357568,1541357823,PL 1541357824,1541358079,HR 1541358080,1541358335,BG -1541358336,1541358591,RU 1541358592,1541358847,PL 1541358848,1541359103,SK 1541359104,1541359359,RU @@ -41314,13 +41638,12 @@ 1541364480,1541364735,AT 1541364736,1541364991,SE 1541364992,1541365247,RU -1541365248,1541365503,GB 1541365504,1541365759,NL 1541365760,1541366015,DE 1541366016,1541366271,UA 1541366272,1541366527,RU 1541366528,1541366783,DE -1541366784,1541367039,NO +1541366784,1541367039,GB 1541367040,1541367295,AT 1541367296,1541367551,DE 1541367552,1541367807,RU @@ -41727,7 +42050,7 @@ 1541594112,1541594367,AL 1541594368,1541594623,GB 1541594624,1541595135,RU -1541595136,1541595647,IR +1541595136,1541595647,TR 1541595648,1541595903,DE 1541595904,1541596159,NL 1541596160,1541597695,PL @@ -41857,9 +42180,10 @@ 1541670912,1541671423,PL 1541671424,1541671679,RU 1541671680,1541671935,PL -1541671936,1541672447,TR -1541672448,1541672703,UA -1541672704,1541672959,TR +1541671936,1541672191,TR +1541672192,1541672447,UA +1541672448,1541672703,TR +1541672704,1541672959,UA 1541672960,1541674495,RS 1541674496,1541675007,IR 1541675008,1541675519,IE @@ -41888,7 +42212,8 @@ 1541688832,1541689343,GB 1541689344,1541690367,PL 1541690368,1541691391,LT -1541691392,1541691903,PL +1541691392,1541691647,?? +1541691648,1541691903,PL 1541691904,1541692159,SE 1541692160,1541692415,ES 1541692416,1541693439,PL @@ -41948,6 +42273,7 @@ 1541722112,1541723135,RU 1541723136,1541723647,HU 1541723648,1541723903,NO +1541723904,1541724159,EE 1541724160,1541724415,ES 1541724416,1541725183,UA 1541725184,1541727487,RU @@ -42077,7 +42403,7 @@ 1541788672,1541788927,JO 1541788928,1541789183,PL 1541789184,1541789695,IR -1541789696,1541790719,UA +1541789696,1541790719,RU 1541790720,1541790975,SA 1541790976,1541791231,RU 1541791232,1541791743,GB @@ -42092,7 +42418,6 @@ 1541794816,1541795071,DK 1541795072,1541795327,RU 1541795328,1541795583,PL -1541795584,1541795839,ES 1541795840,1541796863,UA 1541796864,1541797119,US 1541797120,1541797631,DE @@ -42301,7 +42626,7 @@ 1541904384,1541904639,PL 1541904640,1541904895,SE 1541904896,1541905407,DE -1541905408,1541905663,FR +1541905408,1541905663,NL 1541905664,1541905919,PL 1541905920,1541906431,RS 1541906432,1541906687,UA @@ -42470,7 +42795,7 @@ 1541994752,1541995519,PL 1541995520,1541996031,RU 1541996032,1541996287,RO -1541996288,1541996543,NL +1541996288,1541996543,SC 1541996544,1541997567,US 1541997568,1541997823,RU 1541997824,1541998079,GB @@ -42483,7 +42808,7 @@ 1542000640,1542000895,GB 1542000896,1542001151,UA 1542001152,1542001663,PL -1542001664,1542001919,NL +1542001664,1542001919,SC 1542001920,1542002175,HU 1542002176,1542002687,NL 1542002688,1542002943,RS @@ -42541,6 +42866,7 @@ 1542030336,1542031359,RU 1542031360,1542032383,PL 1542032384,1542032639,UA +1542032640,1542032895,FI 1542032896,1542033407,DK 1542033408,1542034943,RU 1542034944,1542035199,PL @@ -42563,7 +42889,8 @@ 1542046720,1542047231,ES 1542047232,1542047487,DE 1542047488,1542047743,NL -1542047744,1542048255,RO +1542047744,1542047999,PL +1542048000,1542048255,RO 1542048256,1542048767,US 1542048768,1542049279,PL 1542049280,1542049791,BE @@ -42664,7 +42991,6 @@ 1542112256,1542113279,UA 1542113280,1542113535,LT 1542113536,1542113791,GB -1542113792,1542114047,RU 1542114048,1542114303,BE 1542114304,1542114815,FI 1542114816,1542115071,NL @@ -42847,8 +43173,8 @@ 1542210560,1542211583,SK 1542211584,1542212095,PL 1542212096,1542212351,RO -1542212352,1542212607,PL -1542212608,1542213119,RO +1542212352,1542212863,PL +1542212864,1542213119,RO 1542213120,1542213375,CH 1542213376,1542214143,RU 1542214144,1542214399,SK @@ -42879,7 +43205,6 @@ 1542231040,1542232063,RU 1542232064,1542232319,GB 1542232320,1542232575,FR -1542232576,1542233087,RU 1542233088,1542234111,UA 1542234112,1542234367,AT 1542234368,1542234623,FR @@ -42926,7 +43251,7 @@ 1542253824,1542254079,RO 1542254080,1542254335,RU 1542254336,1542254591,FR -1542254592,1542255615,RO +1542254592,1542255615,GB 1542255616,1542256127,BE 1542256128,1542256639,RU 1542256640,1542257663,UA @@ -42999,12 +43324,12 @@ 1542295296,1542295551,AT 1542295552,1542296831,RU 1542296832,1542297087,PL -1542297088,1542297343,RU 1542297344,1542297599,FI 1542297600,1542297855,UA 1542297856,1542298111,NL 1542298112,1542300159,PL -1542300160,1542300671,RU +1542300160,1542300415,KZ +1542300416,1542300671,RU 1542300672,1542301695,UA 1542301696,1542302463,SK 1542302464,1542303231,PL @@ -43089,7 +43414,7 @@ 1542345472,1542345983,US 1542345984,1542346239,PL 1542346240,1542347775,RU -1542347776,1542348287,NL +1542347776,1542348287,JP 1542348288,1542348799,MD 1542348800,1542349823,RU 1542349824,1542350079,UA @@ -43100,7 +43425,7 @@ 1542351872,1542352895,RU 1542352896,1542353151,US 1542353152,1542353407,SA -1542353408,1542353663,AP +1542353408,1542353663,HK 1542353664,1542353919,RU 1542353920,1542354943,IT 1542354944,1542355711,RU @@ -43146,7 +43471,7 @@ 1542378496,1542378751,DK 1542378752,1542379519,GB 1542379520,1542379775,PL -1542379776,1542380031,AT +1542379776,1542380031,US 1542380032,1542380287,RO 1542380288,1542380543,BE 1542380544,1542380799,FR @@ -43181,14 +43506,15 @@ 1542394880,1542395135,DE 1542395136,1542395391,ES 1542395392,1542395647,RU -1542395648,1542396159,AT +1542395648,1542395903,AT +1542395904,1542396159,US 1542396160,1542396415,NO 1542396416,1542396927,RU 1542396928,1542397951,PL 1542397952,1542398463,NL 1542398464,1542398975,DE 1542398976,1542399231,PL -1542399232,1542399487,AT +1542399232,1542399487,US 1542399488,1542399999,DK 1542400000,1542400767,RU 1542400768,1542401023,DE @@ -43289,13 +43615,16 @@ 1542441984,1542442239,TR 1542442240,1542442495,PL 1542442496,1542443007,GE -1542443008,1542444031,GB +1542444032,1542444287,GE +1542444288,1542444543,IE 1542444544,1542444799,IR 1542444800,1542445055,RU 1542445056,1542445567,SE 1542445568,1542446079,IL 1542446080,1542447103,CZ -1542447104,1542447871,RO +1542447104,1542447359,RO +1542447360,1542447615,PL +1542447616,1542447871,DE 1542447872,1542448639,RU 1542448640,1542448895,EU 1542448896,1542449151,AT @@ -43531,7 +43860,8 @@ 1542639616,1542640639,UA 1542640640,1542640895,DE 1542640896,1542641151,RU -1542641152,1542641663,US +1542641152,1542641407,BR +1542641408,1542641663,US 1542641664,1542641919,RO 1542641920,1542642175,GB 1542642176,1542642431,PL @@ -43628,10 +43958,10 @@ 1542764032,1542764287,PL 1542764288,1542764543,RU 1542764544,1542766591,PL -1542766592,1542767615,GB -1542767616,1542767871,NL +1542766592,1542767871,GB 1542767872,1542768127,LT -1542768128,1542768639,TR +1542768128,1542768383,DE +1542768384,1542768639,TR 1542768640,1542769663,FR 1542769664,1542770687,DE 1542770688,1542774783,PL @@ -43686,10 +44016,9 @@ 1542840832,1542841087,GB 1542841088,1542841343,RU 1542841344,1542842367,IR -1542842368,1542842879,RO -1542842880,1542843135,BZ +1542842368,1542843135,RO 1542843136,1542843647,US -1542843648,1542843903,GB +1542843648,1542843903,RU 1542843904,1542844159,PT 1542844160,1542844415,US 1542844416,1542845439,NL @@ -43724,7 +44053,7 @@ 1542860288,1542860543,NL 1542860544,1542860799,DE 1542860800,1542861055,UA -1542861056,1542861311,DE +1542861056,1542861311,SK 1542861312,1542861567,US 1542861568,1542861823,NL 1542861824,1542862079,ES @@ -43795,8 +44124,8 @@ 1542958592,1542958847,IR 1542958848,1542959103,ES 1542959104,1542959359,CH -1542959360,1542959615,DE -1542959616,1542959871,CY +1542959360,1542959615,SK +1542959616,1542959871,TR 1542959872,1542960127,RO 1542960128,1542960383,BG 1542960384,1542960639,NL @@ -43845,8 +44174,8 @@ 1545863168,1545895935,RU 1545895936,1545928703,BA 1545928704,1545961471,SI -1545961472,1545995775,RU -1545995776,1545996287,CZ +1545961472,1545995519,RU +1545995520,1545996287,CZ 1545996288,1545998335,RU 1545998336,1545999359,UZ 1545999360,1545999871,RU @@ -44032,7 +44361,10 @@ 1546977280,1546993663,MK 1546993664,1547010047,RU 1547010048,1547020287,SI -1547020288,1547024383,EU +1547020288,1547021311,EU +1547021312,1547022335,US +1547022336,1547023359,GB +1547023360,1547024383,EU 1547024384,1547025407,US 1547025408,1547026431,EU 1547026432,1547034623,ES @@ -44242,7 +44574,7 @@ 1551253248,1551253503,US 1551253504,1551254527,RU 1551254528,1551255551,AL -1551255552,1551256575,DE +1551255552,1551256575,RU 1551256576,1551257599,UA 1551257600,1551258623,ES 1551258624,1551261695,RU @@ -44274,7 +44606,7 @@ 1551276032,1551277055,BG 1551277056,1551278079,RO 1551278080,1551278591,US -1551278592,1551278847,AE +1551278592,1551278847,GB 1551278848,1551279103,DE 1551279104,1551280127,PL 1551280128,1551281151,RU @@ -44288,8 +44620,9 @@ 1551286016,1551286271,US 1551286272,1551287295,DE 1551287296,1551289343,RU -1551289344,1551289599,DE -1551289600,1551290367,GB +1551289344,1551289599,US +1551289600,1551289855,HK +1551289856,1551290367,GB 1551290368,1551291391,US 1551291392,1551292415,BE 1551292416,1551293439,AT @@ -44336,7 +44669,7 @@ 1551331328,1551332351,NL 1551332352,1551333375,CZ 1551333376,1551334399,HU -1551334400,1551335423,US +1551334400,1551335423,SK 1551335424,1551335679,RU 1551335680,1551335935,CA 1551335936,1551336447,RU @@ -44574,19 +44907,14 @@ 1559271168,1559271423,PL 1559271424,1559273471,FI 1559273472,1559281663,CZ -1559281664,1559282687,RU -1559282688,1559283711,US +1559281664,1559283711,RU 1559283712,1559283967,ZA -1559283968,1559284223,JP -1559284224,1559284735,RU +1559283968,1559284735,RU 1559284736,1559284991,MA -1559284992,1559285247,JP +1559284992,1559285247,RU 1559285248,1559285503,PA 1559285504,1559285759,PL -1559285760,1559287295,RU -1559287296,1559287551,JP -1559287552,1559287807,AE -1559287808,1559288063,JP +1559285760,1559288063,RU 1559288064,1559288319,US 1559288320,1559289855,RU 1559289856,1559298047,SK @@ -44610,7 +44938,7 @@ 1559408640,1559409663,BG 1559409664,1559410687,PL 1559410688,1559410943,GB -1559410944,1559411199,HK +1559410944,1559411199,US 1559411200,1559411711,GB 1559411712,1559412735,US 1559412736,1559420927,IR @@ -44629,7 +44957,7 @@ 1559451904,1559452159,RU 1559452160,1559452671,IT 1559452672,1559452927,RU -1559452928,1559453183,US +1559452928,1559453183,EU 1559453184,1559453695,IT 1559453696,1559461887,RU 1559461888,1559470079,IT @@ -44688,8 +45016,7 @@ 1559830528,1559831551,JP 1559831552,1559832575,VG 1559832576,1559833599,FR -1559833600,1559834623,US -1559834624,1559834879,AR +1559833600,1559834879,US 1559834880,1559835135,TR 1559835136,1559835391,ES 1559835392,1559835647,US @@ -44736,8 +45063,8 @@ 1560018944,1560051711,DE 1560051712,1560084479,RU 1560084480,1560117247,JO -1560117248,1560133631,CZ -1560133632,1560135679,UZ +1560117248,1560134655,CZ +1560134656,1560135679,UZ 1560135680,1560135935,RU 1560135936,1560136191,UA 1560136192,1560136447,UZ @@ -44781,9 +45108,7 @@ 1565523968,1565655039,RU 1565655040,1565786111,AT 1565786112,1565917183,BY -1565917184,1565995007,RS -1565995008,1565995263,CS -1565995264,1566048255,RS +1565917184,1566048255,RS 1566048256,1566052351,RU 1566052352,1566053375,DE 1566053376,1566054399,ES @@ -44827,7 +45152,8 @@ 1566191616,1566195711,FI 1566195712,1566196735,NL 1566196736,1566197759,CH -1566197760,1566198783,AP +1566197760,1566198271,AP +1566198272,1566198783,HK 1566198784,1566199807,ES 1566199808,1566207999,RU 1566208000,1566212095,DK @@ -44896,7 +45222,10 @@ 1566378496,1566379007,BG 1566379008,1566379263,GR 1566379264,1566380031,BG -1566380032,1566382079,IT +1566380032,1566380543,IT +1566380544,1566381055,DE +1566381056,1566381823,SK +1566381824,1566382079,IT 1566382080,1566384127,TR 1566384128,1566386175,CZ 1566386176,1566388223,FR @@ -44937,8 +45266,7 @@ 1566428672,1566428927,DE 1566428928,1566429183,RU 1566429184,1566437375,GB -1566437376,1566438399,DE -1566438400,1566439423,AP +1566437376,1566439423,AP 1566439424,1566443519,DE 1566443520,1566445567,NO 1566445568,1566447615,PL @@ -45036,7 +45364,7 @@ 1567698432,1567698687,IT 1567698688,1567698943,RO 1567698944,1567699967,ES -1567699968,1567700479,JM +1567699968,1567700479,BR 1567700480,1567702015,RO 1567702016,1567703039,TR 1567703040,1567705087,MD @@ -45062,7 +45390,7 @@ 1567718400,1567718911,ZA 1567718912,1567719167,RO 1567719168,1567719423,GB -1567719424,1567719679,RO +1567719424,1567719679,DE 1567719680,1567719935,AM 1567719936,1567720191,US 1567720192,1567720447,NO @@ -45081,7 +45409,8 @@ 1567735808,1567737855,RO 1567737856,1567738367,GB 1567738368,1567738623,US -1567738624,1567739391,RO +1567738624,1567739135,RO +1567739136,1567739391,DE 1567739392,1567739903,FR 1567739904,1567740927,DE 1567740928,1567741183,RO @@ -45099,7 +45428,9 @@ 1567751168,1567751679,RO 1567751680,1567751935,FR 1567751936,1567752191,RO -1567752192,1567756287,JO +1567752192,1567754751,JO +1567754752,1567755263,BR +1567755264,1567756287,JO 1567756288,1567760383,IR 1567760384,1567764479,RO 1567764480,1567764991,GB @@ -45119,7 +45450,9 @@ 1567774208,1567774719,GB 1567774720,1567775743,RO 1567775744,1567776767,US -1567776768,1567777535,RO +1567776768,1567777023,RO +1567777024,1567777279,HU +1567777280,1567777535,RO 1567777536,1567777791,US 1567777792,1567778815,RO 1567778816,1567780863,IR @@ -45272,7 +45605,7 @@ 1568022528,1568023551,FR 1568023552,1568023807,RO 1568023808,1568024063,IT -1568024064,1568024319,TR +1568024064,1568024319,SG 1568024320,1568024575,RO 1568024576,1568025599,US 1568025600,1568025855,TR @@ -45324,9 +45657,12 @@ 1568147456,1568147967,NO 1568147968,1568148479,RO 1568148480,1568152063,US -1568152064,1568152575,RO +1568152064,1568152319,IT +1568152320,1568152575,RO 1568152576,1568153343,GB -1568153344,1568154111,RO +1568153344,1568153599,RO +1568153600,1568153855,DK +1568153856,1568154111,RO 1568154112,1568156159,DE 1568156160,1568156415,RO 1568156416,1568156671,ES @@ -45404,22 +45740,13 @@ 1569193984,1569718271,HR 1569718272,1570242559,IT 1570242560,1570275327,GB -1570275328,1570295039,BG -1570295040,1570295551,GB -1570295552,1570295807,BG -1570295808,1570296063,GB -1570296064,1570296319,BG -1570296320,1570296575,US -1570296576,1570296831,BG +1570275328,1570295807,BG +1570295808,1570296063,TR +1570296064,1570296831,BG 1570296832,1570297599,US -1570297600,1570297855,KH -1570297856,1570298367,BG -1570298368,1570298623,US -1570298624,1570299903,BG +1570297600,1570299903,BG 1570299904,1570300159,TR -1570300160,1570300671,BG -1570300672,1570300927,US -1570300928,1570301439,BG +1570300160,1570301439,BG 1570301440,1570301695,DE 1570301696,1570308095,BG 1570308096,1570340863,CZ @@ -45447,7 +45774,7 @@ 1570597120,1570597375,RU 1570597376,1570597631,US 1570597632,1570597887,ES -1570597888,1570598143,PT +1570597888,1570598143,BR 1570598144,1570598399,UA 1570598400,1570598911,RU 1570598912,1570600959,PL @@ -45526,7 +45853,8 @@ 1571435776,1571436543,UA 1571436544,1571438591,BA 1571438592,1571440639,UA -1571440640,1571441407,CZ +1571440640,1571441151,KZ +1571441152,1571441407,CZ 1571441408,1571441663,UA 1571441664,1571441919,RU 1571441920,1571442431,UA @@ -45535,12 +45863,11 @@ 1571443200,1571443711,RU 1571443712,1571444735,CZ 1571444736,1571445759,UA -1571445760,1571446271,DE +1571445760,1571446271,CZ 1571446272,1571447039,RU 1571447040,1571447807,UA 1571447808,1571448063,RU -1571448064,1571448319,CZ -1571448320,1571448575,KZ +1571448064,1571448575,CZ 1571448576,1571451391,RU 1571451392,1571452927,UA 1571452928,1571453439,RU @@ -45566,15 +45893,14 @@ 1571470080,1571470335,RU 1571470336,1571470847,UA 1571470848,1571471103,RU -1571471104,1571471359,CZ +1571471104,1571471359,GR 1571471360,1571475455,RU 1571475456,1571476479,UZ 1571476480,1571477503,CZ 1571477504,1571478015,UA 1571478016,1571478271,RU 1571478272,1571478527,UA -1571478528,1571479551,CZ -1571479552,1571481599,UZ +1571478528,1571481599,UZ 1571481600,1571482623,RU 1571482624,1571483647,BY 1571483648,1571484159,HR @@ -45625,7 +45951,9 @@ 1571535104,1571535359,UA 1571535360,1571535871,RU 1571535872,1571536895,UZ -1571536896,1571540735,RU +1571536896,1571539199,RU +1571539200,1571539967,NL +1571539968,1571540735,RU 1571540736,1571540991,BY 1571540992,1571541503,RU 1571541504,1571542015,UZ @@ -45710,13 +46038,13 @@ 1571899648,1571899903,DE 1571899904,1571900159,GB 1571900160,1571900415,FR -1571900416,1571901439,AP +1571900416,1571901439,HK 1571901440,1571901695,SE 1571901696,1571901951,FR 1571901952,1571902463,IT 1571902464,1571903487,FR 1571903488,1571904511,PL -1571904512,1571905023,JP +1571904512,1571905023,RU 1571905024,1571905535,US 1571905536,1571905791,DE 1571905792,1571906559,US @@ -45742,7 +46070,9 @@ 1572020224,1572028415,SE 1572028416,1572028927,RU 1572028928,1572029183,UA -1572029184,1572036607,RU +1572029184,1572034559,RU +1572034560,1572035583,NL +1572035584,1572036607,RU 1572036608,1572038655,CA 1572038656,1572040703,RU 1572040704,1572042751,CA @@ -45836,7 +46166,9 @@ 1572470784,1572474879,DE 1572474880,1572483071,GB 1572483072,1572487167,RU -1572487168,1572491263,RS +1572487168,1572488191,RS +1572488192,1572488447,US +1572488448,1572491263,RS 1572491264,1572495359,IT 1572495360,1572499455,RU 1572499456,1572503551,TR @@ -45932,7 +46264,9 @@ 1572653056,1572654591,RU 1572654592,1572654847,GB 1572654848,1572657151,RU -1572657152,1572659199,DE +1572657152,1572657407,DE +1572657408,1572657663,RO +1572657664,1572659199,DE 1572659200,1572661247,IT 1572661248,1572663295,NO 1572663296,1572665343,DE @@ -46138,8 +46472,7 @@ 1578783744,1578784255,US 1578784256,1578785023,BG 1578785024,1578785279,TR -1578785280,1578785535,US -1578785536,1578786047,BG +1578785280,1578786047,BG 1578786048,1578786303,GI 1578786304,1578786559,BG 1578786560,1578786815,GI @@ -46261,7 +46594,7 @@ 1581945856,1581947903,IR 1581947904,1581948927,RU 1581948928,1581949951,IR -1581949952,1581950207,TR +1581949952,1581950207,RU 1581950208,1581950975,IR 1581950976,1581951231,RU 1581951232,1581951487,TR @@ -46360,7 +46693,7 @@ 1583786240,1583786495,BE 1583786496,1583786751,EU 1583786752,1583788031,BE -1583788032,1583792127,RU +1583788032,1583792127,TM 1583792128,1583796223,IE 1583796224,1583800319,DE 1583800320,1583804415,ME @@ -46385,13 +46718,9 @@ 1583840256,1583841279,US 1583841280,1583845375,FR 1583845376,1583849471,NL -1583849472,1583851007,DE -1583851008,1583851263,CZ -1583851264,1583853055,DE -1583853056,1583853311,CZ -1583853312,1583853567,DE +1583849472,1583853567,DE 1583853568,1583853823,US -1583853824,1583854079,RU +1583853824,1583854079,TR 1583854080,1583854335,US 1583854336,1583854591,RU 1583854592,1583854847,DE @@ -46428,7 +46757,7 @@ 1585197056,1585199103,IT 1585199104,1585201151,NL 1585201152,1585203199,IT -1585203200,1585203455,CY +1585203200,1585203455,US 1585203456,1585203711,TR 1585203712,1585203967,NO 1585203968,1585204223,RU @@ -46455,8 +46784,8 @@ 1585225728,1585226239,NL 1585226240,1585227775,UA 1585227776,1585229823,RU -1585229824,1585230847,NL -1585230848,1585231359,RU +1585229824,1585230335,NL +1585230336,1585231359,RU 1585231360,1585231615,NL 1585231616,1585231871,RU 1585231872,1585233919,CZ @@ -46600,12 +46929,14 @@ 1586012160,1586020351,DE 1586020352,1586028543,RU 1586028544,1586036735,GB -1586036736,1586055423,RU +1586036736,1586055167,RU +1586055168,1586055423,US 1586055424,1586055679,AP -1586055680,1586056191,RU -1586056192,1586056447,US +1586055680,1586056447,RU 1586056448,1586056703,CH -1586056704,1586061055,RU +1586056704,1586060287,RU +1586060288,1586060543,US +1586060544,1586061055,RU 1586061056,1586061311,KR 1586061312,1586069503,SE 1586069504,1586073599,DK @@ -46637,7 +46968,8 @@ 1586233600,1586233855,US 1586233856,1586234367,CA 1586234368,1586235391,FR -1586235392,1586236927,US +1586235392,1586236415,AP +1586236416,1586236927,US 1586236928,1586237439,CY 1586237440,1586237695,US 1586237696,1586237951,DK @@ -46697,7 +47029,7 @@ 1586421760,1586423807,SE 1586423808,1586425855,CZ 1586425856,1586427903,NL -1586427904,1586431999,CH +1586429952,1586431999,CH 1586432000,1586434047,DK 1586434048,1586436095,FR 1586436096,1586438143,ES @@ -46724,7 +47056,7 @@ 1586483200,1586485247,NL 1586485248,1586487295,FR 1586487296,1586487551,RU -1586487552,1586487807,DE +1586487552,1586487807,TR 1586487808,1586488063,UA 1586488064,1586488319,DK 1586488320,1586488575,FR @@ -46754,9 +47086,11 @@ 1587154432,1587154943,FR 1587154944,1587159039,PL 1587159040,1587160063,RO -1587160064,1587160831,TR -1587160832,1587161087,UA -1587161088,1587162879,TR +1587160064,1587160575,TR +1587160576,1587161087,UA +1587161088,1587161343,TR +1587161344,1587162623,UA +1587162624,1587162879,TR 1587162880,1587163135,UA 1587163136,1587165183,EU 1587165184,1587167231,PL @@ -46777,8 +47111,8 @@ 1587182848,1587183103,DE 1587183104,1587183359,NL 1587183360,1587183615,GB -1587183616,1587184639,RU -1587184640,1587185663,DE +1587183616,1587184639,NL +1587184640,1587185663,GR 1587185664,1587186431,GB 1587186432,1587186687,DE 1587186688,1587187711,NL @@ -46796,7 +47130,9 @@ 1587197952,1587198975,ES 1587198976,1587199999,RU 1587200000,1587216383,UA -1587216384,1587288575,BG +1587216384,1587284735,BG +1587284736,1587284991,TR +1587284992,1587288575,BG 1587288576,1587289087,IT 1587289088,1587290111,IE 1587290112,1587291135,BG @@ -46832,10 +47168,9 @@ 1587346944,1587347455,DE 1587347456,1587412991,NL 1587412992,1587418111,RU -1587418112,1587418367,UA +1587418112,1587418367,AT 1587418368,1587418623,GB -1587418624,1587418879,FR -1587418880,1587419135,NL +1587418624,1587419135,NL 1587419136,1587420159,BG 1587420160,1587421183,CH 1587421184,1587425279,UA @@ -46886,7 +47221,7 @@ 1588617728,1588618239,BE 1588618240,1588619263,DE 1588619264,1588619775,RO -1588619776,1588620031,TR +1588619776,1588620031,SG 1588620032,1588620287,ES 1588620288,1588620543,RO 1588620544,1588621311,US @@ -46935,7 +47270,9 @@ 1588654080,1588658175,DE 1588658176,1588659199,ES 1588659200,1588659455,EU -1588659456,1588660735,NL +1588659456,1588660223,NL +1588660224,1588660479,AT +1588660480,1588660735,NL 1588660736,1588661247,RO 1588661248,1588661503,NL 1588661504,1588661759,RO @@ -46945,12 +47282,11 @@ 1588662784,1588663295,IT 1588663296,1588663551,SK 1588663552,1588663807,IT -1588663808,1588664063,TR -1588664064,1588664319,GB +1588663808,1588664319,GB 1588664320,1588664575,ES 1588664576,1588664831,EE 1588664832,1588665087,RO -1588665088,1588665343,TR +1588665088,1588665343,GB 1588665344,1588670463,RO 1588670464,1588670975,IT 1588670976,1588671487,RO @@ -47026,7 +47362,8 @@ 1589311232,1589311487,US 1589311488,1589313535,DE 1589313536,1589346303,LB -1589346304,1589379071,KW +1589346304,1589354495,FR +1589354496,1589379071,KW 1589379072,1589411839,RU 1589411840,1589414143,IL 1589414144,1589414399,US @@ -47106,7 +47443,9 @@ 1590089728,1590091263,US 1590091264,1590091775,RU 1590091776,1590092287,CZ -1590092288,1590093823,EU +1590092288,1590092799,EU +1590092800,1590093055,UA +1590093056,1590093823,EU 1590093824,1590095871,RU 1590095872,1590096895,CZ 1590096896,1590097919,EU @@ -47232,7 +47571,10 @@ 1592251392,1592251647,RU 1592251648,1592251903,IE 1592251904,1592252415,FR -1592252416,1592253439,US +1592252416,1592252671,US +1592252672,1592252927,TR +1592252928,1592253183,IN +1592253184,1592253439,US 1592253440,1592254463,RU 1592254464,1592258559,PL 1592258560,1592262655,NL @@ -47265,7 +47607,7 @@ 1592320000,1592322047,LT 1592322048,1592324863,RU 1592324864,1592325119,EU -1592325120,1592326143,NL +1592325120,1592326143,US 1592326144,1592327167,SY 1592327168,1592328191,NL 1592328192,1592393727,RU @@ -47355,7 +47697,9 @@ 1593284608,1593286655,GB 1593286656,1593288703,FR 1593288704,1593290751,SE -1593290752,1593292799,FR +1593290752,1593292031,FR +1593292032,1593292287,ES +1593292288,1593292799,FR 1593292800,1593294847,IT 1593294848,1593296895,NL 1593296896,1593298943,RS @@ -47372,20 +47716,7 @@ 1593370624,1593372671,RS 1593372672,1593376767,HU 1593376768,1593409535,JO -1593409536,1593412095,DE -1593412096,1593412351,GB -1593412352,1593421055,DE -1593421056,1593421311,GB -1593421312,1593421567,FR -1593421568,1593421823,GB -1593421824,1593422591,DE -1593422592,1593422847,GB -1593422848,1593423359,DE -1593423360,1593423615,US -1593423616,1593438719,DE -1593438720,1593438975,US -1593438976,1593442047,DE -1593442048,1593442303,GB +1593409536,1593442303,DE 1593442304,1593475071,BA 1593475072,1593491455,HR 1593491456,1593492479,DE @@ -47466,7 +47797,7 @@ 1596882944,1596884991,CZ 1596884992,1596886015,KZ 1596886016,1596886527,UA -1596886528,1596886783,RU +1596886528,1596886783,CZ 1596886784,1596887039,UA 1596887040,1596887295,RU 1596887296,1596887551,UA @@ -47514,7 +47845,8 @@ 1596945664,1596946431,RU 1596946432,1596946943,UZ 1596946944,1596947967,UA -1596947968,1596950527,CZ +1596947968,1596948479,UZ +1596948480,1596950527,CZ 1596950528,1596950783,UA 1596950784,1596951039,RU 1596951040,1596951295,NL @@ -47675,8 +48007,7 @@ 1601044480,1601077247,RU 1601077248,1601110015,IT 1601110016,1601142783,BG -1601142784,1601146879,FR -1601146880,1601150975,UA +1601142784,1601150975,US 1601150976,1601159167,NO 1601159168,1601163263,SG 1601163264,1601165311,FI @@ -47987,7 +48318,9 @@ 1604407296,1604407551,IN 1604407552,1604408319,RU 1604408320,1604409343,NL -1604409344,1604419583,RU +1604409344,1604413439,RU +1604413440,1604413951,NL +1604413952,1604419583,RU 1604419584,1604422655,NL 1604422656,1604433919,RU 1604433920,1604434943,KZ @@ -48275,7 +48608,7 @@ 1607636480,1607636991,ZA 1607636992,1607637503,TZ 1607637504,1607638015,UG -1607638016,1607638527,SD +1607638016,1607638527,IT 1607638528,1607639039,GB 1607639040,1607647231,IT 1607647232,1607651327,DE @@ -48284,7 +48617,9 @@ 1607657472,1607663615,IT 1607663616,1607729151,NL 1607729152,1607794687,SY -1607794688,1607860223,RU +1607794688,1607811071,RU +1607811072,1607827455,NL +1607827456,1607860223,RU 1607860224,1607861247,ES 1607861248,1607862271,PL 1607862272,1607862527,CZ @@ -48312,7 +48647,8 @@ 1607880448,1607881471,DE 1607881472,1607882751,US 1607882752,1607883775,IT -1607883776,1607884287,US +1607883776,1607884031,US +1607884032,1607884287,RU 1607884288,1607884543,ES 1607884544,1607884799,US 1607884800,1607885823,TR @@ -48336,8 +48672,7 @@ 1607903232,1607904255,DE 1607904256,1607905279,TR 1607905280,1607906303,JP -1607906304,1607907327,TR -1607907328,1607908351,GB +1607906304,1607908351,GB 1607908352,1607909375,JP 1607909376,1607910399,DE 1607910400,1607911423,FR @@ -48420,9 +48755,7 @@ 1608054784,1608055039,DE 1608055040,1608094719,FI 1608094720,1608094975,DE -1608094976,1608095231,FI -1608095232,1608095487,DE -1608095488,1608122367,FI +1608094976,1608122367,FI 1608122368,1608253439,SA 1608253440,1608384511,RU 1608384512,1608515583,DE @@ -48442,7 +48775,9 @@ 1611250688,1611251199,JP 1611251200,1611251455,AU 1611251456,1611251711,TH -1611251712,1611923455,US +1611251712,1611260415,US +1611260416,1611260671,CA +1611260672,1611923455,US 1611923456,1612185599,CA 1612185600,1612595199,US 1612595200,1612611583,TH @@ -48654,7 +48989,8 @@ 1670873088,1670875135,CA 1670875136,1670877183,IN 1670877184,1670879231,KR -1670879232,1673527295,US +1670879232,1670881279,IL +1670881280,1673527295,US 1673527296,1673560063,CA 1673560064,1673986047,US 1673986048,1674051583,CA @@ -48696,10 +49032,12 @@ 1695547392,1696595967,CN 1696595968,1696616447,HK 1696616448,1696620543,IN -1696620544,1696621055,JP -1696621056,1696641023,SG -1696641024,1696649727,HK -1696649728,1696664575,SG +1696620544,1696624639,JP +1696624640,1696641023,SG +1696641024,1696653311,HK +1696653312,1696654335,TH +1696654336,1696656895,IN +1696656896,1696664575,SG 1696664576,1696665855,IN 1696665856,1696669695,SG 1696669696,1696672255,HK @@ -48714,7 +49052,9 @@ 1696882688,1696890879,HK 1696890880,1697382399,CN 1697382400,1697447935,SG -1697447936,1697775615,CN +1697447936,1697710079,CN +1697710080,1697742847,US +1697742848,1697775615,CN 1697775616,1697776639,ID 1697776640,1697777663,JP 1697777664,1697779711,CN @@ -48932,13 +49272,13 @@ 1713824512,1713824767,BA 1713824768,1713825023,US 1713825024,1713825279,CN -1713825280,1713825535,CO +1713825280,1713825535,BR 1713825536,1713825791,US 1713825792,1713826047,CR 1713826048,1713826303,CY 1713826304,1713826559,HR 1713826560,1713826815,GT -1713826816,1713827071,EC +1713826816,1713827071,BR 1713827072,1713827327,IL 1713827328,1713827583,KZ 1713827584,1713827839,MT @@ -49113,40 +49453,40 @@ 1719770112,1719770367,US 1719770368,1719770623,KH 1719770624,1719771135,US -1719771136,1719771903,AP +1719771136,1719771903,HK 1719771904,1719772159,US -1719772160,1719772415,AP +1719772160,1719772415,HK 1719772416,1719773695,US -1719773696,1719774207,AP +1719773696,1719774207,HK 1719774208,1719774463,US -1719774464,1719774975,AP -1719774976,1719775487,US -1719775488,1719775743,AP +1719774464,1719774719,HK +1719774720,1719775487,US +1719775488,1719775743,HK 1719775744,1719775999,US -1719776000,1719776511,AP +1719776000,1719776511,HK 1719776512,1719777791,US -1719777792,1719778047,AP +1719777792,1719778047,HK 1719778048,1719778815,US -1719778816,1719779327,AP +1719778816,1719779071,HK +1719779072,1719779327,US 1719779328,1719779839,HK 1719779840,1719780351,US 1719780352,1719780863,HK 1719780864,1719781119,US 1719781120,1719781375,ZA -1719781376,1719782655,US +1719781376,1719781887,US +1719781888,1719782143,GB +1719782144,1719782655,US 1719782656,1719782911,IT -1719782912,1719783423,HK -1719783424,1719783679,RU -1719783680,1719783935,US +1719782912,1719783935,US 1719783936,1719784191,ZA -1719784192,1719784447,PK -1719784448,1719786495,US +1719784192,1719786495,US 1719786496,1719787007,ZA 1719787008,1719788799,US 1719788800,1719789055,TH -1719789056,1719789567,US -1719789568,1719790591,RU -1719790592,1719795455,US +1719789056,1719789311,US +1719789312,1719789567,KE +1719789568,1719795455,US 1719795456,1719795711,NL 1719795712,1719797759,NG 1719797760,1719798783,MU @@ -49351,7 +49691,7 @@ 1722097408,1722097663,GB 1722097664,1722098687,US 1722098688,1722099711,GB -1722099712,1722099967,US +1722099712,1722099967,ZA 1722099968,1722100223,JP 1722100224,1722100479,NL 1722100480,1722101247,US @@ -49359,8 +49699,9 @@ 1722102016,1722102271,US 1722102272,1722102783,HK 1722102784,1722103807,ZA -1722103808,1722104831,US -1722104832,1722105343,ZA +1722103808,1722104063,DE +1722104064,1722104575,US +1722104576,1722105343,ZA 1722105344,1722105855,GB 1722105856,1722114047,ZA 1722114048,1722118143,ML @@ -49404,27 +49745,68 @@ 1722902528,1722916863,ZA 1722916864,1722920959,EC 1722920960,1722925055,US -1722925056,1722941439,ZW +1722925056,1722927103,ZW +1722927104,1722941439,MU 1722941440,1723138047,BF 1723138048,1723195391,SD 1723195392,1723203583,MU 1723203584,1723269119,ZA 1723269120,1723334655,MU 1723334656,1723858943,EG -1723858944,1725487103,MU +1723858944,1725443071,MU +1725443072,1725444095,AO +1725444096,1725450239,MU +1725450240,1725451263,ZA +1725451264,1725452287,MU +1725452288,1725453311,ZA +1725453312,1725454335,MU +1725454336,1725455359,SD +1725455360,1725456383,MU +1725456384,1725457407,NG +1725457408,1725459455,MU +1725459456,1725460479,SS +1725460480,1725461503,MU +1725461504,1725462015,KE +1725462016,1725462271,MU +1725462272,1725462527,KE +1725462528,1725463551,MU +1725463552,1725464575,ZA +1725464576,1725465855,MU +1725465856,1725466111,ZA +1725466112,1725466623,NG +1725466624,1725467647,MU +1725467648,1725468671,AO +1725468672,1725470719,MU +1725470720,1725471231,NG +1725471232,1725471743,KE +1725471744,1725473791,ZA +1725473792,1725474815,MU +1725474816,1725475839,AO +1725475840,1725476863,TZ +1725476864,1725477887,ZA +1725477888,1725478911,NG +1725478912,1725479935,ZA +1725479936,1725480959,MU +1725480960,1725481983,NG +1725481984,1725483007,ZA +1725483008,1725484031,NG +1725484032,1725485055,CI +1725485056,1725486079,AO +1725486080,1725486591,GH +1725486592,1725487103,ZM 1725487104,1725488127,MR 1725488128,1725490175,ZA 1725490176,1725491199,MR 1725491200,1725492223,ZA 1725492224,1725493247,MU 1725493248,1725494271,CD -1725494272,1725495295,MU +1725494272,1725495295,TZ 1725495296,1725496319,GM 1725496320,1725497343,AO 1725497344,1725498367,NG -1725498368,1725499391,MU +1725498368,1725499391,KE 1725499392,1725500415,NG -1725500416,1725501439,MU +1725500416,1725501439,TG 1725501440,1725502463,CD 1725502464,1725503487,ZA 1725503488,1725504511,MU @@ -49445,9 +49827,8 @@ 1725520896,1725521919,RW 1725521920,1725522943,NE 1725522944,1725523967,KE -1725523968,1725524991,CI -1725524992,1725526015,ZA -1725526016,1725527039,MU +1725523968,1725526015,ZA +1725526016,1725527039,EG 1725527040,1725528063,AO 1725528064,1725531135,KE 1725531136,1725531391,RW @@ -49461,7 +49842,9 @@ 1725537280,1725538303,KE 1725538304,1725539327,ZA 1725539328,1725539583,KE -1725539584,1725540351,ZA +1725539584,1725539839,DJ +1725539840,1725540095,ZA +1725540096,1725540351,KE 1725540352,1725541375,TN 1725541376,1725541887,KE 1725541888,1725543423,ZA @@ -49481,14 +49864,13 @@ 1725559808,1725560831,KE 1725560832,1725562367,ZA 1725562368,1725562623,EG -1725562624,1725562879,MU +1725562624,1725562879,NG 1725562880,1725563903,ET 1725563904,1725564927,GH 1725564928,1725565439,ZA 1725565440,1725565951,SO 1725565952,1725566975,ZW -1725566976,1725567487,ZA -1725567488,1725567999,MU +1725566976,1725567999,ZA 1725568000,1725569023,EG 1725569024,1725570047,ZA 1725570048,1725571071,TZ @@ -49694,7 +50076,9 @@ 1725757696,1725757951,SL 1725757952,1725758207,MW 1725758208,1725758463,KE -1725758464,1725761535,ZA +1725758464,1725760511,ZA +1725760512,1725760767,NG +1725760768,1725761535,ZA 1725761536,1725762559,LY 1725762560,1725763583,ZA 1725763584,1725764607,NG @@ -49836,7 +50220,7 @@ 1725902848,1725903871,TD 1725903872,1725904895,NG 1725904896,1725905919,ZA -1725905920,1725906431,KE +1725905920,1725906431,MU 1725906432,1725906943,ZA 1725906944,1725907967,ML 1725907968,1725908991,SN @@ -49877,7 +50261,9 @@ 1725934848,1725935103,GH 1725935104,1725935615,BF 1725935616,1725936639,CD -1725936640,1725939711,MU +1725936640,1725937151,NG +1725937152,1725938687,MU +1725938688,1725939711,SO 1725939712,1725940735,TD 1725940736,1725942783,ZA 1725942784,1725943295,KE @@ -49911,8 +50297,8 @@ 1728126976,1728129023,HK 1728129024,1728129279,AP 1728129280,1728129535,HK -1728129536,1728129791,AP -1728129792,1728131071,HK +1728129536,1728130047,AP +1728130048,1728131071,HK 1728131072,1728134399,AU 1728134400,1728134655,US 1728134656,1728135167,AU @@ -50057,7 +50443,8 @@ 1728338944,1728339967,PK 1728339968,1728340991,SG 1728340992,1728342015,AU -1728342016,1728343039,TW +1728342016,1728342527,HK +1728342528,1728343039,TW 1728343040,1728344063,SG 1728344064,1728344575,HK 1728344576,1728345087,SG @@ -50397,7 +50784,7 @@ 1728636928,1728637951,NZ 1728637952,1728638463,AU 1728638464,1728638719,ID -1728638720,1728638975,AU +1728638720,1728638975,US 1728638976,1728639487,HK 1728639488,1728639743,JP 1728639744,1728639999,PH @@ -50616,7 +51003,7 @@ 1728834816,1728835071,HK 1728835072,1728835583,JP 1728835584,1728836607,NZ -1728836608,1728837631,HK +1728836608,1728837631,AU 1728837632,1728838655,KR 1728838656,1728839679,ID 1728839680,1728839935,AU @@ -50641,8 +51028,7 @@ 1728854784,1728855039,AU 1728855040,1728855551,TH 1728855552,1728857087,MY -1728857088,1728857599,AP -1728857600,1728858111,HK +1728857088,1728858111,AP 1728858112,1728859135,BD 1728859136,1728860159,AU 1728860160,1728860671,ID @@ -50662,7 +51048,7 @@ 1728873472,1728874495,IN 1728874496,1728875519,CN 1728875520,1728877567,MY -1728877568,1728878591,HK +1728877568,1728878591,AP 1728878592,1728879615,MY 1728879616,1728880127,IN 1728880128,1728880383,JP @@ -50776,7 +51162,8 @@ 1728976384,1728976895,AU 1728976896,1728977151,TH 1728977152,1728977407,AU -1728977408,1728977919,US +1728977408,1728977663,US +1728977664,1728977919,BR 1728977920,1728978943,MY 1728978944,1728979967,CN 1728979968,1728980991,MN @@ -50988,8 +51375,7 @@ 1729167360,1729168383,IN 1729168384,1729169407,AU 1729169408,1729170431,TW -1729170432,1729171455,WS -1729171456,1729171967,AU +1729170432,1729171967,AU 1729171968,1729172223,IN 1729172224,1729172479,MY 1729172480,1729173503,PH @@ -51056,9 +51442,9 @@ 1729225728,1729226751,CN 1729226752,1729227775,AU 1729227776,1729228799,VN -1729228800,1729229823,TW +1729228800,1729229823,HK 1729229824,1729230847,ID -1729230848,1729231103,PH +1729230848,1729231103,AU 1729231104,1729231359,TH 1729231360,1729232895,AU 1729232896,1729233919,MY @@ -51168,10 +51554,7 @@ 1729341440,1729341951,IN 1729341952,1729343487,AU 1729343488,1729346559,ID -1729346560,1729346815,HK -1729346816,1729347071,AP -1729347072,1729347327,HK -1729347328,1729347583,AP +1729346560,1729347583,AP 1729347584,1729348095,AU 1729348096,1729348607,NZ 1729348608,1729350655,IN @@ -51286,7 +51669,8 @@ 1729439744,1729440767,BD 1729440768,1729441791,MY 1729441792,1729442815,AU -1729442816,1729443839,IN +1729442816,1729443071,US +1729443072,1729443839,IN 1729443840,1729444351,AU 1729444352,1729444863,IN 1729444864,1729445887,TW @@ -51307,7 +51691,7 @@ 1729460224,1729461247,VN 1729461248,1729462271,IN 1729462272,1729464319,AU -1729464320,1729465343,AP +1729464320,1729465343,HK 1729465344,1729466367,CN 1729466368,1729467391,AU 1729467392,1729468415,VN @@ -51452,7 +51836,7 @@ 1729623808,1729624063,AU 1729624064,1729625087,JP 1729625088,1729626111,AU -1729626112,1729627135,AP +1729626112,1729627135,HK 1729627136,1729628159,SG 1729628160,1729629183,KR 1729629184,1729629695,ID @@ -51512,7 +51896,8 @@ 1729677568,1729677823,US 1729677824,1729678079,NL 1729678080,1729678335,IN -1729678336,1729679359,AP +1729678336,1729678847,HK +1729678848,1729679359,AP 1729679360,1729680383,AU 1729680384,1729681407,ID 1729681408,1729682431,HK @@ -51614,7 +51999,7 @@ 1729785856,1729786879,BD 1729786880,1729787903,AU 1729787904,1729788927,HK -1729788928,1729789951,US +1729788928,1729789951,IT 1729789952,1729790975,ID 1729790976,1729791999,CN 1729792000,1729793023,BD @@ -51632,7 +52017,8 @@ 1729805312,1729806335,AU 1729806336,1729807359,MN 1729807360,1729808383,MY -1729808384,1729808895,IN +1729808384,1729808639,ES +1729808640,1729808895,IN 1729808896,1729809407,NZ 1729809408,1729810431,IN 1729810432,1729812479,ID @@ -51691,7 +52077,7 @@ 1729856512,1729857535,AU 1729857536,1729858559,JP 1729858560,1729859583,IN -1729859584,1729860607,PH +1729859584,1729860607,PS 1729860608,1729861631,KR 1729861632,1729862655,AU 1729862656,1729863679,JP @@ -51865,7 +52251,7 @@ 1730026496,1730027519,BD 1730027520,1730028543,SG 1730028544,1730029567,VN -1730029568,1730030591,AP +1730029568,1730030591,HK 1730030592,1730031615,TW 1730031616,1730032639,HK 1730032640,1730032895,PH @@ -51907,7 +52293,7 @@ 1730067456,1730068479,BD 1730068480,1730069503,AU 1730069504,1730070527,KH -1730070528,1730071551,CN +1730070528,1730071551,HK 1730071552,1730072575,KR 1730072576,1730073087,SG 1730073088,1730073343,IT @@ -51956,7 +52342,7 @@ 1730117632,1730118655,KH 1730118656,1730119679,ID 1730119680,1730120703,HK -1730120704,1730121727,JP +1730120704,1730121727,AU 1730121728,1730122751,IN 1730122752,1730123775,CN 1730123776,1730124799,BD @@ -51974,11 +52360,10 @@ 1730136064,1730137087,CN 1730137088,1730138111,ID 1730138112,1730138623,US -1730138624,1730138879,RO -1730138880,1730139135,BD +1730138624,1730139135,BD 1730139136,1730140159,IN 1730140160,1730141183,JP -1730141184,1730142207,HK +1730141184,1730142207,AU 1730142208,1730143231,ID 1730143232,1730144255,SG 1730144256,1730145279,ID @@ -52082,7 +52467,9 @@ 1730450944,1730452223,AU 1730452224,1730452479,HK 1730452480,1730453503,IN -1730453504,1730476031,CN +1730453504,1730455551,CN +1730455552,1730455807,HK +1730455808,1730476031,CN 1730476032,1730476799,AU 1730476800,1730477055,IN 1730477056,1730478079,AU @@ -52149,7 +52536,8 @@ 1730561024,1730562047,IN 1730562048,1730563071,SG 1730563072,1730564095,CN -1730564096,1730565119,AP +1730564096,1730564351,US +1730564352,1730565119,AP 1730565120,1730566143,CN 1730566144,1730566655,IN 1730566656,1730567167,HK @@ -52189,8 +52577,7 @@ 1730605056,1730606079,IN 1730606080,1730608127,AU 1730608128,1730608639,CN -1730608640,1730608895,HK -1730608896,1730609151,AP +1730608640,1730609151,HK 1730609152,1730610687,IN 1730610688,1730610943,MY 1730610944,1730611199,SG @@ -52220,7 +52607,7 @@ 1730631680,1730632703,CN 1730632704,1730634751,VN 1730634752,1730636799,CN -1730636800,1730637823,AP +1730636800,1730637823,HK 1730637824,1730638079,AU 1730638080,1730638335,JP 1730638336,1730638847,NZ @@ -52246,7 +52633,8 @@ 1730673408,1730673663,IN 1730673664,1730674687,FM 1730674688,1730675711,AU -1730675712,1730677759,HK +1730675712,1730676735,HK +1730676736,1730677759,SG 1730677760,1730686975,CN 1730686976,1730687999,IN 1730688000,1730688511,AU @@ -52300,9 +52688,7 @@ 1730754560,1730755071,IN 1730755072,1730755583,TH 1730755584,1730756607,JP -1730756608,1730756863,HK -1730756864,1730757119,AP -1730757120,1730757631,HK +1730756608,1730757631,AP 1730757632,1730758655,SG 1730758656,1730760703,AU 1730760704,1730761727,HK @@ -52563,8 +52949,8 @@ 1731106816,1731115007,CN 1731115008,1731116031,AU 1731116032,1731117055,TW -1731117056,1731118847,IN -1731118848,1731119103,AU +1731117056,1731118591,IN +1731118592,1731119103,AU 1731119104,1731120127,IN 1731120128,1731121151,JP 1731121152,1731122175,AF @@ -52688,7 +53074,8 @@ 1731240960,1731241983,JP 1731241984,1731243007,HK 1731243008,1731244031,SG -1731244032,1731247103,IN +1731244032,1731246079,IN +1731246080,1731247103,MN 1731247104,1731249151,VN 1731249152,1731250175,IN 1731250176,1731250687,AU @@ -52725,8 +53112,7 @@ 1731282432,1731282943,AU 1731282944,1731284991,CN 1731284992,1731286015,GB -1731286016,1731287039,SG -1731287040,1731288063,JP +1731286016,1731288063,JP 1731288064,1731290111,CN 1731290112,1731291135,AU 1731291136,1731291647,ID @@ -52747,9 +53133,7 @@ 1731302144,1731302399,IN 1731302400,1731302911,TH 1731302912,1731303423,AU -1731303424,1731303935,US -1731303936,1731304191,TR -1731304192,1731304447,US +1731303424,1731304447,US 1731304448,1731306495,HK 1731306496,1731307519,AU 1731307520,1731308543,BD @@ -52790,7 +53174,7 @@ 1731341312,1731349503,CN 1731349504,1731351551,IN 1731351552,1731352575,JP -1731352576,1731353599,HK +1731352576,1731353599,KR 1731353600,1731354623,US 1731354624,1731355647,HK 1731355648,1731356671,AU @@ -52852,9 +53236,7 @@ 1731429120,1731429375,ID 1731429376,1731431423,IN 1731431424,1731432447,TW -1731432448,1731432959,AP -1731432960,1731433215,HK -1731433216,1731433471,AP +1731432448,1731433471,HK 1731433472,1731435519,IN 1731435520,1731436031,NZ 1731436032,1731436287,ID @@ -52990,7 +53372,7 @@ 1731577600,1731577855,HK 1731577856,1731578879,AU 1731578880,1731581951,CN -1731581952,1731582975,AP +1731581952,1731582975,HK 1731582976,1731583999,PH 1731584000,1731585023,HK 1731585024,1731586047,VN @@ -53004,7 +53386,7 @@ 1731594240,1731595263,CN 1731595264,1731601407,IN 1731601408,1731603455,BD -1731603456,1731604479,HK +1731603456,1731604479,KR 1731604480,1731605503,CN 1731605504,1731606527,HK 1731606528,1731607551,JP @@ -53064,7 +53446,7 @@ 1731660544,1731660799,SG 1731660800,1731661823,JP 1731661824,1731663871,AU -1731663872,1731664895,AP +1731663872,1731664895,HK 1731664896,1731666175,AU 1731666176,1731666431,ID 1731666432,1731666687,AU @@ -53159,12 +53541,10 @@ 1731747840,1731748863,JP 1731748864,1731750911,CN 1731750912,1731751935,JP -1731751936,1731752959,AP -1731752960,1731753983,HK +1731751936,1731753983,HK 1731753984,1731755007,IN 1731755008,1731756031,SG -1731756032,1731757055,PH -1731757056,1731758079,JP +1731756032,1731758079,JP 1731758080,1731759103,AU 1731759104,1731760127,CN 1731760128,1731761663,ID @@ -53175,7 +53555,7 @@ 1731767552,1731767807,IN 1731767808,1731768063,KH 1731768064,1731770367,IN -1731770368,1731771391,CN +1731770368,1731771391,AP 1731771392,1731772415,ID 1731772416,1731773439,AP 1731773440,1731774463,IN @@ -53199,7 +53579,7 @@ 1731795968,1731796991,JP 1731796992,1731798015,AU 1731798016,1731799039,ID -1731799040,1731800063,BD +1731799040,1731800063,NL 1731800064,1731802111,JP 1731802112,1731804159,CN 1731804160,1731805183,KR @@ -53296,7 +53676,7 @@ 1731913984,1731928063,IN 1731928064,1731929087,JP 1731929088,1731930111,BD -1731930112,1731931135,EU +1731930112,1731931135,HK 1731931136,1731931647,AU 1731931648,1731932159,AP 1731932160,1731933183,HK @@ -53308,7 +53688,7 @@ 1731942912,1731943423,HK 1731943424,1731944447,CH 1731944448,1731945471,IN -1731945472,1731946495,AP +1731945472,1731946495,HK 1731946496,1731947519,IN 1731947520,1731948543,AU 1731948544,1731953663,CN @@ -53472,7 +53852,8 @@ 1732153856,1732154367,IN 1732154368,1732155391,AU 1732155392,1732156415,PH -1732156416,1732166655,CN +1732156416,1732157439,HK +1732157440,1732166655,CN 1732166656,1732167167,ID 1732167168,1732167679,IN 1732167680,1732168191,AU @@ -53558,7 +53939,7 @@ 1732367360,1732368383,ID 1732368384,1732369407,HK 1732369408,1732371455,AU -1732371456,1732372479,NL +1732371456,1732372479,US 1732372480,1732372991,AU 1732372992,1732373503,IN 1732373504,1732374271,ID @@ -53586,7 +53967,7 @@ 1732400640,1732400895,ID 1732400896,1732401151,IN 1732401152,1732402175,PH -1732402176,1732403199,AP +1732402176,1732403199,HK 1732403200,1732404223,IN 1732404224,1732405247,HK 1732405248,1732406271,IN @@ -53613,7 +53994,7 @@ 1732428800,1732429823,ID 1732429824,1732430847,CN 1732430848,1732433919,IN -1732433920,1732434943,AP +1732433920,1732434943,HK 1732434944,1732435199,AU 1732435200,1732435455,IN 1732435456,1732435967,PH @@ -53740,12 +54121,16 @@ 1732579328,1732580351,CN 1732580352,1732583167,IN 1732583168,1732583423,AU -1732583424,1732590591,IN -1732590592,1732591615,AU +1732583424,1732587519,IN +1732587520,1732591615,AU 1732591616,1732592639,SG 1732592640,1732593663,KH -1732593664,1732594687,AU -1732594688,1732602879,IN +1732593664,1732594175,US +1732594176,1732594687,AU +1732594688,1732595711,IN +1732595712,1732596735,AU +1732596736,1732599807,IN +1732599808,1732602879,AU 1732602880,1732603135,PH 1732603136,1732603391,IN 1732603392,1732603903,PK @@ -53801,9 +54186,7 @@ 1732649984,1732650495,AU 1732650496,1732651007,US 1732651008,1732653055,IN -1732653056,1732653311,AU -1732653312,1732653823,US -1732653824,1732654079,AU +1732653056,1732654079,AU 1732654080,1732655103,TW 1732655104,1732655615,AU 1732655616,1732655871,IN @@ -53820,7 +54203,9 @@ 1732661248,1732662271,IN 1732662272,1732663295,PK 1732663296,1732663807,NZ -1732663808,1732675583,IN +1732663808,1732669439,IN +1732669440,1732672511,AU +1732672512,1732675583,IN 1732675584,1732675839,GB 1732675840,1732676095,US 1732676096,1732676351,NZ @@ -53871,11 +54256,15 @@ 1732720896,1732721151,MV 1732721152,1732721407,MY 1732721408,1732721663,AF -1732721664,1732723711,IN +1732721664,1732721919,US +1732721920,1732722175,IN +1732722176,1732722687,US +1732722688,1732723711,IN 1732723712,1732725759,CN 1732725760,1732726783,IN 1732726784,1732729855,CN -1732729856,1732730879,PH +1732729856,1732730623,JP +1732730624,1732730879,PH 1732730880,1732731391,AU 1732731392,1732731647,RU 1732731648,1732731903,IN @@ -53885,8 +54274,8 @@ 1732740096,1732741119,SG 1732741120,1732742143,KR 1732742144,1732743167,TW -1732743168,1732745471,HK -1732745472,1732745983,AP +1732743168,1732745215,HK +1732745216,1732745983,AP 1732745984,1732746239,HK 1732746240,1732747263,JP 1732747264,1732748287,ID @@ -53985,13 +54374,15 @@ 1732869632,1732869887,AU 1732869888,1732870143,IN 1732870144,1732874239,CN -1732874240,1732875263,HK +1732874240,1732874751,HK +1732874752,1732875007,CN +1732875008,1732875263,HK 1732875264,1732877311,IN 1732877312,1732877567,PE 1732877568,1732877823,US 1732877824,1732878335,AU -1732878336,1732878591,AP -1732878592,1732879359,HK +1732878336,1732878591,HK +1732878592,1732879359,AP 1732879360,1732880383,KH 1732880384,1732881407,CN 1732881408,1732882431,FR @@ -54156,7 +54547,7 @@ 1733048320,1733049343,IN 1733049344,1733053439,CN 1733053440,1733055487,IN -1733055488,1733056511,AP +1733055488,1733056511,HK 1733056512,1733057023,MY 1733057024,1733057535,AU 1733057536,1733058559,CN @@ -54339,7 +54730,7 @@ 1733249024,1733249279,AU 1733249280,1733249791,IN 1733249792,1733250047,AU -1733250048,1733251071,GB +1733250048,1733251071,IN 1733251072,1733253119,CN 1733253120,1733253631,AU 1733253632,1733254143,ID @@ -54363,9 +54754,7 @@ 1733270528,1733271295,IN 1733271296,1733271551,AU 1733271552,1733274623,IN -1733274624,1733275647,AU -1733275648,1733276671,HK -1733276672,1733277183,AU +1733274624,1733277183,AU 1733277184,1733277695,BD 1733277696,1733278719,AP 1733278720,1733285887,CN @@ -54387,8 +54776,7 @@ 1733300224,1733301247,HK 1733301248,1733301759,AU 1733301760,1733302271,IN -1733302272,1733303295,CN -1733303296,1733304319,HK +1733302272,1733304319,HK 1733304320,1733305343,IN 1733305344,1733306367,MM 1733306368,1733307391,AU @@ -54449,10 +54837,9 @@ 1733360640,1733361151,HK 1733361152,1733361663,AU 1733361664,1733362687,IN -1733362688,1733363711,CN -1733363712,1733364735,HK +1733362688,1733364735,CN 1733364736,1733365759,IN -1733365760,1733367807,HK +1733365760,1733367807,CN 1733367808,1733368831,IN 1733368832,1733369855,AU 1733369856,1733371903,IN @@ -54485,9 +54872,7 @@ 1733396736,1733396991,IN 1733396992,1733397247,ID 1733397248,1733397503,IN -1733397504,1733398015,JP -1733398016,1733398271,AE -1733398272,1733398527,SE +1733397504,1733398527,SE 1733398528,1733399551,JP 1733399552,1733400575,CN 1733400576,1733402879,IN @@ -54503,7 +54888,8 @@ 1733408512,1733408767,CN 1733408768,1733409023,JP 1733409024,1733409279,KR -1733409280,1733409791,JP +1733409280,1733409535,JP +1733409536,1733409791,HK 1733409792,1733411327,IN 1733411328,1733411839,ID 1733411840,1733412863,BD @@ -54650,7 +55036,8 @@ 1733540864,1733541887,MM 1733541888,1733542143,IN 1733542144,1733542399,VE -1733542400,1733542911,AU +1733542400,1733542655,AU +1733542656,1733542911,HK 1733542912,1733543167,BD 1733543168,1733543423,PG 1733543424,1733543679,ID @@ -54688,7 +55075,9 @@ 1733582848,1733583103,IN 1733583104,1733583359,AF 1733583360,1733585919,AU -1733585920,1733586943,HK +1733585920,1733586175,HK +1733586176,1733586431,TH +1733586432,1733586943,HK 1733586944,1733587711,AU 1733587712,1733587967,SG 1733587968,1733588991,ID @@ -54738,8 +55127,7 @@ 1733625856,1733626879,IN 1733626880,1733627903,ID 1733627904,1733628927,IN -1733628928,1733629951,AP -1733629952,1733630975,HK +1733628928,1733630975,HK 1733630976,1733631999,NZ 1733632000,1733633023,BD 1733633024,1733634047,AU @@ -54749,9 +55137,7 @@ 1733637120,1733639167,AU 1733639168,1733641215,ID 1733641216,1733642239,PH -1733642240,1733642751,AP -1733642752,1733643007,HK -1733643008,1733643263,AP +1733642240,1733643263,AP 1733643264,1733644287,IN 1733644288,1733645311,KR 1733645312,1733646335,CN @@ -54820,9 +55206,10 @@ 1733711872,1733713407,AU 1733713408,1733713663,ID 1733713664,1733713919,IN -1733713920,1733714431,AU +1733713920,1733714175,AP +1733714176,1733714431,AU 1733714432,1733714687,JP -1733714688,1733714943,SG +1733714688,1733714943,AP 1733714944,1733715455,ID 1733715456,1733715711,AU 1733715712,1733715967,ID @@ -54996,7 +55383,7 @@ 1733916672,1733917695,VN 1733917696,1733918719,ID 1733918720,1733919743,HK -1733919744,1733920767,GB +1733919744,1733920767,ES 1733920768,1733921023,IN 1733921024,1733921279,HK 1733921280,1733921791,ID @@ -55072,7 +55459,7 @@ 1734001664,1734002687,ID 1734002688,1734003199,IN 1734003200,1734003455,PH -1734003456,1734003711,AP +1734003456,1734003711,HK 1734003712,1734004735,IN 1734004736,1734004991,AU 1734004992,1734005247,KR @@ -55310,9 +55697,8 @@ 1734256640,1734257663,ID 1734257664,1734258687,IN 1734258688,1734259711,VN -1734259712,1734260223,CN -1734260224,1734260735,AP -1734260736,1734260991,HK +1734259712,1734260223,AP +1734260224,1734260991,HK 1734260992,1734261247,US 1734261248,1734261503,PK 1734261504,1734261759,IN @@ -55415,7 +55801,7 @@ 1734360064,1734361087,MO 1734361088,1734362111,JP 1734362112,1734363135,BD -1734363136,1734364159,AP +1734363136,1734364159,HK 1734364160,1734365183,KH 1734365184,1734366207,HK 1734366208,1734367231,NZ @@ -55484,7 +55870,7 @@ 1734438912,1734440959,CN 1734440960,1734441983,BD 1734441984,1734443007,VN -1734443008,1734444031,AP +1734443008,1734444031,HK 1734444032,1734445055,VN 1734445056,1734446079,IN 1734446080,1734446591,ID @@ -55699,7 +56085,10 @@ 1734635520,1734636543,HK 1734636544,1734637567,CN 1734637568,1734638591,AU -1734638592,1734639615,TW +1734638592,1734638847,TW +1734638848,1734639103,AP +1734639104,1734639359,TW +1734639360,1734639615,AP 1734639616,1734641663,ID 1734641664,1734642175,PH 1734642176,1734642687,HK @@ -55708,8 +56097,7 @@ 1734643712,1734644735,CN 1734644736,1734645247,AU 1734645248,1734645759,IN -1734645760,1734647295,HK -1734647296,1734647807,AP +1734645760,1734647807,HK 1734647808,1734648831,VN 1734648832,1734649855,TW 1734649856,1734650879,IN @@ -55790,7 +56178,7 @@ 1734716416,1734716671,IN 1734716672,1734716927,AU 1734716928,1734717439,IN -1734717440,1734718463,JP +1734717440,1734718463,AP 1734718464,1734720511,CN 1734720512,1734720767,KR 1734720768,1734721279,AP @@ -55860,7 +56248,9 @@ 1734759936,1734764799,IN 1734764800,1734765055,AU 1734765056,1734765567,IN -1734765568,1734766591,NZ +1734765568,1734765823,NZ +1734765824,1734766079,AU +1734766080,1734766591,NZ 1734766592,1734767615,ID 1734767616,1734768127,IN 1734768128,1734768383,AU @@ -55957,27 +56347,24 @@ 1734852608,1734853119,ID 1734853120,1734853375,MM 1734853376,1734854655,IN -1734854656,1734855679,US -1734855680,1734856703,CN +1734854656,1734856703,CN 1734856704,1734857215,IN 1734857216,1734857727,AU 1734857728,1734858751,IN 1734858752,1734859263,AU 1734859264,1734859519,NZ 1734859520,1734859775,IN -1734859776,1734860799,US -1734860800,1734861055,CN -1734861056,1734861823,US -1734861824,1734863871,CN +1734859776,1734863871,CN 1734863872,1734864383,IN 1734864384,1734864639,AU 1734864640,1734864895,BD 1734864896,1734865151,SG 1734865152,1734865407,CN 1734865408,1734865919,AU -1734865920,1734866943,HK -1734866944,1734868991,CN -1734868992,1734871039,US +1734865920,1734866175,HK +1734866176,1734866431,US +1734866432,1734866943,HK +1734866944,1734871039,CN 1734871040,1734871551,AU 1734871552,1734871807,ID 1734871808,1734872063,HK @@ -56037,8 +56424,7 @@ 1734918912,1734919167,MY 1734919168,1734919423,SG 1734919424,1734919679,NP -1734919680,1734919935,AP -1734919936,1734920191,HK +1734919680,1734920191,HK 1734920192,1734920703,AU 1734920704,1734921215,IN 1734921216,1734922239,ID @@ -56062,7 +56448,7 @@ 1734937600,1734939647,CN 1734939648,1734940159,NZ 1734940160,1734940415,AU -1734940416,1734940671,AP +1734940416,1734940671,HK 1734940672,1734943743,ID 1734943744,1734946815,IN 1734946816,1734947071,GB @@ -56121,8 +56507,7 @@ 1734987776,1734988799,PK 1734988800,1734989823,PH 1734989824,1734990335,ID -1734990336,1734990591,IN -1734990592,1734990847,AU +1734990336,1734990847,AU 1734990848,1734991871,CN 1734991872,1734999039,IN 1734999040,1735000063,ID @@ -56168,7 +56553,7 @@ 1735037440,1735037951,NP 1735037952,1735039999,IN 1735040000,1735041023,ID -1735041024,1735042047,AP +1735041024,1735042047,HK 1735042048,1735043071,BD 1735043072,1735044095,AU 1735044096,1735045119,ID @@ -56223,9 +56608,7 @@ 1735088128,1735091199,IN 1735091200,1735092223,ID 1735092224,1735093247,HK -1735093248,1735093759,AP -1735093760,1735094015,CN -1735094016,1735094271,AP +1735093248,1735094271,CN 1735094272,1735095295,IN 1735095296,1735096319,ID 1735096320,1735096575,AU @@ -56364,7 +56747,7 @@ 1735220224,1735222271,BD 1735222272,1735223551,HK 1735223552,1735223807,AU -1735223808,1735224319,AP +1735223808,1735224319,HK 1735224320,1735225343,IN 1735225344,1735226367,AU 1735226368,1735227391,LA @@ -56429,7 +56812,8 @@ 1735281408,1735281663,PH 1735281664,1735282175,ID 1735282176,1735282687,BD -1735282688,1735283199,AP +1735282688,1735282943,HK +1735282944,1735283199,AP 1735283200,1735283455,AU 1735283456,1735283711,IN 1735283712,1735284735,VN @@ -56453,7 +56837,8 @@ 1735298048,1735298559,IN 1735298560,1735299071,AU 1735299072,1735301119,IN -1735301120,1735303167,CN +1735301120,1735302143,HK +1735302144,1735303167,CN 1735303168,1735304191,BD 1735304192,1735307263,IN 1735307264,1735309311,AU @@ -56548,8 +56933,7 @@ 1735409152,1735409663,AU 1735409664,1735410175,BD 1735410176,1735410431,AU -1735410432,1735410687,HK -1735410688,1735411711,AP +1735410432,1735411711,HK 1735411712,1735412735,CN 1735412736,1735413247,AU 1735413248,1735413759,HK @@ -56581,7 +56965,7 @@ 1735434240,1735434751,IN 1735434752,1735435263,ID 1735435264,1735437311,BD -1735437312,1735438335,AP +1735437312,1735438335,HK 1735438336,1735438591,AU 1735438592,1735439359,AF 1735439360,1735440383,JP @@ -56705,7 +57089,8 @@ 1735540480,1735540735,AU 1735540736,1735541759,IN 1735541760,1735542783,CN -1735542784,1735543807,AP +1735542784,1735543039,AP +1735543040,1735543807,HK 1735543808,1735546879,ID 1735546880,1735547903,KH 1735547904,1735549951,BD @@ -56773,11 +57158,11 @@ 1735598592,1735598847,SG 1735598848,1735599103,AU 1735599104,1735600127,ID -1735600128,1735603199,AP +1735600128,1735603199,HK 1735603200,1735604223,CN -1735604224,1735605759,AP +1735604224,1735605759,HK 1735605760,1735606015,TW -1735606016,1735607295,AP +1735606016,1735607295,HK 1735607296,1735608319,CN 1735608320,1735609343,BD 1735609344,1735610367,SG @@ -57041,11 +57426,15 @@ 1735832576,1735833599,IN 1735833600,1735834623,ID 1735834624,1735835647,IN -1735835648,1735843839,AP +1735835648,1735838719,HK +1735838720,1735838975,AP +1735838976,1735839231,HK +1735839232,1735839487,AP +1735839488,1735843839,HK 1735843840,1735847935,ID -1735847936,1735853055,AP +1735847936,1735853055,HK 1735853056,1735855103,ID -1735855104,1735857151,AP +1735855104,1735857151,HK 1735857152,1735858175,BD 1735858176,1735859199,AF 1735859200,1735860223,CN @@ -57572,8 +57961,7 @@ 1736340480,1736341759,ID 1736341760,1736342015,AU 1736342016,1736342527,NZ -1736342528,1736344575,CN -1736344576,1736345599,HK +1736342528,1736345599,CN 1736345600,1736346623,AU 1736346624,1736347647,TW 1736347648,1736348671,AU @@ -57587,19 +57975,12 @@ 1736355840,1736356863,JP 1736356864,1736357887,TW 1736357888,1736358399,BD -1736358400,1736358911,AU -1736358912,1736359167,HK -1736359168,1736359423,TW -1736359424,1736359679,HK -1736359680,1736359935,TW -1736359936,1736360959,AU +1736358400,1736360959,AU 1736360960,1736361983,IN 1736361984,1736363007,ID 1736363008,1736363519,IN 1736363520,1736364031,AU -1736364032,1736364287,AP -1736364288,1736364543,HK -1736364544,1736365055,AP +1736364032,1736365055,HK 1736365056,1736367103,BD 1736367104,1736368127,NZ 1736368128,1736368639,AU @@ -57646,11 +58027,9 @@ 1736399872,1736400895,BD 1736400896,1736401919,AU 1736401920,1736403455,IN -1736403456,1736403967,KH +1736403456,1736403967,AU 1736403968,1736404991,IN -1736404992,1736406015,AU -1736406016,1736407039,AF -1736407040,1736408063,AU +1736404992,1736408063,AU 1736408064,1736409087,KR 1736409088,1736409343,HK 1736409344,1736409599,ID @@ -57699,7 +58078,8 @@ 1736517632,1736518655,ID 1736518656,1736519679,BD 1736519680,1736520703,ID -1736520704,1736521727,CN +1736520704,1736521215,HK +1736521216,1736521727,CN 1736521728,1736523007,ID 1736523008,1736523263,IN 1736523264,1736523775,BT @@ -57746,7 +58126,7 @@ 1736565760,1736566271,IN 1736566272,1736566783,ID 1736566784,1736567807,IN -1736567808,1736568831,AU +1736567808,1736568831,BD 1736568832,1736569855,TW 1736569856,1736570879,BD 1736570880,1736571903,ID @@ -57931,7 +58311,7 @@ 1736743936,1736744959,TW 1736744960,1736745471,AP 1736745472,1736745983,TW -1736745984,1736747007,AP +1736745984,1736747007,HK 1736747008,1736747263,PH 1736747264,1736747519,AU 1736747520,1736749055,IN @@ -58000,7 +58380,7 @@ 1736803840,1736804351,BD 1736804352,1736804863,CN 1736804864,1736805119,PH -1736805120,1736805375,SG +1736805120,1736805375,HK 1736805376,1736806399,BD 1736806400,1736808447,ID 1736808448,1736809471,TW @@ -58134,17 +58514,14 @@ 1736924928,1736925183,IN 1736925184,1736925695,ID 1736925696,1736926207,AU -1736926208,1736926463,HK -1736926464,1736926719,AP -1736926720,1736927743,HK +1736926208,1736927743,HK 1736927744,1736927999,AU 1736928000,1736928255,IN 1736928256,1736928511,SG 1736928512,1736928767,JP 1736928768,1736929023,HK 1736929024,1736929279,TH -1736929280,1736929535,AP -1736929536,1736930303,KH +1736929280,1736930303,KH 1736930304,1736931327,TW 1736931328,1736932351,AU 1736932352,1736933375,CN @@ -58299,7 +58676,8 @@ 1737048576,1737049087,BD 1737049088,1737050111,PK 1737050112,1737051135,BD -1737051136,1737052159,HK +1737051136,1737051647,HK +1737051648,1737052159,CN 1737052160,1737052671,BD 1737052672,1737053183,ID 1737053184,1737053695,IN @@ -58491,9 +58869,7 @@ 1737172736,1737172991,SG 1737172992,1737174527,VN 1737174528,1737175039,ID -1737175040,1737175551,NL -1737175552,1737175807,AU -1737175808,1737176063,NL +1737175040,1737176063,NL 1737176064,1737177087,AU 1737177088,1737178623,IN 1737178624,1737178879,PK @@ -58659,7 +59035,7 @@ 1737259520,1737259775,SG 1737259776,1737260031,PK 1737260032,1737260543,IN -1737260544,1737261055,AP +1737260544,1737261055,HK 1737261056,1737261567,IN 1737261568,1737262079,ID 1737262080,1737262591,NP @@ -58843,8 +59219,7 @@ 1737353472,1737353727,AU 1737353728,1737353983,ID 1737353984,1737354239,IN -1737354240,1737354495,HK -1737354496,1737354751,AP +1737354240,1737354751,HK 1737354752,1737355263,ID 1737355264,1737355775,IN 1737355776,1737356287,CN @@ -58887,7 +59262,7 @@ 1737374720,1737375487,ID 1737375488,1737375743,IN 1737375744,1737375999,HK -1737376000,1737376255,IN +1737376000,1737376255,JP 1737376256,1737377791,BD 1737377792,1737378303,IN 1737378304,1737378815,AU @@ -58902,7 +59277,8 @@ 1737383936,1737384447,CN 1737384448,1737384959,SB 1737384960,1737385215,HK -1737385216,1737385983,AP +1737385216,1737385471,AP +1737385472,1737385983,HK 1737385984,1737386495,AU 1737386496,1737387263,IN 1737387264,1737387519,NZ @@ -59064,8 +59440,7 @@ 1737470976,1737471487,IN 1737471488,1737471999,BD 1737472000,1737472255,IN -1737472256,1737472511,AU -1737472512,1737473023,PH +1737472256,1737473023,AU 1737473024,1737476095,ID 1737476096,1737476607,MM 1737476608,1737477119,VN @@ -59222,7 +59597,9 @@ 1737569280,1737569791,ID 1737569792,1737570559,IN 1737570560,1737570815,BD -1737570816,1737571839,AP +1737570816,1737571327,AP +1737571328,1737571583,HK +1737571584,1737571839,AP 1737571840,1737572351,VN 1737572352,1737572863,BD 1737572864,1737573887,ID @@ -59252,7 +59629,8 @@ 1737585664,1737586175,AU 1737586176,1737586687,BD 1737586688,1737587199,MM -1737587200,1737587711,HK +1737587200,1737587455,CN +1737587456,1737587711,HK 1737587712,1737589759,ID 1737589760,1737590783,BD 1737590784,1737591295,KH @@ -59267,7 +59645,7 @@ 1737596672,1737596927,PH 1737596928,1737597951,ID 1737597952,1737598463,BD -1737598464,1737598719,AF +1737598464,1737598719,AU 1737598720,1737600767,IN 1737600768,1737602559,ID 1737602560,1737603071,AU @@ -59301,7 +59679,8 @@ 1737623040,1737623551,CN 1737623552,1737624063,HK 1737624064,1737624575,BD -1737624576,1737625599,HK +1737624576,1737625343,HK +1737625344,1737625599,US 1737625600,1737626111,BD 1737626112,1737627647,VN 1737627648,1737627903,IN @@ -59354,7 +59733,7 @@ 1737648896,1737650175,IN 1737650176,1737650687,AU 1737650688,1737651199,JP -1737651200,1737651455,MM +1737651200,1737651455,AU 1737651456,1737651711,NZ 1737651712,1737652479,IN 1737652480,1737653247,AU @@ -59379,7 +59758,7 @@ 1737662464,1737662975,TH 1737662976,1737663487,AU 1737663488,1737663999,TW -1737664000,1737664511,PG +1737664000,1737664511,AU 1737664512,1737664767,IN 1737664768,1737665023,ID 1737665024,1737667071,IN @@ -59404,7 +59783,7 @@ 1737678336,1737679359,IN 1737679360,1737679871,MY 1737679872,1737680383,IN -1737680384,1737680895,AP +1737680384,1737680895,HK 1737680896,1737681919,IN 1737681920,1737682431,CN 1737682432,1737683967,IN @@ -59607,8 +59986,7 @@ 1737809152,1737809407,IN 1737809408,1737809919,AU 1737809920,1737810431,PH -1737810432,1737810687,US -1737810688,1737810943,HK +1737810432,1737810943,HK 1737810944,1737811455,KH 1737811456,1737811711,IN 1737811712,1737811967,HK @@ -59621,7 +59999,7 @@ 1737814016,1737814271,AU 1737814272,1737814527,NZ 1737814528,1737815039,ID -1737815040,1737815551,HK +1737815040,1737815551,AP 1737815552,1737816063,PH 1737816064,1737816575,IN 1737816576,1737816831,BD @@ -59643,8 +60021,7 @@ 1737823232,1737823743,IN 1737823744,1737823999,ID 1737824000,1737824255,SG -1737824256,1737824767,AP -1737824768,1737825279,HK +1737824256,1737825279,HK 1737825280,1737825791,AU 1737825792,1737826303,JP 1737826304,1737826815,PK @@ -59674,7 +60051,7 @@ 1737839104,1737839615,HK 1737839616,1737840127,SG 1737840128,1737841151,AU -1737841152,1737842175,HK +1737841152,1737842175,AP 1737842176,1737843199,IN 1737843200,1737843711,VN 1737843712,1737844223,PH @@ -59720,7 +60097,7 @@ 1737866752,1737867263,AU 1737867264,1737867775,NL 1737867776,1737869311,IN -1737869312,1737869823,HK +1737869312,1737869823,AP 1737869824,1737870079,AU 1737870080,1737870335,ID 1737870336,1737870847,NP @@ -59760,7 +60137,8 @@ 1737890304,1737890815,BD 1737890816,1737891071,HK 1737891072,1737891327,AU -1737891328,1737891839,US +1737891328,1737891583,IN +1737891584,1737891839,US 1737891840,1737892863,ID 1737892864,1737893375,TW 1737893376,1737893631,BD @@ -60179,8 +60557,7 @@ 1738111488,1738111999,CN 1738112000,1738112511,HK 1738112512,1738113023,ID -1738113024,1738113279,CN -1738113280,1738113535,US +1738113024,1738113535,CN 1738113536,1738113791,BD 1738113792,1738114047,ID 1738114048,1738114559,CN @@ -60293,7 +60670,7 @@ 1738191872,1738192383,VN 1738192384,1738192895,HK 1738192896,1738193407,IN -1738193408,1738193919,PK +1738193408,1738193919,AU 1738193920,1738194431,BD 1738194432,1738194943,IN 1738194944,1738195455,AU @@ -60309,7 +60686,8 @@ 1738206208,1738206719,BD 1738206720,1738207231,IN 1738207232,1738207743,MM -1738207744,1738208255,HK +1738207744,1738207999,SA +1738208000,1738208255,HK 1738208256,1738208767,VN 1738208768,1738209535,IN 1738209536,1738209791,AU @@ -60324,7 +60702,7 @@ 1738214656,1738214911,HK 1738214912,1738215423,CN 1738215424,1738215679,SG -1738215680,1738215935,CN +1738215680,1738215935,QA 1738215936,1738216447,PK 1738216448,1738217471,NP 1738217472,1738218239,ID @@ -60633,11 +61011,10 @@ 1738409984,1738410495,CN 1738410496,1738411007,BD 1738411008,1738411263,PK -1738411264,1738411519,CN +1738411264,1738411519,AU 1738411520,1738412031,SG 1738412032,1738412543,CN -1738412544,1738412799,IN -1738412800,1738413055,AU +1738412544,1738413055,AU 1738413056,1738415359,ID 1738415360,1738415615,HK 1738415616,1738416127,IN @@ -60711,7 +61088,7 @@ 1738466304,1738466815,TW 1738466816,1738467839,AU 1738467840,1738468351,ID -1738468352,1738468863,KH +1738468352,1738468863,AU 1738468864,1738470143,IN 1738470144,1738470399,AU 1738470400,1738471423,IN @@ -60904,7 +61281,8 @@ 1738604800,1738605311,BD 1738605312,1738605567,IN 1738605568,1738606079,KR -1738606080,1738608127,TW +1738606080,1738606591,TW +1738606592,1738608127,AU 1738608128,1738608639,CN 1738608640,1738609663,VN 1738609664,1738610175,NP @@ -61141,7 +61519,7 @@ 1738765056,1738765311,ID 1738765312,1738765823,BD 1738765824,1738766335,VN -1738766336,1738766847,PH +1738766336,1738766847,HK 1738766848,1738767359,VN 1738767360,1738768383,IN 1738768384,1738768895,ID @@ -61211,7 +61589,7 @@ 1738814464,1738814975,KH 1738814976,1738815487,SG 1738815488,1738817023,ID -1738817024,1738817535,HK +1738817024,1738817535,AP 1738817536,1738818047,CN 1738818048,1738818303,MY 1738818304,1738818559,IN @@ -61361,7 +61739,7 @@ 1738952960,1738953215,TW 1738953216,1738953727,MY 1738953728,1738954239,CN -1738954240,1738954751,AP +1738954240,1738954751,HK 1738954752,1738955263,BD 1738955264,1738956287,ID 1738956288,1738956543,KH @@ -61690,8 +62068,7 @@ 1739198976,1739199487,PH 1739199488,1739199999,IN 1739200000,1739201023,ID -1739201024,1739201279,HK -1739201280,1739201535,US +1739201024,1739201535,US 1739201536,1739202047,AU 1739202048,1739203071,ID 1739203072,1739210495,IN @@ -61798,7 +62175,7 @@ 1739295232,1739296767,BD 1739296768,1739297279,HK 1739297280,1739302399,ID -1739302400,1739302911,CN +1739302400,1739302911,HK 1739302912,1739304959,IN 1739304960,1739305471,HK 1739305472,1739305727,AU @@ -62216,7 +62593,7 @@ 1739638272,1739639295,ID 1739639296,1739639807,PH 1739639808,1739640319,PK -1739640320,1739640831,PH +1739640320,1739640831,HK 1739640832,1739642623,IN 1739642624,1739642879,TL 1739642880,1739644415,AU @@ -62450,8 +62827,7 @@ 1739831296,1739833343,VN 1739833344,1739834879,IN 1739834880,1739835903,BD -1739835904,1739836415,GB -1739836416,1739836927,AU +1739835904,1739836927,AU 1739836928,1739837439,BT 1739837440,1739837951,BD 1739837952,1739838975,IN @@ -62493,7 +62869,7 @@ 1739880960,1739882495,ID 1739882496,1739883519,JP 1739883520,1739890687,VN -1739890688,1739891199,SG +1739890688,1739891199,HK 1739891200,1739891455,ID 1739891456,1739891711,AU 1739891712,1739892735,ID @@ -62530,7 +62906,197 @@ 1739921920,1739922431,MM 1739922432,1739923455,BD 1739923456,1739926015,IN -1739926016,1740636159,AU +1739926016,1739926527,BD +1739926528,1739927039,AU +1739927040,1739927551,BD +1739927552,1739928063,SG +1739928064,1739928319,MY +1739928320,1739932671,IN +1739932672,1739934719,BD +1739934720,1739935999,ID +1739936000,1739936255,IN +1739936256,1739936767,ID +1739936768,1739939839,IN +1739939840,1739940351,BD +1739940352,1739940863,US +1739940864,1739941887,IN +1739941888,1739942911,BD +1739942912,1739946239,IN +1739946240,1739946495,MV +1739946496,1739947007,BD +1739947008,1739947519,AU +1739947520,1739948031,IN +1739948032,1739948287,MV +1739948288,1739948543,ID +1739948544,1739949055,AU +1739949056,1739949567,PK +1739949568,1739950079,US +1739950080,1739951103,ID +1739951104,1739951615,IN +1739951616,1739952127,ID +1739952128,1739956735,IN +1739956736,1739957247,BD +1739957248,1739957759,CN +1739957760,1739961343,IN +1739961344,1739961855,BD +1739961856,1739962367,ID +1739962368,1739965183,IN +1739965184,1739965439,ID +1739965440,1739972607,IN +1739972608,1739973119,AU +1739973120,1739973631,NP +1739973632,1739974143,HK +1739974144,1739975167,IN +1739975168,1739975679,CN +1739975680,1739976703,IN +1739976704,1739977215,AU +1739977216,1739981311,ID +1739981312,1739984383,IN +1739984384,1739984895,PK +1739984896,1739986943,VN +1739986944,1739991039,IN +1739991040,1739991551,AU +1739991552,1739992575,IN +1739992576,1739994623,ID +1739994624,1739996671,IN +1739996672,1739997183,BD +1739997184,1739999231,IN +1739999232,1739999487,ID +1739999488,1739999743,AU +1739999744,1740000255,IN +1740000256,1740001791,ID +1740001792,1740005375,IN +1740005376,1740005631,EU +1740005632,1740005887,US +1740005888,1740006399,ID +1740006400,1740011007,IN +1740011008,1740011519,MM +1740011520,1740012031,IN +1740012032,1740012543,KR +1740012544,1740013055,IN +1740013056,1740013567,KR +1740013568,1740015615,IN +1740015616,1740016639,ID +1740016640,1740018687,IN +1740018688,1740019711,BD +1740019712,1740019967,AU +1740019968,1740023807,IN +1740023808,1740024319,AU +1740024320,1740024831,BD +1740024832,1740025087,MV +1740025088,1740025343,AU +1740025344,1740025855,NP +1740025856,1740026879,IN +1740026880,1740030975,ID +1740030976,1740031999,IN +1740032000,1740034559,ID +1740034560,1740035071,IN +1740035072,1740035583,BD +1740035584,1740036863,IN +1740036864,1740037119,BD +1740037120,1740037631,IN +1740037632,1740038655,ID +1740038656,1740039167,TW +1740039168,1740043775,ID +1740043776,1740044287,BD +1740044288,1740044543,AU +1740044544,1740044799,ID +1740044800,1740045311,KR +1740045312,1740046847,ID +1740046848,1740047359,HK +1740047360,1740050431,ID +1740050432,1740050943,BD +1740050944,1740052479,ID +1740052480,1740052991,IN +1740052992,1740053503,CN +1740053504,1740056063,IN +1740056064,1740056575,BD +1740056576,1740056831,PK +1740056832,1740057087,AU +1740057088,1740060671,IN +1740060672,1740062207,ID +1740062208,1740062719,BD +1740062720,1740063231,KH +1740063232,1740063743,CN +1740063744,1740064255,BD +1740064256,1740065279,IN +1740065280,1740065791,ID +1740065792,1740066303,JP +1740066304,1740066815,TW +1740066816,1740069887,IN +1740069888,1740070655,ID +1740070656,1740070911,AU +1740070912,1740071423,IN +1740071424,1740072447,ID +1740072448,1740073471,IN +1740073472,1740073983,BD +1740073984,1740074751,VN +1740074752,1740075007,AU +1740075008,1740076031,VN +1740076032,1740076543,BD +1740076544,1740077567,VN +1740077568,1740078591,CN +1740078592,1740078847,TW +1740078848,1740079103,NZ +1740079104,1740082175,IN +1740082176,1740082687,BD +1740082688,1740083199,NZ +1740083200,1740085759,VN +1740085760,1740086271,TW +1740086272,1740091903,IN +1740091904,1740095487,ID +1740095488,1740095999,PH +1740096000,1740096511,MM +1740096512,1740097023,IN +1740097024,1740097535,TW +1740097536,1740102143,IN +1740102144,1740102655,HK +1740102656,1740102911,AU +1740102912,1740103167,VN +1740103168,1740108799,IN +1740108800,1740109311,PK +1740109312,1740109823,PH +1740109824,1740110335,AU +1740110336,1740111871,ID +1740111872,1740112383,PK +1740112384,1740112895,AU +1740112896,1740114431,IN +1740114432,1740114687,JP +1740114688,1740114943,IN +1740114944,1740117503,ID +1740117504,1740118015,IN +1740118016,1740118527,BD +1740118528,1740120063,ID +1740120064,1740120575,AU +1740120576,1740123135,IN +1740123136,1740124159,CN +1740124160,1740126719,ID +1740126720,1740127231,PK +1740127232,1740127743,CN +1740127744,1740129279,ID +1740129280,1740135423,IN +1740135424,1740135935,PK +1740135936,1740136447,BD +1740136448,1740136959,VN +1740136960,1740137471,ID +1740137472,1740137983,IN +1740137984,1740138239,SG +1740138240,1740140543,IN +1740140544,1740141055,VN +1740141056,1740142591,IN +1740142592,1740143615,ID +1740143616,1740144127,VN +1740144128,1740144639,IN +1740144640,1740144895,ID +1740144896,1740145151,HK +1740145152,1740146687,IN +1740146688,1740146943,BD +1740146944,1740147199,IN +1740147200,1740147711,NP +1740147712,1740154623,IN +1740154624,1740154879,AU +1740154880,1740155903,IN +1740155904,1740636159,AU 1740636160,1740644351,CN 1740644352,1740645375,IN 1740645376,1740647423,HK @@ -62608,7 +63174,7 @@ 1740737280,1740737535,NZ 1740737536,1740738559,CN 1740738560,1740739583,AU -1740739584,1740740607,AP +1740739584,1740740607,HK 1740740608,1740742655,IN 1740742656,1740743679,CN 1740743680,1740743935,AU @@ -62700,7 +63266,7 @@ 1740850176,1740855295,IN 1740855296,1740856319,ID 1740856320,1740858367,IN -1740858368,1740859391,SG +1740858368,1740859391,US 1740859392,1740860415,CN 1740860416,1740861439,HK 1740861440,1740862463,CN @@ -62714,7 +63280,7 @@ 1740869120,1740869375,ID 1740869376,1740869631,MY 1740869632,1740870655,JP -1740870656,1740871679,AP +1740870656,1740871679,HK 1740871680,1740872703,CN 1740872704,1740873727,ID 1740873728,1740874751,CN @@ -62802,7 +63368,7 @@ 1740966912,1740967935,JP 1740967936,1740968959,IN 1740968960,1740969983,MY -1740969984,1740971007,AP +1740969984,1740971007,HK 1740971008,1740975103,IN 1740975104,1740976127,PK 1740976128,1740976639,BD @@ -62893,7 +63459,8 @@ 1741062912,1741063167,ID 1741063168,1741065215,BD 1741065216,1741066239,SG -1741066240,1741067263,AP +1741066240,1741067007,AP +1741067008,1741067263,SG 1741067264,1741068287,MM 1741068288,1741069311,AU 1741069312,1741070335,CN @@ -62966,7 +63533,7 @@ 1741162496,1741164543,AU 1741164544,1741165567,ID 1741165568,1741167615,VN -1741167616,1741168639,AP +1741167616,1741168639,HK 1741168640,1741169663,PH 1741169664,1741170687,BD 1741170688,1741173759,IN @@ -63068,7 +63635,7 @@ 1741421568,1741422591,IN 1741422592,1741423615,AU 1741423616,1741425663,MY -1741425664,1741425919,TH +1741425664,1741425919,AU 1741425920,1741426175,SG 1741426176,1741426687,AU 1741426688,1741427711,MM @@ -63113,7 +63680,7 @@ 1741469696,1741472767,IN 1741472768,1741473791,CN 1741473792,1741474815,BD -1741474816,1741475839,IN +1741474816,1741475839,DE 1741475840,1741476863,BD 1741476864,1741477887,CN 1741477888,1741478399,AU @@ -63163,7 +63730,9 @@ 1741515776,1741516799,CN 1741516800,1741517823,IN 1741517824,1741518847,CN -1741518848,1741519871,AP +1741518848,1741519359,AP +1741519360,1741519615,HK +1741519616,1741519871,CN 1741519872,1741521919,IN 1741521920,1741522943,BD 1741522944,1741523967,CN @@ -63190,8 +63759,7 @@ 1741546496,1741547519,AU 1741547520,1741548543,BD 1741548544,1741549567,CN -1741549568,1741549823,HK -1741549824,1741550591,AP +1741549568,1741550591,AP 1741550592,1741551103,IN 1741551104,1741551615,AU 1741551616,1741554687,CN @@ -63257,7 +63825,8 @@ 1741625344,1741626367,HK 1741626368,1741627391,AU 1741627392,1741629439,VN -1741629440,1741631487,IN +1741629440,1741630463,IN +1741630464,1741631487,US 1741631488,1741632511,CN 1741632512,1741634559,IN 1741634560,1741635583,AU @@ -63286,7 +63855,7 @@ 1741659648,1741659903,PH 1741659904,1741660159,HK 1741660160,1741661183,US -1741661184,1741662207,CN +1741661184,1741662207,HK 1741662208,1741666303,IN 1741666304,1741674495,CN 1741674496,1741675519,JP @@ -63348,7 +63917,9 @@ 1741739008,1741740031,TH 1741740032,1741741055,AU 1741741056,1741742079,JP -1741742080,1741749247,IN +1741742080,1741747199,IN +1741747200,1741748223,US +1741748224,1741749247,IN 1741749248,1741750527,SG 1741750528,1741750783,ID 1741750784,1741751807,AU @@ -63390,7 +63961,9 @@ 1741778944,1741779967,CN 1741779968,1741780991,JP 1741780992,1741782015,SG -1741782016,1741783551,AU +1741782016,1741782783,AU +1741782784,1741783039,PK +1741783040,1741783551,AU 1741783552,1741784063,ID 1741784064,1741785087,AU 1741785088,1741786111,CN @@ -63502,8 +64075,8 @@ 1741902336,1741902847,ID 1741902848,1741904895,IN 1741904896,1741905919,HK -1741905920,1741906943,CN -1741906944,1741907967,HK +1741905920,1741906687,CN +1741906688,1741907967,HK 1741907968,1741908991,AU 1741908992,1741911039,IN 1741911040,1741911551,JP @@ -63548,7 +64121,7 @@ 1741950976,1741953023,IN 1741953024,1741954047,GU 1741954048,1741955071,IN -1741955072,1741956095,AP +1741955072,1741956095,HK 1741956096,1741957119,TH 1741957120,1741957375,PG 1741957376,1741957631,MY @@ -63635,7 +64208,8 @@ 1742070784,1742071039,MM 1742071040,1742072831,AU 1742072832,1742074879,BD -1742074880,1742076927,AP +1742074880,1742075903,AP +1742075904,1742076927,HK 1742076928,1742078975,AU 1742078976,1742079999,NL 1742080000,1742081023,VN @@ -63678,7 +64252,9 @@ 1742116864,1742117887,JP 1742117888,1742118911,BD 1742118912,1742119935,AU -1742119936,1742122495,HK +1742119936,1742120959,HK +1742120960,1742121983,AP +1742121984,1742122495,HK 1742122496,1742123007,AP 1742123008,1742123263,AU 1742123264,1742123519,IN @@ -63720,7 +64296,8 @@ 1742158848,1742160895,AU 1742160896,1742162175,ID 1742162176,1742162943,AU -1742162944,1742164991,AP +1742162944,1742163967,AP +1742163968,1742164991,HK 1742164992,1742166015,JP 1742166016,1742168063,AU 1742168064,1742169087,IN @@ -63746,15 +64323,15 @@ 1742193664,1742197247,IN 1742197248,1742197759,AF 1742197760,1742198783,HK -1742198784,1742199295,US +1742198784,1742199295,NL 1742199296,1742199551,TR -1742199552,1742199807,US +1742199552,1742199807,NL 1742199808,1742200831,IR 1742200832,1742201855,IN 1742201856,1742203391,AU 1742203392,1742207999,IN 1742208000,1742209023,JP -1742209024,1742210047,IN +1742209024,1742210047,US 1742210048,1742221311,CN 1742221312,1742222335,KH 1742222336,1742223359,IN @@ -63880,7 +64457,9 @@ 1742435328,1742436351,MY 1742436352,1742437375,AU 1742437376,1742439423,KR -1742439424,1742442495,IN +1742439424,1742440447,IN +1742440448,1742441471,MN +1742441472,1742442495,IN 1742442496,1742443263,AU 1742443264,1742443519,BD 1742443520,1742444543,IN @@ -63888,7 +64467,7 @@ 1742445568,1742446591,MM 1742446592,1742447615,BD 1742447616,1742448639,IN -1742448640,1742449663,BD +1742448640,1742449663,US 1742449664,1742450687,HK 1742450688,1742451711,CN 1742451712,1742452735,VN @@ -63973,7 +64552,9 @@ 1742669824,1742671871,IN 1742671872,1742698495,CN 1742698496,1742699519,HK -1742699520,1742702591,CN +1742699520,1742701567,CN +1742701568,1742701823,AP +1742701824,1742702591,CN 1742702592,1742703615,AU 1742703616,1742714879,CN 1742714880,1742715903,AU @@ -63999,9 +64580,8 @@ 1742748672,1742749695,CN 1742749696,1742750719,ID 1742750720,1742751743,AP -1742751744,1742752767,HK -1742752768,1742753791,AU -1742753792,1742754815,AP +1742751744,1742753791,AU +1742753792,1742754815,HK 1742754816,1742757887,AU 1742757888,1742758911,AP 1742758912,1742759935,ID @@ -64153,7 +64733,7 @@ 1742895104,1742895615,SG 1742895616,1742895871,BD 1742895872,1742896127,AU -1742896128,1742897151,AP +1742896128,1742897151,HK 1742897152,1742898175,AU 1742898176,1742899199,CN 1742899200,1742900223,ID @@ -64205,7 +64785,7 @@ 1742946048,1742947327,AU 1742947328,1742948351,IN 1742948352,1742951423,CN -1742951424,1742952447,US +1742951424,1742952447,NL 1742952448,1742953471,SG 1742953472,1742954495,AU 1742954496,1742955519,IN @@ -64281,8 +64861,8 @@ 1743021056,1743021311,SG 1743021312,1743021567,LA 1743021568,1743021823,PH -1743021824,1743022079,AU -1743022080,1743023103,US +1743021824,1743022591,AU +1743022592,1743023103,US 1743023104,1743024127,HK 1743024128,1743025151,IN 1743025152,1743026175,ID @@ -64297,8 +64877,7 @@ 1743035392,1743036415,PK 1743036416,1743037439,CN 1743037440,1743038463,AU -1743038464,1743038719,AP -1743038720,1743039487,US +1743038464,1743039487,AP 1743039488,1743040511,IN 1743040512,1743041535,CN 1743041536,1743042559,HK @@ -64339,8 +64918,7 @@ 1743074048,1743074303,IN 1743074304,1743075327,AU 1743075328,1743076351,MY -1743076352,1743077375,AP -1743077376,1743079423,HK +1743076352,1743079423,HK 1743079424,1743080959,ID 1743080960,1743081471,IN 1743081472,1743081727,BD @@ -64355,9 +64933,9 @@ 1743087616,1743088639,PH 1743088640,1743089663,TH 1743089664,1743090687,MY -1743090688,1743091711,AP +1743090688,1743091711,HK 1743091712,1743092735,MN -1743092736,1743093759,AP +1743092736,1743093759,HK 1743093760,1743094015,SG 1743094016,1743094271,IN 1743094272,1743094527,NZ @@ -64414,7 +64992,8 @@ 1743141632,1743141887,MY 1743141888,1743142911,BD 1743142912,1743143935,AP -1743143936,1743144703,US +1743143936,1743144191,TH +1743144192,1743144703,US 1743144704,1743144959,SG 1743144960,1743145983,AU 1743145984,1743147007,NZ @@ -64455,18 +65034,15 @@ 1743180800,1743181823,CN 1743181824,1743182847,HK 1743182848,1743184895,IN -1743184896,1743185151,AP -1743185152,1743185663,HK -1743185664,1743185919,AP +1743184896,1743185919,HK 1743185920,1743186943,SG 1743186944,1743187967,CN -1743187968,1743188223,HK -1743188224,1743188991,AP +1743187968,1743188991,AP 1743188992,1743190015,AU 1743190016,1743191039,HK 1743191040,1743192063,AF 1743192064,1743195135,IN -1743195136,1743196159,AP +1743195136,1743196159,HK 1743196160,1743198207,CN 1743198208,1743198975,AU 1743198976,1743199231,GB @@ -64660,7 +65236,8 @@ 1743384576,1743385087,SG 1743385088,1743385343,AU 1743385344,1743386623,IN -1743386624,1743388671,HK +1743386624,1743387647,HK +1743387648,1743388671,AP 1743388672,1743389695,CN 1743389696,1743390719,KR 1743390720,1743391743,HK @@ -64754,7 +65331,8 @@ 1743472640,1743473663,ID 1743473664,1743474687,PK 1743474688,1743476735,CN -1743476736,1743477759,TW +1743476736,1743477247,TW +1743477248,1743477759,AU 1743477760,1743478783,JP 1743478784,1743479807,AU 1743479808,1743480831,HK @@ -64847,7 +65425,8 @@ 1743608832,1743609855,AU 1743609856,1743610879,VN 1743610880,1743611903,MO -1743611904,1743613951,AU +1743611904,1743612927,US +1743612928,1743613951,AU 1743613952,1743615999,IN 1743616000,1743617023,JP 1743617024,1743618047,MO @@ -64903,7 +65482,7 @@ 1743704064,1743706111,VN 1743706112,1743707135,AU 1743707136,1743708159,IN -1743708160,1743709183,AP +1743708160,1743709183,HK 1743709184,1743710207,IN 1743710208,1743711231,AU 1743711232,1743712255,JP @@ -64930,14 +65509,15 @@ 1743731712,1743732735,TW 1743732736,1743733759,AU 1743733760,1743734783,CN -1743734784,1743735807,SG +1743734784,1743735295,TH +1743735296,1743735807,SG 1743735808,1743736319,AU 1743736320,1743736575,IN 1743736576,1743737855,AU 1743737856,1743738879,IN 1743738880,1743739903,AU 1743739904,1743740927,JP -1743740928,1743741951,AP +1743740928,1743741951,PS 1743741952,1743742975,HK 1743742976,1743743487,NZ 1743743488,1743743999,AU @@ -65014,14 +65594,15 @@ 1743818752,1743819775,IN 1743819776,1743820799,HK 1743820800,1743821823,NZ -1743821824,1743822847,SG +1743821824,1743822335,SG +1743822336,1743822847,HK 1743822848,1743823871,IN 1743823872,1743824895,HK 1743824896,1743825919,IN 1743825920,1743826943,CN 1743826944,1743827967,MY 1743827968,1743828223,AU -1743828224,1743828479,AP +1743828224,1743828479,HK 1743828480,1743828991,AU 1743828992,1743830015,NZ 1743830016,1743831039,CN @@ -65060,10 +65641,7 @@ 1743862784,1743863807,SG 1743863808,1743864831,JP 1743864832,1743865855,TW -1743865856,1743866111,HK -1743866112,1743866367,AP -1743866368,1743866879,HK -1743866880,1743867903,AP +1743865856,1743867903,AP 1743867904,1743868927,IN 1743868928,1743869695,NZ 1743869696,1743869951,AU @@ -65102,7 +65680,7 @@ 1743909376,1743910911,IN 1743910912,1743911935,VN 1743911936,1743912959,AU -1743912960,1743913983,AP +1743912960,1743913983,HK 1743913984,1743915007,JP 1743915008,1743916031,AU 1743916032,1743917055,KH @@ -65139,7 +65717,7 @@ 1743944704,1743945215,ID 1743945216,1743945727,TO 1743945728,1743946751,CN -1743946752,1743947775,AP +1743946752,1743947775,HK 1743947776,1743948799,IN 1743948800,1743949823,HK 1743949824,1743950847,AP @@ -65175,7 +65753,8 @@ 1743980544,1743981567,AU 1743981568,1743982591,SG 1743982592,1743983615,AU -1743983616,1743985663,AP +1743983616,1743984639,AP +1743984640,1743985663,HK 1743985664,1743987711,IN 1743987712,1743988735,AP 1743988736,1743990783,IN @@ -65251,13 +65830,11 @@ 1744058368,1744058623,AU 1744058624,1744058879,DE 1744058880,1744066559,CN -1744066560,1744066815,HK -1744066816,1744067071,AP -1744067072,1744067583,HK -1744067584,1744068607,JP +1744066560,1744067583,HK +1744067584,1744068607,AU 1744068608,1744069631,ID 1744069632,1744070655,SG -1744070656,1744071679,JP +1744070656,1744071679,AU 1744071680,1744072703,KR 1744072704,1744073215,HK 1744073216,1744073471,SG @@ -65409,9 +65986,7 @@ 1744208384,1744208895,AU 1744208896,1744209919,CN 1744209920,1744210943,AU -1744210944,1744211199,JP -1744211200,1744211455,HK -1744211456,1744211967,SG +1744210944,1744211967,SG 1744211968,1744212991,NL 1744212992,1744213503,SG 1744213504,1744214015,JP @@ -65443,7 +66018,7 @@ 1744234752,1744235519,AU 1744235520,1744236543,KR 1744236544,1744237567,IN -1744237568,1744238591,AP +1744237568,1744238591,HK 1744238592,1744238847,US 1744238848,1744239103,NZ 1744239104,1744239359,AU @@ -65635,7 +66210,7 @@ 1744408576,1744409599,CN 1744409600,1744410623,AU 1744410624,1744411647,PK -1744411648,1744412671,LA +1744411648,1744412671,AU 1744412672,1744413183,SG 1744413184,1744413695,TW 1744413696,1744417791,CN @@ -65806,8 +66381,7 @@ 1744589824,1744590079,BT 1744590080,1744590335,ID 1744590336,1744590847,AU -1744590848,1744591103,SA -1744591104,1744591871,DE +1744590848,1744591871,DE 1744591872,1744592895,AU 1744592896,1744593919,CN 1744593920,1744594431,ID @@ -65955,8 +66529,7 @@ 1744723712,1744723967,ID 1744723968,1744726015,IN 1744726016,1744727039,ID -1744727040,1744727551,AP -1744727552,1744728063,HK +1744727040,1744728063,AP 1744728064,1744729087,CN 1744729088,1744730111,HK 1744730112,1744731135,MN @@ -65991,7 +66564,7 @@ 1744756736,1744757759,PF 1744757760,1744758271,NZ 1744758272,1744758527,IN -1744758528,1744758783,NZ +1744758528,1744758783,AU 1744758784,1744759807,PF 1744759808,1744762879,IN 1744762880,1744763903,KR @@ -66018,7 +66591,8 @@ 1744777216,1744778239,AU 1744778240,1744778751,ID 1744778752,1744779263,AU -1744779264,1744781311,HK +1744779264,1744780287,HK +1744780288,1744781311,SG 1744781312,1744782335,AU 1744782336,1744783359,CN 1744783360,1744786431,IN @@ -66149,7 +66723,6 @@ 1754210304,1754213119,US 1754213120,1754213375,AP 1754213376,1754251263,US -1754256384,1754256895,?? 1754259456,1754267647,US 1754267648,1754337279,CA 1754337280,1754365951,US @@ -66202,8 +66775,7 @@ 1755070464,1755074559,CA 1755074560,1755090943,US 1755090944,1755091967,CA -1755091968,1755092991,US -1755093504,1755103231,US +1755091968,1755103231,US 1755105280,1755106303,?? 1755111424,1755119615,US 1755119616,1755283455,CA @@ -66241,8 +66813,7 @@ 1755721728,1755735039,US 1755735040,1755737087,CA 1755737088,1755738111,US -1755738368,1755741183,US -1755741184,1755742207,RU +1755738368,1755742207,US 1755742208,1755758591,DE 1755758592,1755779071,US 1755779072,1755783167,DE @@ -66251,8 +66822,8 @@ 1755824384,1755829247,US 1755829248,1755831295,CA 1755831296,1755833343,US -1755833344,1755834367,CA -1755834368,1755835391,US +1755833344,1755833855,CA +1755833856,1755835391,US 1755835392,1755836415,CA 1755836416,1755837951,US 1755837952,1755838207,CA @@ -66287,7 +66858,7 @@ 1757453312,1757457407,US 1757457408,1757458431,CA 1757458432,1757460479,US -1757460480,1757462527,VI +1757460480,1757462527,?? 1757462528,1757466623,US 1757466624,1757468671,CA 1757468672,1757472767,US @@ -66327,13 +66898,16 @@ 1757970432,1758265343,US 1758265344,1758330879,CA 1758330880,1758404607,US -1758404608,1758412799,DE +1758404608,1758405631,HK +1758405632,1758412799,DE 1758415872,1758416127,?? 1758420992,1759128575,US 1759128576,1759129599,CA 1759129600,1759131647,US 1759131648,1759133695,CA -1759133696,1759138815,US +1759133696,1759135743,US +1759135744,1759136767,?? +1759136768,1759138815,US 1759138816,1759139839,CA 1759139840,1759140863,US 1759140864,1759141887,CA @@ -66372,8 +66946,10 @@ 1759313920,1759346687,CA 1759346688,1759408127,US 1759408128,1759412223,CA -1759420416,1759428607,US -1759431680,1759433215,?? +1759420416,1759427583,US +1759427584,1759427839,NL +1759427840,1759428607,US +1759431680,1759432703,?? 1759436800,1759514879,US 1759514880,1759515135,CA 1759515136,1759516671,US @@ -66408,9 +66984,6 @@ 1760230656,1760230911,US 1760230912,1760231423,CA 1760231424,1760382975,US -1760382976,1760385023,?? -1760386304,1760386559,?? -1760386816,1760387071,?? 1760387072,1760477183,US 1760477184,1760478207,PR 1760478208,1760487423,US @@ -66434,7 +67007,8 @@ 1760824320,1760829439,US 1760830464,1760837631,US 1760837632,1760839679,CA -1760839680,1760843775,US +1760839680,1760841727,LU +1760841728,1760843775,US 1760843776,1760845823,CA 1760845824,1760869375,US 1760869376,1760870399,CA @@ -66472,8 +67046,6 @@ 1760944128,1760945151,CA 1760945152,1760985087,US 1760985088,1761017855,CA -1761021184,1761021439,?? -1761024000,1761026047,?? 1761026048,1761034239,US 1761034240,1761035519,CA 1761035520,1761035775,US @@ -66633,9 +67205,7 @@ 1763411456,1763412991,MU 1763412992,1763415039,ZA 1763415040,1763415551,KE -1763415552,1763416063,ZA -1763416064,1763416575,MU -1763416576,1763419135,ZA +1763415552,1763419135,ZA 1763419136,1763420671,MU 1763420672,1763423743,ZA 1763423744,1763426303,MU @@ -66746,12 +67316,8 @@ 1795162112,1795555327,US 1795555328,1795571711,CA 1795571712,1804861439,US -1804861440,1804863487,HK -1804863488,1804864511,US -1804864512,1804865023,HK -1804865024,1804865535,US -1804865536,1804866559,HK -1804866560,1804886015,US +1804861440,1804867583,HK +1804867584,1804886015,US 1804886016,1804892159,HK 1804892160,1804892671,US 1804892672,1804899327,HK @@ -66807,7 +67373,7 @@ 1806696448,1806827519,CN 1806827520,1806925823,US 1806925824,1806958591,CA -1806958592,1807043327,US +1806958592,1807040511,US 1807043328,1807044607,?? 1807044608,1807056895,US 1807056896,1807057919,EU @@ -66828,18 +67394,25 @@ 1807122432,1807123455,NL 1807123456,1807124479,CA 1807124480,1807125503,US -1807125504,1807126527,RU +1807125504,1807125759,RU +1807125760,1807126015,US +1807126016,1807126527,RU 1807126528,1807134719,US 1807134720,1807138815,CA 1807138816,1807155199,US 1807155200,1807187967,LU 1807187968,1807220735,ES -1807220736,1807597567,US +1807220736,1807548415,US +1807548416,1807552255,LU +1807552256,1807555583,US +1807555584,1807556607,LU +1807556608,1807597567,US 1807597568,1807646719,CA 1807646720,1807654911,US 1807659008,1807696895,US 1807696896,1807697151,IE -1807697152,1807732735,US +1807697152,1807698943,US +1807699200,1807732735,US 1807732736,1807736831,GP 1807736832,1815822335,US 1815822336,1815826431,CA @@ -66872,7 +67445,9 @@ 1822654464,1822670847,CA 1822670848,1822807551,US 1822807552,1822807807,TR -1822807808,1822949375,US +1822807808,1822814719,US +1822814720,1822815231,RU +1822815232,1822949375,US 1822949376,1822982143,CA 1822982144,1823113215,US 1823113216,1823129599,CA @@ -67106,7 +67681,7 @@ 1833570304,1833571327,BE 1833571328,1833572351,GB 1833572352,1833573375,SE -1833573376,1833574399,TR +1833573376,1833574399,AL 1833574400,1833578495,YE 1833578496,1833582591,HU 1833582592,1833586687,TJ @@ -67118,8 +67693,7 @@ 1833611264,1833615359,NO 1833615360,1833619455,GB 1833619456,1833623551,RU -1833623552,1833625599,AE -1833625600,1833627647,IR +1833623552,1833627647,IR 1833627648,1833631743,GB 1833631744,1833635839,CZ 1833635840,1833639935,DE @@ -67160,7 +67734,10 @@ 1834918656,1834918911,UA 1834918912,1834919935,IR 1834919936,1834920959,EU -1834920960,1834921983,US +1834920960,1834921215,US +1834921216,1834921471,TR +1834921472,1834921727,IN +1834921728,1834921983,US 1834921984,1834930175,RU 1834930176,1834930431,GB 1834930432,1834930687,EE @@ -67168,7 +67745,10 @@ 1834931200,1834932223,DE 1834932224,1834932991,US 1834932992,1834933247,GB -1834933248,1834934271,US +1834933248,1834933503,US +1834933504,1834933759,TR +1834933760,1834934015,IN +1834934016,1834934271,US 1834934272,1834938367,RS 1834938368,1834944511,PL 1834944512,1834946559,RO @@ -67228,7 +67808,9 @@ 1835635200,1835638527,LU 1835638528,1835638783,AM 1835638784,1835646975,RU -1835646976,1835651071,BA +1835646976,1835647487,BA +1835647488,1835647999,US +1835648000,1835651071,BA 1835651072,1835653119,EU 1835653120,1835655167,US 1835655168,1835663359,CY @@ -67260,7 +67842,7 @@ 1835761920,1835762175,FI 1835762176,1835762431,SE 1835762432,1835762687,IR -1835762688,1835762943,US +1835762688,1835762943,DE 1835762944,1835763199,CH 1835763200,1835763455,TR 1835763456,1835763711,US @@ -67289,7 +67871,11 @@ 1835769856,1835770879,DE 1835770880,1835771391,RU 1835771392,1835771647,UA -1835771648,1835778047,RU +1835771648,1835772415,RU +1835772416,1835772671,US +1835772672,1835772927,FI +1835772928,1835774975,NL +1835774976,1835778047,RU 1835778048,1835786239,CZ 1835786240,1835794431,JO 1835794432,1835802623,FI @@ -67334,19 +67920,37 @@ 1836611584,1836613631,DE 1836613632,1836630015,RU 1836630016,1836646399,BG -1836646400,1836654591,US -1836654592,1836679167,RS +1836646400,1836655615,US +1836655616,1836679167,RS 1836679168,1836684031,BG 1836684032,1836684287,GB 1836684288,1836687359,BG -1836687360,1836688383,MK -1836688384,1836688895,BG +1836687360,1836688127,MK +1836688128,1836688895,BG 1836688896,1836689151,MK 1836689152,1836711935,BG 1836711936,1836728319,UA 1836728320,1836744703,RS 1836744704,1836761087,FR -1836761088,1836775423,IR +1836761088,1836761343,GB +1836761344,1836761599,IR +1836761600,1836761855,PT +1836761856,1836762111,US +1836762112,1836763135,IR +1836763136,1836764159,US +1836764160,1836764415,IR +1836764416,1836765183,US +1836765184,1836765439,IR +1836765440,1836765695,US +1836765696,1836765951,IR +1836765952,1836766719,US +1836766720,1836767231,IR +1836767232,1836767487,US +1836767488,1836767743,IR +1836767744,1836768255,US +1836768256,1836769023,IR +1836769024,1836769279,US +1836769280,1836775423,IR 1836775424,1836775935,GB 1836775936,1836776959,IR 1836776960,1836777471,GB @@ -67373,7 +67977,11 @@ 1837088768,1837105151,SI 1837105152,1838153727,BE 1838153728,1839202303,GB -1839202304,1839235071,BG +1839202304,1839211007,BG +1839211008,1839211263,TR +1839211264,1839211775,BG +1839211776,1839212543,TR +1839212544,1839235071,BG 1839235072,1839267839,IL 1839267840,1839300607,RU 1839300608,1839333375,BH @@ -67585,18 +68193,19 @@ 1842192384,1842194431,AZ 1842194432,1842196479,CH 1842196480,1842198527,DE -1842198528,1842198783,US -1842198784,1842199039,AT +1842198528,1842198783,UA +1842198784,1842199039,PH 1842199040,1842199551,NL -1842199552,1842199807,US +1842199552,1842199807,UA 1842199808,1842200063,DE -1842200064,1842200319,NL +1842200064,1842200319,SG 1842200320,1842200575,GB 1842200576,1842202623,NL 1842202624,1842204671,CH 1842204672,1842205183,AZ -1842205184,1842205439,TR -1842205440,1842206719,NL +1842205184,1842205439,DE +1842205440,1842206207,NL +1842206208,1842206719,DE 1842206720,1842208767,SE 1842208768,1842210815,GB 1842210816,1842212863,LT @@ -67617,11 +68226,10 @@ 1842274304,1842275327,NL 1842275328,1842276351,FR 1842276352,1842277375,CH -1842277376,1842277887,NL -1842277888,1842278143,US -1842278144,1842278399,AR +1842277376,1842278143,US +1842278144,1842278399,DE 1842278400,1842279423,US -1842279424,1842280447,AP +1842279424,1842280447,HK 1842280448,1842281471,NL 1842281472,1842282495,IR 1842282496,1842286591,RU @@ -67777,7 +68385,9 @@ 1844032256,1844033023,CH 1844033024,1844033279,EU 1844033280,1844033535,CH -1844033536,1844035583,RS +1844033536,1844034815,RS +1844034816,1844035071,US +1844035072,1844035583,RS 1844035584,1844037631,MD 1844037632,1844039167,RU 1844039168,1844039423,KZ @@ -67795,7 +68405,8 @@ 1844068352,1844070399,ES 1844070400,1844070655,TR 1844070656,1844070911,FR -1844070912,1844071679,NL +1844070912,1844071167,TR +1844071168,1844071679,NL 1844071680,1844071935,CH 1844071936,1844072191,IQ 1844072192,1844072447,DE @@ -67860,7 +68471,10 @@ 1844187136,1844191231,IT 1844191232,1844195327,AL 1844195328,1844196351,TR -1844196352,1844198143,US +1844196352,1844196607,US +1844196608,1844196863,TR +1844196864,1844197119,IN +1844197120,1844198143,US 1844198144,1844198399,TR 1844198400,1844198655,US 1844198656,1844198911,DE @@ -67911,7 +68525,7 @@ 1844363776,1844364031,HK 1844364032,1844364287,TR 1844364288,1844365311,UA -1844365312,1844367359,JP +1844365312,1844367359,RU 1844367360,1844371455,CZ 1844371456,1844375551,GE 1844375552,1844379647,RU @@ -67944,7 +68558,7 @@ 1844772864,1844826879,RS 1844826880,1844827135,ME 1844827136,1844838399,RS -1844838400,1844903935,GB +1844838400,1844903935,US 1844903936,1844969471,NO 1844969472,1844970239,RU 1844970240,1844970495,CZ @@ -67955,9 +68569,7 @@ 1844973568,1844976639,HK 1844976640,1844977663,JP 1844977664,1844977919,KZ -1844977920,1844979199,RU -1844979200,1844979711,CZ -1844979712,1844980479,RU +1844977920,1844980479,RU 1844980480,1844980735,CZ 1844980736,1844983807,RU 1844983808,1844984063,KZ @@ -67976,9 +68588,14 @@ 1845024768,1845025023,CZ 1845025024,1845025791,RU 1845025792,1845026303,UZ -1845026304,1845029887,RU +1845026304,1845028607,RU +1845028608,1845028863,KZ +1845028864,1845029375,GB +1845029376,1845029887,RU 1845029888,1845030143,KZ -1845030144,1845033727,RU +1845030144,1845031935,RU +1845031936,1845032191,UA +1845032192,1845033727,RU 1845033728,1845033983,CZ 1845033984,1845034495,RU 1845034496,1845034751,UA @@ -68484,9 +69101,11 @@ 1893019648,1893023743,TW 1893023744,1893027839,HK 1893027840,1893031935,VN -1893031936,1893036287,AP -1893036288,1893036543,HK -1893036544,1893040127,AP +1893031936,1893035775,AP +1893035776,1893036287,HK +1893036288,1893037311,AP +1893037312,1893037567,HK +1893037568,1893040127,AP 1893040128,1893072895,AU 1893072896,1893138431,KR 1893138432,1893203967,ID @@ -68567,14 +69186,20 @@ 1897790464,1897791487,HK 1897791488,1897824255,KR 1897824256,1897830399,IN -1897830400,1897831423,US -1897831424,1897832447,IN +1897830400,1897831423,NL +1897831424,1897832447,SG 1897832448,1897834495,US -1897834496,1897840639,IN +1897834496,1897837567,IN +1897837568,1897838591,DE +1897838592,1897839615,IN +1897839616,1897840639,NL 1897840640,1897842687,US -1897842688,1897848831,IN +1897842688,1897847807,IN +1897847808,1897848831,DE 1897848832,1897849855,AU -1897849856,1897857023,IN +1897849856,1897850879,SG +1897850880,1897852927,MY +1897852928,1897857023,US 1897857024,1897922559,CN 1897922560,1898708991,JP 1898708992,1899233279,CN @@ -68650,9 +69275,9 @@ 1908932608,1909129215,CN 1909129216,1909161983,IR 1909161984,1909178367,ES -1909178368,1909188095,PK -1909188096,1909188351,NL -1909188352,1909194751,PK +1909178368,1909187839,PK +1909187840,1909188095,NL +1909188096,1909194751,PK 1909194752,1909456895,CN 1909456896,1909473279,JP 1909473280,1909473791,ID @@ -68667,7 +69292,7 @@ 1909481472,1909587967,CN 1909587968,1909719039,MY 1909719040,1909735423,CN -1909735424,1909736447,US +1909735424,1909736447,PS 1909736448,1909737471,ID 1909737472,1909738495,AU 1909738496,1909739007,PH @@ -68742,12 +69367,14 @@ 1916141568,1916272639,CN 1916272640,1916534783,ID 1916534784,1916960767,CN -1916960768,1916964863,DE -1916964864,1916968959,CN +1916960768,1916965887,DE +1916965888,1916966911,CN +1916966912,1916967935,DE +1916967936,1916968959,CN 1916968960,1916977151,DE -1916977152,1916984319,CN -1916984320,1916988415,DE -1916988416,1917124607,CN +1916977152,1916985343,CN +1916985344,1916987391,DE +1916987392,1917124607,CN 1917124608,1917169663,JP 1917169664,1917181951,NC 1917181952,1917190143,IN @@ -68780,19 +69407,17 @@ 1919947520,1919948287,HK 1919948288,1919975935,CN 1919975936,1919976191,HK -1919976192,1919999999,CN -1920000000,1920002559,HK +1919976192,1920000511,CN +1920000512,1920000767,HK +1920000768,1920002047,CN +1920002048,1920002559,HK 1920002560,1920003071,CN 1920003072,1920008191,HK 1920008192,1920057343,CN 1920057344,1920058111,HK -1920058112,1920069631,CN -1920069632,1920071167,HK -1920071168,1920072703,CN -1920072704,1920072959,HK +1920058112,1920072959,CN 1920072960,1920073471,JP -1920073472,1920073727,HK -1920073728,1920434175,CN +1920073472,1920434175,CN 1920434176,1920450559,SG 1920450560,1920466943,CN 1920466944,1920991231,ID @@ -68814,11 +69439,7 @@ 1921388544,1921391615,IN 1921391616,1921400831,JP 1921400832,1921404927,ID -1921404928,1921405183,HK -1921405184,1921405439,ID -1921405440,1921406463,HK -1921406464,1921406719,GB -1921406720,1921406975,HK +1921404928,1921406975,HK 1921406976,1921409023,BD 1921409024,1921425407,JP 1921425408,1921431551,NZ @@ -68998,23 +69619,27 @@ 1940285440,1940291583,ID 1940291584,1940295679,IN 1940295680,1940324351,JP -1940324352,1940332543,US +1940324352,1940325119,NL +1940325120,1940325375,PK +1940325376,1940325631,NL +1940325632,1940325887,US +1940325888,1940326143,NL +1940326144,1940332543,US 1940332544,1940333311,JP -1940333312,1940333567,TW +1940333312,1940333567,AP 1940333568,1940336383,JP -1940336384,1940336639,TW +1940336384,1940336639,AP 1940336640,1940338175,US 1940338176,1940338431,TR 1940338432,1940343807,US -1940343808,1940344063,CA -1940344064,1940344319,NL -1940344320,1940344575,CA +1940343808,1940344575,CA 1940344576,1940344831,TR 1940344832,1940348159,JP -1940348160,1940348671,TW +1940348160,1940348671,AP 1940348672,1940348927,JP -1940348928,1940350975,GB -1940350976,1940353023,DE +1940348928,1940349951,GB +1940349952,1940351999,US +1940352000,1940353023,DE 1940353024,1940357119,US 1940357120,1940389887,JP 1940389888,1940914175,CN @@ -69292,7 +69917,8 @@ 1959572480,1959573503,TH 1959573504,1959574527,HK 1959574528,1959575551,IN -1959575552,1959576575,US +1959575552,1959575807,AP +1959575808,1959576575,US 1959576576,1959577599,AT 1959577600,1959578623,MY 1959578624,1959579647,IN @@ -69329,7 +69955,7 @@ 1959678720,1959678975,MN 1959678976,1959679999,PK 1959680000,1959681023,BD -1959681024,1959682047,AP +1959681024,1959682047,HK 1959682048,1959683071,US 1959683072,1959684095,EU 1959684096,1959684607,IN @@ -69446,12 +70072,7 @@ 1962934272,1963458559,VN 1963458560,1963982847,CN 1963982848,1964113919,KR -1964113920,1964115455,AP -1964115456,1964115967,HK -1964115968,1964116991,AP -1964116992,1964117247,HK -1964117248,1964117503,AP -1964117504,1964118015,HK +1964113920,1964118015,AP 1964118016,1964120063,ID 1964120064,1964122111,JP 1964122112,1964122367,SG @@ -69614,7 +70235,9 @@ 1981424640,1981425663,HK 1981425664,1981442047,CN 1981442048,1981444095,HK -1981444096,1981452287,CN +1981444096,1981449215,CN +1981449216,1981449471,SG +1981449472,1981452287,CN 1981452288,1981456383,HK 1981456384,1981460479,CN 1981460480,1981461503,HK @@ -69698,7 +70321,9 @@ 1986760704,1986762751,AU 1986762752,1986764799,JP 1986764800,1986768895,KR -1986768896,1986770943,AP +1986768896,1986769919,AP +1986769920,1986770687,HK +1986770688,1986770943,AP 1986770944,1986772991,AU 1986772992,1986781183,MY 1986781184,1986783231,HK @@ -69793,9 +70418,26 @@ 1992285952,1992286463,CN 1992286464,1992290303,HK 1992290304,1992364031,CN -1992364032,1992372223,HK +1992364032,1992364543,JP +1992364544,1992365055,SG +1992365056,1992365311,JP +1992365312,1992365567,SG +1992365568,1992366079,JP +1992366080,1992366591,SG +1992366592,1992367103,JP +1992367104,1992367871,HK +1992367872,1992368127,JP +1992368128,1992372223,HK 1992372224,1992374271,CN -1992374272,1992384511,HK +1992374272,1992380415,HK +1992380416,1992380927,JP +1992380928,1992381439,SG +1992381440,1992381695,JP +1992381696,1992381951,SG +1992381952,1992382463,JP +1992382464,1992382975,SG +1992382976,1992383743,JP +1992383744,1992384511,HK 1992384512,1992392703,CN 1992392704,1992393215,HK 1992393216,1992393727,CN @@ -69889,7 +70531,9 @@ 1997279232,1997283327,PL 1997283328,1997287423,IT 1997287424,1997295615,US -1997295616,1997316095,AU +1997295616,1997301759,AU +1997301760,1997303807,MN +1997303808,1997316095,AU 1997316096,1997320191,SG 1997320192,1997328383,US 1997328384,1997332479,AU @@ -69949,7 +70593,13 @@ 1998274560,1998323711,CN 1998323712,1998330879,HK 1998330880,1998331135,SG -1998331136,1998396671,HK +1998331136,1998348287,HK +1998348288,1998355455,SG +1998355456,1998360575,HK +1998360576,1998365695,KR +1998365696,1998386175,HK +1998386176,1998389247,IN +1998389248,1998396671,HK 1998396672,1998396927,SG 1998396928,1998454783,HK 1998454784,1998456831,AU @@ -70326,9 +70976,7 @@ 2033614848,2033623039,AU 2033623040,2033624063,HK 2033624064,2033625087,MM -2033625088,2033625599,AP -2033625600,2033625855,HK -2033625856,2033627135,AP +2033625088,2033627135,AP 2033627136,2033629183,CN 2033629184,2033630207,AU 2033630208,2033631231,HK @@ -70439,20 +71087,23 @@ 2047082496,2047377407,CN 2047377408,2047381503,ZA 2047381504,2047385599,TH -2047385600,2047393791,SG +2047385600,2047389695,RU +2047389696,2047393791,MX 2047393792,2047475711,CN -2047475712,2047478527,AP -2047478528,2047478783,HK -2047478784,2047500287,AP -2047500288,2047500799,HK +2047475712,2047478271,AP +2047478272,2047478527,HK +2047478528,2047496191,AP +2047496192,2047500799,HK 2047500800,2047501055,AP 2047501056,2047501567,HK 2047501568,2047502079,AP 2047502080,2047502335,HK 2047502336,2047503615,AP 2047503616,2047503871,HK -2047503872,2047507455,AP -2047507456,2047508479,HK +2047503872,2047504383,AP +2047504384,2047506431,HK +2047506432,2047507199,AP +2047507200,2047508479,HK 2047508480,2047510015,CN 2047510016,2047510271,PH 2047510272,2047510527,SG @@ -70674,8 +71325,7 @@ 2063466496,2063482879,TW 2063482880,2063486975,US 2063486976,2063490047,MN -2063490048,2063494143,AP -2063494144,2063499263,HK +2063490048,2063499263,HK 2063499264,2063532031,KR 2063532032,2063548415,LK 2063548416,2063550463,CN @@ -70756,7 +71406,7 @@ 2070699008,2070700031,PK 2070700032,2070702079,ID 2070702080,2070703103,AU -2070703104,2070704127,AP +2070703104,2070704127,HK 2070704128,2070708223,PH 2070708224,2070712319,CN 2070712320,2070714367,NZ @@ -70807,7 +71457,10 @@ 2076704768,2076712959,BD 2076712960,2076721151,JP 2076721152,2076737535,KR -2076737536,2076770303,AU +2076737536,2076764159,AU +2076764160,2076766207,MN +2076766208,2076768255,AU +2076768256,2076770303,MN 2076770304,2076835839,IN 2076835840,2076966911,HK 2076966912,2077097983,TW @@ -70904,7 +71557,7 @@ 2080243712,2080260095,JP 2080260096,2080268287,KR 2080268288,2080270335,CN -2080270336,2080272383,AP +2080270336,2080272383,HK 2080272384,2080276479,AU 2080276480,2080309247,KR 2080309248,2080325631,NZ @@ -71059,7 +71712,7 @@ 2090590208,2090594303,NZ 2090594304,2090622975,IN 2090622976,2090647551,HK -2090647552,2090651647,SG +2090647552,2090651647,IN 2090651648,2090659839,JP 2090659840,2090663935,TH 2090663936,2090680319,VN @@ -71378,7 +72031,7 @@ 2155835392,2155839487,RO 2155839488,2155843583,FR 2155843584,2155844607,RU -2155844608,2155845631,US +2155844608,2155845631,GB 2155845632,2155847679,NL 2155847680,2155849727,ES 2155849728,2155851775,TR @@ -71419,7 +72072,7 @@ 2159869952,2159935487,CA 2159935488,2160656383,US 2160656384,2160657407,BR -2160657408,2160658431,HN +2160657408,2160658431,US 2160658432,2160661503,BR 2160661504,2160662527,AR 2160662528,2160676863,BR @@ -71576,7 +72229,8 @@ 2178416640,2178482175,US 2178482176,2178547711,DE 2178547712,2179071999,US -2179072000,2179076095,SG +2179072000,2179074047,SG +2179074048,2179076095,HK 2179076096,2179084287,IN 2179084288,2179092479,HK 2179092480,2179096575,SG @@ -71826,13 +72480,15 @@ 2193687552,2193688063,NL 2193688064,2193688319,KZ 2193688320,2193688575,DE -2193688576,2193692671,CZ +2193688576,2193691135,CZ +2193691136,2193691391,SK +2193691392,2193692671,CZ 2193692672,2193694719,FR 2193694720,2193704959,RU 2193704960,2193705215,FR 2193705216,2193705471,UA 2193705472,2193705727,AZ -2193705728,2193705983,IT +2193705728,2193705983,TR 2193705984,2193706239,RS 2193706240,2193706495,IR 2193706496,2193706751,GB @@ -71933,14 +72589,14 @@ 2197793536,2197793791,NL 2197793792,2197794047,RU 2197794048,2197794303,TR -2197794304,2197794559,ES +2197794304,2197794559,US 2197794560,2197794815,UA 2197794816,2197796863,SA 2197796864,2197798911,DE 2197798912,2197815295,IR 2197815296,2197816319,BO 2197816320,2197828607,BR -2197828608,2197829631,AR +2197828608,2197829631,CL 2197829632,2197833727,BR 2197833728,2197834751,CR 2197834752,2197841919,BR @@ -71998,7 +72654,10 @@ 2204172288,2204237823,SE 2204237824,2204303359,US 2204303360,2204368895,DE -2204368896,2204369919,PA +2204368896,2204369151,MX +2204369152,2204369407,PA +2204369408,2204369663,US +2204369664,2204369919,MX 2204369920,2204375039,BR 2204375040,2204376063,NL 2204376064,2204377087,CL @@ -72038,7 +72697,8 @@ 2204902400,2204903423,CR 2204903424,2204904447,AR 2204904448,2204910591,BR -2204910592,2204911615,CL +2204910592,2204910847,AR +2204910848,2204911615,CL 2204911616,2204913663,BR 2204913664,2204914687,AR 2204914688,2204929023,BR @@ -72138,10 +72798,13 @@ 2210661376,2210662399,BR 2210662400,2210664447,EC 2210664448,2210668543,BR -2210668544,2210669567,CR +2210668544,2210668799,SV +2210668800,2210669055,GT +2210669056,2210669311,PA +2210669312,2210669567,NI 2210669568,2210670591,AR 2210670592,2210673663,BR -2210673664,2210674687,HN +2210673664,2210674687,US 2210674688,2210675711,BR 2210675712,2210676735,EC 2210676736,2210678783,BR @@ -72370,7 +73033,7 @@ 2231333888,2231335935,BR 2231335936,2231336959,MX 2231336960,2231337983,BR -2231337984,2231339007,HN +2231337984,2231339007,US 2231339008,2231346175,BR 2231346176,2231347199,PY 2231347200,2231355391,BR @@ -72624,7 +73287,9 @@ 2259222528,2259288063,DE 2259288064,2259353599,US 2259353600,2259419135,DE -2259419136,2259451903,AP +2259419136,2259430911,AP +2259430912,2259431167,KR +2259431168,2259451903,AP 2259451904,2259457791,HK 2259457792,2259468287,AP 2259468288,2259615743,US @@ -72811,8 +73476,8 @@ 2276816896,2276817151,DE 2276817152,2276833791,FI 2276833792,2276834047,DE -2276834048,2276834559,FI -2276834560,2276835327,DE +2276834048,2276835071,FI +2276835072,2276835327,DE 2276835328,2276845567,FI 2276845568,2276845823,DE 2276845824,2276851711,FI @@ -72889,9 +73554,7 @@ 2293209088,2293214207,US 2293214208,2293215231,CA 2293215232,2293227519,US -2293227520,2293227775,PR -2293227776,2293228031,EU -2293228032,2293228543,PR +2293227520,2293228543,PR 2293228544,2293825535,US 2293825536,2293891071,IN 2293891072,2293956607,AU @@ -72902,7 +73565,9 @@ 2294808576,2294874111,US 2294874112,2294939647,IE 2294939648,2295201791,US -2295201792,2295267327,IE +2295201792,2295209983,IE +2295209984,2295210239,GB +2295210240,2295267327,IE 2295267328,2296446975,US 2296446976,2296512511,SE 2296512512,2296676351,US @@ -72993,7 +73658,13 @@ 2302410240,2302410751,JP 2302410752,2302541823,SE 2302541824,2302607359,CH -2302607360,2302640127,SC +2302607360,2302624767,SC +2302624768,2302625791,CA +2302625792,2302626303,SC +2302626304,2302626815,CA +2302626816,2302627071,SC +2302627072,2302627327,CA +2302627328,2302640127,SC 2302640128,2302672895,UG 2302672896,2302738431,MW 2302738432,2302935039,US @@ -73171,8 +73842,8 @@ 2315124736,2315190271,US 2315190272,2315255807,BJ 2315255808,2315257855,BR -2315257856,2315258879,AR -2315258880,2315259903,CL +2315257856,2315259135,AR +2315259136,2315259903,CL 2315259904,2315266047,BR 2315266048,2315267071,CO 2315267072,2315270143,BR @@ -73192,7 +73863,7 @@ 2315303936,2315314175,BR 2315314176,2315315199,HN 2315315200,2315317247,BR -2315317248,2315318271,HN +2315317248,2315318271,US 2315318272,2315321343,BR 2315321344,2315452415,US 2315452416,2315502591,GB @@ -73229,10 +73900,10 @@ 2317632512,2317634559,BR 2317634560,2317635583,BO 2317635584,2317638655,BR -2317638656,2317639679,HN +2317638656,2317639679,US 2317639680,2317640703,AR 2317640704,2317649919,BR -2317649920,2317650943,HN +2317649920,2317650943,US 2317650944,2317651967,BR 2317651968,2317652991,PE 2317652992,2317654015,AR @@ -73272,7 +73943,7 @@ 2318598144,2318663679,CA 2318663680,2319122431,US 2319122432,2319123455,AR -2319123456,2319124479,HN +2319123456,2319124479,US 2319124480,2319125503,VE 2319125504,2319126527,UY 2319126528,2319127551,CR @@ -73294,7 +73965,7 @@ 2319165440,2319167487,AR 2319167488,2319168511,HN 2319168512,2319174655,BR -2319174656,2319175679,HN +2319174656,2319175679,US 2319175680,2319179775,BR 2319179776,2319180799,PY 2319180800,2319184895,BR @@ -73370,7 +74041,7 @@ 2321743872,2321744895,SV 2321744896,2321745919,AR 2321745920,2321753087,BR -2321753088,2321754111,HN +2321753088,2321754111,US 2321754112,2321755135,BR 2321755136,2321756159,UY 2321756160,2321769471,BR @@ -73383,15 +74054,16 @@ 2321778688,2321779711,PA 2321779712,2321780735,BR 2321780736,2321780991,US -2321780992,2321781759,PA +2321780992,2321781759,BR 2321781760,2321782783,MX 2321782784,2321787903,BR 2321787904,2321788927,AR -2321788928,2321789951,CL +2321788928,2321789951,PE 2321789952,2321790975,SV 2321790976,2321791999,AR -2321792000,2321797119,BR -2321797120,2321798143,BZ +2321792000,2321797375,BR +2321797376,2321797631,US +2321797632,2321798143,BR 2321798144,2321799167,CW 2321799168,2321799423,NL 2321799424,2321800191,CL @@ -73415,7 +74087,9 @@ 2322358016,2322923519,US 2322923520,2322924543,BR 2322924544,2322925567,NI -2322925568,2322929663,AR +2322925568,2322926591,AR +2322926592,2322926847,US +2322926848,2322929663,AR 2322929664,2322933759,BR 2322933760,2322934783,CO 2322934784,2322935807,BR @@ -73519,7 +74193,7 @@ 2323293184,2323298303,BR 2323298304,2323299327,MX 2323299328,2323300351,AR -2323300352,2323301375,HN +2323300352,2323301375,US 2323301376,2323302399,BR 2323302400,2323303423,CO 2323303424,2323308543,BR @@ -73533,8 +74207,8 @@ 2323382272,2323415039,CH 2323415040,2323419135,GB 2323419136,2323420159,PH -2323420160,2323421183,DE -2323421184,2323422207,CH +2323420160,2323421695,DE +2323421696,2323422207,CH 2323422208,2323423231,IQ 2323423232,2323427327,GB 2323427328,2323427583,CH @@ -73566,9 +74240,11 @@ 2324103168,2327379967,US 2327379968,2327380991,MX 2327380992,2327383039,BR -2327383040,2327384063,CL +2327383040,2327384063,PE 2327384064,2327387135,BR -2327387136,2327388159,NI +2327387136,2327387391,NI +2327387392,2327387647,SV +2327387648,2327388159,NI 2327388160,2327396351,BR 2327396352,2327397375,VE 2327397376,2327399423,BR @@ -73609,8 +74285,11 @@ 2327472128,2327476223,BR 2327476224,2327477247,CL 2327477248,2327480319,BR -2327480320,2327481343,HN -2327481344,2327482367,AR +2327480320,2327481343,US +2327481344,2327481599,MX +2327481600,2327481855,CO +2327481856,2327482111,PA +2327482112,2327482367,PE 2327482368,2327483391,BR 2327483392,2327485439,AR 2327485440,2327486463,BR @@ -73622,7 +74301,9 @@ 2327494656,2327496703,BR 2327496704,2327497727,MX 2327497728,2327498751,BR -2327498752,2327499775,HN +2327498752,2327499007,HN +2327499008,2327499519,CA +2327499520,2327499775,HN 2327499776,2327501823,AR 2327501824,2327507967,BR 2327507968,2327508991,AR @@ -73647,7 +74328,9 @@ 2328303616,2328304127,SG 2328304128,2328304639,FR 2328304640,2328305919,GB -2328305920,2328306687,US +2328305920,2328306175,AU +2328306176,2328306431,SK +2328306432,2328306687,US 2328306688,2328307455,DE 2328307456,2328307711,JP 2328307712,2328308735,US @@ -73683,7 +74366,8 @@ 2328629248,2328635391,BR 2328635392,2328636415,AR 2328636416,2328652799,BR -2328652800,2328653823,PA +2328652800,2328653567,PA +2328653568,2328653823,US 2328653824,2328664063,BR 2328664064,2328667135,AR 2328667136,2328668159,BR @@ -73697,7 +74381,8 @@ 2328681472,2328683519,BR 2328683520,2328684543,CL 2328684544,2328685567,BR -2328685568,2328686591,CO +2328685568,2328686335,CO +2328686336,2328686591,US 2328686592,2328687615,BR 2328687616,2328690687,AR 2328690688,2328756223,BE @@ -73721,18 +74406,20 @@ 2329622528,2329623551,CL 2329623552,2329624575,AR 2329624576,2329626623,BR -2329626624,2329627647,HN +2329626624,2329627391,US +2329627392,2329627647,NL 2329627648,2329628671,BR 2329628672,2329629695,AR 2329629696,2329638911,BR -2329638912,2329639935,HN +2329638912,2329639167,FR +2329639168,2329639935,US 2329639936,2329644031,BR 2329644032,2329645055,CW 2329645056,2329648127,BR 2329648128,2329649151,SV 2329649152,2329650175,AR 2329650176,2329652223,BR -2329652224,2329653247,HN +2329652224,2329653247,US 2329653248,2329662463,BR 2329662464,2329664511,AR 2329664512,2329666559,BR @@ -73742,9 +74429,7 @@ 2329671680,2329672703,AR 2329672704,2329673727,BR 2329673728,2329739263,US -2329739264,2329804799,CH -2329804800,2329870335,DE -2329870336,2329935871,CH +2329739264,2329935871,CH 2329935872,2330001407,DE 2330001408,2330066943,CH 2330066944,2330132479,US @@ -73781,7 +74466,10 @@ 2331988992,2331990015,BR 2331990016,2331991039,AR 2331991040,2331992063,BR -2331992064,2331994111,CL +2331992064,2331992319,CO +2331992320,2331992575,CL +2331992576,2331992831,US +2331992832,2331994111,CL 2331994112,2331997183,BR 2331997184,2331998207,MX 2331998208,2332006399,BR @@ -73790,12 +74478,15 @@ 2332010496,2332011519,AR 2332011520,2332030975,BR 2332030976,2332031999,DO -2332032000,2332033023,AW +2332032000,2332032255,AW +2332032256,2332032511,CW +2332032512,2332033023,AW 2332033024,2332098559,ID 2332098560,2332360703,DE -2332360704,2332368895,IN -2332368896,2332369151,CN -2332369152,2332370943,IN +2332360704,2332365823,IN +2332365824,2332366847,US +2332366848,2332368895,IN +2332369920,2332370943,IN 2332370944,2332371967,ID 2332371968,2332374015,IN 2332374016,2332375039,AU @@ -73908,7 +74599,9 @@ 2333923584,2333923839,NL 2333923840,2333924095,CA 2333924096,2333924351,FR -2333924352,2333925375,RU +2333924352,2333924607,RU +2333924608,2333924863,CZ +2333924864,2333925375,RU 2333925376,2333925887,NL 2333925888,2333926143,US 2333926144,2333926399,NL @@ -73938,7 +74631,9 @@ 2335026176,2335026431,IE 2335026432,2335026943,US 2335026944,2335031295,IE -2335031296,2335045631,EU +2335031296,2335037439,EU +2335037440,2335043583,RU +2335043584,2335045631,EU 2335045632,2335047679,RU 2335047680,2335113215,US 2335113216,2335154175,ES @@ -74141,12 +74836,14 @@ 2344288256,2344353791,US 2344353792,2344419327,AU 2344419328,2344484863,CN -2344484864,2344501247,US +2344484864,2344493055,AU +2344493056,2344501247,US 2344501248,2344509439,EU 2344509440,2344517631,US 2344517632,2344534015,PS 2344534016,2344542207,EU -2344542208,2344545023,US +2344542208,2344544511,AU +2344544512,2344545023,US 2344545024,2344546303,PK 2344546304,2344550399,US 2344550400,2344615935,EU @@ -74290,7 +74987,9 @@ 2365644800,2365652991,NO 2365652992,2366111743,DE 2366111744,2366144511,MT -2366144512,2366147071,RU +2366144512,2366145023,RU +2366145024,2366145279,FI +2366145280,2366147071,RU 2366147072,2366147583,FI 2366147584,2366148607,RU 2366148608,2366148863,US @@ -74303,16 +75002,19 @@ 2366169088,2366171135,US 2366171136,2366308351,DE 2366308352,2366308863,US -2366308864,2366310399,EU +2366308864,2366309375,EU +2366309376,2366309887,RU +2366309888,2366310399,EU 2366310400,2366310911,FR 2366310912,2366311423,EU 2366311424,2366312447,US -2366312448,2366312703,EU +2366312448,2366312703,TR 2366312704,2366313727,US 2366313728,2366313983,TR -2366313984,2366314751,EU -2366314752,2366315007,TR -2366315008,2366316287,EU +2366313984,2366315263,EU +2366315264,2366315519,TR +2366315520,2366316031,EU +2366316032,2366316287,RU 2366316288,2366316543,IT 2366316544,2366318591,EU 2366318592,2366318847,TR @@ -74325,23 +75027,29 @@ 2366321152,2366324735,EU 2366324736,2366325247,FR 2366325248,2366325759,EU -2366325760,2366326783,TR +2366325760,2366326271,TR +2366326272,2366326783,GB 2366326784,2366327807,MD -2366327808,2366332927,EU +2366327808,2366328831,EU +2366328832,2366329855,MD +2366329856,2366332927,EU 2366332928,2366336767,US 2366336768,2366337023,DE -2366337024,2366349311,US -2366349312,2366349823,EU +2366337024,2366349567,US +2366349568,2366349823,RU 2366349824,2366351359,FR -2366351360,2366352383,EU +2366351360,2366352383,MD 2366352384,2366353407,GB -2366353408,2366354431,EU +2366353408,2366353663,EU +2366353664,2366354175,RU +2366354176,2366354431,EU 2366354432,2366354943,FR 2366354944,2366355199,NL 2366355200,2366355455,EU 2366355456,2366356479,FR 2366356480,2366356991,TR -2366356992,2366357503,FR +2366356992,2366357247,US +2366357248,2366357503,FR 2366357504,2366365695,US 2366365696,2366369791,NL 2366369792,2366371327,TR @@ -74415,15 +75123,14 @@ 2371862528,2371878911,FR 2371878912,2371944447,BE 2371944448,2372009983,GB -2372009984,2372010239,US +2372009984,2372010239,DE 2372010240,2372010495,BG 2372010496,2372012031,NL 2372012032,2372012287,LT 2372012288,2372012543,NL 2372012544,2372013055,LT 2372013056,2372014079,DK -2372014080,2372015103,GB -2372015104,2372016127,NL +2372014080,2372016127,NL 2372016128,2372017151,GB 2372017152,2372018175,RU 2372018176,2372019199,NL @@ -74438,7 +75145,8 @@ 2372025344,2372026367,GB 2372026368,2372027391,JO 2372027392,2372028415,US -2372028416,2372029439,SE +2372028416,2372028927,SE +2372028928,2372029439,DE 2372029440,2372030463,ES 2372030464,2372030975,NL 2372030976,2372031487,RO @@ -74520,9 +75228,7 @@ 2372243968,2372244223,NO 2372244224,2372245247,NL 2372245248,2372245759,RU -2372245760,2372246783,NL -2372246784,2372247039,US -2372247040,2372248319,NL +2372245760,2372248319,NL 2372248320,2372248575,SK 2372248576,2372249855,NL 2372249856,2372250111,US @@ -74570,7 +75276,9 @@ 2373189632,2373255167,US 2373255168,2373451775,CA 2373451776,2373517311,AU -2373517312,2374107135,US +2373517312,2373817087,US +2373817088,2373817343,GB +2373817344,2374107135,US 2374107136,2374172671,DE 2374172672,2374238207,US 2374238208,2374303743,AU @@ -74621,8 +75329,8 @@ 2375155712,2375221247,US 2375221248,2375286783,SE 2375286784,2376269823,US -2376269824,2376335359,GB -2376335360,2376343551,US +2376269824,2376302591,GB +2376302592,2376343551,US 2376343552,2376351743,SK 2376351744,2376359935,US 2376359936,2376364031,LA @@ -74849,7 +75557,7 @@ 2392019968,2392023039,US 2392023040,2392024319,CA 2392024320,2392024575,US -2392024576,2392025087,VI +2392024576,2392025087,?? 2392025088,2392063999,US 2392064000,2392096767,CA 2392096768,2392129535,US @@ -74953,7 +75661,7 @@ 2402746368,2402783231,US 2402783232,2402785279,NL 2402785280,2403336191,US -2403336192,2403401727,SG +2403336192,2403401727,CN 2403401728,2403450879,US 2403450880,2403459071,GB 2403459072,2404974591,US @@ -75008,7 +75716,7 @@ 2408157184,2408158207,PE 2408158208,2408159231,CR 2408159232,2408162303,BR -2408162304,2408163327,HN +2408162304,2408163327,GB 2408163328,2408164351,US 2408164352,2408169471,BR 2408169472,2408170495,TT @@ -75099,7 +75807,9 @@ 2413428736,2413494271,AU 2413494272,2413625343,US 2413625344,2413690879,JP -2413690880,2413821951,US +2413690880,2413775615,US +2413775616,2413775871,HK +2413775872,2413821951,US 2413821952,2413887487,AT 2413887488,2413953023,IT 2413953024,2414411775,US @@ -75181,7 +75891,8 @@ 2417033216,2417229823,US 2417229824,2417295359,ES 2417295360,2417360895,US -2417360896,2417491967,CR +2417360896,2417426431,BR +2417426432,2417491967,CR 2417491968,2417557503,GB 2417557504,2417688575,US 2417688576,2417754111,SE @@ -75232,8 +75943,8 @@ 2418802688,2418868223,EU 2418868224,2419064831,US 2419064832,2419065855,BD -2419065856,2419067391,AP -2419067392,2419067903,HK +2419065856,2419066879,AP +2419066880,2419067903,HK 2419067904,2419068927,ID 2419068928,2419069951,AU 2419069952,2419071999,VN @@ -75248,7 +75959,7 @@ 2419081216,2419082239,CN 2419082240,2419083263,HK 2419083264,2419085311,IN -2419085312,2419085567,NZ +2419085312,2419085567,JP 2419085568,2419085823,US 2419085824,2419086079,DE 2419086080,2419086335,NZ @@ -75284,10 +75995,8 @@ 2419122176,2419123199,IN 2419123200,2419124223,KH 2419124224,2419125247,AU -2419125248,2419125759,US -2419125760,2419126015,PS -2419126016,2419126271,US -2419126272,2419127295,AP +2419125248,2419126271,PS +2419126272,2419127295,HK 2419127296,2419128319,AU 2419128832,2419129343,IN 2419129344,2419130367,CN @@ -75322,7 +76031,9 @@ 2421605376,2421606399,CA 2421606400,2421620735,US 2421620736,2421686271,GB -2421686272,2421899263,US +2421686272,2421784575,US +2421784576,2421817343,SG +2421817344,2421899263,US 2421899264,2421915647,DE 2421915648,2421927935,JP 2421927936,2422145023,US @@ -75360,7 +76071,9 @@ 2426942464,2426945535,CA 2426945536,2426961919,US 2426961920,2426994687,CA -2426994688,2427224063,US +2426994688,2427209983,US +2427209984,2427210239,NL +2427210240,2427224063,US 2427224064,2427256831,CA 2427256832,2427322367,GB 2427322368,2427453439,US @@ -75402,7 +76115,6 @@ 2429575168,2429577215,CA 2429577216,2429579263,US 2429579264,2429580287,CA -2429580288,2429580799,?? 2429581568,2429581823,?? 2429582336,2429583359,US 2429583360,2429606911,AT @@ -75509,7 +76221,20 @@ 2447395840,2447396351,FR 2447396352,2447396607,DE 2447396608,2447396863,FR -2447396864,2447409151,ES +2447396864,2447397119,DE +2447397120,2447397375,NL +2447397376,2447397631,AT +2447397632,2447397887,BE +2447397888,2447398143,PL +2447398144,2447398399,IT +2447398400,2447401215,ES +2447401216,2447401471,NL +2447401472,2447401727,AT +2447401728,2447401983,BE +2447401984,2447402239,PL +2447402240,2447404543,ES +2447404544,2447404799,DK +2447404800,2447409151,ES 2447409152,2447441919,US 2447441920,2447451135,DE 2447451136,2447451647,BR @@ -75539,11 +76264,7 @@ 2447966208,2448031743,GB 2448031744,2448097279,CH 2448097280,2448162815,SE -2448162816,2448174591,HU -2448174592,2448174847,RO -2448174848,2448180991,HU -2448180992,2448181247,BG -2448181248,2448183295,HU +2448162816,2448183295,HU 2448183296,2448183551,BG 2448183552,2448228351,HU 2448228352,2448293887,PL @@ -75656,46 +76377,49 @@ 2450719744,2450719999,US 2450720000,2450720255,UA 2450720256,2450720511,DE -2450720512,2450720767,NL +2450720512,2450720767,SG 2450720768,2450721023,DE 2450721024,2450721279,US -2450721280,2450721535,CZ +2450721280,2450721535,FR 2450721536,2450721791,BE 2450721792,2450722047,TR 2450722048,2450722303,RU 2450722304,2450722559,SG -2450722560,2450722815,CZ +2450722560,2450722815,FR 2450722816,2450723071,NL 2450723072,2450723327,GR 2450723328,2450723583,FR 2450723584,2450723839,JP -2450723840,2450724351,TR +2450723840,2450724095,US +2450724096,2450724351,TR 2450724352,2450724607,BE 2450724608,2450724863,US 2450724864,2450725119,PL -2450725120,2450725375,CZ -2450725376,2450725631,NL +2450725120,2450725375,FR +2450725376,2450725631,SG 2450725632,2450725887,RU 2450725888,2450726143,US -2450726144,2450726655,NL -2450726656,2450726911,CZ +2450726144,2450726655,SG +2450726656,2450726911,FR 2450726912,2450727423,PL 2450727424,2450727935,SI -2450727936,2450728191,NL +2450727936,2450728191,SG 2450728192,2450728447,PT 2450728448,2450728703,LT -2450728704,2450729471,NL +2450728704,2450728959,NL +2450728960,2450729471,SG 2450729472,2450729727,DE 2450729728,2450729983,GB 2450729984,2450730239,NL 2450730240,2450730495,UA -2450730496,2450730751,NL -2450730752,2450731007,CZ -2450731008,2450731519,NL +2450730496,2450730751,SG +2450730752,2450731007,FR +2450731008,2450731263,SG +2450731264,2450731519,NL 2450731520,2450731775,GB 2450731776,2450732031,ID 2450732032,2450732287,AT -2450732288,2450732543,LT +2450732288,2450732543,TR 2450732544,2450732799,UA 2450732800,2450733055,GB 2450733056,2450733311,UA @@ -75705,9 +76429,9 @@ 2450734336,2450734591,CZ 2450734592,2450735103,DE 2450735104,2450735615,CZ -2450735616,2450736127,NL +2450735616,2450736127,SG 2450736128,2450736383,CZ -2450736384,2450736639,NL +2450736384,2450736639,SG 2450736640,2450736895,ES 2450736896,2450737151,SA 2450737152,2450737407,PL @@ -75722,7 +76446,7 @@ 2450739456,2450739711,DE 2450739712,2450739967,US 2450739968,2450740223,GB -2450740224,2450740479,RU +2450740224,2450740479,NL 2450740480,2450740735,ES 2450740736,2450740991,US 2450740992,2450741247,RU @@ -75738,7 +76462,7 @@ 2450743552,2450743807,NL 2450743808,2450744063,RU 2450744064,2450744319,DK -2450744320,2450744575,NL +2450744320,2450744575,GB 2450744576,2450744831,DE 2450744832,2450745087,CH 2450745088,2450745343,NL @@ -75762,7 +76486,7 @@ 2450749952,2450750207,CZ 2450750208,2450750463,NL 2450750464,2450750719,RU -2450750720,2450750975,TR +2450750720,2450750975,US 2450750976,2450751231,PL 2450751232,2450751487,GB 2450751488,2450751999,RU @@ -75771,7 +76495,7 @@ 2450752512,2450752767,NL 2450752768,2450753023,RO 2450753024,2450753279,CH -2450753280,2450753535,GB +2450753280,2450753535,NL 2450753536,2450753791,PL 2450753792,2450754047,RU 2450754048,2450754303,GB @@ -75805,8 +76529,7 @@ 2450761728,2450761983,FR 2450761984,2450762495,NL 2450762496,2450762751,GB -2450762752,2450763007,NL -2450763008,2450763263,SC +2450762752,2450763263,NL 2450763264,2450763519,HK 2450763520,2450763775,DE 2450763776,2450764031,TR @@ -75833,7 +76556,7 @@ 2450769920,2450770175,FI 2450770176,2450770687,SK 2450770688,2450770943,US -2450770944,2450771199,UA +2450770944,2450771199,TR 2450771200,2450771455,US 2450771456,2450771711,AT 2450771712,2450771967,RU @@ -75841,7 +76564,7 @@ 2450772224,2450772479,RU 2450772480,2450772735,NO 2450772736,2450772991,RU -2450772992,2450773247,GB +2450772992,2450773247,NL 2450773248,2450773503,US 2450773504,2450773759,NL 2450773760,2450774271,US @@ -75855,7 +76578,7 @@ 2450776064,2450776575,NL 2450776576,2450776831,PL 2450776832,2450777087,NL -2450777088,2450777343,GB +2450777088,2450777343,US 2450777344,2450778367,NL 2450778368,2450778623,US 2450778624,2450778879,RU @@ -75910,8 +76633,10 @@ 2453356544,2453357567,FR 2453357568,2453358591,PL 2453358592,2453360639,FR -2453360640,2453362175,PL -2453362176,2453405695,FR +2453360640,2453362687,PL +2453362688,2453363711,FR +2453363712,2453364735,PL +2453364736,2453405695,FR 2453405696,2453471231,DE 2453471232,2453536767,US 2453602304,2453667839,US @@ -75945,7 +76670,8 @@ 2453852160,2453852415,GB 2453852416,2453852671,US 2453852672,2453852927,DE -2453852928,2453856255,RO +2453852928,2453855231,RO +2453855232,2453856255,US 2453856256,2453858303,DE 2453858304,2453860351,SE 2453860352,2453864447,ES @@ -76035,7 +76761,16 @@ 2454086144,2454086399,BR 2454086400,2454086655,CH 2454086656,2454086911,US -2454086912,2454126591,RO +2454086912,2454087167,DE +2454087168,2454087423,AE +2454087424,2454087679,NO +2454087680,2454087935,GB +2454087936,2454088191,FR +2454088192,2454088447,NL +2454088448,2454088703,DE +2454088704,2454088959,NL +2454088960,2454089215,IT +2454089216,2454126591,RO 2454126592,2454128639,US 2454128640,2454130687,CA 2454130688,2454149631,US @@ -76296,14 +77031,15 @@ 2457378816,2457380607,UA 2457380608,2457380863,RU 2457380864,2457381631,UA -2457381632,2457382399,RU +2457381632,2457381887,CZ +2457381888,2457382399,RU 2457382400,2457382911,UA 2457382912,2457383935,RU 2457383936,2457384959,UA 2457384960,2457385215,RU 2457385216,2457385471,CZ 2457385472,2457385983,RU -2457385984,2457387007,CZ +2457385984,2457387007,UA 2457387008,2457388031,BY 2457388032,2457388543,RU 2457388544,2457389055,UA @@ -76323,9 +77059,7 @@ 2457395968,2457396223,UA 2457396224,2457397247,RU 2457397248,2457397759,UZ -2457397760,2457398271,RU -2457398272,2457399295,CZ -2457399296,2457399551,RU +2457397760,2457399551,RU 2457399552,2457399807,UA 2457399808,2457400063,RU 2457400064,2457400575,UA @@ -76405,9 +77139,8 @@ 2461614080,2461622271,CH 2461622272,2461630463,DE 2461630464,2461646847,NL -2461646848,2461649919,RU -2461649920,2461650175,US -2461650176,2461650687,EE +2461646848,2461648895,RU +2461648896,2461650687,NL 2461650688,2461652479,RU 2461652480,2461652735,AU 2461652736,2461652991,RU @@ -76417,7 +77150,9 @@ 2461654528,2461657855,RU 2461657856,2461658111,NL 2461658112,2461658623,AU -2461658624,2461661695,RU +2461658624,2461661183,RU +2461661184,2461661439,GB +2461661440,2461661695,RU 2461661696,2461661951,AU 2461661952,2461662207,GB 2461662208,2461662463,UA @@ -76526,9 +77261,9 @@ 2466226176,2466228223,IT 2466228224,2466230271,FR 2466230272,2466232319,EE -2466232320,2466232575,DE +2466232320,2466232575,TR 2466232576,2466233087,RU -2466233088,2466233343,PT +2466233088,2466233343,BR 2466233344,2466233599,NL 2466233600,2466233855,US 2466233856,2466234111,UA @@ -76608,7 +77343,7 @@ 2471227392,2471231487,US 2471231488,2471297023,AU 2471297024,2471362559,GB -2471362560,2471362815,AZ +2471362560,2471362815,AE 2471362816,2471363071,MX 2471363072,2471363327,IL 2471363328,2471363583,UA @@ -76618,7 +77353,8 @@ 2471366144,2471366399,NL 2471366400,2471366655,US 2471366656,2471367679,DE -2471367680,2471369727,ES +2471367680,2471368703,US +2471368704,2471369727,ES 2471369728,2471370751,DK 2471370752,2471371775,AT 2471371776,2471373823,FR @@ -76641,9 +77377,7 @@ 2471390208,2471391231,DE 2471391232,2471392255,LT 2471392256,2471393279,UA -2471393280,2471394303,DE -2471394304,2471395327,US -2471395328,2471396351,DE +2471393280,2471396351,DE 2471396352,2471396607,AE 2471396608,2471396863,KE 2471396864,2471397119,AE @@ -76659,10 +77393,7 @@ 2471405568,2471406591,SK 2471406592,2471407615,FR 2471407616,2471408639,DE -2471408640,2471408895,RU -2471408896,2471409151,ES -2471409152,2471409407,NL -2471409408,2471409663,CH +2471408640,2471409663,NL 2471409664,2471410687,IT 2471410688,2471411711,RU 2471411712,2471412735,CH @@ -76736,10 +77467,10 @@ 2475153920,2475163647,FR 2475163648,2475180031,US 2475180032,2475180287,NL -2475180288,2475184127,GB -2475184128,2475185151,MD -2475185152,2475188223,GB -2475188224,2475556863,US +2475180288,2475188223,GB +2475188224,2475228159,US +2475228160,2475228671,ES +2475228672,2475556863,US 2475556864,2475622399,DE 2475622400,2475687935,GB 2475687936,2475753471,US @@ -76760,7 +77491,8 @@ 2476770304,2476770559,CA 2476770560,2476802047,US 2476802048,2476802559,IL -2476802560,2476803071,CZ +2476802560,2476802815,GB +2476802816,2476803071,CZ 2476803072,2476804095,US 2476804096,2476806143,IL 2476806144,2476807167,NO @@ -76788,10 +77520,15 @@ 2476854784,2476855295,CH 2476855296,2476855807,AU 2476855808,2476856319,CH -2476856320,2476856831,AU -2476856832,2476862463,CH +2476856320,2476857343,AU +2476857344,2476862463,CH 2476862464,2476862975,GB -2476862976,2476867583,CH +2476862976,2476864511,CH +2476864512,2476865023,IT +2476865024,2476865535,CH +2476865536,2476866047,PL +2476866048,2476866559,DE +2476866560,2476867583,CH 2476867584,2476998655,IT 2476998656,2477195263,US 2477195264,2477260799,CH @@ -76822,12 +77559,14 @@ 2478428160,2478431743,US 2478431744,2478432255,CA 2478432256,2478432767,US -2478432768,2478433023,LT +2478432768,2478433023,JP 2478433024,2478433791,US 2478433792,2478434047,CA 2478434048,2478434303,US 2478434304,2478434815,CA -2478434816,2478437631,US +2478434816,2478435583,US +2478435584,2478435839,IL +2478435840,2478437631,US 2478437632,2478437887,CA 2478437888,2478438399,EU 2478438400,2478438655,US @@ -76850,7 +77589,9 @@ 2478673920,2478675967,IL 2478675968,2478676479,US 2478676480,2478678271,GB -2478678272,2478679039,US +2478678272,2478678527,US +2478678528,2478678783,DE +2478678784,2478679039,TR 2478679040,2478680063,GB 2478680064,2478682111,DE 2478682112,2478686207,PS @@ -76914,7 +77655,9 @@ 2486906368,2486906623,CA 2486906624,2486909183,US 2486909184,2486909439,JP -2486909440,2486917887,US +2486909440,2486913023,US +2486913024,2486913279,BR +2486913280,2486917887,US 2486917888,2486918143,CA 2486918144,2486918399,US 2486918400,2486918655,CZ @@ -76942,7 +77685,6 @@ 2486951424,2486952959,US 2486952960,2486953471,CA 2486953472,2486953983,US -2486954752,2486955007,?? 2486955008,2486956543,US 2486956544,2486957055,CA 2486957056,2486960127,US @@ -77009,8 +77751,14 @@ 2493513728,2493579263,SE 2493579264,2493644799,JP 2493644800,2493751295,US -2493751296,2493755391,EU -2493755392,2493756415,US +2493751296,2493751807,EU +2493751808,2493752319,US +2493752320,2493752831,EU +2493752832,2493753087,US +2493753088,2493753599,EU +2493753600,2493753855,US +2493753856,2493755135,EU +2493755136,2493756415,US 2493757440,2494103551,US 2494103552,2494169087,FR 2494169088,2494201855,US @@ -77066,7 +77814,13 @@ 2500047872,2500048895,IT 2500048896,2500050943,MD 2500050944,2500067327,KZ -2500067328,2501001215,US +2500067328,2500176895,US +2500176896,2500177919,RO +2500177920,2500991487,US +2500991488,2500991743,NL +2500991744,2500994815,US +2500994816,2500995071,NL +2500995072,2501001215,US 2501001216,2501009407,ES 2501009408,2501054463,US 2501054464,2501058559,NZ @@ -77075,8 +77829,12 @@ 2501076992,2501083135,US 2501083136,2501090303,GB 2501090304,2501091327,US -2501091328,2501095423,CL -2501095424,2501096447,ES +2501091328,2501091839,CL +2501091840,2501092351,CO +2501092352,2501093375,BR +2501093376,2501094399,MX +2501094400,2501095423,BR +2501095424,2501096447,GB 2501096448,2501103103,US 2501103104,2501103615,BR 2501103616,2501140479,US @@ -77086,9 +77844,7 @@ 2501271552,2501279743,GB 2501279744,2501574655,US 2501574656,2501640191,KZ -2501640192,2501722111,US -2501722112,2501738495,AP -2501738496,2502492159,US +2501640192,2502492159,US 2502492160,2502557695,CN 2502557696,2503016447,US 2503016448,2503081983,IL @@ -77097,16 +77853,14 @@ 2503376896,2503409663,JP 2503409664,2503475199,US 2503475200,2503540735,CA -2503540736,2503557119,US -2503557120,2503573503,ES -2503573504,2503671807,US +2503540736,2503671807,US 2503671808,2503737343,NL 2503737344,2503868415,US 2503868416,2503876607,RU -2503876608,2503877631,MD -2503877632,2503878143,DE -2503878144,2503878399,US -2503878400,2503878655,DE +2503876608,2503877631,US +2503877632,2503877887,DE +2503877888,2503878143,BR +2503878144,2503878655,US 2503878656,2503878911,RU 2503878912,2503879679,AE 2503879680,2503879935,JP @@ -77136,7 +77890,7 @@ 2506514432,2506518527,MO 2506518528,2506948607,US 2506948608,2507014143,SA -2507014144,2507147775,US +2507014144,2507147519,US 2507147776,2507148031,CA 2507148032,2507150079,US 2507150080,2507150335,KY @@ -77146,6 +77900,7 @@ 2507151104,2507151871,US 2507151872,2507152127,CA 2507152128,2507152383,US +2507152384,2507152639,CA 2507173888,2507174143,US 2507175936,2507177983,CA 2507183360,2507183615,US @@ -77176,7 +77931,9 @@ 2508107776,2508109823,FI 2508109824,2508111871,DE 2508111872,2508128255,RU -2508128256,2508259327,US +2508128256,2508182783,US +2508182784,2508183807,AP +2508183808,2508259327,US 2508259328,2508263423,KR 2508263424,2508275711,SG 2508275712,2508292095,CN @@ -77364,7 +78121,11 @@ 2523748352,2523748863,IN 2523748864,2523750399,SG 2523750400,2523758591,HK -2523758592,2523762687,SG +2523758592,2523759615,KR +2523759616,2523760639,SG +2523760640,2523761151,IN +2523761152,2523761663,TH +2523761664,2523762687,JP 2523762688,2523766783,HK 2523766784,2523774975,TH 2523774976,2523779071,JP @@ -77395,8 +78156,7 @@ 2525051904,2525053951,IN 2525053952,2525054975,MY 2525054976,2525055999,TW -2525056000,2525057023,HK -2525057024,2525058047,AP +2525056000,2525058047,HK 2525058048,2525059071,AU 2525059072,2525060095,IN 2525060096,2525061119,US @@ -77405,8 +78165,7 @@ 2525071360,2525072383,CN 2525072384,2525073407,MN 2525073408,2525075455,IN -2525075456,2525075711,AP -2525075712,2525075967,HK +2525075456,2525075967,HK 2525075968,2525076479,AP 2525076480,2525077503,IN 2525077504,2525078527,ID @@ -77608,9 +78367,7 @@ 2533158912,2533228543,US 2533228544,2533294079,PL 2533294080,2533359615,CN -2533359616,2533369599,UA -2533369600,2533369855,RU -2533369856,2533371903,UA +2533359616,2533371903,UA 2533371904,2533373951,RU 2533373952,2533375999,UA 2533376000,2533392383,HU @@ -77695,7 +78452,8 @@ 2547187712,2547318783,GB 2547318784,2547515391,US 2547516416,2547516927,JP -2547523584,2547525631,EE +2547523584,2547525631,JP +2547531776,2547539967,FR 2548039680,2548563967,GB 2548563968,2548826111,IR 2548826112,2548829695,AT @@ -77753,8 +78511,7 @@ 2549628928,2549629951,RO 2549629952,2549630463,JP 2549630464,2549630975,RO -2549630976,2549635071,US -2549635072,2549636095,RO +2549630976,2549636095,US 2549636096,2549636863,ES 2549636864,2549637119,RO 2549637120,2549641215,KW @@ -77843,7 +78600,7 @@ 2555973632,2555974655,SK 2555974656,2555975679,UA 2555975680,2555976703,GB -2555976704,2555977727,TR +2555976704,2555977727,US 2555977728,2555978751,ES 2555978752,2555979775,TR 2555979776,2555980799,PS @@ -77887,7 +78644,9 @@ 2556015616,2556016639,ES 2556016640,2556017663,NO 2556017664,2556018687,FR -2556018688,2556019711,US +2556018688,2556019199,UA +2556019200,2556019455,US +2556019456,2556019711,UA 2556019712,2556019967,RU 2556019968,2556020223,SA 2556020224,2556020735,RU @@ -78073,7 +78832,8 @@ 2572986112,2572986367,IE 2572986368,2572986623,PL 2572986624,2572986879,PT -2572986880,2572987391,DE +2572986880,2572987135,DE +2572987136,2572987391,GR 2572987392,2572987647,NO 2572987648,2572987903,LU 2572987904,2572988159,DE @@ -78135,26 +78895,49 @@ 2583732224,2583736319,ZA 2583736320,2583740415,GA 2583740416,2583756799,NA -2583756800,2583903999,US +2583756800,2583900159,US +2583900160,2583901183,RU +2583901184,2583903999,US 2583904000,2583904255,NL -2583904256,2584018943,US +2583904256,2583931903,US +2583931904,2583932927,NL +2583932928,2584018943,US 2584018944,2584084479,CA 2584084480,2584121855,US 2584121856,2584122111,NL -2584122112,2584133631,US -2584133632,2584150015,ES +2584122112,2584150015,US 2584150016,2584182783,HK -2584182784,2584215551,US +2584182784,2584211455,US +2584211456,2584213503,BR +2584213504,2584215551,US 2584215552,2584227839,GB 2584227840,2584231935,JP 2584231936,2584248319,HK 2584248320,2584281087,CN -2584281088,2584346623,US +2584281088,2584302591,US +2584302592,2584302847,NL +2584302848,2584303359,US +2584303360,2584303615,NL +2584303616,2584315391,US +2584315392,2584315903,NL +2584315904,2584346623,US 2584346624,2584412159,KR 2584412160,2584477695,CA -2584477696,2584485887,US +2584477696,2584479743,US +2584479744,2584480767,RU +2584480768,2584485887,US 2584485888,2584488959,HK -2584488960,2584608767,US +2584488960,2584492031,US +2584492032,2584493055,HK +2584493056,2584497663,US +2584497664,2584497919,NL +2584497920,2584544255,US +2584544256,2584545279,HK +2584545280,2584546303,US +2584546304,2584547327,NL +2584547328,2584600575,US +2584600576,2584605695,BR +2584605696,2584608767,US 2584608768,2584615935,CH 2584615936,2584620031,DE 2584620032,2584621823,CH @@ -78190,7 +78973,7 @@ 2584742912,2584743167,DE 2584743168,2584743423,US 2584743424,2584744191,ZA -2584744192,2584744447,NG +2584744192,2584744447,SG 2584744448,2584744703,ZA 2584744704,2584744959,SG 2584744960,2584745215,DE @@ -78206,7 +78989,7 @@ 2584747776,2584748287,DE 2584748288,2584748543,US 2584748544,2584748799,DE -2584748800,2584749055,US +2584748800,2584749055,TR 2584749056,2584749311,DE 2584749312,2584749567,US 2584749568,2584749823,DE @@ -78222,7 +79005,7 @@ 2584752128,2584752383,DE 2584752384,2584752639,US 2584752640,2584752895,DE -2584752896,2584753151,JP +2584752896,2584753151,US 2584753152,2584753407,DE 2584753408,2584753663,NG 2584753664,2584753919,DE @@ -78273,12 +79056,14 @@ 2584765184,2584765439,ZA 2584765440,2584765695,MA 2584765696,2584766463,US -2584766464,2584766719,EG +2584766464,2584766719,NL 2584766720,2584767487,US 2584767488,2584767743,ZA 2584767744,2584767999,TR 2584768000,2584768511,ZA -2584768512,2584771327,US +2584768512,2584769535,US +2584769536,2584770559,NL +2584770560,2584771327,US 2584771328,2584771583,TR 2584771584,2584773375,US 2584773376,2584773631,ZA @@ -78310,9 +79095,7 @@ 2584785920,2584786431,IN 2584786432,2584786687,US 2584786688,2584786943,NL -2584786944,2584788223,US -2584788224,2584788479,TR -2584788480,2584790015,US +2584786944,2584790015,US 2584790016,2584791039,CN 2584791040,2584791295,US 2584791296,2584791551,ZA @@ -78346,11 +79129,11 @@ 2584804096,2584804351,ZA 2584804352,2584805119,US 2584805120,2584805375,ZA -2584805376,2584842495,US -2584842496,2584842751,GB -2584842752,2584845823,US +2584805376,2584845823,US 2584845824,2584846335,GB -2584846336,2584854015,US +2584846336,2584852223,US +2584852224,2584852479,BR +2584852480,2584854015,US 2584854016,2584854271,GB 2584854272,2584908799,US 2584908800,2584909823,MO @@ -78370,20 +79153,30 @@ 2585229312,2585231359,HK 2585231360,2585239551,AP 2585239552,2585243647,US -2585243648,2585246463,AP -2585246464,2585246719,US -2585246720,2585247743,AP -2585247744,2585251839,US +2585243648,2585246719,AP +2585246720,2585251839,US 2585251840,2585260031,AP 2585260032,2585444351,US 2585444352,2585448447,AP 2585448448,2585549823,US 2585549824,2585550335,GB -2585550336,2585596927,US +2585550336,2585560063,US +2585560064,2585561087,NL +2585561088,2585562111,US +2585562112,2585563135,NL +2585563136,2585564159,US +2585564160,2585566207,NL +2585566208,2585579519,US +2585579520,2585583615,BR +2585583616,2585596927,US 2585596928,2585597183,GB 2585597184,2585597695,US 2585597696,2585597951,GB -2585597952,2585722879,US +2585597952,2585640959,US +2585640960,2585647103,BR +2585647104,2585673727,US +2585673728,2585677823,BR +2585677824,2585722879,US 2585722880,2585735935,HK 2585735936,2585736191,US 2585736192,2585738495,HK @@ -78399,29 +79192,45 @@ 2586078464,2586078719,GB 2586078720,2586083327,US 2586083328,2586132479,HK -2586132480,2586134783,US -2586134784,2586135039,GB -2586135040,2586137343,US +2586132480,2586137343,US 2586137344,2586137599,GB -2586137600,2586202111,US -2586202112,2586205951,AP -2586205952,2586210303,US +2586137600,2586155007,US +2586155008,2586156031,HK +2586156032,2586202367,US +2586202368,2586203135,AP +2586203136,2586203391,US +2586203392,2586204671,AP +2586204672,2586204927,US +2586204928,2586205695,AP +2586205696,2586210303,US 2586210304,2586214143,AP 2586214144,2586230783,US 2586230784,2586234879,HK 2586234880,2586238975,AP 2586238976,2586250239,US 2586250240,2586251263,NL -2586251264,2586279935,US +2586251264,2586263551,US +2586263552,2586264831,AP +2586264832,2586265087,US +2586265088,2586265343,AP +2586265344,2586266367,US +2586266368,2586267391,AP +2586267392,2586279935,US 2586279936,2586312703,HK 2586312704,2586894335,US -2586894336,2586899711,HK +2586894336,2586896383,HK +2586896384,2586896639,US +2586896640,2586897151,HK +2586897152,2586897407,US +2586897408,2586899711,HK 2586899712,2586899967,US 2586899968,2586902527,HK -2586902528,2587181055,US +2586902528,2587115519,US +2587115520,2587119615,NL +2587119616,2587181055,US 2587181056,2587183103,NL -2587183104,2587184639,US -2587184640,2587185151,NL +2587183104,2587184383,US +2587184384,2587185151,NL 2587185152,2587286783,US 2587286784,2587287039,ES 2587287040,2587293695,US @@ -78590,15 +79399,14 @@ 2588540928,2588671999,TZ 2588672000,2588934143,KE 2588934144,2588966911,PK -2588966912,2588999679,AP +2588966912,2588999679,HK 2588999680,2589007871,US 2589007872,2589011967,HK 2589011968,2589015295,US 2589015296,2589015551,AU 2589015552,2589015807,GB 2589015808,2589016063,DE -2589016064,2589032447,US -2589032448,2589048831,HK +2589016064,2589048831,HK 2589048832,2589073407,US 2589073408,2589081599,ZA 2589081600,2589097983,AP @@ -78619,15 +79427,13 @@ 2589140992,2589142015,US 2589142016,2589143039,NL 2589143040,2589147135,US -2589147136,2589156351,HK -2589156352,2589157375,AP -2589157376,2589179903,HK +2589147136,2589179903,HK 2589179904,2589196543,US 2589196544,2589196799,NL 2589196800,2589199871,US 2589199872,2589203455,JP 2589203456,2589212671,US -2589212672,2589229055,AP +2589212672,2589229055,HK 2589229056,2589233151,NL 2589233152,2589235199,US 2589235200,2589235455,AP @@ -78647,28 +79453,30 @@ 2589270016,2589278207,SG 2589278208,2589286399,PK 2589286400,2589286655,TH -2589286656,2589286911,AP -2589286912,2589287423,US +2589286656,2589287423,US 2589287424,2589288447,DE 2589288448,2589293567,US 2589293568,2589294079,GB 2589294080,2589294591,FR -2589294592,2589327359,AP +2589294592,2589327359,HK 2589327360,2589327615,DE 2589327616,2589329407,HK -2589329408,2589330431,AP -2589330432,2589330687,US -2589330688,2589335551,AP -2589335552,2589360127,HK -2589360128,2589367295,AP -2589367296,2589367807,HK +2589329408,2589331455,AP +2589331456,2589331711,US +2589331712,2589331967,AP +2589331968,2589332223,US +2589332224,2589333759,AP +2589333760,2589334271,US +2589334272,2589334783,AP +2589334784,2589335295,US +2589335296,2589335551,AP +2589335552,2589367807,HK 2589367808,2589368063,KR -2589368064,2589368319,HK -2589368320,2589379839,AP +2589368064,2589379839,HK 2589379840,2589380095,US -2589380096,2589390847,AP +2589380096,2589390847,HK 2589390848,2589391615,US -2589391616,2589392895,AP +2589391616,2589392895,HK 2589392896,2589458943,US 2589458944,2589459199,PH 2589459200,2589459455,HK @@ -78676,7 +79484,7 @@ 2589460480,2589460735,AP 2589460736,2589460991,PH 2589460992,2589474815,US -2589474816,2589491199,AP +2589474816,2589491199,HK 2589491200,2589507583,ZA 2589507584,2589524735,HK 2589524736,2589524991,AP @@ -78685,24 +79493,30 @@ 2589592576,2589592831,PR 2589592832,2589593087,FR 2589593088,2589597695,US -2589597696,2589614079,HK -2589614080,2589622271,AP +2589597696,2589622271,HK 2589622272,2589655039,PK 2589655040,2589655295,MX 2589655296,2589664511,HK 2589664512,2589664767,ZA 2589664768,2589665279,HK -2589665280,2589667327,ZA +2589665280,2589667327,SG 2589667328,2589671423,US -2589671424,2589671935,AP -2589671936,2589690879,ZA +2589671424,2589671679,SG +2589671680,2589671935,AP +2589671936,2589672447,SG +2589672448,2589680639,AP +2589680640,2589687807,SG +2589687808,2589689855,ZA +2589689856,2589690879,GB 2589690880,2589691135,IN 2589691136,2589691391,IQ 2589691392,2589691647,JP 2589691648,2589691903,TH -2589691904,2589698047,AP +2589691904,2589692415,US +2589692416,2589692671,AP +2589692672,2589698047,US 2589698048,2589698559,JP -2589698560,2589699071,ZA +2589698560,2589699071,EU 2589699072,2589704191,US 2589704192,2589704703,AP 2589704704,2589704959,HK @@ -78742,7 +79556,9 @@ 2589818880,2589851647,AP 2589851648,2589851903,ZA 2589851904,2589852671,HK -2589852672,2589853695,DE +2589852672,2589852927,DE +2589852928,2589853183,HK +2589853184,2589853695,DE 2589853696,2589854207,JP 2589854208,2589857279,US 2589857280,2589857791,ID @@ -78759,7 +79575,7 @@ 2589927424,2589929471,ZA 2589929472,2589941759,US 2589941760,2589949951,ZA -2589949952,2589982719,AP +2589949952,2589982719,HK 2589982720,2590507007,SD 2590507008,2591031295,TN 2591031296,2591096831,GA @@ -78768,7 +79584,8 @@ 2591195136,2591227903,GH 2591227904,2591260671,ZA 2591260672,2591264767,SN -2591264768,2591268863,ZA +2591264768,2591267839,MU +2591267840,2591268863,ZA 2591268864,2591277055,KE 2591277056,2591293439,SO 2591293440,2591326207,GA @@ -78854,8 +79671,7 @@ 2596438016,2596470783,PK 2596470784,2596471807,US 2596471808,2596472319,ID -2596472320,2596472575,TW -2596472576,2596472831,AP +2596472320,2596472831,TW 2596472832,2596487167,US 2596487168,2596495359,HK 2596495360,2596503551,US @@ -78938,7 +79754,7 @@ 2597175296,2597191679,US 2597191680,2597192703,BR 2597192704,2597194751,HK -2597194752,2597195007,US +2597194752,2597195007,AU 2597195008,2597195263,DO 2597195264,2597195775,AP 2597195776,2597199871,US @@ -78953,7 +79769,8 @@ 2597330944,2597339135,ZA 2597339136,2597355519,AP 2597355520,2597355775,SG -2597355776,2597356543,AP +2597355776,2597356031,HK +2597356032,2597356543,AP 2597356544,2597358591,HK 2597358592,2597358847,US 2597358848,2597365503,HK @@ -78968,12 +79785,15 @@ 2597391616,2597391871,AP 2597391872,2597392127,HK 2597392128,2597392895,AP -2597392896,2597393151,ZA -2597393152,2597393407,US +2597392896,2597393407,ZA 2597393408,2597404671,HK 2597404672,2597405951,AP 2597405952,2597406207,US -2597406208,2597412863,AP +2597406208,2597406463,AP +2597406464,2597406975,US +2597406976,2597407743,AP +2597407744,2597407999,US +2597408000,2597412863,AP 2597412864,2597421055,HK 2597421056,2597421311,US 2597421312,2597435903,HK @@ -79041,7 +79861,11 @@ 2597526784,2597527039,PH 2597527040,2597527295,VN 2597527296,2597527551,TW -2597527552,2597551615,HK +2597527552,2597535743,HK +2597535744,2597536255,AP +2597536256,2597536767,HK +2597536768,2597544959,AP +2597544960,2597551615,HK 2597551616,2597552127,AP 2597552128,2597584895,ZA 2597584896,2597586175,US @@ -79051,7 +79875,9 @@ 2597601280,2597617663,AP 2597617664,2597620479,HK 2597620480,2597620735,US -2597620736,2597650431,HK +2597620736,2597621247,HK +2597621248,2597621759,PE +2597621760,2597650431,HK 2597650432,2597650687,AP 2597650688,2597654527,HK 2597654528,2597656063,AP @@ -79059,10 +79885,7 @@ 2597656320,2597656575,AP 2597656576,2597666815,HK 2597666816,2597670911,US -2597670912,2597691391,HK -2597691392,2597691647,US -2597691648,2597699583,AP -2597699584,2597715967,HK +2597670912,2597715967,HK 2597715968,2597716479,US 2597716480,2597716991,KH 2597716992,2597724159,US @@ -79075,9 +79898,7 @@ 2597785088,2597785343,US 2597785344,2597785599,HK 2597785600,2597789695,AP -2597789696,2597814271,HK -2597814272,2597830655,AP -2597830656,2597842943,HK +2597789696,2597842943,HK 2597842944,2597847039,AP 2597847040,2597847295,HK 2597847296,2597847551,AP @@ -79106,24 +79927,23 @@ 2598166528,2598174719,AP 2598174720,2598174975,DE 2598174976,2598175231,FR -2598175232,2598215679,HK -2598215680,2598223871,AP -2598223872,2598240511,HK +2598175232,2598240511,HK 2598240512,2598240767,ZA 2598240768,2598241279,HK 2598241280,2598241791,LA 2598241792,2598244351,ZA 2598244352,2598244607,AP 2598244608,2598244863,US -2598244864,2598248447,AP +2598244864,2598248191,AP +2598248192,2598248447,US 2598248448,2598249471,ZA 2598249472,2598249727,HK 2598249728,2598249983,ZA 2598249984,2598250495,HK 2598250496,2598250751,ZA 2598250752,2598251519,HK -2598251520,2598251775,ZA -2598251776,2598252543,HK +2598251520,2598252031,ZA +2598252032,2598252543,HK 2598252544,2598256639,ZA 2598256640,2598273023,HK 2598273024,2598297599,ZA @@ -79228,20 +80048,22 @@ 2612936960,2612953087,NL 2612953088,2612953855,ZA 2612953856,2612954623,MX -2612954624,2612956415,NL -2612956416,2612957183,US -2612957184,2612969471,NL +2612954624,2612956671,NL +2612956672,2612956927,US +2612956928,2612969471,NL 2612969472,2612969727,ES 2612969728,2612969983,JP 2612969984,2612970239,ZA 2612970240,2612970495,MX 2612970496,2612971007,US 2612971008,2612971775,NL -2612971776,2612972031,US -2612972032,2612985855,NL +2612971776,2612972287,US +2612972288,2612985855,NL 2612985856,2613051391,US 2613051392,2613116927,GB -2613116928,2613182463,US +2613116928,2613120511,US +2613120512,2613120767,GB +2613120768,2613182463,US 2613182464,2613247999,CA 2613248000,2613313535,US 2613313536,2613379071,SD @@ -79272,8 +80094,10 @@ 2615902208,2615902463,AP 2615902464,2615926783,ZA 2615926784,2615928831,HK -2615928832,2615932159,ZA -2615932160,2615933951,AP +2615928832,2615932415,ZA +2615932416,2615932927,AP +2615932928,2615933183,ZA +2615933184,2615933951,AP 2615933952,2616262655,ZA 2616262656,2616524799,US 2616524800,2616590335,GB @@ -79294,7 +80118,6 @@ 2617129984,2617130239,EU 2617130240,2617131007,US 2617131008,2617139199,CA -2617145856,2617146111,?? 2617147392,2617149439,US 2617149440,2617151487,CA 2617151488,2617163775,US @@ -79411,8 +80234,8 @@ 2621638400,2621638655,DE 2621638656,2621639679,CH 2621639680,2621640191,DE -2621640192,2621640703,NL -2621640704,2621641727,DE +2621640192,2621640447,NL +2621640448,2621641727,DE 2621641728,2621642751,IT 2621642752,2621644799,DE 2621644800,2621645823,GB @@ -79567,8 +80390,7 @@ 2632384512,2632392703,US 2632392704,2632400895,ZA 2632400896,2632409087,HK -2632409088,2632413183,US -2632413184,2632417279,ZA +2632409088,2632417279,US 2632417280,2632450047,PK 2632450048,2632454143,US 2632454144,2632458239,SG @@ -79659,9 +80481,9 @@ 2632778752,2632779263,JP 2632779264,2632783871,US 2632783872,2632785919,HK -2632785920,2632790015,US -2632790016,2632810495,ZA -2632810496,2632843263,AP +2632785920,2632794111,US +2632794112,2632810495,ZA +2632810496,2632843263,HK 2632843264,2632843775,US 2632843776,2632844287,HK 2632844288,2632845823,DE @@ -79685,12 +80507,8 @@ 2632854528,2632857855,HK 2632857856,2632858111,US 2632858112,2632859647,HK -2632859648,2632865791,AP -2632865792,2632866815,HK -2632866816,2632876031,AP -2632876032,2632877567,US -2632877568,2632877823,ZA -2632877824,2632880639,US +2632859648,2632876031,AP +2632876032,2632880639,US 2632880640,2632884223,ZA 2632884224,2632889343,US 2632889344,2632889599,ZA @@ -79711,10 +80529,12 @@ 2632996864,2632997887,JP 2632997888,2633000959,HK 2633000960,2633003007,AP -2633003008,2633007103,HK -2633007104,2633023487,AP -2633023488,2633039359,HK -2633039360,2633039871,AP +2633003008,2633023487,HK +2633023488,2633026559,AP +2633026560,2633031679,HK +2633031680,2633036799,AP +2633036800,2633037311,HK +2633037312,2633039871,AP 2633039872,2633040127,EU 2633040128,2633040639,HK 2633040640,2633040895,ZA @@ -79741,8 +80561,8 @@ 2633182720,2633182975,HK 2633182976,2633187327,US 2633187328,2633195519,ZA -2633195520,2633199615,SA -2633199616,2633220095,ZA +2633195520,2633203711,SA +2633203712,2633220095,ZA 2633220096,2633252863,US 2633252864,2633269247,HK 2633269248,2633302015,US @@ -79768,8 +80588,8 @@ 2633441280,2633465855,ZA 2633465856,2633498623,PK 2633498624,2633517055,US -2633517056,2633519103,AP -2633519104,2633521151,US +2633517056,2633518847,AP +2633518848,2633521151,US 2633521152,2633522175,JP 2633522176,2633523199,US 2633523200,2633525247,JP @@ -79779,7 +80599,7 @@ 2633566208,2633568255,SG 2633568256,2633568511,NL 2633568512,2633568767,HK -2633568768,2633569023,NL +2633568768,2633569023,EU 2633569024,2633570303,US 2633570304,2633570815,HK 2633570816,2633571327,US @@ -79793,10 +80613,14 @@ 2633637888,2633646079,US 2633646080,2633695231,HK 2633695232,2633696511,AP -2633696512,2633699327,US -2633699328,2633701375,AP -2633701376,2633708031,US -2633708032,2633711615,AP +2633696512,2633696767,US +2633696768,2633697791,AP +2633697792,2633699327,US +2633699328,2633701119,AP +2633701120,2633701375,US +2633701376,2633702911,AP +2633702912,2633707519,US +2633707520,2633711615,AP 2633711616,2633715711,US 2633715712,2633719807,ZA 2633719808,2633760767,US @@ -79819,15 +80643,15 @@ 2633827840,2633828351,TW 2633828352,2633859071,HK 2633859072,2633891839,ZA -2633891840,2633895935,HK -2633895936,2633900031,US -2633900032,2633957375,HK +2633891840,2633957375,HK 2633957376,2633957631,DE 2633957632,2633957887,EU 2633957888,2633959423,HK 2633959424,2633961471,AP 2633961472,2633965567,US -2633965568,2634011903,HK +2633965568,2634007551,HK +2634007552,2634007807,AP +2634007808,2634011903,HK 2634011904,2634012159,KR 2634012160,2634022911,HK 2634022912,2634088447,CN @@ -79847,7 +80671,7 @@ 2635592448,2635592703,HK 2635592704,2635592959,US 2635592960,2635593215,AU -2635593216,2635593471,SG +2635593216,2635593471,FR 2635593472,2635593727,JP 2635593728,2635593983,SG 2635593984,2635595775,FR @@ -80154,7 +80978,9 @@ 2645007360,2645007615,AU 2645007616,2645014527,EU 2645014528,2645016575,US -2645016576,2645032959,EU +2645016576,2645025023,EU +2645025024,2645032703,US +2645032704,2645032959,EU 2645032960,2645098495,CH 2645098496,2645164031,FR 2645164032,2645229567,US @@ -80169,9 +80995,15 @@ 2645753856,2645819391,TH 2645819392,2645852159,DE 2645852160,2645867519,SE -2645867520,2645870591,DE +2645867520,2645868543,DE +2645868544,2645868799,RO +2645868800,2645869055,HU +2645869056,2645869311,IS +2645869312,2645869567,SK +2645869568,2645870591,DE 2645870592,2645874175,SE -2645874176,2645880319,DE +2645874176,2645879807,DE +2645879808,2645880319,OM 2645880320,2645884927,SE 2645884928,2645950463,HU 2645950464,2646196223,US @@ -80249,15 +81081,18 @@ 2653855744,2653856767,KR 2653856768,2653859839,TH 2653859840,2653860863,US -2653860864,2653861119,TH +2653860864,2653861119,RU 2653861120,2653861375,IL -2653861376,2653861887,AM +2653861376,2653861887,RU 2653861888,2653862399,TJ 2653862400,2653862911,LT -2653862912,2653863935,US +2653862912,2653863167,TH +2653863168,2653863423,BG +2653863424,2653863679,CH +2653863680,2653863935,MY 2653863936,2653864959,AU 2653864960,2653865983,US -2653865984,2653868031,GB +2653865984,2653868031,RU 2653868032,2653872127,US 2653872128,2653880319,RU 2653880320,2653945855,IT @@ -80352,7 +81187,9 @@ 2658140160,2658205695,NO 2658205696,2658598911,US 2658598912,2658664447,GB -2658664448,2658721791,US +2658664448,2658689023,US +2658689024,2658693119,GB +2658693120,2658721791,US 2658721792,2658725887,AU 2658725888,2658729471,US 2658729472,2658729727,LU @@ -80552,13 +81389,13 @@ 2670133248,2670591999,US 2670592000,2670657535,NL 2670657536,2670723071,US -2670723072,2670724095,DE -2670724096,2670726143,OM -2670726144,2670727167,DE +2670723072,2670724095,AT +2670724096,2670727167,DE 2670727168,2670731263,IT 2670731264,2670735359,DE 2670735360,2670736383,IT -2670736384,2670736895,DE +2670736384,2670736639,AP +2670736640,2670736895,DE 2670736896,2670737407,NL 2670737408,2670739455,IT 2670739456,2670854143,US @@ -80570,8 +81407,22 @@ 2671247360,2671378431,US 2671378432,2671443967,NO 2671443968,2671509503,US -2671509504,2671575039,NL -2671575040,2672099327,US +2671509504,2671544319,NL +2671544320,2671544575,US +2671544576,2671544831,NL +2671544832,2671545087,SG +2671545088,2671550463,NL +2671550464,2671550719,PT +2671550720,2671550975,NL +2671550976,2671551231,ES +2671551232,2671551487,NL +2671551488,2671551743,IN +2671551744,2671551999,NL +2671552000,2671552255,IN +2671552256,2671552511,NL +2671552512,2671552767,BR +2671552768,2671558655,NL +2671558656,2672099327,US 2672099328,2672164863,DE 2672164864,2672295935,US 2672295936,2672361471,SE @@ -80627,7 +81478,11 @@ 2674589696,2674655231,SE 2674655232,2674720767,US 2674720768,2674786303,DE -2674786304,2675048447,US +2674786304,2674977023,US +2674977024,2674977279,CA +2674977280,2674977791,US +2674977792,2674978303,BR +2674978304,2675048447,US 2675048448,2675113983,GB 2675113984,2675245055,US 2675245056,2675255295,NZ @@ -80721,7 +81576,7 @@ 2678718464,2678783999,GB 2678784000,2678849535,NO 2678849536,2678915071,US -2678915072,2678980607,FR +2678915072,2678980607,GB 2678980608,2679046143,US 2679046144,2679111679,CA 2679111680,2679177215,US @@ -80809,7 +81664,6 @@ 2684182528,2684184575,IT 2684184576,2684186623,SK 2684186624,2684188671,DE -2684188672,2684189695,RU 2684189696,2684198911,NL 2684198912,2684200959,GB 2684200960,2684203007,RU @@ -80890,9 +81744,7 @@ 2685675520,2685676543,PH 2685676544,2685677567,JP 2685677568,2685678591,CN -2685678592,2685680127,HK -2685680128,2685680383,CN -2685680384,2685681663,HK +2685678592,2685681663,HK 2685681664,2685683711,BR 2685683712,2685684735,AU 2685685760,2685686783,AR @@ -80994,7 +81846,11 @@ 2691366912,2691760127,US 2691760128,2691825663,CG 2691825664,2691891199,HU -2691891200,2691967999,ZA +2691891200,2691956991,ZA +2691956992,2691957503,BR +2691957504,2691960063,ZA +2691960064,2691960575,BR +2691960576,2691967999,ZA 2691968000,2691969023,HK 2691969024,2691973119,ZA 2691973120,2691974143,HK @@ -81004,9 +81860,25 @@ 2691985408,2691986431,HK 2691986432,2691988991,ZA 2691988992,2691989503,HK -2691989504,2692009983,ZA +2691989504,2691990527,BR +2691990528,2691991551,ZA +2691991552,2691992319,BR +2691992320,2691992575,ZA +2691992576,2691993599,BR +2691993600,2691994623,ZA +2691994624,2691996671,BR +2691996672,2691997695,ZA +2691997696,2691998719,BR +2691998720,2692004863,ZA +2692004864,2692005887,BR +2692005888,2692006911,ZA +2692006912,2692007935,BR +2692007936,2692008959,ZA +2692008960,2692009983,BR 2692009984,2692010751,AP -2692010752,2692016383,ZA +2692010752,2692014079,ZA +2692014080,2692016127,BR +2692016128,2692016383,ZA 2692016384,2692016639,JP 2692016640,2692170239,ZA 2692170240,2692170495,US @@ -81017,9 +81889,7 @@ 2692171776,2692172031,US 2692172032,2692173055,SC 2692173056,2692173311,EG -2692173312,2692173567,ZA -2692173568,2692173823,US -2692173824,2692175871,ZA +2692173312,2692175871,ZA 2692175872,2692177919,BF 2692177920,2692179967,ZA 2692180992,2692182015,GH @@ -81073,7 +81943,8 @@ 2697604096,2697605119,AP 2697605120,2697607167,IN 2697607168,2697608191,HK -2697608192,2697609215,CN +2697608192,2697608959,CN +2697608960,2697609215,HK 2697609216,2697625599,US 2697625600,2697626623,BD 2697626624,2697627647,JP @@ -81150,7 +82021,8 @@ 2699960832,2699961343,HK 2699961344,2699961599,US 2699961600,2699961855,PE -2699961856,2699962367,FR +2699961856,2699962111,FR +2699962112,2699962367,AP 2699962368,2699962623,JP 2699962624,2699964415,US 2699964416,2699964927,ZA @@ -81214,16 +82086,18 @@ 2700279808,2700738559,JP 2700804096,2700935167,JP 2700935168,2701066239,US -2701131776,2701139967,HN +2701131776,2701138943,US +2701138944,2701139967,GB 2701139968,2701148159,NI 2701148160,2701149183,AR -2701149184,2701150207,HN +2701149184,2701150207,US 2701150208,2701152255,AR 2701152256,2701156351,BQ 2701156352,2701160447,CW 2701160448,2701162495,TT 2701162496,2701164543,UY -2701164544,2701172735,HT +2701164544,2701170687,HT +2701170688,2701172735,TT 2701172736,2701176831,CL 2701176832,2701178879,AR 2701178880,2701180927,CL @@ -81251,7 +82125,8 @@ 2702573568,2702581759,AR 2702581760,2702583807,VE 2702583808,2702585855,ES -2702585856,2702587903,CW +2702585856,2702586367,PA +2702586368,2702587903,CW 2702587904,2702589951,BR 2702589952,2702606335,GF 2702606336,2702639103,BO @@ -81351,7 +82226,8 @@ 2708996096,2709061631,CN 2709061632,2709127167,US 2709127168,2709192703,KR -2709192704,2709193727,JP +2709192704,2709193215,AP +2709193216,2709193727,JP 2709193728,2709193983,NL 2709193984,2709194751,JP 2709194752,2709195775,ZA @@ -81362,26 +82238,30 @@ 2709198848,2709199359,US 2709199360,2709199615,NL 2709199616,2709199871,US -2709199872,2709200895,GB -2709200896,2709201151,NL +2709199872,2709200127,NL +2709200128,2709200383,GB +2709200384,2709201151,NL 2709201152,2709206527,ZA 2709206528,2709206783,DE -2709206784,2709207039,IN +2709206784,2709207039,NL 2709207040,2709209087,ZA 2709209088,2709210111,FR 2709210112,2709210623,ZA 2709210624,2709210879,NL 2709210880,2709213183,ZA 2709213184,2709214207,US -2709214208,2709218303,ZA +2709214208,2709217791,ZA +2709217792,2709218047,NL +2709218048,2709218303,ZA 2709218304,2709218559,NL 2709218560,2709218815,ZA 2709218816,2709219071,NL 2709219072,2709222399,ZA -2709222400,2709222911,CA +2709222400,2709222655,NL +2709222656,2709222911,CA 2709222912,2709223423,ZA 2709223424,2709223935,US -2709223936,2709224191,IT +2709223936,2709224191,NL 2709224192,2709224447,ES 2709224448,2709224959,ZA 2709224960,2709225471,DE @@ -81392,8 +82272,8 @@ 2709228544,2709228799,NL 2709228800,2709229567,CN 2709229568,2709230591,DE -2709230592,2709231359,NL -2709231360,2709232383,US +2709230592,2709231615,NL +2709231616,2709232383,US 2709232384,2709233663,NL 2709233664,2709250047,US 2709250048,2709254143,ZA @@ -81408,7 +82288,7 @@ 2709593856,2709594623,US 2709594624,2709594879,KR 2709594880,2709596415,US -2709596416,2709596927,KR +2709596416,2709596927,AP 2709596928,2709597183,HK 2709597184,2709597439,US 2709597440,2709597695,KR @@ -81526,11 +82406,19 @@ 2718760960,2718826495,GB 2718826496,2718892031,CN 2718892032,2719154175,US -2719154176,2719186943,FR +2719154176,2719156735,FR +2719156736,2719157247,DE +2719157248,2719186943,FR 2719186944,2719187199,DE -2719187200,2719188991,FR -2719188992,2719189247,DE -2719189248,2719219711,FR +2719187200,2719187967,FR +2719187968,2719188223,DE +2719188224,2719188991,FR +2719188992,2719189503,DE +2719189504,2719190783,FR +2719190784,2719191295,DE +2719191296,2719193087,FR +2719193088,2719194111,DE +2719194112,2719219711,FR 2719219712,2719285247,US 2719285248,2719350783,CH 2719350784,2719416319,US @@ -81542,7 +82430,9 @@ 2719719424,2719720191,PL 2719720192,2720076287,US 2720076288,2720076543,AU -2720076544,2720104447,US +2720076544,2720078079,US +2720078080,2720078335,BR +2720078336,2720104447,US 2720104448,2720108543,GB 2720108544,2720112639,IE 2720112640,2720114687,US @@ -81575,12 +82465,13 @@ 2721984512,2721992703,DE 2721992704,2721993727,SG 2721993728,2721996799,RU -2721996800,2722004991,DE -2722004992,2722005503,SG -2722005504,2722011903,DE -2722011904,2722016255,SG +2721996800,2722005503,DE +2722005504,2722006015,RU +2722006016,2722012159,DE +2722012160,2722016255,SG 2722016256,2722025471,RU -2722025472,2722037759,SG +2722025472,2722033663,DE +2722033664,2722037759,SG 2722037760,2722496511,US 2722496512,2722562047,CA 2722562048,2722693119,US @@ -81735,7 +82626,9 @@ 2732219904,2732220159,IL 2732220160,2732227583,US 2732227584,2732228607,CA -2732228608,2732261375,US +2732228608,2732236031,US +2732236032,2732236543,LT +2732236544,2732261375,US 2732261376,2732265471,CA 2732265472,2732269567,US 2732269568,2732271615,HK @@ -81792,12 +82685,14 @@ 2732446720,2732447743,BM 2732447744,2732455935,US 2732455936,2732457983,CA -2732457984,2732472319,US +2732457984,2732462079,US +2732462592,2732463103,?? +2732463104,2732472319,US 2732472320,2732474367,CA 2732474368,2732478463,US 2732478464,2732479487,CA 2732479488,2732480511,AG -2732480512,2732485631,US +2732480512,2732484607,US 2732485632,2732486655,PR 2732486656,2732488703,US 2732488704,2732490751,CA @@ -81809,7 +82704,9 @@ 2732497920,2732499967,CA 2732499968,2732500479,US 2732500480,2732500991,HK -2732500992,2732519423,US +2732500992,2732502015,US +2732502016,2732503039,KR +2732503040,2732519423,US 2732519424,2732520447,CA 2732520448,2732523519,US 2732523520,2732525567,CA @@ -81885,7 +82782,7 @@ 2734098432,2734099455,US 2734099456,2734100479,NL 2734100480,2734102527,CA -2734102528,2734104575,VI +2734102528,2734104575,?? 2734104576,2734105599,US 2734105600,2734106623,CA 2734106624,2734119935,US @@ -81986,7 +82883,7 @@ 2734523392,2734524415,US 2734524416,2734526463,CA 2734526464,2734532607,US -2734532608,2734533631,VI +2734532608,2734533631,?? 2734533632,2734540799,US 2734540800,2734541823,CA 2734541824,2734552063,US @@ -82001,7 +82898,10 @@ 2734603264,2734604287,AI 2734604288,2734616575,US 2734617600,2734632959,US -2734632960,2734633983,HK +2734632960,2734633215,GB +2734633216,2734633471,DE +2734633472,2734633727,RU +2734633728,2734633983,ZA 2734633984,2734635007,CA 2734635008,2734649343,US 2734649344,2734650367,CA @@ -82156,17 +83056,14 @@ 2742191360,2742191615,SG 2742191616,2742191871,GB 2742191872,2742194175,IE -2742194176,2742206975,FR -2742206976,2742222847,US -2742222848,2742321151,FR +2742194176,2742321151,FR 2742321152,2742321663,US 2742321664,2742321919,CA 2742321920,2742324479,US -2742324480,2742324991,CA -2742324992,2742327807,US -2742327808,2742328063,MX -2742328064,2742328319,BR -2742328320,2742329343,US +2742324480,2742325247,CA +2742325248,2742327807,US +2742327808,2742328063,CA +2742328064,2742329343,US 2742329344,2742329599,DE 2742329600,2742329855,NL 2742329856,2742330111,GB @@ -82178,18 +83075,26 @@ 2742331392,2742331647,SE 2742331648,2742331903,ES 2742331904,2742332159,IL -2742332160,2742332415,IE +2742332160,2742332415,CH 2742332416,2742332671,IT -2742332672,2742332927,ZA -2742332928,2742333183,RU -2742333184,2742333695,DE -2742333696,2742333951,PL -2742333952,2742335231,US +2742332672,2742332927,US +2742332928,2742333183,FR +2742333184,2742333439,CH +2742333440,2742333695,FR +2742333696,2742333951,GB +2742333952,2742334207,US +2742334208,2742334463,DE +2742334464,2742334719,ZA +2742334720,2742334975,US +2742334976,2742335231,IE 2742335232,2742335487,SA -2742335488,2742337535,US +2742335488,2742335743,ES +2742335744,2742335999,SA +2742336000,2742337279,US +2742337280,2742337535,SA 2742337536,2742337791,AU 2742337792,2742338047,SG -2742338048,2742338303,JP +2742338048,2742338303,NZ 2742338304,2742338559,IN 2742338560,2742338815,US 2742338816,2742339071,JP @@ -82200,9 +83105,11 @@ 2742340096,2742340607,AU 2742340608,2742340863,TH 2742340864,2742341119,IN -2742341120,2742341375,US +2742341120,2742341375,AU 2742341376,2742341631,JP -2742341632,2742345215,US +2742341632,2742344447,US +2742344448,2742344959,IN +2742344960,2742345215,SG 2742345216,2742345471,TW 2742345472,2742345727,PH 2742345728,2742345983,BR @@ -82212,7 +83119,8 @@ 2742346752,2742347007,BR 2742347008,2742347263,PE 2742347264,2742347519,BR -2742347520,2742353919,US +2742347520,2742347775,MX +2742347776,2742353919,US 2742353920,2742419455,ES 2742419456,2742484991,US 2742484992,2742550527,GB @@ -82221,7 +83129,8 @@ 2742583296,2742616063,US 2742616064,2742681599,EG 2742681600,2742747135,IN -2742747136,2742782975,US +2742747136,2742780927,US +2742781184,2742782975,US 2742782976,2742783999,NL 2742784000,2742790143,US 2742790144,2742791167,CA @@ -82279,7 +83188,11 @@ 2745922048,2745924607,US 2745924608,2745925631,KR 2745925632,2745925887,DE -2745925888,2745930751,KR +2745925888,2745926143,GB +2745926144,2745929471,KR +2745929472,2745929727,BE +2745929728,2745929983,GB +2745929984,2745930751,KR 2745930752,2745931007,US 2745931008,2745932031,KR 2745932032,2745932287,RU @@ -82292,7 +83205,9 @@ 2745935872,2745936639,TH 2745936640,2745936895,PH 2745936896,2745937151,ID -2745937152,2745937919,US +2745937152,2745937407,SG +2745937408,2745937663,ES +2745937664,2745937919,BR 2745937920,2745939455,KR 2745939456,2745940223,PH 2745940224,2745940735,KR @@ -82301,7 +83216,9 @@ 2745941760,2745942271,US 2745942272,2745942527,KR 2745942528,2745943039,US -2745943040,2745947135,KR +2745943040,2745943551,KR +2745943552,2745943807,HK +2745943808,2745947135,KR 2745947136,2745947391,TH 2745947392,2745947903,KR 2745947904,2745948415,US @@ -82350,9 +83267,27 @@ 2747612928,2747613183,HK 2747613184,2747645951,ZA 2747645952,2747662335,US -2747662336,2747717887,ZA +2747662336,2747687935,ZA +2747687936,2747694079,BR +2747694080,2747696127,ZA +2747696128,2747698175,BR +2747698176,2747699199,ZA +2747699200,2747701247,BR +2747701248,2747702271,ZA +2747702272,2747707391,BR +2747707392,2747708415,ZA +2747708416,2747710463,BR +2747710464,2747711487,ZA +2747711488,2747717631,BR +2747717632,2747717887,ZA 2747717888,2747718399,JP -2747718400,2748055551,ZA +2747718400,2747719935,ZA +2747719936,2747720191,US +2747720192,2747721727,ZA +2747721728,2747722751,BR +2747722752,2747723775,ZA +2747723776,2747724799,BR +2747724800,2748055551,ZA 2748055552,2748121087,CN 2748121088,2748317695,US 2748317696,2748645375,JP @@ -82433,7 +83368,41 @@ 2754543616,2754609151,US 2754609152,2754674687,SE 2754674688,2754871295,US -2754871296,2754904063,HK +2754871296,2754871551,JP +2754871552,2754872063,SG +2754872064,2754872575,HK +2754872576,2754873343,JP +2754873344,2754874367,TW +2754874368,2754875391,HK +2754875392,2754876927,JP +2754876928,2754877439,TW +2754877440,2754877951,JP +2754877952,2754878463,HK +2754878464,2754878975,SG +2754878976,2754879743,JP +2754879744,2754880511,HK +2754880512,2754881023,JP +2754881024,2754881535,SG +2754881536,2754882047,JP +2754882048,2754884095,KR +2754884096,2754884607,HK +2754884608,2754885119,SG +2754885120,2754885631,JP +2754885632,2754888703,KR +2754888704,2754889215,TW +2754889216,2754889727,HK +2754889728,2754890239,SG +2754890240,2754893567,HK +2754893568,2754894847,SG +2754894848,2754895359,HK +2754895360,2754896127,SG +2754896128,2754896895,HK +2754896896,2754897919,SG +2754897920,2754898431,US +2754898432,2754899455,SG +2754899456,2754899967,JP +2754899968,2754900991,SG +2754900992,2754904063,IN 2754904064,2754920447,US 2754920448,2754928639,IN 2754928640,2754936831,US @@ -82449,7 +83418,9 @@ 2756313088,2756378623,US 2756378624,2756444159,AU 2756444160,2756509695,US -2756509696,2756575231,CL +2756509696,2756556543,CL +2756556544,2756557311,PE +2756557312,2756575231,CL 2756575232,2756640767,SG 2756640768,2756706303,US 2756706304,2756771839,AU @@ -82581,7 +83552,8 @@ 2761654784,2761655295,US 2761655296,2761658367,JP 2761658368,2761662463,US -2761662464,2761672703,HK +2761662464,2761670655,JP +2761670656,2761672703,HK 2761672704,2761678847,US 2761678848,2761680895,HK 2761680896,2761682943,US @@ -82615,6 +83587,7 @@ 2761985024,2761986047,BJ 2761986048,2761987071,LY 2761987072,2761989119,ZA +2761990144,2761992191,?? 2761994240,2761996287,ZA 2761996288,2761997311,ET 2761998336,2762000383,NG @@ -82637,7 +83610,8 @@ 2762168320,2762169343,CL 2762169344,2762176511,BR 2762176512,2762177535,AR -2762177536,2762178559,HN +2762177536,2762177791,NL +2762177792,2762178559,US 2762178560,2762179583,AR 2762179584,2762180607,EC 2762180608,2762186751,BR @@ -82672,8 +83646,10 @@ 2765565952,2765567999,RU 2765568000,2765570047,IR 2765570048,2765578239,RU -2765578240,2765579263,TR -2765579264,2765580287,AZ +2765578240,2765579263,AZ +2765579264,2765579775,NL +2765579776,2765580031,RU +2765580032,2765580287,NL 2765580288,2765582335,GB 2765582336,2765586431,CZ 2765586432,2765619199,IR @@ -82681,7 +83657,9 @@ 2768240640,2768306175,ZA 2768306176,2768459263,US 2768459264,2768461823,AP -2768461824,2768467967,US +2768461824,2768466431,US +2768466432,2768466687,AP +2768466688,2768467967,US 2768467968,2768468223,HK 2768468224,2768468479,US 2768468480,2768470015,HK @@ -82773,15 +83751,14 @@ 2776104960,2776170495,GB 2776170496,2776891391,US 2776891392,2777022463,KR -2777022464,2777417727,US -2777417728,2777418495,EU -2777418496,2777421823,US +2777022464,2777421823,US 2777421824,2777422847,CA 2777422848,2777423871,US 2777423872,2777425919,CA 2777425920,2777426943,US 2777426944,2777428991,CA 2777428992,2777430015,US +2777430016,2777430271,CA 2777430272,2777441279,US 2777441280,2777442303,CA 2777442304,2777443071,US @@ -82819,7 +83796,11 @@ 2779627520,2780037119,US 2780037120,2780102655,ZA 2780102656,2780168191,US -2780168192,2780299263,CL +2780168192,2780264447,CL +2780264448,2780265215,AR +2780265216,2780265471,CR +2780265472,2780265727,PE +2780265728,2780299263,CL 2780299264,2780364799,US 2780364800,2780430335,CA 2780430336,2780495871,KR @@ -82855,12 +83836,9 @@ 2783381248,2783381503,EU 2783381504,2783383039,SE 2783383040,2783383295,SC -2783383296,2783383551,EU -2783383552,2783383807,SE +2783383296,2783383807,SE 2783383808,2783384319,SC -2783384320,2783384575,EU -2783384576,2783384831,SE -2783384832,2783385087,EU +2783384320,2783385087,SE 2783385088,2783385343,SC 2783385344,2783386111,SE 2783386112,2783386367,SC @@ -82949,11 +83927,21 @@ 2784362496,2784428031,KR 2784428032,2784952319,US 2784952320,2785017855,ZA -2785017856,2785053951,US -2785053952,2785054207,NL -2785054208,2785057791,US +2785017856,2785057791,US 2785057792,2785058303,TR -2785058304,2785804287,US +2785058304,2785059327,US +2785059328,2785059583,RU +2785059584,2785065215,US +2785065216,2785065471,NL +2785065472,2785065983,US +2785065984,2785066239,NL +2785066240,2785067775,US +2785067776,2785068287,NL +2785068288,2785068543,US +2785068544,2785069055,NL +2785069056,2785069823,US +2785069824,2785070079,NL +2785070080,2785804287,US 2785804288,2785923071,CH 2785923072,2785931263,GB 2785931264,2786066431,CH @@ -83018,13 +84006,17 @@ 2791768064,2791899135,KR 2791899136,2791964671,US 2792030208,2792128511,US -2792128512,2792161279,FR -2792161280,2792226815,US +2792128512,2792136703,FR +2792136704,2792147967,US +2792147968,2792148991,FR +2792148992,2792157183,US +2792157184,2792161023,FR +2792161024,2792226815,US 2792226816,2792292351,CL 2792292352,2792357887,CN 2792357888,2792488959,US 2792488960,2792554495,BO -2792554496,2792751103,US +2792554496,2792685567,US 2792751104,2792882175,JP 2792882176,2792947711,AU 2792947712,2793013247,SG @@ -83054,7 +84046,6 @@ 2807562240,2807566335,US 2807566336,2807576575,CA 2807576576,2807586815,US -2807588864,2807589375,?? 2807590912,2807595007,US 2807595008,2807599103,CA 2807599104,2807607295,US @@ -83062,7 +84053,9 @@ 2807607552,2807607807,HK 2807607808,2807608319,CA 2807608320,2807608575,HK -2807608576,2807611391,CA +2807608576,2807608831,CA +2807608832,2807610111,JP +2807610112,2807611391,CA 2807611392,2807824383,US 2807824384,2807889919,CA 2807889920,2807976447,US @@ -83073,11 +84066,16 @@ 2807981568,2807981823,CA 2807981824,2807982079,US 2807982080,2807982591,CA -2807982592,2807997951,US +2807982592,2807983615,US +2807983616,2807983871,DE +2807983872,2807984127,US +2807984128,2807984639,TH +2807984640,2807997951,US 2807997952,2807998207,CA 2807998208,2807998975,US 2807998976,2807999999,CA -2808000000,2808005631,US +2808000000,2808000255,DE +2808000256,2808005631,US 2808005632,2808006143,CA 2808006144,2808012799,US 2808012800,2808013311,PR @@ -83224,7 +84222,7 @@ 2818193408,2818198527,BR 2818198528,2818199551,MX 2818199552,2818206719,BR -2818206720,2818207743,HN +2818206720,2818207743,US 2818207744,2818208767,PA 2818208768,2818209791,AR 2818209792,2818210815,CO @@ -83241,7 +84239,8 @@ 2818230016,2818231295,BR 2818231296,2818232319,PE 2818232320,2818233343,AR -2818233344,2818234367,HN +2818233344,2818233855,HN +2818233856,2818234367,US 2818234368,2818235391,BR 2818235392,2818236415,GT 2818236416,2818239487,BR @@ -83262,7 +84261,7 @@ 2818620416,2818623487,BR 2818623488,2818625535,AR 2818625536,2818626559,BR -2818626560,2818627583,HN +2818626560,2818627583,US 2818627584,2818628607,BR 2818628608,2818629631,MX 2818629632,2818634751,BR @@ -83279,17 +84278,80 @@ 2823817216,2823818239,AU 2823818240,2823819263,SC 2823819264,2823820287,AU -2823820288,2823823359,SC +2823820288,2823821311,SC +2823821312,2823822335,IN +2823822336,2823823359,SC 2823823360,2823823615,NL -2823823616,2823845887,SC +2823823616,2823825407,SC +2823825408,2823825663,IN +2823825664,2823826431,SC +2823826432,2823826943,BR +2823826944,2823829503,SC +2823829504,2823829759,IN +2823829760,2823833599,SC +2823833600,2823834623,IN +2823834624,2823835647,SC +2823835648,2823836671,BR +2823836672,2823841791,SC +2823841792,2823842815,IN +2823842816,2823845887,SC 2823845888,2823846911,JP -2823846912,2823891967,SC -2823891968,2823892991,JP -2823892992,2823928575,SC +2823846912,2823848959,SC +2823848960,2823849983,BR +2823849984,2823853055,SC +2823853056,2823854079,BR +2823854080,2823856127,SC +2823856128,2823858175,BR +2823858176,2823861247,SC +2823861248,2823863295,BR +2823863296,2823866367,SC +2823866368,2823868415,BR +2823868416,2823870463,SC +2823870464,2823871487,BR +2823871488,2823872511,SC +2823872512,2823873535,BR +2823873536,2823881215,SC +2823881216,2823881727,IN +2823881728,2823882751,BR +2823882752,2823885823,SC +2823885824,2823886847,BR +2823886848,2823889919,SC +2823889920,2823890943,BR +2823890944,2823891967,IN +2823891968,2823892223,US +2823892224,2823892479,JP +2823892480,2823892735,SC +2823892736,2823892991,JP +2823892992,2823894015,SC +2823894016,2823894527,BR +2823894528,2823897087,SC +2823897088,2823899135,BR +2823899136,2823900159,IN +2823900160,2823902207,SC +2823902208,2823904255,BR +2823904256,2823906303,SC +2823906304,2823907327,BR +2823907328,2823910399,SC +2823910400,2823911423,BR +2823911424,2823927807,SC +2823927808,2823928319,BR +2823928320,2823928575,SC 2823928576,2823928831,NL 2823928832,2823929855,JP -2823929856,2823945983,SC -2823945984,2823946239,JP +2823929856,2823930879,SC +2823930880,2823931903,BR +2823931904,2823932927,SC +2823932928,2823933951,BR +2823933952,2823934975,SC +2823934976,2823935999,BR +2823936000,2823939071,SC +2823939072,2823940095,BR +2823940096,2823941119,SC +2823941120,2823942143,US +2823942144,2823943167,SC +2823943168,2823944191,BR +2823944192,2823945215,IN +2823945216,2823946239,SC 2823946240,2824011775,US 2824011776,2824077311,AR 2824077312,2824404991,US @@ -83304,7 +84366,7 @@ 2824492032,2824493055,AR 2824493056,2824494079,BR 2824494080,2824495103,VE -2824495104,2824496127,HN +2824495104,2824496127,US 2824496128,2824498175,BR 2824498176,2824499199,SV 2824499200,2824503295,BR @@ -83315,7 +84377,8 @@ 2824512512,2824515583,BR 2824515584,2824516607,PY 2824516608,2824520703,BR -2824520704,2824521727,HN +2824520704,2824520959,HN +2824520960,2824521727,US 2824521728,2824526847,BR 2824526848,2824527871,CL 2824527872,2824529919,BR @@ -83461,7 +84524,7 @@ 2830482432,2830486527,BR 2830486528,2830488575,AR 2830488576,2830492671,BR -2830492672,2830493695,HN +2830492672,2830493695,US 2830493696,2830499839,BR 2830499840,2830532607,US 2830532608,2830565375,PT @@ -83488,11 +84551,13 @@ 2831323136,2831324159,BR 2831324160,2831325183,EC 2831325184,2831329279,BR -2831329280,2831330303,CL +2831329280,2831330303,PE 2831330304,2831332351,BR 2831332352,2831333375,AR 2831333376,2831336447,BR -2831336448,2831337471,CL +2831336448,2831336959,CL +2831336960,2831337215,US +2831337216,2831337471,CL 2831337472,2831338495,BR 2831338496,2831339519,AR 2831339520,2831341567,BR @@ -83504,7 +84569,8 @@ 2831348736,2831361023,BR 2831361024,2831362047,AR 2831362048,2831365119,BR -2831365120,2831367167,AR +2831365120,2831366911,AR +2831366912,2831367167,PR 2831367168,2831371263,BR 2831371264,2831372287,BZ 2831372288,2831379455,BR @@ -83545,7 +84611,10 @@ 2831471104,2831474687,BR 2831474688,2831475711,AR 2831475712,2831477759,BR -2831477760,2831478783,HN +2831477760,2831478015,US +2831478016,2831478271,BR +2831478272,2831478527,IT +2831478528,2831478783,RU 2831478784,2831479807,US 2831479808,2831480831,AR 2831480832,2831481855,BR @@ -83558,7 +84627,9 @@ 2831501312,2831505407,BR 2831505408,2831506431,CL 2831506432,2831507455,BR -2831507456,2831508479,CR +2831507456,2831507711,CR +2831507712,2831507967,US +2831507968,2831508479,CR 2831508480,2831509503,HT 2831509504,2831510527,BR 2831510528,2831511551,SX @@ -83697,7 +84768,8 @@ 2832038912,2832040959,BR 2832040960,2832041983,PE 2832041984,2832048127,BR -2832048128,2832049151,HN +2832048128,2832048383,HN +2832048384,2832049151,US 2832049152,2832054271,BR 2832054272,2832055295,AR 2832055296,2832057343,BR @@ -83733,7 +84805,7 @@ 2833476608,2833481727,BR 2833481728,2833482751,GT 2833482752,2833484799,BR -2833484800,2833485823,HN +2833484800,2833485823,US 2833485824,2833486847,AR 2833486848,2833501183,BR 2833501184,2833502207,AR @@ -83869,9 +84941,7 @@ 2839000320,2839000575,CA 2839000576,2839055103,US 2839055104,2839055359,HK -2839055360,2839135487,US -2839135488,2839135743,CN -2839135744,2839137535,US +2839055360,2839137535,US 2839137536,2839137791,CN 2839137792,2839308799,US 2839308800,2839309311,CA @@ -83902,7 +84972,9 @@ 2839499776,2843803647,US 2843803648,2843820031,ZA 2843820032,2843836415,HK -2843836416,2843859967,ZA +2843836416,2843849727,ZA +2843849728,2843850751,AP +2843850752,2843859967,ZA 2843859968,2843860991,HK 2843860992,2843863039,ZA 2843863040,2843864063,HK @@ -83930,7 +85002,17 @@ 2845114368,2845179903,IN 2845179904,2845180927,US 2845180928,2845181951,CA -2845181952,2845704191,US +2845181952,2845229055,US +2845229056,2845230079,GB +2845230080,2845230335,NL +2845230336,2845230591,CH +2845230592,2845230847,BR +2845230848,2845231103,RO +2845231104,2845231359,CZ +2845231360,2845231615,DE +2845231616,2845231871,IL +2845231872,2845245439,GB +2845245440,2845704191,US 2845704192,2845769727,CU 2845769728,2845786111,GA 2845786112,2845802495,NG @@ -83983,7 +85065,9 @@ 2851041280,2851042303,GQ 2851042304,2851043327,LY 2851043328,2851044351,TD -2851044352,2851046399,ZA +2851044352,2851045887,ZA +2851045888,2851046143,NL +2851046144,2851046399,ZA 2851046400,2851047423,AO 2851047424,2851048447,SN 2851048448,2851049471,MU @@ -83996,9 +85080,7 @@ 2851057664,2851060735,ZA 2851060736,2851062783,NG 2851062784,2851063807,SL -2851063808,2851064319,ZA -2851064320,2851064575,NL -2851064576,2851065087,ZA +2851063808,2851065087,ZA 2851065088,2851065343,US 2851065344,2851065599,ZA 2851065600,2851065855,US @@ -84143,7 +85225,29 @@ 2854742016,2854743039,US 2854743040,2854744063,CA 2854744064,2855469055,US -2855469056,2855534591,AR +2855469056,2855483391,PY +2855483392,2855484415,UY +2855484416,2855484927,PY +2855484928,2855485439,UY +2855485440,2855487487,PY +2855487488,2855487999,AR +2855488000,2855488511,PY +2855488512,2855493631,AR +2855493632,2855493887,PY +2855493888,2855494143,UY +2855494144,2855497727,AR +2855497728,2855501823,PY +2855501824,2855518207,AR +2855518208,2855520255,PY +2855520256,2855521791,AR +2855521792,2855522047,UY +2855522048,2855522815,AR +2855522816,2855523071,UY +2855523072,2855523327,PY +2855523328,2855523839,AR +2855523840,2855524095,UY +2855524096,2855526399,PY +2855526400,2855534591,AR 2855534592,2855550975,US 2855550976,2855567359,CA 2855567360,2856058879,US @@ -84216,7 +85320,8 @@ 2857371648,2857372671,CO 2857372672,2857373695,BR 2857373696,2857374719,NI -2857374720,2857375743,GT +2857374720,2857375231,GT +2857375232,2857375743,SV 2857375744,2857376767,AR 2857376768,2857377791,MX 2857377792,2857388031,BR @@ -84225,8 +85330,8 @@ 2857392128,2857393151,CR 2857393152,2857394175,AR 2857394176,2857395199,CO -2857395200,2857397247,BR -2857397248,2857398271,AR +2857395200,2857398015,BR +2857398016,2857398271,AR 2857398272,2857399295,BR 2857399296,2857400319,AR 2857400320,2857404415,BR @@ -84249,7 +85354,7 @@ 2857442304,2857443327,CL 2857443328,2857444351,CR 2857444352,2857448447,BR -2857448448,2857449471,HN +2857448448,2857449471,DE 2857449472,2857466879,BR 2857466880,2857467903,US 2857467904,2857470719,BR @@ -84266,7 +85371,7 @@ 2857496576,2857497599,PE 2857497600,2857499647,BR 2857499648,2857500671,CO -2857500672,2857501695,HN +2857500672,2857501695,US 2857501696,2857506815,BR 2857506816,2857507839,DO 2857507840,2857509887,BR @@ -84289,7 +85394,7 @@ 2857554944,2857555967,BR 2857555968,2857556991,TT 2857556992,2857558015,BR -2857558016,2857559039,CL +2857558016,2857559039,PE 2857559040,2857563135,BR 2857563136,2857563647,BO 2857563648,2857563903,BR @@ -84313,14 +85418,14 @@ 2857596928,2857597951,BR 2857597952,2857598975,AR 2857598976,2857611263,BR -2857611264,2857612287,HN +2857611264,2857612287,US 2857612288,2857615359,BR 2857615360,2857616383,HT 2857616384,2857621503,BR 2857621504,2857622527,EC 2857622528,2857623551,AR 2857623552,2857625599,BR -2857625600,2857627647,HN +2857625600,2857627647,US 2857627648,2857628671,PY 2857629696,2857633791,BR 2857633792,2857634815,TT @@ -84342,7 +85447,7 @@ 2857684992,2857686015,CL 2857686016,2857687039,AR 2857687040,2857690111,BR -2857690112,2857691135,HN +2857690112,2857691135,DE 2857691136,2857692159,AR 2857692160,2857696255,BR 2857696256,2857696767,TR @@ -84351,8 +85456,8 @@ 2858418176,2858778623,US 2858778624,2858811391,SA 2858811392,2858840063,US -2858840064,2858876415,SE -2858876416,2858876927,FR +2858840064,2858875903,SE +2858875904,2858876927,FR 2858876928,2859007999,US 2859008000,2859073535,JP 2859073536,2860843007,US @@ -84440,7 +85545,7 @@ 2867324928,2867325951,BR 2867325952,2867326975,CH 2867326976,2867329023,BR -2867329024,2867330047,HN +2867329024,2867330047,US 2867330048,2867331071,BR 2867331072,2867396607,US 2867396608,2867403775,BR @@ -84558,14 +85663,14 @@ 2868137984,2868139007,DO 2868139008,2868140031,BR 2868140032,2868141055,VE -2868141056,2868142079,HN +2868141056,2868142079,US 2868142080,2868145151,BR 2868145152,2868146175,MX 2868146176,2868148223,BR 2868148224,2868150271,MX 2868150272,2868151295,AR 2868151296,2868154367,BR -2868154368,2868155391,HN +2868154368,2868155391,US 2868155392,2868157439,BR 2868157440,2868158463,HN 2868158464,2868160511,BR @@ -84610,7 +85715,9 @@ 2868257792,2868259839,AR 2868259840,2868260863,BR 2868260864,2868261887,AR -2868261888,2868263935,HN +2868261888,2868262143,CA +2868262144,2868262911,US +2868262912,2868263935,HN 2868263936,2868264959,BR 2868264960,2868265983,GB 2868265984,2868268031,BR @@ -84647,7 +85754,8 @@ 2868334592,2868335615,BR 2868335616,2868336639,HN 2868336640,2868337663,AR -2868337664,2868338687,CL +2868337664,2868337919,US +2868337920,2868338687,CL 2868338688,2868339711,AR 2868339712,2868344831,BR 2868344832,2868345855,AR @@ -84740,7 +85848,7 @@ 2868814848,2868815871,AR 2868815872,2868816895,BR 2868816896,2868817919,VE -2868817920,2868818943,HN +2868817920,2868818943,US 2868818944,2868825087,BR 2868825088,2868826111,AR 2868826112,2868828159,BR @@ -84832,7 +85940,7 @@ 2870397952,2870398975,DE 2870398976,2870399999,IT 2870400000,2870401023,RU -2870401024,2870402047,NL +2870401024,2870402047,US 2870402048,2870403071,LT 2870403072,2870404095,GB 2870404096,2870405119,JP @@ -84925,15 +86033,9 @@ 2890998784,2890999039,CA 2890999040,2891014911,US 2891014912,2891015167,AP -2891015168,2891015679,US -2891015680,2891015935,AP -2891015936,2891016191,US +2891015168,2891016191,US 2891016192,2891016447,AP -2891016448,2891017471,US -2891017472,2891017727,AP -2891017728,2891017983,US -2891017984,2891018239,AP -2891018240,2891034623,US +2891016448,2891034623,US 2891034624,2891036671,CA 2891036672,2891038719,US 2891038720,2891055103,CN @@ -84954,7 +86056,9 @@ 2891134976,2891135999,CA 2891136000,2891138047,US 2891138048,2891141119,CA -2891141120,2891142143,US +2891141120,2891141375,US +2891141376,2891141631,IT +2891141632,2891142143,US 2891142144,2891142655,CA 2891142656,2891147263,US 2891147264,2891148287,CA @@ -84970,7 +86074,9 @@ 2891223296,2891223551,PR 2891223552,2891227135,US 2891227136,2891231231,CA -2891231232,2891235327,US +2891231232,2891231743,US +2891231744,2891231999,BR +2891232000,2891235327,US 2891235328,2891251711,VI 2891251712,2891272191,US 2891272192,2891274239,CA @@ -85001,17 +86107,21 @@ 2891796480,2891800575,CA 2891800576,2891807743,US 2891807744,2891808767,CA -2891808768,2891855615,US -2891855616,2891855871,CH -2891855872,2891863295,US +2891808768,2891818751,US +2891818752,2891819007,CA +2891819008,2891858431,US +2891858432,2891858687,CA +2891858688,2891863295,US 2891863296,2891863551,AU 2891863552,2891867391,US 2891867392,2891867647,AU 2891867648,2891868415,US 2891868416,2891868927,AU -2891868928,2891873023,US +2891868928,2891869183,CA +2891869184,2891873023,US 2891873024,2891873535,AU -2891873536,2891874303,US +2891873536,2891874047,US +2891874048,2891874303,CA 2891874304,2891907071,SG 2891907072,2891974655,US 2891974656,2891978751,CA @@ -85034,13 +86144,12 @@ 2892052480,2892053503,US 2892053504,2892054527,CA 2892054528,2892058623,US -2892058624,2892060671,?? -2892061696,2892061951,US 2892062720,2892068863,US 2892068864,2892069887,CA 2892069888,2892070911,US 2892070912,2892103679,CA 2892103680,2892111103,US +2892111104,2892111359,CA 2892111360,2892116991,US 2892116992,2892119039,CA 2892119040,2892140543,US @@ -85076,13 +86185,12 @@ 2892366848,2892369919,US 2892369920,2892374015,CA 2892374016,2892398591,US -2892399104,2892399615,US -2892400384,2892400639,?? -2892402176,2892402687,?? -2892402688,2892417791,US +2892402688,2892417023,US +2892417024,2892417279,BR +2892417280,2892417791,US 2892417792,2892418047,GB 2892418048,2892423167,US -2892423168,2892424191,VI +2892423168,2892424191,?? 2892424192,2892425215,CA 2892425216,2892443647,US 2892443648,2892447743,CA @@ -85103,17 +86211,27 @@ 2892936192,2892941311,US 2892941312,2892942335,CA 2892942336,2892943359,US -2892947456,2892963839,US +2892947456,2892958719,US +2892958720,2892959743,BR +2892959744,2892963839,US 2892963840,2892965887,CA 2892965888,2892968959,US 2892968960,2892969215,CA 2892969216,2892971007,US 2892971008,2892972031,CA -2892972032,2893002751,US +2892972032,2892996607,US +2892996608,2892996863,CA +2892996864,2893000959,US +2893000960,2893001215,CA +2893001216,2893002751,US 2893002752,2893003007,AU 2893003008,2893003519,US 2893003520,2893003775,GB -2893003776,2893016063,US +2893003776,2893006591,US +2893006592,2893006847,BR +2893006848,2893015039,US +2893015040,2893015295,CA +2893015296,2893016063,US 2893016064,2893016319,AU 2893016320,2893019135,US 2893019136,2893019647,AU @@ -85157,7 +86275,7 @@ 2902450176,2902454271,NL 2902454272,2902456319,US 2902456320,2902458367,LU -2902458368,2902459391,US +2902458368,2902461439,US 2902461440,2902462463,CA 2902462464,2902507519,US 2902507520,2902515711,CA @@ -85173,7 +86291,9 @@ 2905456640,2905464831,CA 2905464832,2905473023,US 2905473024,2905481215,CA -2905481216,2913992703,US +2905481216,2905495039,US +2905495040,2905495295,NL +2905495296,2913992703,US 2913992704,2914516991,CA 2914516992,2915250175,US 2915250176,2915254271,CA @@ -85261,8 +86381,10 @@ 2918412288,2918432767,US 2918432768,2918436863,CA 2918436864,2918441983,US -2918441984,2918442495,CA -2918442496,2918469631,US +2918442240,2918442495,CA +2918442496,2918463231,US +2918463232,2918463487,BR +2918463488,2918469631,US 2918469632,2918473727,CA 2918473728,2918477823,US 2918477824,2918481919,CA @@ -85402,9 +86524,7 @@ 2942608896,2942609407,HK 2942609408,2942611455,AU 2942611456,2942615551,IN -2942615552,2942616319,HK -2942616320,2942616831,SG -2942616832,2942619647,HK +2942615552,2942619647,HK 2942619648,2942631935,JP 2942631936,2942697471,IN 2942697472,2942763007,CN @@ -85487,7 +86607,9 @@ 2947593216,2947594239,HK 2947594240,2947595263,IN 2947595264,2947596287,CN -2947596288,2947597311,HK +2947596288,2947596543,HK +2947596544,2947596799,TH +2947596800,2947597311,HK 2947597312,2947598335,JP 2947598336,2947602431,AU 2947602432,2947603455,NZ @@ -85596,7 +86718,9 @@ 2955034624,2955083775,IE 2955083776,2955149311,GB 2955149312,2955411455,UA -2955411456,2955673599,TR +2955411456,2955640831,TR +2955640832,2955642879,EU +2955642880,2955673599,TR 2955673600,2955804671,SA 2955804672,2955837439,EE 2955837440,2955845631,IR @@ -85606,9 +86730,8 @@ 2955935744,2956230655,RU 2956230656,2956231679,GB 2956231680,2956232703,DE -2956232704,2956236799,US -2956236800,2956237823,EU -2956237824,2956238847,US +2956232704,2956237823,US +2956237824,2956238847,EU 2956238848,2956242943,ES 2956242944,2956243967,TR 2956243968,2956244991,DE @@ -85644,10 +86767,9 @@ 2956312576,2956328959,RU 2956328960,2956460031,TR 2956460032,2956468479,RU -2956468480,2956468991,TR -2956468992,2956470015,RU -2956470016,2956470271,DE -2956470272,2956471295,US +2956468480,2956468735,TR +2956468736,2956470015,RU +2956470016,2956471295,DE 2956471296,2956472319,NL 2956472320,2956474367,RU 2956474368,2956476415,GB @@ -85678,7 +86800,7 @@ 2956525568,2956533759,JO 2956533760,2956535807,FR 2956535808,2956537855,LV -2956537856,2956538879,JO +2956537856,2956538879,MD 2956538880,2956541951,US 2956541952,2956542975,BA 2956542976,2956543999,NL @@ -85712,7 +86834,9 @@ 2956597248,2956599295,NL 2956599296,2956602367,RU 2956602368,2956602623,NL -2956602624,2956604415,RU +2956602624,2956603391,RU +2956603392,2956603903,NL +2956603904,2956604415,RU 2956604416,2956604927,NL 2956604928,2956605183,RU 2956605184,2956605439,NL @@ -85833,9 +86957,10 @@ 2959099904,2959101951,UA 2959101952,2959103999,RU 2959104000,2959105023,US -2959105024,2959105791,RO +2959105024,2959105535,PL +2959105536,2959105791,DE 2959105792,2959106047,AU -2959106048,2959114239,AT +2959106048,2959114239,DE 2959114240,2959115263,EU 2959115264,2959116287,UA 2959116288,2959117311,DE @@ -85855,7 +86980,7 @@ 2959140864,2959141887,RU 2959141888,2959142143,UZ 2959142144,2959142399,RU -2959142400,2959142655,CZ +2959142400,2959142655,AZ 2959142656,2959142911,RU 2959142912,2959143167,UA 2959143168,2959143679,RU @@ -85891,7 +87016,7 @@ 2959196160,2959196415,NG 2959196416,2959196927,RU 2959196928,2959197183,NL -2959197184,2959197439,CZ +2959197184,2959197439,GB 2959197440,2959197695,FI 2959197696,2959197951,NL 2959197952,2959198207,UA @@ -85905,7 +87030,7 @@ 2959200512,2959200767,DE 2959200768,2959201279,NL 2959201280,2959201535,KW -2959201536,2959201791,CY +2959201536,2959201791,TR 2959201792,2959202047,IL 2959202048,2959202303,DE 2959202304,2959202559,SA @@ -85949,7 +87074,7 @@ 2959354880,2959355135,RU 2959355136,2959355391,FR 2959355392,2959355647,GE -2959355648,2959355903,TR +2959355648,2959355903,RU 2959355904,2959357951,KZ 2959357952,2959359999,UA 2959360000,2959376383,RU @@ -86032,14 +87157,13 @@ 2959712256,2959728639,UA 2959728640,2959729663,US 2959729664,2959729919,JP -2959729920,2959730175,RU +2959729920,2959730175,DE 2959730176,2959730687,JP 2959730688,2959731199,UA 2959731200,2959731455,RU 2959731456,2959731711,CH 2959731712,2959732735,IQ 2959732736,2959733759,SI -2959733760,2959734783,GB 2959734784,2959735807,JP 2959735808,2959736063,IT 2959736064,2959736319,PL @@ -86147,7 +87271,7 @@ 2960117760,2960119807,RU 2960119808,2960121855,US 2960121856,2960125951,PL -2960125952,2960126975,US +2960125952,2960126975,GB 2960126976,2960127231,UA 2960127232,2960127487,DE 2960127488,2960127743,FR @@ -86162,7 +87286,8 @@ 2960160768,2960162815,UA 2960162816,2960166911,RU 2960166912,2960171007,EE -2960171008,2960175103,RU +2960171008,2960173055,RU +2960173056,2960175103,NL 2960175104,2960179199,SK 2960179200,2960205823,RU 2960205824,2960206335,CA @@ -86181,8 +87306,11 @@ 2960216064,2960217087,RU 2960217088,2960218111,ES 2960218112,2960219135,FR -2960219136,2960220159,BG -2960220160,2960221183,RO +2960219136,2960219647,BG +2960219648,2960219903,GB +2960219904,2960220159,BG +2960220160,2960220927,RO +2960220928,2960221183,ZA 2960221184,2960222207,US 2960222208,2960224255,RO 2960224256,2960225279,RU @@ -86216,7 +87344,7 @@ 2960371712,2960373759,US 2960373760,2960375807,IT 2960375808,2960383999,RU -2960384000,2960386047,US +2960384000,2960386047,GB 2960386048,2960387071,RO 2960387072,2960388095,DE 2960388096,2960392191,PL @@ -86224,7 +87352,7 @@ 2960392448,2960392703,GB 2960392704,2960392959,RU 2960392960,2960393215,UA -2960393216,2960393471,NL +2960393216,2960393471,US 2960393472,2960393727,RU 2960393728,2960393983,IE 2960393984,2960394239,IR @@ -86305,7 +87433,7 @@ 2960558080,2960560127,PL 2960560128,2960562175,UA 2960562176,2960564223,BY -2960564224,2960565247,ES +2960564224,2960565247,GB 2960565248,2960566015,RU 2960566016,2960566271,EE 2960566272,2960567295,CZ @@ -86315,15 +87443,17 @@ 2960569344,2960570367,DE 2960570368,2960571391,RO 2960571392,2960571903,US -2960571904,2960572159,ES -2960572160,2960572415,US +2960571904,2960572159,RU +2960572160,2960572415,GB 2960572416,2960572671,BE 2960572672,2960572927,DE 2960572928,2960573183,GB 2960573440,2960573951,RU 2960573952,2960574207,LT 2960574208,2960574463,RU -2960574464,2960576511,US +2960574464,2960575487,US +2960575488,2960575999,DE +2960576000,2960576511,NL 2960576512,2960588799,RU 2960588800,2960590847,UA 2960590848,2960592895,ES @@ -86339,7 +87469,7 @@ 2960625920,2960626175,NL 2960626176,2960626431,DE 2960626432,2960626687,RU -2960626688,2960627711,HK +2960626688,2960627711,JP 2960627712,2960628735,GB 2960628736,2960637951,RU 2960637952,2960638207,CZ @@ -86371,7 +87501,7 @@ 2960645120,2960645375,BA 2960645376,2960645631,PL 2960645632,2960645887,FR -2960645888,2960646143,IQ +2960645888,2960646143,US 2960646144,2960648191,KZ 2960648192,2960650239,UA 2960650240,2960652287,RU @@ -86396,7 +87526,7 @@ 2960726016,2960728063,CH 2960728064,2960732159,RO 2960732160,2960733183,RU -2960733184,2960734207,US +2960733184,2960734207,MC 2960734208,2960735231,AT 2960735232,2960736255,RU 2960736256,2960738303,ES @@ -86405,7 +87535,7 @@ 2960742400,2960744447,US 2960744448,2960746495,NL 2960746496,2960747519,RO -2960747520,2960748543,US +2960747520,2960748543,DE 2960748544,2960752639,PL 2960752640,2960769023,RU 2960769024,2960773119,UA @@ -86444,7 +87574,9 @@ 2960866816,2960867071,GB 2960867072,2960867327,FR 2960867328,2960883711,IR -2960883712,2960904191,RU +2960883712,2960898047,RU +2960898048,2960899071,CZ +2960899072,2960904191,RU 2960904192,2960906239,RS 2960906240,2960907263,RU 2960907264,2960907775,UA @@ -86627,7 +87759,7 @@ 2967404544,2967421183,RO 2967421184,2967421439,IL 2967421440,2967421695,RO -2967421696,2967421951,TR +2967421696,2967421951,ES 2967421952,2967422975,DE 2967422976,2967425023,KZ 2967425024,2967427071,IR @@ -86636,7 +87768,8 @@ 2967430144,2967431167,KZ 2967431168,2967432191,US 2967432192,2967432447,GB -2967432448,2967432959,RO +2967432448,2967432703,NL +2967432704,2967432959,RO 2967432960,2967433727,CH 2967433728,2967434239,RO 2967434240,2967435007,GB @@ -86692,7 +87825,11 @@ 2968216320,2968216831,EU 2968216832,2968220415,TR 2968220416,2968220671,EU -2968220672,2968310015,TR +2968220672,2968224255,TR +2968224256,2968224511,EU +2968224512,2968290559,TR +2968290560,2968290815,EU +2968290816,2968310015,TR 2968310016,2968310271,EU 2968310272,2968320255,TR 2968320256,2968320511,EU @@ -86709,7 +87846,7 @@ 2968610816,2968612863,UA 2968612864,2968613631,IL 2968613632,2968613887,US -2968613888,2968614143,NL +2968613888,2968614143,IL 2968614144,2968614911,US 2968614912,2968616959,FR 2968616960,2968625151,UA @@ -86773,13 +87910,16 @@ 2975596544,2975662079,BR 2975662080,2975670271,CR 2975670272,2975678463,CO -2975678464,2977715199,BR +2975678464,2975698687,BR +2975698688,2975698943,TM +2975698944,2977715199,BR 2977715200,2977716223,MX 2977716224,2977794047,BR 2977794048,2977795071,MX 2977795072,2977832959,BR 2977832960,2977833983,CO -2977833984,2977835007,EC +2977833984,2977834751,EC +2977834752,2977835007,MX 2977835008,2977837055,BR 2977837056,2977838079,PE 2977838080,2977839103,AR @@ -86811,7 +87951,7 @@ 2984247296,2984935423,MX 2984935424,2984936447,AR 2984936448,2984937471,BR -2984937472,2984939519,HN +2984937472,2984939519,US 2984939520,2984951807,BR 2984951808,2984968191,EC 2984968192,2985033727,BR @@ -86865,9 +88005,7 @@ 2987548672,2987552767,RU 2987552768,2987556863,GB 2987556864,2987560959,NL -2987560960,2987562751,DE -2987562752,2987563007,CZ -2987563008,2987565055,DE +2987560960,2987565055,DE 2987565056,2987569151,AT 2987569152,2987573247,FR 2987573248,2987577343,TR @@ -86970,7 +88108,7 @@ 2987793152,2987793407,GE 2987793408,2987793663,IT 2987793664,2987793919,NL -2987793920,2987794175,SG +2987793920,2987794175,HK 2987794176,2987794431,RU 2987794432,2987796479,IQ 2987796480,2987800575,RU @@ -87076,8 +88214,10 @@ 2989948928,2990014463,FI 2990014464,2990079999,PL 2990080000,2990096639,RU -2990096640,2990097151,GE -2990097152,2990112767,RU +2990096640,2990096895,NL +2990096896,2990097151,GE +2990097152,2990097663,NL +2990097664,2990112767,RU 2990112768,2990129151,ES 2990129152,2990145535,RU 2990145536,2990211071,SI @@ -87241,9 +88381,7 @@ 2996640256,2996640767,FR 2996640768,2996641791,BE 2996641792,2996645887,ES -2996645888,2996649983,US -2996649984,2996651007,RO -2996651008,2996652031,US +2996645888,2996652031,US 2996652032,2996653055,CH 2996653056,2996654079,RO 2996654080,2996654591,DE @@ -87272,7 +88410,7 @@ 2996699136,2996731903,RU 2996731904,2996764671,UA 2996764672,2996768767,GB -2996768768,2996773631,RU +2996768768,2996773375,RU 2996773632,2996773887,TR 2996773888,2996774143,RU 2996774144,2996774399,UA @@ -87286,9 +88424,7 @@ 2996789248,2996790015,UA 2996790016,2996790271,US 2996790272,2996790527,NL -2996790528,2996791039,UA -2996791040,2996791295,NL -2996791296,2996792063,UA +2996790528,2996792063,UA 2996792064,2996792319,NL 2996792320,2996793343,UA 2996793344,2996797439,RU @@ -87365,7 +88501,9 @@ 2997547520,2997551103,RU 2997551104,2997555199,US 2997555200,2997556223,SG -2997556224,2997557247,US +2997556224,2997556735,FR +2997556736,2997556991,ID +2997556992,2997557247,PH 2997557248,2997559295,TW 2997559296,2997560319,US 2997560320,2997560575,CL @@ -87373,7 +88511,7 @@ 2997560832,2997561087,UZ 2997561088,2997561343,RU 2997561344,2997561855,MD -2997561856,2997562367,EE +2997561856,2997562367,RU 2997562368,2997562879,KG 2997562880,2997563391,AZ 2997563392,2997564415,US @@ -87386,27 +88524,29 @@ 2997567488,2997567999,LV 2997568000,2997568511,TM 2997568512,2997568767,ES -2997568768,2997569023,MX +2997568768,2997569023,RU 2997569024,2997569279,AU 2997569280,2997569535,RU 2997569536,2997570559,FR -2997570560,2997573631,JP -2997573632,2997574143,GB +2997570560,2997572607,JP +2997572608,2997574143,RU 2997574144,2997574655,UA 2997574656,2997576703,KR -2997576704,2997577215,GB +2997576704,2997576959,RU +2997576960,2997577215,GB 2997577216,2997577471,IL 2997577472,2997577727,IN -2997577728,2997577983,MX +2997577728,2997577983,RU 2997577984,2997578239,CA 2997578240,2997578751,FR 2997578752,2997579263,GE 2997579264,2997579775,CN 2997579776,2997581311,NL 2997581312,2997581567,GH -2997581568,2997581823,AU +2997581568,2997581823,US 2997581824,2997582847,TW -2997582848,2997583871,US +2997582848,2997583359,US +2997583360,2997583871,RU 2997583872,2997616639,SY 2997616640,2997649407,SI 2997649408,2997682175,BY @@ -87470,7 +88610,7 @@ 3000205568,3000205823,SK 3000205824,3000206079,TR 3000206080,3000206335,FR -3000206336,3000206591,GB +3000206336,3000206591,TR 3000206592,3000206847,ES 3000206848,3000207103,PL 3000207104,3000207359,UA @@ -87496,7 +88636,7 @@ 3000212480,3000212735,TR 3000212736,3000212991,GB 3000212992,3000213247,AT -3000213248,3000213503,GB +3000213248,3000213503,US 3000213504,3000221695,RU 3000221696,3000229887,GB 3000229888,3000238079,CH @@ -87520,7 +88660,9 @@ 3000258048,3000258303,RU 3000258304,3000258559,NL 3000258560,3000260607,RU -3000260608,3000262655,RS +3000260608,3000260863,RS +3000260864,3000261119,DE +3000261120,3000262655,RS 3000262656,3000266751,UA 3000266752,3000268799,DE 3000268800,3000270847,PL @@ -87535,17 +88677,20 @@ 3000285184,3000287231,US 3000287232,3000289279,UA 3000289280,3000289791,RO -3000289792,3000290815,US +3000289792,3000290047,ZA +3000290048,3000290303,RO +3000290304,3000290815,US 3000290816,3000291327,RO 3000291328,3000293375,RU 3000293376,3000295423,PL 3000295424,3000295679,NL 3000295680,3000295935,ES -3000295936,3000296191,PT +3000295936,3000296191,BR 3000296192,3000296447,BE 3000296448,3000296703,FR 3000296704,3000296959,NL -3000296960,3000297471,GB +3000296960,3000297215,IT +3000297216,3000297471,GB 3000297472,3000301567,UA 3000301568,3000302591,RU 3000302592,3000303103,LV @@ -87707,7 +88852,7 @@ 3001810944,3001815039,IE 3001815040,3001819135,RU 3001819136,3001820159,IR -3001820160,3001821183,AU +3001820160,3001821183,RU 3001821184,3001823231,HK 3001823232,3001827327,GE 3001827328,3001831423,SE @@ -87968,10 +89113,16 @@ 3002939392,3002941439,SC 3002941440,3002957823,SY 3002957824,3002974207,SK -3002974208,3002990591,RS +3002974208,3002985727,RS +3002985728,3002985983,US +3002985984,3002990591,RS 3002990592,3003006975,DE 3003006976,3003023359,LU -3003023360,3003034367,RS +3003023360,3003028991,RS +3003028992,3003029247,US +3003029248,3003033599,RS +3003033600,3003033855,US +3003033856,3003034367,RS 3003034368,3003034623,ME 3003034624,3003036415,RS 3003036416,3003036671,ME @@ -88007,7 +89158,7 @@ 3003101184,3003103231,UA 3003103232,3003105279,IT 3003105280,3003107327,NL -3003107328,3003107583,RU +3003107328,3003107583,VC 3003107584,3003107839,GB 3003107840,3003109375,NL 3003109376,3003111423,FR @@ -88053,7 +89204,10 @@ 3003154944,3003159039,AR 3003159040,3003159295,CO 3003159296,3003160575,AR -3003160576,3003161599,CL +3003160576,3003160831,CL +3003160832,3003161087,PE +3003161088,3003161343,CO +3003161344,3003161599,CL 3003161600,3003162623,UY 3003162624,3003167743,BR 3003167744,3003169791,AR @@ -88070,7 +89224,9 @@ 3003174400,3003174911,BR 3003174912,3003179007,CR 3003179008,3003187199,AR -3003187200,3003252735,CO +3003187200,3003205631,CO +3003205632,3003205887,AU +3003205888,3003252735,CO 3003252736,3003449343,CL 3003449344,3003514879,SV 3003514880,3003645951,PE @@ -88100,7 +89256,9 @@ 3005939712,3005940735,CO 3005940736,3005956095,BR 3005956096,3005960191,AR -3005960192,3005965311,PE +3005960192,3005964031,PE +3005964032,3005964287,EC +3005964288,3005965311,PE 3005965312,3005966335,AR 3005966336,3005968383,CO 3005968384,3005972479,AR @@ -88171,15 +89329,18 @@ 3007082496,3007086591,BO 3007086592,3007088639,BR 3007088640,3007089663,EC -3007089664,3007090687,BR -3007090688,3007091199,BZ +3007089664,3007091199,BR 3007091200,3007091455,SE -3007091456,3007092479,BZ +3007091456,3007091711,VE +3007091712,3007091967,NL +3007091968,3007092223,NI +3007092224,3007092479,DE 3007092480,3007092735,BR 3007092736,3007094783,AR 3007094784,3007096831,CR 3007096832,3007098879,AR -3007098880,3007100927,HN +3007098880,3007099391,HN +3007099392,3007100927,US 3007100928,3007102975,AR 3007102976,3007103999,US 3007104000,3007106047,AR @@ -88192,25 +89353,64 @@ 3007115264,3007116287,CO 3007116288,3007117311,EC 3007117312,3007122431,AR -3007122432,3007123455,CL +3007122432,3007122943,CL +3007122944,3007123199,PE +3007123200,3007123455,CO 3007123456,3007127551,DO 3007127552,3007135743,AW 3007135744,3007143935,AR 3007143936,3007148031,CL 3007148032,3007152127,CO -3007152128,3007169023,CL +3007152128,3007152639,AE +3007152640,3007153663,DE +3007153664,3007154431,AE +3007154432,3007154687,US +3007154688,3007155967,AE +3007155968,3007156223,BS +3007156224,3007158015,AE +3007158016,3007158271,DE +3007158272,3007160319,AE +3007160320,3007168511,DE +3007168512,3007169023,AE 3007169024,3007169279,US -3007169280,3007170047,CL -3007170048,3007170303,RU -3007170304,3007177727,CL +3007169280,3007169791,AE +3007169792,3007170047,US +3007170048,3007171071,AE +3007171072,3007171583,US +3007171584,3007172095,AE +3007172096,3007172351,CL +3007172352,3007172607,AE +3007172608,3007172863,US +3007172864,3007173119,AE +3007173120,3007173375,US +3007173376,3007174911,AE +3007174912,3007175423,US +3007175424,3007176447,AE +3007176448,3007176959,US +3007176960,3007177215,BR +3007177216,3007177727,US 3007177728,3007177983,AU -3007177984,3007180031,CL +3007177984,3007178239,DO +3007178240,3007178751,PA +3007178752,3007179263,AE +3007179264,3007179775,PA +3007179776,3007180031,AE 3007180032,3007180287,DE -3007180288,3007180799,CL +3007180288,3007180799,AE 3007180800,3007181055,AU -3007181056,3007184895,CL +3007181056,3007181311,BR +3007181312,3007182079,AE +3007182080,3007182335,US +3007182336,3007182591,CL +3007182592,3007182847,AE +3007182848,3007183103,CL +3007183104,3007183359,BR +3007183360,3007183615,AE +3007183616,3007183871,DE +3007183872,3007184127,CL +3007184128,3007184383,AE +3007184384,3007184895,BR 3007184896,3007250431,AR -3007258624,3007262719,?? 3007299584,3007301631,PA 3007301632,3007305727,AR 3007305728,3007307775,BZ @@ -88228,7 +89428,8 @@ 3015563776,3015564287,PY 3015564288,3015564799,CL 3015564800,3015565055,CO -3015565056,3015639039,BR +3015565056,3015565311,CR +3015565312,3015639039,BR 3015639040,3015640063,AR 3015640064,3019898879,BR 3019898880,3024093183,JP @@ -88458,8 +89659,7 @@ 3031582720,3031583743,SG 3031583744,3031583999,HK 3031584000,3031584255,US -3031584256,3031584511,SG -3031584512,3031584767,HK +3031584256,3031584767,HK 3031584768,3031587839,JP 3031587840,3031592959,ID 3031592960,3031595007,CN @@ -88572,7 +89772,9 @@ 3034504448,3034505215,AU 3034505216,3034531583,CN 3034531584,3034531839,HK -3034531840,3034578943,CN +3034531840,3034575103,CN +3034575104,3034575359,HK +3034575360,3034578943,CN 3034578944,3035103231,KR 3035103232,3035168767,PH 3035168768,3035193343,CN @@ -88615,9 +89817,7 @@ 3035357184,3035365375,JP 3035365376,3035627519,KR 3035627520,3035660287,ID -3035660288,3035661311,SG -3035661312,3035661567,ID -3035661568,3035662335,SG +3035660288,3035662335,SG 3035662336,3035662591,HK 3035662592,3035672831,SG 3035672832,3035673087,HK @@ -88652,7 +89852,11 @@ 3039401984,3039402495,VE 3039402496,3039404031,ES 3039404032,3039412223,BR -3039412224,3039420415,US +3039412224,3039412735,US +3039412736,3039412991,NL +3039412992,3039414783,US +3039414784,3039415039,TR +3039415040,3039420415,US 3039420416,3039428607,AR 3039428608,3039559679,CL 3039559680,3039821823,AR @@ -88661,7 +89865,36 @@ 3041132544,3041394687,CO 3041394688,3041656831,CL 3041656832,3041787903,BR -3041787904,3044016127,AR +3041787904,3041794559,CO +3041794560,3041794815,EC +3041794816,3041795071,PY +3041795072,3041795327,CO +3041795328,3041795583,EC +3041795584,3041795839,CL +3041795840,3041796095,EC +3041796096,3041804287,AR +3041804288,3041808383,CO +3041808384,3041810431,AR +3041810432,3041811455,CL +3041811456,3041811967,PE +3041811968,3041812479,PY +3041812480,3041818623,AR +3041818624,3041837055,PA +3041837056,3041853439,CL +3041853440,3041872383,CO +3041872384,3041873919,AR +3041873920,3041878015,CO +3041878016,3041910783,AR +3041910784,3041918975,HN +3041918976,3042886911,AR +3042886912,3042887167,PY +3042887168,3042889727,AR +3042889728,3042890495,PY +3042890496,3042890751,AR +3042890752,3042897663,PY +3042897664,3042898175,AR +3042898176,3042900735,PY +3042900736,3044016127,AR 3044016128,3044147199,EC 3044147200,3044155391,GT 3044155392,3044161535,AR @@ -88675,12 +89908,40 @@ 3044208640,3044212735,EE 3044212736,3044245503,HN 3044245504,3044278271,BO -3044278272,3044417535,AR +3044278272,3044325375,AR +3044325376,3044327423,PY +3044327424,3044366335,AR +3044366336,3044367359,PY +3044367360,3044370431,AR +3044370432,3044372479,PY +3044372480,3044380671,AR +3044380672,3044384767,PY +3044384768,3044398079,AR +3044398080,3044399103,PY +3044399104,3044417535,AR 3044417536,3044425727,TT 3044425728,3044446207,AR 3044446208,3044450303,CO 3044450304,3044454399,CL -3044454400,3044540415,AR +3044454400,3044491263,AR +3044491264,3044491519,CO +3044491520,3044491775,AR +3044491776,3044493055,CO +3044493056,3044495871,AR +3044495872,3044497407,CO +3044497408,3044498431,CL +3044498432,3044498943,PE +3044498944,3044499455,PY +3044499456,3044499967,EC +3044499968,3044500479,SV +3044500480,3044500991,HN +3044500992,3044501503,NI +3044501504,3044503551,GT +3044503552,3044506111,AR +3044506112,3044506367,PA +3044506368,3044506623,AR +3044506624,3044507391,PA +3044507392,3044540415,AR 3044540416,3045064703,PY 3045064704,3047161855,CO 3047161856,3047423999,CL @@ -88699,13 +89960,14 @@ 3048134656,3048135679,AR 3048135680,3048136703,BR 3048136704,3048137727,PE +3048137728,3048138751,CO 3048138752,3048140287,BR 3048140288,3048140799,AR 3048140800,3048144895,BR 3048144896,3048210431,EC 3048210432,3048275967,PE 3048275968,3048292351,AR -3048292352,3048308735,BZ +3048292352,3048308735,US 3048308736,3048325119,BO 3048325120,3048331263,AR 3048331264,3048332287,GY @@ -88722,6 +89984,7 @@ 3049068544,3049069311,CO 3049069312,3049069567,GT 3049069568,3049076735,BR +3049076736,3049077759,VE 3049077760,3049081855,BR 3049081856,3049082879,VE 3049082880,3049095167,BR @@ -88738,7 +90001,6 @@ 3049203712,3049209855,BR 3049209856,3049210879,AR 3049210880,3049211903,BO -3049211904,3049212927,?? 3049212928,3049213951,BR 3049213952,3049214975,AR 3049214976,3049225215,BR @@ -88762,7 +90024,9 @@ 3049284608,3049285631,AR 3049285632,3049291775,BR 3049291776,3049324543,CO -3049324544,3049521151,CR +3049324544,3049362943,CR +3049362944,3049363455,NI +3049363456,3049521151,CR 3049521152,3049586687,EC 3049586688,3049635839,PA 3049635840,3049652223,AR @@ -88771,7 +90035,10 @@ 3049754624,3049762815,AR 3049762816,3049766911,HN 3049766912,3049771007,MX -3049771008,3049775103,AR +3049771008,3049771263,PA +3049771264,3049771519,AR +3049771520,3049772543,GT +3049772544,3049775103,AR 3049775104,3049783295,GY 3049783296,3050045439,CL 3050045440,3050307583,CO @@ -88782,45 +90049,248 @@ 3050504192,3050569727,EC 3050569728,3050635263,CL 3050635264,3050700799,BR -3050700800,3050705663,CL +3050700800,3050701055,AE +3050701056,3050701311,DE +3050701312,3050701567,BR +3050701568,3050701823,AE +3050701824,3050702335,BR +3050702336,3050702591,AE +3050702592,3050702847,US +3050702848,3050703103,AE +3050703104,3050703359,US +3050703360,3050703615,AE +3050703616,3050703871,US +3050703872,3050704127,AE +3050704128,3050704383,BR +3050704384,3050704639,AE +3050704640,3050704895,US +3050704896,3050705663,AE 3050705664,3050705919,TR -3050705920,3050734847,CL -3050734848,3050735103,US -3050735104,3050739711,CL -3050739712,3050739967,US -3050739968,3050742271,CL +3050705920,3050706431,BR +3050706432,3050706687,AE +3050706688,3050706943,US +3050706944,3050707199,AE +3050707200,3050707455,US +3050707456,3050708735,AE +3050708736,3050709247,BR +3050709248,3050710271,AE +3050710272,3050710527,US +3050710528,3050710783,AE +3050710784,3050711039,US +3050711040,3050711295,BR +3050711296,3050711551,US +3050711552,3050712831,AE +3050712832,3050713087,US +3050713088,3050713599,AE +3050713600,3050713855,PA +3050713856,3050714111,BR +3050714112,3050714367,AE +3050714368,3050714623,US +3050714624,3050714879,AE +3050714880,3050715391,US +3050715392,3050717951,AE +3050717952,3050718207,US +3050718208,3050718719,AE +3050718720,3050719231,US +3050719232,3050720255,JP +3050720256,3050720511,AE +3050720512,3050720767,BR +3050720768,3050721279,JP +3050721280,3050721791,AE +3050721792,3050722559,BR +3050722560,3050722815,DO +3050722816,3050723071,BR +3050723072,3050723327,AE +3050723328,3050723583,BR +3050723584,3050723839,AE +3050723840,3050724095,BR +3050724096,3050724607,AE +3050724608,3050724863,BR +3050724864,3050725119,JP +3050725120,3050727423,AE +3050727424,3050727679,BR +3050727680,3050727935,US +3050727936,3050731263,AE +3050731264,3050731519,US +3050731520,3050732031,AE +3050732032,3050732287,US +3050732288,3050733311,AE +3050733312,3050733567,US +3050733568,3050734591,BR +3050734592,3050734847,AE +3050734848,3050735359,US +3050735360,3050735615,BA +3050735616,3050735871,US +3050735872,3050736127,PA +3050736128,3050736639,US +3050736640,3050737151,AE +3050737152,3050737407,US +3050737408,3050738431,BR +3050738432,3050738687,LT +3050738688,3050739199,BR +3050739200,3050739711,AE +3050739712,3050740223,US +3050740224,3050740479,TR +3050740480,3050740735,US +3050740736,3050741247,BR +3050741248,3050741759,PA +3050741760,3050742015,AE +3050742016,3050742271,BR 3050742272,3050742783,AU -3050742784,3050745343,CL +3050742784,3050745343,BR 3050745344,3050745599,AU -3050745600,3050756607,CL +3050745600,3050745855,AE +3050745856,3050746367,BR +3050746368,3050746879,US +3050746880,3050747391,AE +3050747392,3050747903,BR +3050747904,3050748415,AE +3050748416,3050749951,TH +3050749952,3050750463,PA +3050750464,3050750975,AE +3050750976,3050751743,US +3050751744,3050751999,BR +3050752000,3050753535,AE +3050753536,3050754047,BR +3050754048,3050755071,DE +3050755072,3050755583,AE +3050755584,3050755839,GB +3050755840,3050756095,BR +3050756096,3050756351,IT +3050756352,3050756607,CL 3050756608,3050756863,US -3050756864,3050762239,CL +3050756864,3050757375,BR +3050757376,3050757887,US +3050757888,3050758399,AE +3050758400,3050758655,BR +3050758656,3050758911,US +3050758912,3050759167,BR +3050759168,3050759679,JP +3050759680,3050759935,BR +3050759936,3050760191,DE +3050760192,3050760447,US +3050760448,3050760959,AE +3050760960,3050761471,US +3050761472,3050761727,BR +3050761728,3050762239,US 3050762240,3050762495,DE -3050762496,3050770687,CL +3050762496,3050763263,AE +3050763264,3050763519,US +3050763520,3050763775,BR +3050763776,3050764031,US +3050764032,3050764287,BR +3050764288,3050765311,US +3050765312,3050765567,AE +3050765568,3050765823,BR +3050765824,3050766079,AE +3050766080,3050766335,US +3050766336,3050766591,AE +3050766592,3050766847,US +3050766848,3050767615,AE +3050767616,3050767871,US +3050767872,3050768127,AE +3050768128,3050768383,BR +3050768384,3050768639,AE +3050768640,3050768895,US +3050768896,3050770175,AE +3050770176,3050770431,GE +3050770432,3050770687,AE 3050770688,3050770943,TR -3050770944,3050778367,CL +3050770944,3050771199,AE +3050771200,3050771455,BA +3050771456,3050771711,AE +3050771712,3050771967,US +3050771968,3050772223,AE +3050772224,3050772479,US +3050772480,3050772735,BR +3050772736,3050773503,AE +3050773504,3050773759,BR +3050773760,3050774271,AE +3050774272,3050774527,US +3050774528,3050774783,AE +3050774784,3050775039,US +3050775040,3050775295,AE +3050775296,3050775551,US +3050775552,3050776319,AE +3050776320,3050776575,US +3050776576,3050777855,AE +3050777856,3050778111,IN +3050778112,3050778367,AE 3050778368,3050778623,US -3050778624,3050778879,CL +3050778624,3050778879,AE 3050778880,3050779135,US -3050779136,3050785535,CL +3050779136,3050779647,TH +3050779648,3050780159,US +3050780160,3050780415,AE +3050780416,3050782719,US +3050782720,3050784511,AE +3050784512,3050784767,US +3050784768,3050785023,AE +3050785024,3050785279,US +3050785280,3050785535,AE 3050785536,3050785791,TR -3050785792,3050809087,CL -3050809088,3050809343,TR -3050809344,3050816255,CL +3050785792,3050786047,AE +3050786048,3050786303,US +3050786304,3050786559,AE +3050786560,3050786815,US +3050786816,3050787839,AE +3050787840,3050788095,US +3050788096,3050789631,AE +3050789632,3050789887,US +3050789888,3050807295,AE +3050807296,3050807807,US +3050807808,3050808831,TH +3050808832,3050809343,US +3050809344,3050809599,AU +3050809600,3050810367,US +3050810368,3050810623,AE +3050810624,3050812415,US +3050812416,3050812927,AE +3050812928,3050813183,BR +3050813184,3050813439,AE +3050813440,3050813951,JP +3050813952,3050814719,US +3050814720,3050814975,AE +3050814976,3050815231,US +3050815232,3050816255,AE 3050816256,3050816511,TR -3050816512,3050820095,CL -3050820096,3050820351,TR -3050820352,3050824703,CL -3050824704,3050824959,TR -3050824960,3050828031,CL -3050828032,3050828287,TR -3050828288,3050829311,US -3050829312,3050831871,CL +3050816512,3050816767,US +3050816768,3050817023,CO +3050817024,3050817279,US +3050817280,3050819583,AE +3050819584,3050819839,CL +3050819840,3050820351,US +3050820352,3050820607,AE +3050820608,3050821375,US +3050821376,3050821631,BR +3050821632,3050822399,AE +3050822400,3050822655,US +3050822656,3050822911,AE +3050822912,3050823167,US +3050823168,3050823679,AE +3050823680,3050824191,US +3050824192,3050824447,GB +3050824448,3050824703,AE +3050824704,3050825727,US +3050825728,3050826239,AE +3050826240,3050826495,US +3050826496,3050826751,AE +3050826752,3050827263,US +3050827264,3050827519,AE +3050827520,3050828031,US +3050828032,3050828287,DO +3050828288,3050829567,US +3050829568,3050829823,AE +3050829824,3050830335,US +3050830336,3050831359,JP +3050831360,3050831871,US 3050831872,3051360255,BR 3051360256,3051361279,MX 3051361280,3051364351,BR 3051364352,3051365375,CO +3051365376,3051366399,PE 3051366400,3051367423,BR +3051367424,3051368447,MX 3051368448,3051372543,BR 3051372544,3051373567,CL 3051373568,3051374591,BR @@ -88829,18 +90299,31 @@ 3051378688,3051379711,EC 3051380224,3051380479,BR 3051380736,3051388927,AR -3051388928,3051397119,PA +3051388928,3051389183,US +3051389184,3051390463,NL +3051390464,3051390719,US +3051390720,3051390975,NL +3051390976,3051392511,US +3051392512,3051393023,NL +3051393024,3051394047,US +3051394048,3051394303,NL +3051394304,3051395071,US +3051395072,3051395327,NL +3051395328,3051397119,US 3051397120,3051398143,CO 3051398144,3051399167,AR 3051399168,3051400191,BR 3051400192,3051401215,EC 3051401216,3051405311,AR 3051405312,3051406335,BR +3051406336,3051406847,EC 3051406848,3051407103,BR +3051407104,3051407359,AR 3051407360,3051408383,PE 3051408384,3051409407,DO 3051409408,3051411455,AR 3051411456,3051412479,BR +3051413248,3051413503,AR 3051413504,3051421695,PE 3051421696,3051429887,AR 3051429888,3051438079,VE @@ -88871,6 +90354,7 @@ 3051929600,3051930623,BR 3051930624,3051931647,AR 3051931648,3051940863,BR +3051940864,3051941887,AR 3051941888,3051942911,BR 3051943936,3051944959,BR 3051945472,3051945727,BR @@ -88892,6 +90376,7 @@ 3051968512,3051969535,VE 3051969536,3051970559,BR 3051970560,3051971583,MX +3051971584,3051972607,PY 3051972608,3051973631,BR 3051974656,3051975679,BR 3051975680,3051976703,DO @@ -88907,12 +90392,15 @@ 3051986688,3051986943,CO 3051986944,3051987967,VE 3051987968,3051988991,BR +3051988992,3051990015,CO 3051990016,3051992063,BR 3051992064,3051993087,AR 3051993088,3051995135,BR 3051995136,3052011519,PE 3052011520,3052273663,CO -3052273664,3052404735,AR +3052273664,3052306431,AR +3052306432,3052339199,PY +3052339200,3052404735,AR 3052404736,3053453311,CO 3053453312,3054501887,ID 3054501888,3054534655,HK @@ -88979,7 +90467,8 @@ 3056861184,3056992255,TH 3056992256,3057025023,CN 3057025024,3057026047,AP -3057026048,3057027071,US +3057026048,3057026303,US +3057026304,3057027071,IN 3057027072,3057028095,TW 3057028096,3057029119,ID 3057029120,3057029631,AU @@ -89028,7 +90517,8 @@ 3063949312,3063950335,DK 3063950336,3063951359,PT 3063951360,3063952383,RO -3063952384,3063955455,SG +3063952384,3063953407,SG +3063953408,3063955455,HK 3063955456,3063963647,CN 3063963648,3063971839,BD 3063971840,3063988223,AU @@ -89076,7 +90566,7 @@ 3068949504,3068950527,AU 3068950528,3068952575,NZ 3068952576,3068985343,CN -3068985344,3068986367,AP +3068985344,3068986367,HK 3068986368,3068987391,AU 3068987392,3068990463,IN 3068990464,3068991487,VN @@ -89397,6 +90887,7 @@ 3103887104,3103887359,ES 3103887616,3103887871,PL 3103887872,3103888127,UA +3103888128,3103888383,CH 3103888384,3103888639,DE 3103888640,3103888895,FR 3103888896,3103889151,RO @@ -89469,6 +90960,13 @@ 3103909120,3103909375,ES 3103909376,3103909631,FI 3103909632,3103909887,IT +3103909888,3103910143,GB +3103910144,3103910399,SE +3103910400,3103910655,SK +3103910656,3103910911,EE +3103910912,3103911167,LV +3103911168,3103911423,ES +3103911424,3103911679,UA 3103916032,3103917055,DE 3103917056,3103917311,GB 3103917312,3103918079,IT @@ -89599,7 +91097,7 @@ 3104038912,3104039935,PL 3104039936,3104040959,LT 3104040960,3104041983,DE -3104041984,3104043007,US +3104041984,3104043007,GB 3104043008,3104044031,RU 3104044032,3104045055,HU 3104045056,3104046079,GB @@ -89672,7 +91170,7 @@ 3104104960,3104105471,TR 3104105472,3104106495,FI 3104106496,3104107519,DE -3104107520,3104108543,UA +3104107520,3104108543,GR 3104108544,3104109567,GB 3104109568,3104110591,ES 3104110592,3104111615,FR @@ -89685,7 +91183,7 @@ 3104118784,3104120831,DE 3104120832,3104121855,CH 3104121856,3104122879,GB -3104122880,3104123903,RU +3104122880,3104123903,CY 3104123904,3104124159,SE 3104124160,3104124415,LU 3104124416,3104124671,SE @@ -90125,8 +91623,9 @@ 3104538112,3104538623,US 3104538624,3104539647,PL 3104539648,3104540671,RU -3104540672,3104541695,DE -3104541696,3104542719,GB +3104540672,3104541951,DE +3104541952,3104542207,GB +3104542208,3104542719,DE 3104542720,3104543743,NL 3104543744,3104544767,RU 3104544768,3104545791,IT @@ -90196,7 +91695,8 @@ 3104605184,3104606207,NL 3104606208,3104607231,GB 3104607232,3104608255,UA -3104608256,3104609279,NL +3104608256,3104609023,NL +3104609024,3104609279,GB 3104609280,3104610303,SE 3104610304,3104611327,RU 3104611328,3104612351,IE @@ -90240,7 +91740,9 @@ 3104649216,3104650239,GB 3104650240,3104651263,SI 3104651264,3104652287,TR -3104652288,3104653311,ES +3104652288,3104652799,ES +3104652800,3104653055,DE +3104653056,3104653311,ES 3104653312,3104654335,FR 3104654336,3104655359,DE 3104655360,3104656383,GB @@ -90264,7 +91766,8 @@ 3104673792,3104674815,PL 3104674816,3104675839,DE 3104675840,3104676863,LV -3104676864,3104677631,US +3104676864,3104677119,DE +3104677120,3104677631,US 3104677632,3104677887,DE 3104677888,3104678911,RU 3104678912,3104679935,IT @@ -90347,8 +91850,9 @@ 3104759808,3104760831,CZ 3104760832,3104761855,FR 3104761856,3104762879,CZ -3104762880,3104763391,IT -3104763392,3104763903,DE +3104762880,3104763135,IT +3104763136,3104763391,US +3104763392,3104763903,BR 3104763904,3104764927,SE 3104764928,3104765951,FR 3104765952,3104766975,IQ @@ -90501,7 +92005,8 @@ 3104897536,3104897791,AL 3104897792,3104898047,CZ 3104898048,3104899071,FR -3104899072,3104899583,RU +3104899072,3104899327,RU +3104899328,3104899583,VN 3104899584,3104899839,CZ 3104899840,3104900095,RU 3104900096,3104901119,DE @@ -90596,7 +92101,8 @@ 3104990208,3104991231,DE 3104991232,3104992255,BE 3104992256,3104995327,RU -3104995328,3104996351,GB +3104995328,3104995839,US +3104995840,3104996351,GB 3104996352,3104997375,RU 3104997376,3104998399,DE 3104998400,3104999423,PL @@ -90682,7 +92188,9 @@ 3105074176,3105075199,DE 3105075200,3105076223,RU 3105076224,3105077247,BE -3105077248,3105078271,IT +3105077248,3105077759,IT +3105077760,3105078015,DE +3105078016,3105078271,IT 3105078272,3105079295,ES 3105079296,3105080319,KZ 3105080320,3105081343,DE @@ -90868,7 +92376,8 @@ 3105239040,3105240063,FR 3105240064,3105241087,CH 3105241088,3105241343,US -3105241344,3105242111,TR +3105241344,3105241855,TR +3105241856,3105242111,US 3105242112,3105243135,RU 3105243136,3105244159,KZ 3105244160,3105245183,DE @@ -90978,7 +92487,7 @@ 3105341440,3105342463,ES 3105342464,3105343487,AE 3105343488,3105343999,HK -3105344000,3105344511,US +3105344000,3105344511,AT 3105344512,3105345535,ES 3105345536,3105346559,DE 3105346560,3105347583,NL @@ -91031,9 +92540,7 @@ 3105391616,3105392639,SE 3105392640,3105393663,IR 3105393664,3105395711,FR -3105395712,3105395967,IR -3105395968,3105396223,ES -3105396224,3105396735,IR +3105395712,3105396735,IR 3105396736,3105398783,FR 3105398784,3105399807,GB 3105399808,3105400831,PL @@ -91123,7 +92630,8 @@ 3105480704,3105481727,CH 3105481728,3105482751,NL 3105482752,3105483775,IT -3105483776,3105486847,GB +3105483776,3105486335,GB +3105486336,3105486847,HK 3105486848,3105487871,SK 3105487872,3105488895,IS 3105488896,3105489151,LU @@ -91361,7 +92869,8 @@ 3105701888,3105702911,FR 3105702912,3105703935,ES 3105703936,3105704959,IT -3105704960,3105705983,DK +3105704960,3105705215,CH +3105705216,3105705983,DK 3105705984,3105707007,HU 3105707008,3105708031,PL 3105708032,3105709055,AT @@ -91738,8 +93247,7 @@ 3106063360,3106064383,AT 3106064384,3106064639,VG 3106064640,3106064895,US -3106064896,3106065151,NL -3106065152,3106065407,MD +3106064896,3106065407,MD 3106065408,3106066431,IT 3106066432,3106067455,GB 3106067456,3106068479,DE @@ -91806,7 +93314,7 @@ 3106135040,3106135551,EE 3106135552,3106136063,KZ 3106136064,3106137087,BE -3106137088,3106138111,GB +3106137088,3106138111,NL 3106138112,3106139135,DE 3106139136,3106140159,SE 3106140160,3106141183,DE @@ -92027,8 +93535,9 @@ 3106333696,3106334719,GB 3106334720,3106335743,NL 3106335744,3106336767,NO -3106336768,3106337023,US -3106337024,3106338815,GB +3106336768,3106337023,DE +3106337024,3106337279,US +3106337280,3106338815,GB 3106338816,3106339839,PL 3106339840,3106340863,IT 3106340864,3106341887,BA @@ -92239,7 +93748,8 @@ 3106540544,3106541567,RU 3106541568,3106542591,GB 3106542592,3106543615,ES -3106543616,3106544639,IR +3106543616,3106543871,IR +3106543872,3106544639,US 3106544640,3106545663,FR 3106545664,3106546687,CY 3106546688,3106547711,MK @@ -92264,7 +93774,7 @@ 3106570240,3106571263,UA 3106571264,3106572287,FR 3106572288,3106573311,SE -3106573312,3106573823,AE +3106573312,3106573823,RU 3106573824,3106574335,IQ 3106574336,3106575359,RU 3106575360,3106576383,NL @@ -92567,7 +94077,7 @@ 3106859264,3106859519,US 3106859520,3106860031,NL 3106860032,3106861055,UA -3106861056,3106862079,PT +3106861056,3106862079,IN 3106862080,3106863103,PL 3106863104,3106864127,UA 3106864128,3106865151,IE @@ -92598,7 +94108,8 @@ 3106887680,3106888703,RS 3106888704,3106889727,LV 3106889728,3106890751,IT -3106890752,3106891775,US +3106890752,3106891519,NL +3106891520,3106891775,US 3106891776,3106892799,GB 3106892800,3106893823,IT 3106893824,3106894847,NL @@ -92883,7 +94394,9 @@ 3107165184,3107166207,NL 3107166208,3107167231,AE 3107167232,3107168255,RU -3107168256,3107169279,ES +3107168256,3107168511,ES +3107168512,3107168767,UA +3107168768,3107169279,ES 3107169280,3107170303,HK 3107170304,3107171327,IT 3107171328,3107172351,GB @@ -92963,8 +94476,8 @@ 3107239936,3107241983,AT 3107241984,3107243007,PL 3107243008,3107244031,GB -3107244032,3107244543,RU -3107244544,3107245055,GB +3107244032,3107244287,RU +3107244288,3107245055,GB 3107245056,3107246079,BG 3107246080,3107248127,NL 3107248128,3107249151,CZ @@ -93011,7 +94524,7 @@ 3107283968,3107284479,AL 3107284480,3107284735,TR 3107284736,3107284991,AL -3107284992,3107286015,RU +3107284992,3107286015,TR 3107286016,3107288063,AT 3107288064,3107289087,NO 3107289088,3107290111,IT @@ -93212,8 +94725,7 @@ 3107486720,3107487743,AT 3107487744,3107489791,DE 3107489792,3107490815,MT -3107490816,3107491327,US -3107491328,3107491839,DK +3107490816,3107491839,US 3107491840,3107492863,NL 3107492864,3107493887,DE 3107493888,3107494399,FR @@ -93236,8 +94748,8 @@ 3107508224,3107509247,PL 3107509248,3107510271,SE 3107510272,3107511295,IT -3107511296,3107511807,RS -3107511808,3107512319,SI +3107511296,3107512063,SI +3107512064,3107512319,RS 3107512320,3107513343,NL 3107513344,3107514367,DE 3107514368,3107515391,NL @@ -93274,7 +94786,7 @@ 3107543296,3107544063,DE 3107544064,3107545087,GB 3107545088,3107546111,NL -3107546112,3107547135,GB +3107546112,3107547135,IE 3107547136,3107548159,SE 3107548160,3107549183,IT 3107549184,3107551231,IE @@ -93408,7 +94920,7 @@ 3107678208,3107679231,DK 3107679232,3107680255,PL 3107680256,3107680767,IR -3107680768,3107681279,GB +3107680768,3107681279,DK 3107681280,3107682303,FI 3107682304,3107683327,CZ 3107683328,3107684351,GB @@ -93437,7 +94949,7 @@ 3107708672,3107708927,US 3107708928,3107709951,PL 3107709952,3107710975,DK -3107710976,3107711999,BR +3107710976,3107711999,RU 3107712000,3107713023,NO 3107713024,3107714047,RO 3107714048,3107715071,RU @@ -93533,7 +95045,7 @@ 3107804160,3107805183,CZ 3107805184,3107806207,GB 3107806208,3107807231,RU -3107807232,3107808255,GB +3107807232,3107808255,EU 3107808256,3107809279,DE 3107809280,3107810303,BY 3107810304,3107811327,SE @@ -93563,12 +95075,9 @@ 3107834880,3107835903,ES 3107835904,3107837951,GB 3107837952,3107838207,BR -3107838208,3107838463,ES -3107838464,3107838975,NL +3107838208,3107838975,NL 3107838976,3107839231,BR -3107839232,3107839743,NL -3107839744,3107839999,ES -3107840000,3107841023,NL +3107839232,3107841023,NL 3107841024,3107842047,CZ 3107842048,3107843071,FI 3107843072,3107844095,SE @@ -93655,7 +95164,8 @@ 3107920896,3107921919,ES 3107921920,3107922175,UA 3107922176,3107922431,BG -3107922432,3107922943,UA +3107922432,3107922687,UA +3107922688,3107922943,BG 3107922944,3107923967,CH 3107923968,3107924991,IT 3107924992,3107926015,HU @@ -93747,7 +95257,8 @@ 3107999232,3107999487,NL 3107999488,3107999743,GB 3107999744,3108000767,TR -3108000768,3108001791,MK +3108000768,3108001279,BG +3108001280,3108001791,MK 3108001792,3108002815,GB 3108002816,3108003839,RO 3108003840,3108004863,DE @@ -93804,7 +95315,7 @@ 3108059136,3108060159,FR 3108060160,3108061183,CH 3108061184,3108062207,ES -3108062208,3108062463,TR +3108062208,3108062463,DK 3108062464,3108062719,SK 3108062720,3108062975,NL 3108062976,3108063231,UA @@ -93834,7 +95345,7 @@ 3108079872,3108080127,BY 3108080128,3108080639,RU 3108080640,3108080895,DE -3108080896,3108081151,IT +3108080896,3108081151,FR 3108081152,3108081407,GB 3108081408,3108081663,DK 3108081664,3108082687,IL @@ -93853,8 +95364,9 @@ 3108091904,3108092927,ES 3108092928,3108093951,SE 3108093952,3108095999,DE -3108096000,3108096511,LT -3108096512,3108097023,RU +3108096000,3108096511,NL +3108096512,3108096767,RU +3108096768,3108097023,NL 3108097024,3108097791,TR 3108097792,3108098047,GB 3108098048,3108099071,DE @@ -94023,7 +95535,7 @@ 3108252672,3108253695,LU 3108253696,3108254719,ME 3108254720,3108255743,CH -3108255744,3108256255,IT +3108255744,3108256255,FI 3108256256,3108256767,US 3108256768,3108257791,RS 3108257792,3108258815,CH @@ -94218,8 +95730,7 @@ 3108451328,3108452351,RU 3108452352,3108453375,LU 3108453376,3108454399,NL -3108454400,3108455423,EU -3108455424,3108456447,RU +3108454400,3108456447,RU 3108456448,3108457471,GB 3108457472,3108459519,RU 3108459520,3108460543,DE @@ -94292,8 +95803,7 @@ 3108517888,3108518911,BG 3108518912,3108519935,SI 3108519936,3108520959,CH -3108520960,3108521983,DE -3108521984,3108523007,AT +3108520960,3108523007,AT 3108523008,3108524031,IT 3108524032,3108525055,IR 3108525056,3108526079,LV @@ -94371,7 +95881,8 @@ 3108598272,3108598527,IR 3108598528,3108598783,NL 3108598784,3108600831,CH -3108600832,3108601855,RU +3108600832,3108601343,NL +3108601344,3108601855,RU 3108601856,3108602879,TR 3108602880,3108603903,EE 3108603904,3108604927,IT @@ -94483,8 +95994,7 @@ 3108716544,3108717567,RU 3108717568,3108718591,FR 3108718592,3108719615,DE -3108719616,3108720383,NL -3108720384,3108720639,RU +3108719616,3108720639,NL 3108720640,3108721663,GI 3108721664,3108723711,RU 3108723712,3108724735,GB @@ -94686,7 +96196,8 @@ 3108913152,3108914175,IT 3108914176,3108915199,NO 3108915200,3108916223,PL -3108916224,3108917247,BR +3108916224,3108916735,BR +3108916736,3108917247,US 3108917248,3108918271,FR 3108918272,3108919295,TR 3108919296,3108920319,GB @@ -94743,14 +96254,16 @@ 3108971520,3108972543,ES 3108972544,3108973567,MD 3108973568,3108974591,DE -3108974592,3108975615,BR +3108974592,3108975359,BR +3108975360,3108975615,RU 3108975616,3108976639,IT 3108976640,3108977663,GB 3108977664,3108978687,IR 3108978688,3108979711,DE 3108979712,3108980735,RU 3108980736,3108981759,DE -3108981760,3108982783,BR +3108981760,3108982527,BR +3108982528,3108982783,RU 3108982784,3108983807,NL 3108983808,3108984063,AE 3108984064,3108984319,NL @@ -94918,7 +96431,7 @@ 3109128192,3109129215,US 3109129216,3109130239,LB 3109130240,3109130751,US -3109130752,3109131263,ES +3109130752,3109131263,RU 3109131264,3109132287,DE 3109132288,3109133311,TR 3109133312,3109134335,FR @@ -95118,7 +96631,8 @@ 3109318656,3109319679,FR 3109319680,3109320703,ES 3109320704,3109321727,DE -3109321728,3109322751,GR +3109321728,3109321983,FR +3109321984,3109322751,GR 3109322752,3109323775,ES 3109323776,3109324799,DK 3109324800,3109325823,PL @@ -95237,8 +96751,7 @@ 3109433344,3109434367,FR 3109434368,3109434623,PL 3109434624,3109435391,FR -3109435392,3109435647,RU -3109435648,3109436415,UA +3109435392,3109436415,UA 3109436416,3109437439,SM 3109437440,3109438463,RO 3109438464,3109439487,DK @@ -95279,7 +96792,8 @@ 3109474304,3109476351,ES 3109476352,3109477375,GB 3109477376,3109478399,IS -3109478400,3109478911,CH +3109478400,3109478655,CH +3109478656,3109478911,DE 3109478912,3109479167,NL 3109479168,3109480447,CH 3109480448,3109481471,DE @@ -95386,7 +96900,7 @@ 3109575680,3109576703,DE 3109576704,3109577215,BR 3109577216,3109577727,RU -3109577728,3109577983,DE +3109577728,3109577983,NL 3109577984,3109578239,US 3109578240,3109578495,AU 3109578496,3109578751,US @@ -95564,7 +97078,7 @@ 3109738752,3109739007,CH 3109739008,3109739263,US 3109739264,3109739519,SG -3109739520,3109740543,US +3109739520,3109740543,NL 3109740544,3109741567,RU 3109741568,3109743615,DE 3109743616,3109744639,HU @@ -95574,8 +97088,8 @@ 3109745664,3109746687,US 3109746688,3109747711,SY 3109747712,3109748223,UA -3109748224,3109748735,ES -3109748736,3109749759,MT +3109748224,3109748735,IQ +3109748736,3109749759,AT 3109749760,3109750783,DE 3109750784,3109751039,US 3109751040,3109751295,NL @@ -95696,7 +97210,7 @@ 3109864448,3109865471,BE 3109865472,3109866495,AT 3109866496,3109867775,DE -3109867776,3109868031,GB +3109867776,3109868031,US 3109868032,3109868287,PT 3109868288,3109868543,RU 3109868544,3109869567,TR @@ -95750,7 +97264,7 @@ 3109903360,3109904383,PL 3109904384,3109905407,RO 3109905408,3109906431,RS -3109906432,3109907455,MD +3109906432,3109907455,GB 3109907456,3109908479,RU 3109908480,3109909503,ES 3109909504,3109910527,DE @@ -95817,7 +97331,7 @@ 3109958656,3109959679,CZ 3109959680,3109960703,FR 3109960704,3109961727,SE -3109961728,3109961983,GB +3109961728,3109961983,US 3109961984,3109962495,NL 3109962496,3109962751,RU 3109962752,3109963775,PL @@ -95845,9 +97359,9 @@ 3109984256,3109985279,RU 3109985280,3109986303,SK 3109986304,3109987327,IT -3109987328,3109987839,RU +3109987328,3109987839,NL 3109987840,3109988095,DE -3109988096,3109988351,RU +3109988096,3109988351,CZ 3109988352,3109989375,NL 3109989376,3109990399,RU 3109990400,3109991423,GB @@ -96040,8 +97554,9 @@ 3110158336,3110159359,PS 3110159360,3110160383,SI 3110160384,3110161407,BG -3110161408,3110162175,US -3110162176,3110162431,SA +3110161408,3110161919,LV +3110161920,3110162175,US +3110162176,3110162431,RU 3110162432,3110162687,IE 3110162688,3110162943,DE 3110162944,3110163199,NL @@ -96106,7 +97621,7 @@ 3110217216,3110217471,DE 3110217472,3110217727,DK 3110217728,3110218495,US -3110218496,3110218751,SA +3110218496,3110218751,RU 3110218752,3110219775,GB 3110219776,3110220799,DE 3110220800,3110221823,NL @@ -96173,8 +97688,7 @@ 3110278400,3110278655,GB 3110278656,3110278911,TR 3110278912,3110279167,NL -3110279168,3110280703,GB -3110280704,3110281215,LT +3110279168,3110281215,GB 3110281216,3110282239,LB 3110282240,3110283263,SE 3110283264,3110284287,ES @@ -96277,7 +97791,9 @@ 3110375424,3110376447,AT 3110376448,3110377471,GB 3110377472,3110378495,SA -3110378496,3110379519,US +3110378496,3110379007,US +3110379008,3110379263,RU +3110379264,3110379519,US 3110379520,3110380543,DE 3110380544,3110381567,IT 3110381568,3110382591,LB @@ -96362,9 +97878,9 @@ 3110452224,3110453247,PL 3110453248,3110454271,GB 3110454272,3110455295,NL -3110455296,3110456063,US -3110456064,3110456319,SA -3110456320,3110457343,RU +3110455296,3110455807,US +3110455808,3110456063,LV +3110456064,3110457343,RU 3110457344,3110458367,FR 3110458368,3110459391,IT 3110459392,3110460415,UA @@ -96463,7 +97979,8 @@ 3110549504,3110550527,NL 3110550528,3110551039,FR 3110551040,3110551295,US -3110551296,3110552575,FR +3110551296,3110551551,RU +3110551552,3110552575,FR 3110552576,3110553599,RU 3110553600,3110554623,US 3110554624,3110555647,NL @@ -96509,17 +98026,18 @@ 3110594560,3110595583,DE 3110595584,3110597631,NL 3110597632,3110599679,IR -3110599680,3110600703,RU +3110599680,3110600191,DE +3110600192,3110600703,RU 3110600704,3110601727,GR 3110601728,3110602751,RU 3110602752,3110603775,CH -3110603776,3110604799,MD +3110603776,3110604799,SE 3110604800,3110605823,CH 3110605824,3110606847,TR 3110606848,3110607871,IT 3110607872,3110608895,NL -3110608896,3110609919,US -3110609920,3110611967,RO +3110608896,3110610943,US +3110610944,3110611967,RO 3110611968,3110612991,UA 3110612992,3110615039,RO 3110615040,3110616063,QA @@ -96548,11 +98066,11 @@ 3110635520,3110635775,GB 3110635776,3110636031,SE 3110636032,3110636287,DE -3110636288,3110636543,SE +3110636288,3110636543,US 3110636544,3110637567,DE 3110637568,3110638591,GR 3110638592,3110639359,US -3110639360,3110639615,SA +3110639360,3110639615,RU 3110639616,3110640639,ES 3110640640,3110641663,IQ 3110641664,3110642687,DE @@ -96590,7 +98108,7 @@ 3110663168,3110664191,LB 3110664192,3110665215,RU 3110665216,3110666239,LB -3110666240,3110667263,LU +3110666240,3110667263,IN 3110667264,3110668031,RO 3110668032,3110668287,US 3110668288,3110668543,PT @@ -96681,7 +98199,7 @@ 3110752256,3110753279,NL 3110753280,3110754303,DE 3110754304,3110755327,IE -3110755328,3110756351,RU +3110755328,3110756351,DE 3110756352,3110757375,US 3110757376,3110758399,CY 3110758400,3110758911,RU @@ -96715,7 +98233,7 @@ 3110777856,3110778879,SE 3110778880,3110779903,DE 3110779904,3110780927,AT -3110780928,3110781951,PS +3110780928,3110781951,US 3110781952,3110782975,RU 3110782976,3110783999,IR 3110784000,3110784255,RU @@ -96745,8 +98263,7 @@ 3110800384,3110801407,DK 3110801408,3110802431,ES 3110802432,3110804479,DE -3110804480,3110806015,IR -3110806016,3110806527,AE +3110804480,3110806527,IR 3110806528,3110809599,NL 3110809600,3110810623,LB 3110810624,3110811647,DE @@ -96945,7 +98462,9 @@ 3111006208,3111007231,PL 3111007232,3111008255,GB 3111008256,3111009279,RU -3111009280,3111010303,BG +3111009280,3111009535,BG +3111009536,3111009791,GB +3111009792,3111010303,BG 3111010304,3111012351,ES 3111012352,3111013375,CH 3111013376,3111014399,ES @@ -97001,9 +98520,9 @@ 3111061504,3111063551,IR 3111063552,3111064575,FR 3111064576,3111065599,GB -3111065600,3111066111,TR +3111065600,3111066111,RU 3111066112,3111066367,US -3111066368,3111066623,FR +3111066368,3111066623,RU 3111066624,3111067647,NL 3111067648,3111068671,DE 3111068672,3111069695,IS @@ -97076,7 +98595,7 @@ 3111136256,3111137279,NL 3111137280,3111139071,CH 3111139072,3111139327,US -3111139328,3111139839,JP +3111139328,3111139839,RU 3111139840,3111140351,BR 3111140352,3111141375,IT 3111141376,3111142399,NL @@ -97086,7 +98605,8 @@ 3111143936,3111144191,TR 3111144192,3111144447,RU 3111144448,3111145471,ES -3111145472,3111145983,RU +3111145472,3111145727,BG +3111145728,3111145983,RU 3111145984,3111146239,FI 3111146240,3111146495,RU 3111146496,3111149567,IT @@ -97098,8 +98618,7 @@ 3111154688,3111155711,PL 3111155712,3111156735,RU 3111156736,3111157759,DE -3111157760,3111158271,AF -3111158272,3111158783,IR +3111157760,3111158783,IR 3111158784,3111159807,CH 3111159808,3111160831,SE 3111160832,3111161855,RU @@ -97164,7 +98683,7 @@ 3111221248,3111223295,DE 3111223296,3111224319,GB 3111224320,3111225343,KZ -3111225344,3111225855,AU +3111225344,3111225855,RU 3111225856,3111226367,US 3111226368,3111227391,PT 3111227392,3111230463,DE @@ -97308,7 +98827,7 @@ 3111348224,3111348479,DE 3111348480,3111348735,HK 3111348736,3111349247,DE -3111349248,3111350271,GB +3111349248,3111350271,US 3111350272,3111351295,PL 3111351296,3111353343,GB 3111353344,3111353599,AT @@ -97333,7 +98852,8 @@ 3111373824,3111374079,FR 3111374080,3111374335,DE 3111374336,3111374591,US -3111374592,3111375871,TR +3111374592,3111374847,MD +3111374848,3111375871,TR 3111375872,3111376895,IL 3111376896,3111377919,BE 3111377920,3111378943,RO @@ -97484,7 +99004,7 @@ 3111515136,3111516159,RU 3111516160,3111518207,DE 3111518208,3111519231,FR -3111519232,3111520255,RO +3111519232,3111520255,DE 3111520256,3111521279,IQ 3111521280,3111522303,IR 3111522304,3111523327,FR @@ -97619,11 +99139,11 @@ 3111648768,3111649023,FR 3111649024,3111649279,US 3111649280,3111650303,GB -3111650304,3111651071,US -3111651072,3111651327,GB +3111650304,3111651327,US 3111651328,3111652351,FR 3111652352,3111653375,US -3111653376,3111653887,DE +3111653376,3111653631,DE +3111653632,3111653887,GB 3111653888,3111654911,US 3111654912,3111655167,DE 3111655168,3111655423,SI @@ -97702,7 +99222,7 @@ 3111730176,3111731199,DK 3111731200,3111732223,SK 3111732224,3111733247,DE -3111733248,3111734271,RU +3111733248,3111734271,US 3111734272,3111735295,GB 3111735296,3111736319,KZ 3111736320,3111737343,RU @@ -97751,8 +99271,7 @@ 3111773184,3111774207,US 3111774208,3111775231,ES 3111775232,3111776255,AM -3111776256,3111777279,EU -3111777280,3111778303,RU +3111776256,3111778303,RU 3111778304,3111779327,GB 3111779328,3111780351,SA 3111780352,3111780607,GB @@ -97863,7 +99382,7 @@ 3111882752,3111883775,GB 3111883776,3111884799,OM 3111884800,3111885823,GB -3111885824,3111886847,NL +3111885824,3111886847,US 3111886848,3111887871,PL 3111887872,3111888895,RU 3111888896,3111889919,EU @@ -97914,7 +99433,7 @@ 3111942144,3111943167,DE 3111943168,3111944191,PT 3111944192,3111945215,PL -3111945216,3111946239,CH +3111945216,3111946239,US 3111946240,3111948287,ES 3111948288,3111949311,AT 3111949312,3111950335,IQ @@ -97994,7 +99513,7 @@ 3112025088,3112026111,GB 3112026112,3112027135,IT 3112027136,3112028159,CH -3112028160,3112029183,RU +3112028160,3112029183,US 3112029184,3112030207,GB 3112030208,3112031231,AT 3112031232,3112032255,CH @@ -98002,7 +99521,8 @@ 3112033280,3112034303,DK 3112034304,3112034559,DE 3112034560,3112034815,US -3112034816,3112035327,DE +3112034816,3112035071,GB +3112035072,3112035327,DE 3112035328,3112036351,RU 3112036352,3112037375,DE 3112037376,3112038399,NL @@ -98052,12 +99572,14 @@ 3112080896,3112081151,SG 3112081152,3112081407,CH 3112081408,3112082431,DK -3112082432,3112083455,DE +3112082432,3112083455,US 3112083456,3112085503,GB 3112085504,3112086527,DE 3112086528,3112087551,GB 3112087552,3112088575,TR -3112088576,3112089599,RU +3112088576,3112088831,RU +3112088832,3112089087,NL +3112089088,3112089599,RU 3112089600,3112090623,NO 3112090624,3112091647,PL 3112091648,3112092671,RU @@ -98226,8 +99748,7 @@ 3112248320,3112249343,RO 3112249344,3112250367,ES 3112250368,3112251391,FR -3112251392,3112251647,RU -3112251648,3112252415,KZ +3112251392,3112252415,KZ 3112252416,3112253439,CH 3112253440,3112254463,RU 3112254464,3112255487,DK @@ -98287,7 +99808,7 @@ 3112310784,3112312831,ES 3112312832,3112313855,DE 3112313856,3112314879,GB -3112314880,3112315903,NL +3112314880,3112315903,US 3112315904,3112316415,SE 3112316416,3112316927,NL 3112316928,3112317951,IQ @@ -98335,7 +99856,8 @@ 3112354816,3112355839,GB 3112355840,3112356863,ES 3112356864,3112357887,DE -3112357888,3112358911,PL +3112357888,3112358143,PL +3112358144,3112358911,CZ 3112358912,3112359935,RU 3112359936,3112360959,ES 3112360960,3112361983,SK @@ -98411,7 +99933,8 @@ 3112446976,3112447999,DE 3112448000,3112449023,US 3112449024,3112449279,GB -3112449280,3112450047,DE +3112449280,3112449535,SG +3112449536,3112450047,DE 3112450048,3112451071,IT 3112451072,3112452095,LU 3112452096,3112453119,FR @@ -98928,9 +100451,7 @@ 3112946688,3112947711,DE 3112947712,3112948735,AT 3112948736,3112949759,RU -3112949760,3112950271,CZ -3112950272,3112950527,SK -3112950528,3112950783,CZ +3112949760,3112950783,CZ 3112950784,3112951807,JO 3112951808,3112952831,SK 3112952832,3112953855,IL @@ -99089,7 +100610,9 @@ 3113097728,3113098239,DE 3113098240,3113098751,IE 3113098752,3113099263,GB -3113099264,3113100287,US +3113099264,3113099519,US +3113099520,3113099775,NL +3113099776,3113100287,US 3113100288,3113102335,LB 3113102336,3113103359,ES 3113103360,3113104383,SK @@ -99171,7 +100694,7 @@ 3113178112,3113179135,GB 3113179136,3113180159,DE 3113180160,3113182207,ES -3113182208,3113183231,US +3113182208,3113183231,GB 3113183232,3113184255,NL 3113184256,3113185279,RU 3113185280,3113186303,CZ @@ -99200,7 +100723,7 @@ 3113210880,3113211903,GB 3113211904,3113212927,NO 3113212928,3113213695,RU -3113213696,3113213951,UA +3113213696,3113213951,US 3113213952,3113214975,GB 3113214976,3113216255,DE 3113216256,3113216511,NL @@ -99222,7 +100745,7 @@ 3113225984,3113226239,IQ 3113226240,3113227263,DE 3113227264,3113228287,NL -3113228288,3113229311,US +3113228288,3113229311,GB 3113229312,3113230335,RU 3113230336,3113231359,FR 3113231360,3113232383,CH @@ -99303,7 +100826,7 @@ 3113302016,3113303039,RU 3113303040,3113304063,NL 3113304064,3113306111,ES -3113306112,3113307135,US +3113306112,3113307135,GB 3113307136,3113308159,FR 3113308160,3113309183,US 3113309184,3113310207,IT @@ -99326,7 +100849,9 @@ 3113323520,3113324543,RU 3113324544,3113325567,HU 3113325568,3113326591,CH -3113326592,3113328639,GB +3113326592,3113327871,GB +3113327872,3113328127,DE +3113328128,3113328639,GB 3113328640,3113329663,CZ 3113329664,3113330687,GR 3113330688,3113331711,DE @@ -99633,8 +101158,7 @@ 3113613824,3113614079,CH 3113614080,3113614335,GB 3113614336,3113615359,IL -3113615360,3113615615,NL -3113615616,3113615871,GB +3113615360,3113615871,NL 3113615872,3113616127,TR 3113616128,3113616383,GB 3113616384,3113617407,CH @@ -99890,9 +101414,7 @@ 3113853952,3113855999,ES 3113856000,3113856511,GB 3113856512,3113857023,QA -3113857024,3113857279,BR -3113857280,3113857535,MX -3113857536,3113857791,US +3113857024,3113857791,AP 3113857792,3113858047,CA 3113858048,3113859071,US 3113859072,3113860095,IR @@ -99997,7 +101519,7 @@ 3113954304,3113955327,NL 3113955328,3113956351,SK 3113956352,3113956607,NL -3113956608,3113957119,GB +3113956608,3113957119,US 3113957120,3113957375,EU 3113957376,3113958399,DE 3113958400,3113961471,ES @@ -100134,7 +101656,8 @@ 3114083328,3114084351,MT 3114084352,3114085375,TR 3114085376,3114086399,RS -3114086400,3114087423,GB +3114086400,3114086911,GB +3114086912,3114087423,EU 3114087424,3114088447,IT 3114088448,3114089471,NO 3114089472,3114091007,NL @@ -100410,9 +101933,7 @@ 3114316800,3114318847,GB 3114318848,3114319871,RU 3114319872,3114320127,EU -3114320128,3114320383,US -3114320384,3114320639,LB -3114320640,3114320895,US +3114320128,3114320895,LB 3114320896,3114321919,TR 3114321920,3114323967,DE 3114323968,3114324991,CZ @@ -100448,7 +101969,7 @@ 3114353664,3114353919,AE 3114353920,3114354687,US 3114354688,3114355711,HU -3114355712,3114355967,LT +3114355712,3114355967,NL 3114355968,3114356223,DK 3114356224,3114356479,NL 3114356480,3114356735,KZ @@ -100661,7 +102182,7 @@ 3114536960,3114537983,IL 3114537984,3114541055,SA 3114541056,3114542079,BA -3114542080,3114543103,DE +3114542080,3114543103,AT 3114543104,3114544127,ES 3114544128,3114545151,GB 3114545152,3114546175,MD @@ -100684,7 +102205,10 @@ 3114560512,3114561535,DE 3114561536,3114562559,AT 3114562560,3114563583,ES -3114563584,3114564607,GB +3114563584,3114563839,US +3114563840,3114564095,DE +3114564096,3114564351,SG +3114564352,3114564607,AU 3114564608,3114565631,FR 3114565632,3114566655,LT 3114566656,3114567679,SY @@ -100699,7 +102223,7 @@ 3114575872,3114576895,US 3114576896,3114577151,NL 3114577152,3114577663,RU -3114577664,3114577919,UA +3114577664,3114577919,US 3114577920,3114578943,IT 3114578944,3114579967,GB 3114579968,3114580223,CH @@ -100731,13 +102255,12 @@ 3114606592,3114607615,FR 3114607616,3114608639,SK 3114608640,3114609663,IR -3114609664,3114609919,NL -3114609920,3114610175,GB +3114609664,3114610175,NL 3114610176,3114610431,TR 3114610432,3114611711,NL 3114611712,3114612735,EU 3114612736,3114613759,IT -3114613760,3114614783,DE +3114613760,3114614783,AT 3114614784,3114615807,FR 3114615808,3114616831,NL 3114616832,3114617855,DK @@ -100849,7 +102372,8 @@ 3114708992,3114710015,DE 3114710016,3114711039,NO 3114711040,3114712063,FI -3114712064,3114713087,DE +3114712064,3114712319,NL +3114712320,3114713087,DE 3114713088,3114714111,CH 3114714112,3114714623,US 3114714624,3114715135,RU @@ -101021,8 +102545,8 @@ 3114857472,3114858495,DK 3114858496,3114860543,NL 3114860544,3114860799,DE -3114860800,3114861311,US -3114861312,3114861567,DE +3114860800,3114861055,US +3114861056,3114861567,DE 3114861568,3114861823,GB 3114861824,3114862079,ES 3114862080,3114862335,IR @@ -101091,7 +102615,8 @@ 3114923008,3114924031,GB 3114924032,3114925055,RS 3114925056,3114925311,DE -3114925312,3114925823,US +3114925312,3114925567,US +3114925568,3114925823,AP 3114925824,3114926079,GB 3114926080,3114927103,RU 3114927104,3114928127,NL @@ -101109,7 +102634,7 @@ 3114936320,3114936575,US 3114936576,3114936831,TR 3114936832,3114937087,AE -3114937088,3114937343,NL +3114937088,3114937343,TR 3114937344,3114938367,FR 3114938368,3114939391,CH 3114939392,3114940415,RU @@ -101338,8 +102863,7 @@ 3115128832,3115129599,DE 3115129600,3115129855,GB 3115129856,3115130879,BA -3115130880,3115131391,DE -3115131392,3115131647,RO +3115130880,3115131647,DE 3115131648,3115131903,US 3115131904,3115132927,RU 3115132928,3115133951,KW @@ -101372,7 +102896,9 @@ 3115159552,3115160575,NL 3115160576,3115161599,CZ 3115161600,3115162623,FI -3115162624,3115163647,RU +3115162624,3115162879,CZ +3115162880,3115163135,RU +3115163136,3115163647,CZ 3115163648,3115164671,NL 3115164672,3115165695,IE 3115165696,3115166719,IR @@ -101508,11 +103034,9 @@ 3115276544,3115276799,DE 3115276800,3115277055,GB 3115277056,3115277311,PT -3115277312,3115277567,UA -3115277568,3115277823,BG -3115277824,3115278335,UA +3115277312,3115278335,UA 3115278336,3115279359,NO -3115279360,3115279615,CN +3115279360,3115279615,AP 3115279616,3115279871,GB 3115279872,3115280127,DE 3115280128,3115280383,FR @@ -101548,7 +103072,7 @@ 3115309056,3115310079,BE 3115310080,3115311103,CZ 3115311104,3115311615,US -3115311616,3115312127,JP +3115311616,3115312127,RU 3115312128,3115313151,KH 3115313152,3115314175,US 3115314176,3115315199,UA @@ -101578,8 +103102,9 @@ 3115340800,3115341823,ES 3115341824,3115342335,US 3115342336,3115342591,GB -3115342592,3115342847,US -3115342848,3115343871,GB +3115342592,3115343103,US +3115343104,3115343359,TR +3115343360,3115343871,US 3115343872,3115344895,SE 3115344896,3115345919,IE 3115345920,3115346943,ES @@ -101625,8 +103150,7 @@ 3115387904,3115388927,MK 3115388928,3115389951,AT 3115389952,3115390207,DE -3115390208,3115390719,US -3115390720,3115390975,NL +3115390208,3115390975,US 3115390976,3115391999,JP 3115392000,3115393023,AL 3115393024,3115395071,IT @@ -101639,7 +103163,9 @@ 3115401216,3115402239,GB 3115402240,3115403263,SE 3115403264,3115404287,ES -3115404288,3115405567,US +3115404288,3115404799,US +3115404800,3115405311,RU +3115405312,3115405567,US 3115405568,3115405823,DE 3115405824,3115406079,US 3115406080,3115406335,GB @@ -101761,7 +103287,7 @@ 3115514880,3115515903,IT 3115515904,3115517951,RU 3115517952,3115518975,KZ -3115518976,3115519999,US +3115518976,3115519999,GB 3115520000,3115521023,CH 3115521024,3115522047,GB 3115522048,3115523071,TR @@ -101822,7 +103348,7 @@ 3115568128,3115569151,NL 3115569152,3115570175,GB 3115570176,3115571199,UA -3115571200,3115572223,DE +3115571200,3115572223,GB 3115572224,3115573247,IR 3115573248,3115574271,RU 3115574272,3115576319,ES @@ -101883,8 +103409,7 @@ 3115618816,3115619071,GB 3115619072,3115619327,US 3115619328,3115620351,NL -3115620352,3115621375,CA -3115621376,3115622399,GB +3115620352,3115622399,GB 3115622400,3115623423,RU 3115623424,3115624447,DE 3115624448,3115624703,GB @@ -102042,9 +103567,7 @@ 3115756544,3115757567,IT 3115757568,3115758591,AT 3115758592,3115759615,ES -3115759616,3115759871,DE -3115759872,3115760127,US -3115760128,3115760639,DE +3115759616,3115760639,DE 3115760640,3115761663,TR 3115761664,3115762687,NL 3115762688,3115763711,IT @@ -102208,7 +103731,8 @@ 3115898880,3115899135,NL 3115899136,3115899391,AL 3115899392,3115899903,NL -3115899904,3115900671,EU +3115899904,3115900415,HK +3115900416,3115900671,EU 3115900672,3115900927,JP 3115900928,3115901951,DE 3115901952,3115902207,IQ @@ -102261,8 +103785,8 @@ 3115941888,3115942911,CZ 3115942912,3115943935,IL 3115943936,3115945983,RU -3115945984,3115947007,BR -3115947008,3115948031,RU +3115945984,3115946751,BR +3115946752,3115948031,RU 3115948032,3115949055,GB 3115949056,3115950079,GR 3115950080,3115951103,GB @@ -102276,8 +103800,9 @@ 3115959296,3115960319,ES 3115960320,3115961343,CH 3115961344,3115962367,NL -3115962368,3115962623,HU -3115962624,3115963391,AT +3115962368,3115962623,DE +3115962624,3115963135,US +3115963136,3115963391,FR 3115963392,3115964415,NL 3115964416,3115965439,CZ 3115965440,3115966463,SY @@ -102441,7 +103966,8 @@ 3116096512,3116097535,IT 3116097536,3116098559,ES 3116098560,3116099583,CH -3116099584,3116100095,BR +3116099584,3116099839,US +3116099840,3116100095,BR 3116100096,3116100351,DE 3116100352,3116100607,US 3116100608,3116100863,GB @@ -102498,7 +104024,8 @@ 3116139520,3116140543,DE 3116140544,3116141567,AT 3116141568,3116142591,NL -3116142592,3116143615,LU +3116142592,3116143359,LU +3116143360,3116143615,PL 3116143616,3116144639,ES 3116144640,3116145663,CH 3116145664,3116147711,FR @@ -102506,7 +104033,9 @@ 3116148736,3116149759,FR 3116149760,3116150783,GB 3116150784,3116151807,FR -3116151808,3116152831,RU +3116151808,3116152063,RU +3116152064,3116152319,CZ +3116152320,3116152831,RU 3116152832,3116153855,CZ 3116153856,3116154879,SK 3116154880,3116155903,RU @@ -102534,7 +104063,9 @@ 3116177920,3116178175,DE 3116178176,3116178431,GB 3116178432,3116179455,SE -3116179456,3116181503,US +3116179456,3116179967,US +3116179968,3116180479,TR +3116180480,3116181503,US 3116181504,3116182527,GB 3116182528,3116183551,US 3116183552,3116184575,SE @@ -102702,16 +104233,19 @@ 3116326912,3116327935,IT 3116327936,3116328959,NL 3116328960,3116329983,IT -3116329984,3116331007,DE +3116329984,3116331007,AT 3116331008,3116332031,UA -3116332032,3116333055,US +3116332032,3116332287,US +3116332288,3116333055,GB 3116333056,3116334079,DE 3116334080,3116335103,NL 3116335104,3116336127,CA 3116336128,3116337151,AT 3116337152,3116338175,SA 3116338176,3116339199,RU -3116339200,3116340223,FR +3116339200,3116339455,NL +3116339456,3116339711,FR +3116339712,3116340223,US 3116340224,3116341247,UA 3116341248,3116342271,FR 3116342272,3116343295,IE @@ -102749,7 +104283,8 @@ 3116371968,3116372223,IE 3116372224,3116372479,DE 3116372480,3116372991,NL -3116372992,3116374015,AP +3116372992,3116373503,AP +3116373504,3116374015,HK 3116374016,3116375039,FI 3116375040,3116376063,DE 3116376064,3116377087,BE @@ -102821,8 +104356,8 @@ 3116434432,3116435455,TR 3116435456,3116436479,ES 3116436480,3116437503,AM -3116437504,3116437759,DE -3116437760,3116438527,US +3116437504,3116438015,DE +3116438016,3116438527,US 3116438528,3116439551,RU 3116439552,3116440575,LT 3116440576,3116441599,EU @@ -102832,7 +104367,8 @@ 3116444928,3116445183,ES 3116445184,3116445439,RU 3116445440,3116445695,IR -3116445696,3116446719,US +3116445696,3116446463,GB +3116446464,3116446719,US 3116446720,3116447743,RO 3116447744,3116448767,BG 3116448768,3116449791,EE @@ -102865,7 +104401,8 @@ 3116473344,3116473855,US 3116473856,3116474367,NL 3116474368,3116475391,PL -3116475392,3116476415,TR +3116475392,3116475647,US +3116475648,3116476415,TR 3116476416,3116477439,GB 3116477440,3116478463,ES 3116478464,3116479487,JO @@ -102904,7 +104441,7 @@ 3116506112,3116506367,TR 3116506368,3116506623,ES 3116506624,3116506879,NL -3116506880,3116507135,ES +3116506880,3116507135,US 3116507136,3116508159,RU 3116508160,3116509183,DE 3116509184,3116510207,GB @@ -102922,7 +104459,9 @@ 3116521472,3116522495,GB 3116522496,3116523519,LU 3116523520,3116524543,IE -3116524544,3116525567,ES +3116524544,3116524799,GB +3116524800,3116525055,SG +3116525056,3116525567,ES 3116525568,3116526591,RU 3116526592,3116527615,ES 3116527616,3116528639,GB @@ -102981,7 +104520,7 @@ 3116578816,3116579327,GB 3116579328,3116579839,US 3116579840,3116580863,AT -3116580864,3116581887,US +3116580864,3116581887,GB 3116581888,3116582911,CH 3116582912,3116583935,IR 3116583936,3116584959,TR @@ -103020,10 +104559,7 @@ 3116616704,3116617727,ES 3116617728,3116618751,NO 3116618752,3116619775,US -3116619776,3116620031,CZ -3116620032,3116620287,DE -3116620288,3116620543,DK -3116620544,3116620799,EE +3116619776,3116620799,AT 3116620800,3116621823,US 3116621824,3116622847,CZ 3116622848,3116623871,TR @@ -103044,7 +104580,8 @@ 3116632320,3116633087,CH 3116633088,3116634111,RO 3116634112,3116635135,ES -3116635136,3116635903,DE +3116635136,3116635647,DE +3116635648,3116635903,AP 3116635904,3116636159,GB 3116636160,3116637183,US 3116637184,3116637695,DE @@ -103128,7 +104665,8 @@ 3116708864,3116711935,GB 3116711936,3116712959,ES 3116712960,3116713983,IR -3116713984,3116715007,RU +3116713984,3116714751,RU +3116714752,3116715007,NL 3116715008,3116716031,UA 3116716032,3116717055,NL 3116717056,3116718079,FR @@ -103144,7 +104682,7 @@ 3116729344,3116729599,DE 3116729600,3116729855,EU 3116729856,3116730111,IT -3116730112,3116730367,EU +3116730112,3116730367,DE 3116730368,3116731391,DK 3116731392,3116732415,IT 3116732416,3116733439,CZ @@ -103167,8 +104705,7 @@ 3116743680,3116744703,NL 3116744704,3116744959,TR 3116744960,3116745215,US -3116745216,3116745471,TR -3116745472,3116745727,DE +3116745216,3116745727,DE 3116745728,3116746751,TR 3116746752,3116747775,ES 3116747776,3116748031,IL @@ -103266,8 +104803,7 @@ 3116822528,3116822783,FR 3116822784,3116823039,IN 3116823040,3116823295,AU -3116823296,3116823551,GB -3116823552,3116824575,US +3116823296,3116824575,GB 3116824576,3116825599,FR 3116825600,3116826623,IT 3116826624,3116827647,DE @@ -103284,7 +104820,8 @@ 3116837888,3116838911,ES 3116838912,3116839935,IT 3116839936,3116840959,ES -3116840960,3116843007,GB +3116840960,3116841983,GB +3116841984,3116843007,EU 3116843008,3116844031,IR 3116844032,3116845055,DE 3116845056,3116846079,IT @@ -103294,7 +104831,7 @@ 3116849152,3116850175,TR 3116850176,3116851199,US 3116851200,3116852223,UA -3116852224,3116852479,ES +3116852224,3116852479,AP 3116852480,3116852735,DE 3116852736,3116853247,US 3116853248,3116854271,DE @@ -103387,12 +104924,12 @@ 3116934144,3116935167,FR 3116935168,3116936191,RU 3116936192,3116937215,GB -3116937216,3116938239,US +3116937216,3116937471,US +3116937472,3116938239,GB 3116938240,3116939263,IT 3116939264,3116940287,SE 3116940288,3116940543,TJ -3116940544,3116940799,RU -3116940800,3116941055,NL +3116940544,3116941055,RU 3116941056,3116941311,US 3116941312,3116942335,FR 3116942336,3116943359,RU @@ -103406,7 +104943,7 @@ 3116951552,3116952575,NL 3116952576,3116953599,FR 3116953600,3116954623,RU -3116954624,3116954879,IL +3116954624,3116954879,NL 3116954880,3116955135,US 3116955136,3116955391,EU 3116955392,3116955647,IL @@ -103487,8 +105024,7 @@ 3117017088,3117018111,CZ 3117018112,3117019135,SK 3117019136,3117020159,IT -3117020160,3117020927,US -3117020928,3117021183,RO +3117020160,3117021183,GB 3117021184,3117022207,CH 3117022208,3117022719,NL 3117022720,3117022975,GR @@ -103566,7 +105102,9 @@ 3117080576,3117081599,BE 3117081600,3117082623,SA 3117082624,3117083647,GB -3117083648,3117084671,DE +3117083648,3117083903,DE +3117083904,3117084159,GB +3117084160,3117084671,DE 3117084672,3117085695,TR 3117085696,3117086719,IT 3117086720,3117087743,LU @@ -103623,7 +105161,7 @@ 3117131776,3117132799,TR 3117132800,3117133823,IT 3117133824,3117135871,FR -3117135872,3117136895,GB +3117135872,3117136895,HU 3117136896,3117138943,NL 3117138944,3117139967,CH 3117139968,3117140991,DE @@ -103668,9 +105206,7 @@ 3117175808,3117176831,IT 3117176832,3117177855,SY 3117177856,3117178111,NO -3117178112,3117178367,IE -3117178368,3117178623,GB -3117178624,3117178879,IE +3117178112,3117178879,US 3117178880,3117179903,DE 3117179904,3117180159,IT 3117180160,3117180415,CY @@ -103842,7 +105378,7 @@ 3117316608,3117316863,BE 3117316864,3117317119,GB 3117317120,3117318143,IQ -3117318144,3117318655,US +3117318144,3117318655,GB 3117318656,3117319167,RO 3117319168,3117320191,SA 3117320192,3117321215,FR @@ -103882,8 +105418,9 @@ 3117347840,3117348863,CH 3117348864,3117349887,ES 3117349888,3117350911,IL -3117350912,3117351935,RU -3117351936,3117352959,IR +3117350912,3117351679,RU +3117351680,3117351935,TR +3117351936,3117352959,US 3117352960,3117353215,TH 3117353216,3117353471,ID 3117353472,3117353983,AU @@ -103933,7 +105470,7 @@ 3117386752,3117387775,GB 3117387776,3117388799,ES 3117388800,3117389823,PL -3117389824,3117390847,AP +3117389824,3117390847,HK 3117390848,3117392895,DE 3117392896,3117393151,SG 3117393152,3117393919,NL @@ -103960,7 +105497,7 @@ 3117411584,3117411839,CY 3117411840,3117412351,NL 3117412352,3117414399,DE -3117414400,3117414911,US +3117414400,3117414911,AP 3117414912,3117415423,DE 3117415424,3117416447,RU 3117416448,3117417471,US @@ -104009,7 +105546,7 @@ 3117458432,3117459455,PL 3117459456,3117459967,US 3117459968,3117460223,GB -3117460224,3117460479,HK +3117460224,3117460479,US 3117460480,3117460991,DE 3117460992,3117461503,IR 3117461504,3117462527,UZ @@ -104244,6 +105781,10 @@ 3117652992,3117654015,RU 3117654016,3117655039,IT 3117655040,3117656063,RU +3117656064,3117656319,SE +3117656320,3117656575,GR +3117656576,3117656831,RU +3117656832,3117657087,AM 3117657088,3117659135,GB 3117659136,3117660159,ES 3117660160,3117661183,NL @@ -104287,7 +105828,7 @@ 3117693952,3117694975,AP 3117694976,3117695999,PL 3117696000,3117696255,US -3117696256,3117696511,DE +3117696256,3117696511,FR 3117696512,3117697023,US 3117697024,3117698047,BL 3117698048,3117699071,DE @@ -104397,10 +105938,9 @@ 3117776896,3117777919,DE 3117777920,3117778943,IE 3117778944,3117779967,RU -3117779968,3117780991,DE +3117779968,3117780991,AT 3117780992,3117782015,SK -3117782016,3117782527,GB -3117782528,3117782783,US +3117782016,3117782783,GB 3117782784,3117783039,JP 3117783040,3117783807,SE 3117783808,3117784063,DE @@ -104629,7 +106169,7 @@ 3117958144,3117959167,US 3117959168,3117959423,DE 3117959424,3117959679,CO -3117959680,3117959935,US +3117959680,3117959935,AP 3117959936,3117960191,DE 3117960192,3117961215,GB 3117961216,3117962239,RU @@ -104639,13 +106179,17 @@ 3117965056,3117965311,SG 3117965312,3117966335,FR 3117966336,3117967359,RU -3117967360,3117969407,GB +3117967360,3117967615,US +3117967616,3117967871,TR +3117967872,3117968383,US +3117968384,3117969407,GB 3117969408,3117970431,TR -3117970432,3117970943,AP +3117970432,3117970943,HK 3117970944,3117971199,JP -3117971200,3117971455,AP +3117971200,3117971455,HK 3117971456,3117972479,DE -3117972480,3117973503,CA +3117972480,3117972735,US +3117972736,3117973503,CA 3117973504,3117974527,ES 3117974528,3117975551,SY 3117975552,3117975807,AT @@ -104725,9 +106269,12 @@ 3118030848,3118031871,IL 3118031872,3118032895,SA 3118032896,3118033919,GB -3118033920,3118034943,AP +3118033920,3118034175,AP +3118034176,3118034431,DE +3118034432,3118034943,AP 3118034944,3118035967,ES -3118035968,3118036479,GB +3118035968,3118036223,NL +3118036224,3118036479,GB 3118036480,3118036735,NL 3118036736,3118038015,FR 3118038016,3118039039,DE @@ -104774,8 +106321,7 @@ 3118068736,3118069759,FR 3118069760,3118071807,DE 3118071808,3118072319,RU -3118072320,3118072575,GB -3118072576,3118072831,NL +3118072320,3118072831,NL 3118072832,3118073343,US 3118073344,3118073855,HK 3118073856,3118074879,RU @@ -104811,14 +106357,17 @@ 3118102528,3118102783,IE 3118102784,3118103551,GB 3118103552,3118104319,DE -3118104320,3118104575,AU -3118104576,3118105855,DE -3118105856,3118107647,US +3118104320,3118104575,AP +3118104576,3118105599,DE +3118105600,3118107647,US 3118107648,3118108671,CH 3118108672,3118109695,FR -3118109696,3118110719,US +3118109696,3118109951,US +3118109952,3118110463,GB +3118110464,3118110719,US 3118110720,3118111743,FR -3118111744,3118112767,PL +3118111744,3118111999,PL +3118112000,3118112767,US 3118112768,3118113791,ES 3118113792,3118114815,NL 3118114816,3118115839,DE @@ -104838,8 +106387,7 @@ 3118125056,3118127103,FR 3118127104,3118128127,TR 3118128128,3118128639,TW -3118128640,3118128895,DE -3118128896,3118130175,NL +3118128640,3118130175,US 3118130176,3118131199,DK 3118131200,3118132223,US 3118132224,3118133247,ES @@ -104888,7 +106436,7 @@ 3118170112,3118171135,PT 3118171136,3118172159,TR 3118172160,3118173183,ES -3118173184,3118173439,SE +3118173184,3118173439,AP 3118173440,3118173695,DE 3118173696,3118173951,US 3118173952,3118174207,DE @@ -104921,12 +106469,14 @@ 3118198784,3118199807,FR 3118199808,3118200831,DE 3118200832,3118201855,CH -3118201856,3118203903,DE +3118201856,3118202879,AT +3118202880,3118203903,DE 3118203904,3118204927,FR 3118204928,3118205951,ES 3118205952,3118206975,GB 3118206976,3118207999,GR -3118208000,3118208511,DE +3118208000,3118208255,DE +3118208256,3118208511,AP 3118208512,3118208767,BR 3118208768,3118209023,FR 3118209024,3118210047,HR @@ -105011,10 +106561,11 @@ 3118281728,3118282751,NO 3118282752,3118283775,SI 3118283776,3118284799,IS -3118284800,3118285311,BG -3118285312,3118285567,AR +3118284800,3118285055,BG +3118285056,3118285311,GR +3118285312,3118285567,BG 3118285568,3118285823,TR -3118285824,3118286079,DE +3118285824,3118286079,AU 3118286080,3118286335,SG 3118286336,3118286591,JP 3118286592,3118286847,SG @@ -105023,7 +106574,10 @@ 3118288896,3118289919,PL 3118289920,3118290943,IE 3118290944,3118291967,FR -3118291968,3118294015,GB +3118291968,3118293247,GB +3118293248,3118293503,US +3118293504,3118293759,GB +3118293760,3118294015,US 3118294016,3118295039,DK 3118295040,3118296063,DE 3118296064,3118297087,PL @@ -105052,7 +106606,7 @@ 3118316544,3118317567,ES 3118317568,3118318591,IR 3118318592,3118319103,US -3118319104,3118319615,FR +3118319104,3118319615,RU 3118319616,3118320639,NL 3118320640,3118321663,GB 3118321664,3118322687,DE @@ -105154,7 +106708,7 @@ 3118390528,3118391295,EU 3118391296,3118394367,NL 3118394368,3118395391,RU -3118395392,3118395647,US +3118395392,3118395647,FR 3118395648,3118396159,DE 3118396160,3118396415,ID 3118396416,3118397439,ES @@ -105184,9 +106738,7 @@ 3118416896,3118417919,GB 3118417920,3118418943,FR 3118418944,3118419199,TR -3118419200,3118419455,ES -3118419456,3118419711,VE -3118419712,3118419967,MF +3118419200,3118419967,GB 3118419968,3118420991,ES 3118420992,3118422015,NL 3118422016,3118423039,GB @@ -105206,8 +106758,7 @@ 3118436352,3118437375,DE 3118437376,3118438399,FR 3118438400,3118438655,NL -3118438656,3118438911,US -3118438912,3118439167,ES +3118438656,3118439167,GB 3118439168,3118439423,RU 3118439424,3118440447,FR 3118440448,3118440703,IR @@ -105336,7 +106887,8 @@ 3118545920,3118546943,IT 3118546944,3118547967,FR 3118547968,3118548991,HU -3118548992,3118550015,BG +3118548992,3118549247,IQ +3118549248,3118550015,DE 3118550016,3118551039,RO 3118551040,3118552063,IR 3118552064,3118553087,BG @@ -105370,6 +106922,10 @@ 3118575616,3118576639,RU 3118576640,3118577663,IR 3118577664,3118578687,FR +3118578688,3118578943,NL +3118578944,3118579199,PL +3118579200,3118579455,UA +3118579456,3118579711,PL 3118579712,3118580735,AE 3118580736,3118580991,UA 3118580992,3118581247,GB @@ -105387,7 +106943,7 @@ 3118588672,3118588927,NL 3118588928,3118589951,PL 3118589952,3118590463,DE -3118590464,3118590719,HK +3118590464,3118590719,AP 3118590720,3118590975,DE 3118590976,3118591999,US 3118592000,3118593023,IR @@ -105425,7 +106981,7 @@ 3118621440,3118621695,DE 3118621696,3118622719,NO 3118622720,3118622975,ES -3118622976,3118623231,US +3118622976,3118623231,TR 3118623232,3118623743,ES 3118623744,3118624767,NL 3118624768,3118625791,UA @@ -105451,7 +107007,7 @@ 3118644224,3118646271,ES 3118646272,3118647295,TR 3118647296,3118648319,NO -3118648320,3118648831,NL +3118648320,3118648831,GB 3118648832,3118649343,TH 3118649344,3118650367,GB 3118650368,3118651391,ES @@ -105502,7 +107058,8 @@ 3118692352,3118693375,IT 3118693376,3118694399,NO 3118694400,3118695423,ES -3118695424,3118696447,DE +3118695424,3118695935,DE +3118695936,3118696447,SG 3118696448,3118696703,BG 3118696704,3118697471,TR 3118697472,3118698495,SY @@ -105669,7 +107226,7 @@ 3118845696,3118845951,IL 3118845952,3118846975,NL 3118846976,3118849023,ES -3118849024,3118850047,GB +3118849024,3118850047,US 3118850048,3118850559,NL 3118850560,3118850815,IL 3118850816,3118851071,NL @@ -105686,9 +107243,9 @@ 3118858240,3118859263,ES 3118859264,3118860287,BG 3118860288,3118861311,FR -3118861312,3118861567,TR -3118861568,3118861823,MD -3118861824,3118862591,TR +3118861312,3118861567,IN +3118861568,3118862079,DE +3118862080,3118862591,TR 3118862592,3118862847,EG 3118862848,3118863103,RO 3118863104,3118863359,SA @@ -105700,7 +107257,10 @@ 3118868224,3118868479,NL 3118868480,3118869503,IQ 3118869504,3118870527,US -3118870528,3118872575,ES +3118870528,3118871551,ES +3118871552,3118871807,GB +3118871808,3118872063,BR +3118872064,3118872575,ES 3118872576,3118873599,MK 3118873600,3118874111,US 3118874112,3118874367,IE @@ -105782,9 +107342,7 @@ 3118927872,3118928895,NL 3118928896,3118929919,ES 3118929920,3118931967,NL -3118931968,3118932223,SC -3118932224,3118932479,RU -3118932480,3118932991,SC +3118931968,3118932991,SC 3118932992,3118934015,IT 3118934016,3118935039,SA 3118935040,3118936063,SY @@ -105889,7 +107447,7 @@ 3119012096,3119012351,AT 3119012352,3119012607,UA 3119012608,3119012863,RS -3119012864,3119013887,AP +3119012864,3119013887,HK 3119013888,3119014143,AE 3119014144,3119014399,AT 3119014400,3119014655,NL @@ -105938,7 +107496,9 @@ 3119050752,3119051775,GR 3119051776,3119054847,NL 3119054848,3119055103,RU -3119055104,3119055871,KZ +3119055104,3119055359,KZ +3119055360,3119055615,RU +3119055616,3119055871,KZ 3119055872,3119056895,GB 3119056896,3119057919,FR 3119057920,3119058943,IR @@ -105974,8 +107534,7 @@ 3119083776,3119084031,SG 3119084032,3119084543,ES 3119084544,3119086591,UA -3119086592,3119087359,AL -3119087360,3119087615,TR +3119086592,3119087615,AL 3119087616,3119087871,AT 3119087872,3119088127,IE 3119088128,3119088383,FR @@ -105987,8 +107546,7 @@ 3119091200,3119091711,DE 3119091712,3119092735,AT 3119092736,3119093759,RO -3119093760,3119094271,RU -3119094272,3119094783,UA +3119093760,3119094783,UA 3119094784,3119096831,PL 3119096832,3119097855,DE 3119097856,3119098879,OM @@ -106027,7 +107585,7 @@ 3119124480,3119125503,CH 3119125504,3119125759,ES 3119125760,3119126015,US -3119126016,3119126527,ES +3119126016,3119126527,GB 3119126528,3119127551,KZ 3119127552,3119128575,CZ 3119128576,3119129599,DE @@ -106040,7 +107598,9 @@ 3119134720,3119135743,GR 3119135744,3119136767,KZ 3119136768,3119137791,UA -3119137792,3119139071,DE +3119137792,3119138303,DE +3119138304,3119138815,FR +3119138816,3119139071,DE 3119139072,3119139327,PL 3119139328,3119139839,GB 3119139840,3119141887,FR @@ -106281,7 +107841,7 @@ 3119312896,3119313919,PL 3119313920,3119315967,ES 3119315968,3119318015,DE -3119318016,3119319039,GB +3119318016,3119319039,IL 3119319040,3119320063,IR 3119320064,3119321087,IL 3119321088,3119322111,AL @@ -106396,7 +107956,6 @@ 3119415296,3119416319,NL 3119416320,3119417343,PL 3119417344,3119418367,RU -3119418368,3119419391,?? 3119419392,3119420415,ES 3119420416,3119421439,IT 3119421440,3119421951,PL @@ -106452,7 +108011,7 @@ 3119466496,3119467519,ES 3119467520,3119468543,IE 3119468544,3119469567,DE -3119469568,3119470591,AP +3119469568,3119470591,HK 3119470592,3119471615,RU 3119471616,3119472639,QA 3119472640,3119473663,IT @@ -106462,11 +108021,8 @@ 3119476736,3119477759,GB 3119477760,3119479807,RU 3119479808,3119480831,BG -3119480832,3119482879,RU -3119482880,3119483903,TR -3119483904,3119484159,ES -3119484160,3119484671,NL -3119484672,3119484927,ES +3119480832,3119483903,RU +3119483904,3119484927,ES 3119484928,3119485951,KZ 3119485952,3119486975,GB 3119486976,3119487999,UZ @@ -106521,17 +108077,17 @@ 3119534080,3119535103,ES 3119535104,3119536127,US 3119536128,3119537151,ES -3119537152,3119538175,GB +3119537152,3119538175,RU 3119538176,3119539199,PL 3119539200,3119540223,RU 3119540224,3119541247,MT 3119541248,3119542271,GB 3119542272,3119543295,NL 3119543296,3119544319,DE -3119544320,3119545343,US +3119544320,3119545343,GB 3119545344,3119546367,FR 3119546368,3119547391,ES -3119547392,3119548415,BG +3119547392,3119548415,US 3119548416,3119548927,PL 3119548928,3119549439,RO 3119549440,3119549695,CY @@ -106678,8 +108234,8 @@ 3119667200,3119668223,BG 3119668224,3119669247,FR 3119669248,3119671295,ES -3119671296,3119672063,RU -3119672064,3119672319,LV +3119671296,3119671807,RU +3119671808,3119672319,LV 3119672320,3119673343,TR 3119673344,3119674367,DE 3119674368,3119676415,RU @@ -106718,7 +108274,7 @@ 3119702016,3119702527,US 3119702528,3119703039,NL 3119703040,3119704063,SE -3119704064,3119705087,AP +3119704064,3119705087,HK 3119705088,3119706111,IE 3119706112,3119706623,NO 3119706624,3119706879,US @@ -106800,7 +108356,7 @@ 3119768576,3119769599,PL 3119769600,3119770623,DE 3119770624,3119771647,BG -3119771648,3119772671,AP +3119771648,3119772671,HK 3119772672,3119772927,NL 3119772928,3119773183,FR 3119773184,3119773439,NL @@ -106841,7 +108397,7 @@ 3119798272,3119799295,RO 3119799296,3119799807,HR 3119799808,3119800063,DE -3119800064,3119800319,NL +3119800064,3119800319,IS 3119800320,3119801343,PL 3119801344,3119802367,EE 3119802368,3119802879,DE @@ -106913,7 +108469,7 @@ 3119848448,3119849471,DE 3119849472,3119850495,ES 3119850496,3119851519,RU -3119851520,3119852543,AP +3119851520,3119852543,HK 3119852544,3119853567,PL 3119853568,3119854591,DK 3119854592,3119854847,ES @@ -107097,7 +108653,7 @@ 3120014336,3120016383,ES 3120016384,3120017407,GB 3120017408,3120018431,IQ -3120018432,3120019455,AP +3120018432,3120019455,HK 3120019456,3120019711,TR 3120019712,3120019967,NL 3120019968,3120020479,RU @@ -107138,7 +108694,8 @@ 3120047104,3120048127,DE 3120048128,3120049151,BE 3120049152,3120050175,UZ -3120050176,3120051199,ES +3120050176,3120050687,US +3120050688,3120051199,ES 3120051200,3120052223,SE 3120052224,3120053247,TR 3120053248,3120054271,IE @@ -107178,7 +108735,7 @@ 3120081920,3120082943,AL 3120082944,3120083967,CZ 3120083968,3120084991,AT -3120084992,3120086015,AU +3120084992,3120086015,US 3120086016,3120087039,DE 3120087040,3120088063,UA 3120088064,3120089087,RO @@ -107210,7 +108767,8 @@ 3120116736,3120116991,ES 3120116992,3120117759,NL 3120117760,3120118783,CH -3120118784,3120119807,AP +3120118784,3120119551,AP +3120119552,3120119807,HK 3120119808,3120120831,DE 3120120832,3120121855,GB 3120121856,3120122879,AT @@ -107309,7 +108867,7 @@ 3120204800,3120206847,IT 3120206848,3120207103,NL 3120207104,3120207359,RU -3120207360,3120207615,UA +3120207360,3120207615,NL 3120207616,3120207871,US 3120207872,3120208895,EE 3120208896,3120209919,IT @@ -107423,8 +108981,7 @@ 3120294144,3120294911,US 3120294912,3120295935,NL 3120295936,3120296959,RU -3120296960,3120297215,GD -3120297216,3120297983,GB +3120296960,3120297983,GB 3120297984,3120298495,HK 3120298496,3120299007,US 3120299008,3120300031,ES @@ -107447,7 +109004,7 @@ 3120318464,3120319487,AT 3120319488,3120320511,NL 3120320512,3120321535,GB -3120321536,3120322559,BZ +3120321536,3120322559,RU 3120322560,3120323583,CZ 3120323584,3120324607,UA 3120324608,3120325631,PL @@ -107472,7 +109029,8 @@ 3120342528,3120343039,DE 3120343040,3120344063,US 3120344064,3120345087,ES -3120345088,3120346111,US +3120345088,3120345343,BG +3120345344,3120346111,US 3120346112,3120347135,PL 3120347136,3120348159,ES 3120348160,3120349183,MK @@ -107519,7 +109077,7 @@ 3120369664,3120370687,AT 3120370688,3120371711,RU 3120371712,3120371967,GB -3120371968,3120372223,CL +3120371968,3120372223,RU 3120372224,3120372735,BA 3120372736,3120373759,GB 3120373760,3120374783,RU @@ -107536,7 +109094,8 @@ 3120380160,3120380415,FR 3120380416,3120380927,NL 3120380928,3120381183,SE -3120381184,3120381951,LV +3120381184,3120381439,LV +3120381440,3120381951,IT 3120381952,3120382975,PL 3120382976,3120383999,US 3120384000,3120384511,IL @@ -107574,8 +109133,8 @@ 3120407040,3120407295,CY 3120407296,3120407551,MN 3120407552,3120408575,PL -3120408576,3120409599,FR -3120409600,3120410623,DE +3120408576,3120409087,FR +3120409088,3120410623,DE 3120410624,3120411647,GB 3120411648,3120413695,RU 3120413696,3120414719,HR @@ -107600,9 +109159,10 @@ 3120432128,3120433151,PL 3120433152,3120434175,FR 3120434176,3120435199,IQ -3120435200,3120435711,DE +3120435200,3120435455,DE +3120435456,3120435711,GB 3120435712,3120435967,KR -3120435968,3120436223,DE +3120435968,3120436223,GB 3120436224,3120437247,LU 3120437248,3120438271,ES 3120438272,3120439295,TR @@ -107618,7 +109178,7 @@ 3120448512,3120448767,NL 3120448768,3120449279,GB 3120449280,3120449535,NL -3120449536,3120449791,US +3120449536,3120449791,GB 3120449792,3120450559,DE 3120450560,3120451583,CH 3120451584,3120452607,SE @@ -107671,12 +109231,11 @@ 3120494592,3120495615,SK 3120495616,3120496639,HR 3120496640,3120497663,NL -3120497664,3120497919,UA -3120497920,3120498687,GB +3120497664,3120498687,UA 3120498688,3120498943,IN 3120498944,3120499199,US 3120499200,3120499455,DE -3120499456,3120499711,HR +3120499456,3120499711,US 3120499712,3120500735,PL 3120500736,3120501759,BE 3120501760,3120502783,ES @@ -107719,8 +109278,11 @@ 3120526336,3120527359,CZ 3120527360,3120527615,UA 3120527616,3120528383,EU -3120528384,3120529407,ES -3120529408,3120530431,US +3120528384,3120528639,GB +3120528640,3120528895,DE +3120528896,3120529407,GB +3120529408,3120530175,US +3120530176,3120530431,DE 3120530432,3120531455,RU 3120531456,3120531711,SA 3120531712,3120531967,DE @@ -107740,7 +109302,7 @@ 3120540672,3120541695,TR 3120541696,3120542463,RU 3120542464,3120542719,LV -3120542720,3120543743,US +3120542720,3120543743,GB 3120543744,3120544767,IT 3120544768,3120545791,DE 3120545792,3120546815,GB @@ -107768,10 +109330,27 @@ 3120602112,3120603135,BO 3120603136,3120610303,AR 3120610304,3120611327,PY -3120611328,3120627711,AR +3120611328,3120617471,AR +3120617472,3120617727,CL +3120617728,3120627711,AR 3120627712,3120644095,NI 3120644096,3120660479,DO -3120660480,3120676863,CO +3120660480,3120662015,CO +3120662016,3120662271,BR +3120662272,3120662527,PE +3120662528,3120662783,BR +3120662784,3120663039,EC +3120663040,3120663295,PE +3120663296,3120663551,CO +3120663552,3120663807,PE +3120663808,3120664063,CO +3120664064,3120664319,PE +3120664320,3120664575,CO +3120664576,3120664831,EC +3120664832,3120665087,PE +3120665088,3120665343,CL +3120665344,3120665599,BR +3120665600,3120676863,CO 3120676864,3120680959,HT 3120680960,3120691199,AR 3120691200,3120693247,CO @@ -107795,7 +109374,11 @@ 3120955392,3121086463,DO 3121086464,3121151999,UY 3121152000,3121348607,CL -3121348608,3121479679,AR +3121348608,3121432575,AR +3121432576,3121436671,PY +3121436672,3121469439,AR +3121469440,3121471487,PY +3121471488,3121479679,AR 3121479680,3121545215,VE 3121545216,3121610751,CR 3121610752,3121741823,PY @@ -107810,7 +109393,9 @@ 3122298880,3122331647,VE 3122331648,3122364415,BO 3122364416,3122659327,CO -3122659328,3122675711,CR +3122659328,3122661375,CR +3122661376,3122662399,NI +3122662400,3122675711,CR 3122675712,3122692095,SV 3122692096,3122700287,HN 3122700288,3122716671,CR @@ -107845,7 +109430,7 @@ 3124846592,3124848639,AR 3124848640,3124849663,BR 3124849664,3124850687,AR -3124850688,3124854783,HN +3124850688,3124854783,US 3124854784,3124887551,CL 3124887552,3124953087,EC 3124953088,3125018623,CL @@ -107856,7 +109441,9 @@ 3125805056,3126329343,CO 3126329344,3126853631,VE 3126853632,3126870015,MX -3126870016,3126874111,VE +3126870016,3126873343,VE +3126873344,3126873599,PA +3126873600,3126874111,VE 3126874112,3126878207,CR 3126878208,3126886399,CO 3126886400,3126902783,MX @@ -107877,7 +109464,17 @@ 3128492032,3128524799,CO 3128524800,3128541183,AR 3128541184,3128557567,BO -3128557568,3129999359,AR +3128557568,3128578047,AR +3128578048,3128580095,PY +3128580096,3128619007,AR +3128619008,3128623103,PY +3128623104,3128625151,AR +3128625152,3128629247,PY +3128629248,3128639487,AR +3128639488,3128643583,PY +3128643584,3128651775,AR +3128651776,3128655871,PY +3128655872,3129999359,AR 3129999360,3130261503,CO 3130261504,3130277887,CL 3130277888,3130284031,AR @@ -107890,7 +109487,8 @@ 3130312704,3130314751,AR 3130314752,3130315775,CL 3130315776,3130316799,CR -3130316800,3130318847,CW +3130316800,3130317823,AW +3130317824,3130318847,CW 3130318848,3130319871,AR 3130319872,3130320895,BR 3130320896,3130327039,AR @@ -107899,9 +109497,17 @@ 3130482176,3130482431,CR 3130482432,3130523647,GT 3130523648,3130654719,AR -3130654720,3130785791,CO +3130654720,3130783743,CO +3130783744,3130783999,US +3130784000,3130785791,CO 3130785792,3130851327,CL -3130851328,3130982399,AR +3130851328,3130945535,AR +3130945536,3130949631,PY +3130949632,3130955775,AR +3130955776,3130959871,PY +3130959872,3130968063,AR +3130968064,3130968575,PY +3130968576,3130982399,AR 3130982400,3131006975,CO 3131006976,3131011071,BQ 3131011072,3131012095,CO @@ -107915,14 +109521,24 @@ 3132096512,3132211199,CR 3132211200,3132227583,AR 3132227584,3132293119,EC -3132293120,3132309503,HN +3132293120,3132297983,US +3132297984,3132298239,CA +3132298240,3132309503,US 3132309504,3132313599,CR 3132313600,3132317695,CL 3132317696,3132321791,CO 3132321792,3132325887,PA 3132325888,3132358655,SR 3132358656,3132489727,CO -3132489728,3132588031,AR +3132489728,3132502015,AR +3132502016,3132502527,PY +3132502528,3132507647,AR +3132507648,3132508159,PY +3132508160,3132510719,AR +3132510720,3132511231,PY +3132511232,3132549375,AR +3132549376,3132549631,PY +3132549632,3132588031,AR 3132588032,3132620799,CO 3132620800,3132915711,VE 3132915712,3132948479,PA @@ -107934,16 +109550,15 @@ 3133005824,3133014015,AR 3133014016,3133046783,HT 3133046784,3133067263,AR -3133067264,3133067775,PA -3133067776,3133068287,US -3133068288,3133068799,PA -3133068800,3133069311,US -3133069312,3133070335,PA -3133070336,3133071359,US +3133067264,3133068543,US +3133068544,3133068799,PA +3133068800,3133071359,US 3133071360,3133073407,CO -3133073408,3133074431,CW +3133073408,3133073663,AW +3133073664,3133074431,CW 3133074432,3133075455,CL -3133075456,3133079551,CW +3133075456,3133079039,CW +3133079040,3133079551,CO 3133079552,3133145087,AR 3133145088,3133311999,BR 3133312000,3133313023,MX @@ -108041,26 +109656,27 @@ 3156279296,3156344831,PL 3156344832,3156361215,NL 3156361216,3156410367,DE -3156410368,3156475903,RU -3156475904,3156539391,HU -3156539392,3156539647,RO -3156539648,3156541439,HU +3156410368,3156456447,RU +3156456448,3156457471,DE +3156457472,3156475903,RU +3156475904,3156541439,HU 3156541440,3156606975,PT 3156606976,3156672511,TR 3156672512,3156738047,GB 3156738048,3156794111,DE -3156794112,3156794623,CH -3156794624,3156803583,DE +3156794112,3156794367,CH +3156794368,3156803583,DE 3156803584,3156869119,TR 3156869120,3156875263,US -3156875264,3156875519,NL -3156875520,3156876287,LU -3156876288,3156877311,RU +3156875264,3156875775,NL +3156875776,3156877311,RU 3156877312,3156885503,LU 3156885504,3156889599,NL 3156889600,3156890623,RU 3156890624,3156891135,SG -3156891136,3156893695,LU +3156891136,3156891391,NL +3156891392,3156891647,LU +3156891648,3156893695,NL 3156893696,3156894719,IN 3156894720,3156897791,LU 3156897792,3156899839,US @@ -108083,7 +109699,7 @@ 3156923392,3156923647,SG 3156923648,3156924415,LU 3156924416,3156925439,NL -3156925440,3156926463,SG +3156925440,3156926463,LU 3156926464,3156929791,NL 3156929792,3156930047,CY 3156930048,3156930303,MU @@ -108127,8 +109743,8 @@ 3158346496,3158346751,GB 3158346752,3158347007,RU 3158347008,3158347263,PA -3158347264,3158347519,SG -3158347520,3158347775,US +3158347264,3158347519,HK +3158347520,3158347775,TR 3158347776,3158349823,RU 3158349824,3158351871,DK 3158351872,3158355967,RU @@ -108195,7 +109811,7 @@ 3158581248,3158589439,DE 3158589440,3158590463,FR 3158590464,3158591231,DE -3158591232,3158591487,TW +3158591232,3158591487,AP 3158591488,3158592511,NL 3158592512,3158593535,GB 3158593536,3158615039,RU @@ -108240,10 +109856,12 @@ 3158949888,3158966271,GR 3158966272,3158982655,DE 3158982656,3158999039,GB -3158999040,3158999551,RO +3158999040,3158999295,RO +3158999296,3158999551,IT 3158999552,3159000063,DE 3159000064,3159001087,CH -3159001088,3159003135,RO +3159001088,3159002111,US +3159002112,3159003135,RO 3159003136,3159005183,US 3159005184,3159005439,FR 3159005440,3159009279,RO @@ -108313,7 +109931,8 @@ 3160211456,3160213503,IE 3160213504,3160215551,DE 3160215552,3160219647,RU -3160219648,3160221695,ES +3160219648,3160221183,ES +3160221184,3160221695,GB 3160221696,3160223743,FR 3160223744,3160228863,RU 3160228864,3160229887,NL @@ -108401,7 +110020,7 @@ 3160356352,3160356863,BE 3160356864,3160358911,CZ 3160358912,3160359167,RO -3160359168,3160359423,GB +3160359168,3160359423,DE 3160359424,3160359679,FI 3160359680,3160359935,LT 3160359936,3160360191,NO @@ -108459,8 +110078,9 @@ 3161669632,3161686015,FR 3161686016,3161702399,UA 3161702400,3161718783,AM -3161718784,3161719295,NL -3161719296,3161720831,DE +3161718784,3161719295,IL +3161719296,3161719807,BE +3161719808,3161720831,DE 3161720832,3161721855,IT 3161721856,3161722879,GB 3161722880,3161723903,US @@ -108677,10 +110297,7 @@ 3162694656,3162695679,JP 3162695680,3162696191,RU 3162696192,3162696447,KZ -3162696448,3162696703,RU -3162696704,3162697215,UZ -3162697216,3162698751,RU -3162698752,3162699263,UZ +3162696448,3162699263,RU 3162699264,3162699519,UA 3162699520,3162699775,ES 3162699776,3162700543,RU @@ -108869,7 +110486,7 @@ 3167772672,3167773695,MD 3167773696,3167773951,ES 3167773952,3167774207,RO -3167774208,3167774463,TR +3167774208,3167774463,KR 3167774464,3167774719,AT 3167774720,3167775743,MD 3167775744,3167775999,NL @@ -108883,7 +110500,7 @@ 3167780864,3167781887,RO 3167781888,3167782399,IL 3167782400,3167783935,RO -3167783936,3167784191,US +3167783936,3167784191,IN 3167784192,3167784447,ES 3167784448,3167784703,US 3167784704,3167784959,PT @@ -108904,8 +110521,8 @@ 3167838208,3167842303,RO 3167842304,3167843327,ES 3167843328,3167844351,TR -3167844352,3167846399,GB -3167846400,3167852543,US +3167844352,3167850495,GB +3167850496,3167852543,US 3167852544,3167853055,IR 3167853056,3167853311,IN 3167853312,3167854591,AU @@ -108937,7 +110554,7 @@ 3167944704,3167948799,IR 3167948800,3167950847,PL 3167950848,3167951359,US -3167951360,3167951615,TR +3167951360,3167951615,IN 3167951616,3167951871,RO 3167951872,3167952383,ES 3167952384,3167952895,RO @@ -108961,7 +110578,7 @@ 3168008448,3168010239,US 3168010240,3168011263,MD 3168011264,3168011519,NL -3168011520,3168011775,RO +3168011520,3168011775,DE 3168011776,3168012287,VN 3168012288,3168014335,MD 3168014336,3168015359,ES @@ -109011,7 +110628,9 @@ 3168074752,3168075007,RO 3168075008,3168075263,ES 3168075264,3168075519,GB -3168075520,3168076799,RO +3168075520,3168076031,RO +3168076032,3168076287,DE +3168076288,3168076799,RO 3168076800,3168079871,ES 3168079872,3168080127,IT 3168080128,3168081663,RO @@ -109020,10 +110639,12 @@ 3168083968,3168084223,DE 3168084224,3168084479,RO 3168084480,3168084735,TR -3168084736,3168084991,RO +3168084736,3168084991,DE 3168084992,3168086015,MD 3168086016,3168088063,IT -3168088064,3168089087,RO +3168088064,3168088575,RO +3168088576,3168088831,DE +3168088832,3168089087,RO 3168089088,3168090111,MD 3168090112,3168092159,FR 3168092160,3168096255,IR @@ -109044,10 +110665,11 @@ 3168128256,3168128511,RO 3168128512,3168129023,GB 3168129024,3168130047,IR -3168130048,3168130559,RO +3168130048,3168130303,RO +3168130304,3168130559,DE 3168130560,3168131071,GB 3168131072,3168131583,RO -3168131584,3168131839,TR +3168131584,3168131839,IN 3168131840,3168132095,ES 3168132096,3168133119,MD 3168133120,3168135167,NL @@ -109110,7 +110732,7 @@ 3168177920,3168178175,US 3168178176,3168179199,MD 3168179200,3168179711,ES -3168179712,3168179967,RO +3168179712,3168179967,DE 3168179968,3168180223,ES 3168180224,3168180479,VN 3168180480,3168180991,RO @@ -109132,11 +110754,12 @@ 3168196096,3168196607,RO 3168196608,3168198655,IR 3168198656,3168199167,ES -3168199168,3168199679,RO +3168199168,3168199423,RO +3168199424,3168199679,DE 3168199680,3168200703,MD 3168200704,3168201215,CA 3168201216,3168201727,EU -3168201728,3168202751,MD +3168201728,3168202751,AU 3168202752,3168203775,ES 3168203776,3168207103,RO 3168207104,3168207359,NL @@ -109153,7 +110776,7 @@ 3168214784,3168215039,RO 3168215040,3168215295,CY 3168215296,3168215551,PS -3168215552,3168215807,TR +3168215552,3168215807,TH 3168215808,3168216063,PS 3168216064,3168216575,RO 3168216576,3168216831,EU @@ -109179,7 +110802,8 @@ 3168232448,3168233471,PS 3168233472,3168235519,ES 3168235520,3168237567,RO -3168237568,3168239615,PS +3168237568,3168238591,US +3168238592,3168239615,EU 3168239616,3168243711,IR 3168243712,3168247807,RO 3168247808,3168264191,IR @@ -109219,7 +110843,7 @@ 3169026048,3169034239,ES 3169034240,3169042431,GB 3169042432,3169043455,GE -3169043456,3169044479,US +3169043456,3169044479,GB 3169044480,3169045503,CH 3169045504,3169046527,NL 3169046528,3169050623,AZ @@ -109262,7 +110886,7 @@ 3169851392,3169853439,NL 3169853440,3169854463,US 3169854464,3169855487,ES -3169855488,3169855999,US +3169855488,3169855999,MD 3169856000,3169856255,IT 3169856256,3169856511,ES 3169856512,3169857023,IT @@ -109275,7 +110899,7 @@ 3169859584,3169861631,GB 3169861632,3169862655,RO 3169862656,3169862911,NL -3169862912,3169863167,TR +3169862912,3169863167,IT 3169863168,3169863423,NL 3169863424,3169863679,GB 3169863680,3169863935,ES @@ -109302,7 +110926,7 @@ 3169898496,3169898751,RO 3169898752,3169899007,SI 3169899008,3169899263,RO -3169899264,3169899519,TR +3169899264,3169899519,TW 3169899520,3169899775,IR 3169899776,3169900031,RO 3169900032,3169900543,FR @@ -109410,9 +111034,9 @@ 3169972736,3169973247,US 3169973248,3169973759,RO 3169973760,3169974015,GB -3169974016,3169974271,RO -3169974272,3169974527,NL -3169974528,3169975039,US +3169974016,3169974527,NL +3169974528,3169974783,US +3169974784,3169975039,EU 3169975040,3169975295,IT 3169975296,3169976319,RO 3169976320,3170111487,RU @@ -109428,7 +111052,7 @@ 3170134016,3170135039,NL 3170135040,3170136063,FR 3170136064,3170136319,RU -3170136320,3170136575,CY +3170136320,3170136575,DE 3170136576,3170136831,PL 3170136832,3170137087,RO 3170137088,3170137343,TR @@ -109464,7 +111088,7 @@ 3170500608,3170631679,PT 3170631680,3170664447,PL 3170664448,3170697215,HR -3170697216,3170697727,GB +3170697216,3170697727,US 3170697728,3170697983,IR 3170697984,3170698239,AU 3170698240,3170729983,IR @@ -109474,7 +111098,9 @@ 3170828288,3170861055,RU 3170861056,3170861823,RS 3170861824,3170862335,ME -3170862336,3170888959,RS +3170862336,3170862847,RS +3170862848,3170863103,US +3170863104,3170888959,RS 3170888960,3170889215,ME 3170889216,3170893823,RS 3170893824,3171446783,BR @@ -109567,7 +111193,9 @@ 3188117504,3188121599,AR 3188121600,3188125695,TT 3188125696,3188146175,AR -3188146176,3188170751,CO +3188146176,3188146431,CO +3188146432,3188146687,CL +3188146688,3188170751,CO 3188170752,3188174847,CR 3188174848,3188178943,BR 3188178944,3188187135,CR @@ -109610,7 +111238,9 @@ 3188506624,3188514815,DO 3188514816,3188523007,AW 3188523008,3188539391,CO -3188539392,3188543487,CL +3188539392,3188542207,CL +3188542208,3188542463,US +3188542464,3188543487,CL 3188543488,3188545535,CO 3188545536,3188547583,AR 3188547584,3188551679,CO @@ -109620,8 +111250,18 @@ 3188555776,3188572159,CL 3188572160,3188576255,CO 3188576256,3188588543,AR -3188588544,3188592639,BZ -3188592640,3188597759,AR +3188588544,3188588799,BR +3188588800,3188589055,BZ +3188589056,3188590079,BR +3188590080,3188590591,BZ +3188590592,3188590847,BR +3188590848,3188591103,BZ +3188591104,3188591359,BR +3188591360,3188591615,BZ +3188591616,3188592127,BR +3188592128,3188592639,BZ +3188592640,3188593407,PA +3188593408,3188597759,AR 3188597760,3188598783,PA 3188598784,3188600831,AR 3188600832,3188604927,CL @@ -109633,12 +111273,15 @@ 3188637696,3188645887,PA 3188645888,3188662271,CO 3188662272,3188670463,BR -3188670464,3188674559,HN +3188670464,3188671487,KY +3188671488,3188672511,BS +3188672512,3188674559,HN 3188674560,3188678655,AR 3188678656,3188686847,BR 3188686848,3188690943,EC 3188690944,3188695039,CU -3188695040,3188703231,VE +3188695040,3188697087,EC +3188697088,3188703231,VE 3188703232,3188981759,AR 3188981760,3189178367,CL 3189178368,3189243903,PY @@ -109655,19 +111298,24 @@ 3191093248,3191095295,AR 3191095296,3191099391,BR 3191099392,3191103487,AR -3191103488,3191107583,VE +3191103488,3191107071,VE +3191107072,3191107327,CO +3191107328,3191107583,CR 3191107584,3191111679,PE 3191111680,3191128063,PY 3191128064,3191132159,EC 3191132160,3191136255,AR 3191136256,3191144447,DO -3191144448,3191156735,SV +3191144448,3191152639,SV +3191152640,3191156735,NI 3191156736,3191169023,HN 3191169024,3191193599,SV 3191193600,3191209983,HN 3191209984,3191275519,CL 3191275520,3191341055,AR -3191341056,3191406591,GT +3191341056,3191341311,GT +3191341312,3191341567,CR +3191341568,3191406591,GT 3191406592,3191414783,SV 3191414784,3191418879,PA 3191418880,3191420927,CR @@ -109675,7 +111323,72 @@ 3191439360,3191455743,EC 3191455744,3191472127,AR 3191472128,3191603199,TT -3191603200,3191734271,CO +3191603200,3191603455,CO +3191603456,3191603967,PA +3191603968,3191605247,CO +3191605248,3191605759,PA +3191605760,3191606271,CO +3191606272,3191607295,PA +3191607296,3191607551,MX +3191607552,3191608319,PA +3191608320,3191608575,CO +3191608576,3191609599,PA +3191609600,3191610111,CO +3191610112,3191610367,PE +3191610368,3191610623,CO +3191610624,3191610879,PA +3191610880,3191611135,PE +3191611136,3191635967,CO +3191635968,3191652351,AR +3191652352,3191670015,CO +3191670016,3191670271,GT +3191670272,3191674879,CO +3191674880,3191675135,US +3191675136,3191676927,CO +3191676928,3191677183,MX +3191677184,3191677439,CO +3191677440,3191677695,SV +3191677696,3191678207,CR +3191678208,3191678463,HN +3191678464,3191678719,SV +3191678720,3191678975,EC +3191678976,3191681023,CO +3191681024,3191681279,HN +3191681280,3191681535,EC +3191681536,3191681791,GT +3191681792,3191682047,PE +3191682048,3191682559,CR +3191682560,3191682815,AR +3191682816,3191683071,CO +3191683072,3191683327,CL +3191683328,3191683583,CO +3191683584,3191683839,GT +3191683840,3191684095,CO +3191684096,3191684351,PA +3191684352,3191689215,CO +3191689216,3191689471,HN +3191689472,3191689727,NI +3191689728,3191689983,PA +3191689984,3191690495,CR +3191690496,3191691007,PA +3191691008,3191691263,CR +3191691264,3191692287,GT +3191692288,3191693311,CO +3191693312,3191695359,GT +3191695360,3191697407,CR +3191697408,3191698431,SV +3191698432,3191699455,HN +3191699456,3191700479,NI +3191700480,3191701503,PA +3191701504,3191720959,CO +3191720960,3191721471,AR +3191721472,3191721983,CO +3191721984,3191722495,AR +3191722496,3191724799,CO +3191724800,3191725055,AR +3191725056,3191732735,CO +3191732736,3191732991,AR +3191732992,3191734271,CO 3191734272,3191799807,SV 3191799808,3191865343,EC 3191865344,3191930879,UY @@ -109702,7 +111415,8 @@ 3193137152,3193138175,EC 3193138176,3193139199,BR 3193139200,3193140223,PY -3193140224,3193141247,HN +3193140224,3193140991,HN +3193140992,3193141247,GT 3193141248,3193142271,BR 3193142272,3193143295,CL 3193143296,3193176063,TT @@ -109710,7 +111424,8 @@ 3193307136,3193438207,SV 3193438208,3193503743,CW 3193503744,3193510911,BR -3193510912,3193511935,PE +3193510912,3193511167,PE +3193511168,3193511935,VE 3193511936,3193512191,GT 3193512192,3193512959,BR 3193512960,3193513983,DO @@ -109723,7 +111438,15 @@ 3193548800,3193564159,BR 3193564160,3193564671,AR 3193564672,3193569279,BR -3193569280,3193634815,CO +3193569280,3193599999,CO +3193600000,3193600255,AR +3193600256,3193602303,CO +3193602304,3193602559,CL +3193602560,3193620991,CO +3193620992,3193621503,US +3193621504,3193625855,CO +3193625856,3193626623,US +3193626624,3193634815,CO 3193634816,3193700351,CL 3193700352,3193724927,HN 3193724928,3193729023,AR @@ -109771,7 +111494,20 @@ 3194077184,3194085375,CO 3194085376,3194093567,VE 3194093568,3194126335,SR -3194126336,3194142719,AR +3194126336,3194126591,PA +3194126592,3194126847,NL +3194126848,3194128383,AR +3194128384,3194129407,NI +3194129408,3194133759,AR +3194133760,3194134015,US +3194134016,3194135551,AR +3194135552,3194136319,BR +3194136320,3194136575,AR +3194136576,3194137087,BR +3194137088,3194139647,AR +3194139648,3194139903,BR +3194139904,3194140159,AR +3194140160,3194142719,CR 3194142720,3194159103,CL 3194159104,3194165247,HN 3194165248,3194175487,SV @@ -109787,13 +111523,12 @@ 3194191872,3194224639,CO 3194224640,3194355711,CL 3194355712,3194363903,SX -3194363904,3194364927,MX +3194363904,3194365951,MX 3194365952,3194370047,BR 3194370048,3194372095,PA 3194372096,3194380287,HT 3194380288,3194381311,BZ -3194381312,3194384383,US -3194384384,3194386431,BZ +3194381312,3194386431,US 3194386432,3194388479,CO 3194388480,3194396671,PE 3194396672,3194413055,CO @@ -109805,14 +111540,17 @@ 3194445824,3194454015,CO 3194454016,3194459135,AR 3194459136,3194466303,BR -3194466304,3194467327,AR +3194466304,3194466815,AR +3194466816,3194467071,US +3194467072,3194467327,MX 3194467328,3194468351,DO 3194468352,3194469375,US 3194469888,3194470143,AR 3194470400,3194486783,AR 3194486784,3194494975,BO 3194494976,3194511359,AR -3194511360,3194515455,AW +3194511360,3194513407,AW +3194513408,3194515455,CW 3194515456,3194519551,GT 3194519552,3194535935,PY 3194535936,3194585087,AR @@ -109824,12 +111562,14 @@ 3194595328,3194596351,PA 3194596352,3194597375,HT 3194597376,3194601471,AR -3194601472,3194601727,CW -3194601728,3194601983,NL +3194601472,3194601983,NL 3194601984,3194602239,CW 3194602240,3194602495,NL 3194602496,3194603519,BR -3194603520,3194613759,AR +3194603520,3194610943,AR +3194610944,3194611199,CO +3194611200,3194613503,AR +3194613504,3194613759,CL 3194613760,3194617855,PE 3194617856,3194626047,NI 3194626048,3194630143,AR @@ -109839,7 +111579,9 @@ 3194640384,3194642431,BR 3194642432,3194646527,AR 3194646528,3194648575,DO -3194648576,3194658815,AR +3194648576,3194652415,AR +3194652416,3194652671,MX +3194652672,3194658815,AR 3194658816,3194667007,NL 3194667008,3194675199,GT 3194675200,3194676223,PA @@ -109864,7 +111606,9 @@ 3194742784,3194744831,EC 3194744832,3194746879,AR 3194746880,3194748927,BQ -3194748928,3194757119,UY +3194748928,3194749183,UY +3194749184,3194749439,PY +3194749440,3194757119,UY 3194757120,3194765311,AR 3194765312,3194767359,EC 3194767360,3194768383,CR @@ -109877,8 +111621,10 @@ 3194804224,3194805247,AR 3194805248,3194806271,CR 3194806272,3194814463,AR -3194814464,3194822655,PA -3194822656,3194830847,AR +3194814464,3194822655,CO +3194822656,3194827007,AR +3194827008,3194827263,CO +3194827264,3194830847,AR 3194830848,3194842111,BR 3194842112,3194843135,AR 3194843136,3194845183,BR @@ -109890,15 +111636,19 @@ 3194880000,3194888191,MX 3194888192,3194890239,DO 3194890240,3194896383,EC -3194896384,3194904575,CO +3194896384,3194903551,CO +3194903552,3194904575,PE 3194904576,3194908671,CL 3194908672,3194910719,AR 3194910720,3194925055,CL 3194925056,3194929151,AR 3194929152,3194937343,EC 3194937344,3194945535,AR -3194945536,3194953727,GT -3194953728,3194961919,AR +3194945536,3194953215,GT +3194953216,3194953727,NI +3194953728,3194961407,AR +3194961408,3194961663,US +3194961664,3194961919,AR 3194961920,3194970111,EC 3194970112,3194974207,BR 3194974208,3194976255,AR @@ -109909,7 +111659,7 @@ 3194980352,3194984447,BR 3194984448,3194985471,BO 3194985472,3194986495,BR -3194986496,3194987519,HN +3194986496,3194987519,US 3194987520,3194990847,BR 3194990848,3194991103,AR 3194991104,3194991359,BO @@ -109926,11 +111676,10 @@ 3195054080,3195055103,PY 3195055104,3195056127,BR 3195056128,3195060223,AR -3195060224,3195060479,UY -3195060480,3195061247,US +3195060224,3195061247,US 3195061248,3195062271,AR 3195062272,3195062783,US -3195062784,3195063039,UY +3195062784,3195063039,AR 3195063040,3195063295,US 3195063296,3195064319,BR 3195064320,3195066367,PY @@ -109957,7 +111706,15 @@ 3195138048,3195139071,BR 3195139072,3195140095,CL 3195140096,3195142143,CR -3195142144,3195150335,PA +3195142144,3195142399,MX +3195142400,3195142655,PA +3195142656,3195142911,VE +3195142912,3195143423,PA +3195143424,3195143679,BO +3195143680,3195143935,AR +3195143936,3195144447,PA +3195144448,3195144703,CR +3195144704,3195150335,PA 3195150336,3195158527,CL 3195158528,3195199487,AR 3195199488,3195201535,PY @@ -109988,7 +111745,10 @@ 3195580416,3195584511,AR 3195584512,3195592703,HT 3195592704,3195593727,BR -3195593728,3195594751,CO +3195593728,3195593983,CO +3195593984,3195594239,PE +3195594240,3195594495,CL +3195594496,3195594751,CO 3195594752,3195596799,BR 3195596800,3195597823,CR 3195597824,3195598847,AR @@ -109998,11 +111758,23 @@ 3195641856,3195645951,PY 3195645952,3195650047,AR 3195650048,3195654143,GT -3195654144,3195655167,CW -3195655168,3195655423,NL -3195655424,3195658239,CW +3195654144,3195654655,GB +3195654656,3195655167,CW +3195655168,3195655679,NL +3195655680,3195656191,AE +3195656192,3195657215,NL +3195657216,3195657727,GB +3195657728,3195657983,NL +3195657984,3195658239,CW 3195658240,3195662335,VE -3195662336,3195666431,CW +3195662336,3195662591,CW +3195662592,3195662847,NL +3195662848,3195663359,CW +3195663360,3195663615,NL +3195663616,3195663871,CW +3195663872,3195664127,NL +3195664128,3195664383,CW +3195664384,3195666431,NL 3195666432,3195691007,AR 3195691008,3195699199,DO 3195699200,3195707391,AR @@ -110037,7 +111809,7 @@ 3195768832,3195772927,AR 3195772928,3195781119,VE 3195781120,3195785215,BR -3195785216,3195789311,HN +3195785216,3195789311,US 3195789312,3195793407,PA 3195793408,3195801599,AR 3195801600,3195803647,HN @@ -110070,7 +111842,9 @@ 3196223488,3196305407,EC 3196305408,3196321791,CO 3196321792,3196583935,UY -3196583936,3196846079,AR +3196583936,3196690687,AR +3196690688,3196690943,UY +3196690944,3196846079,AR 3196846080,3196977151,PA 3196977152,3197042687,VE 3197042688,3197075455,CO @@ -110141,10 +111915,12 @@ 3199811584,3199819775,SX 3199819776,3199820287,BR 3199820800,3199822847,AR -3199822848,3199827967,HN +3199822848,3199823871,US +3199823872,3199827967,HN 3199827968,3199860735,AR 3199860736,3199926271,BO -3199926272,3199991807,PE +3199926272,3199991551,PE +3199991552,3199991807,CO 3199991808,3200516095,AR 3200516096,3200565247,CL 3200565248,3200569343,HT @@ -110180,16 +111956,87 @@ 3201630208,3201695743,TT 3201695744,3201761279,EC 3201761280,3201826815,CL -3201826816,3201925119,AR +3201826816,3201851391,AR +3201851392,3201855487,EC +3201855488,3201859583,PE +3201859584,3201863679,CO +3201863680,3201865727,CL +3201865728,3201867775,CO +3201867776,3201875967,PE +3201875968,3201880063,CO +3201880064,3201884159,EC +3201884160,3201896447,VE +3201896448,3201900543,CO +3201900544,3201904639,CL +3201904640,3201910783,CO +3201910784,3201912831,AR +3201912832,3201913855,CO +3201913856,3201916927,AR +3201916928,3201923071,CO +3201923072,3201924095,AR +3201924096,3201924351,PA +3201924352,3201924863,CR +3201924864,3201925119,PA 3201925120,3201957887,CL 3201957888,3202088959,PA -3202088960,3202220031,AR +3202088960,3202109695,AR +3202109696,3202109951,PY +3202109952,3202115071,AR +3202115072,3202115327,PY +3202115328,3202120447,AR +3202120448,3202120703,PY +3202120704,3202145279,AR +3202145280,3202145535,PY +3202145536,3202220031,AR 3202220032,3202351103,PE 3202351104,3202875391,AR 3202875392,3203399679,PE 3203399680,3203465215,CO 3203465216,3203530751,CR -3203530752,3203661823,CO +3203530752,3203531519,CO +3203531520,3203531775,PA +3203531776,3203532287,CO +3203532288,3203534847,PA +3203534848,3203535871,CO +3203535872,3203536383,PA +3203536384,3203536895,CO +3203536896,3203537919,HN +3203537920,3203538431,GT +3203538432,3203538687,PA +3203538688,3203538943,CO +3203538944,3203539967,BZ +3203539968,3203543551,CO +3203543552,3203544575,GT +3203544576,3203545087,CO +3203545088,3203545599,GT +3203545600,3203547135,CO +3203547136,3203549183,PA +3203549184,3203553279,CO +3203553280,3203553535,CR +3203553536,3203555583,CO +3203555584,3203555839,GT +3203555840,3203556863,CO +3203556864,3203557119,DO +3203557120,3203561471,CO +3203561472,3203562495,SV +3203562496,3203564543,CO +3203564544,3203565055,DO +3203565056,3203566079,CR +3203566080,3203566591,CO +3203566592,3203566847,PA +3203566848,3203567103,DO +3203567104,3203567871,CO +3203567872,3203568127,PA +3203568128,3203568639,CO +3203568640,3203569663,SV +3203569664,3203569919,CO +3203569920,3203570431,SV +3203570432,3203570943,CR +3203570944,3203571199,CO +3203571200,3203572479,SV +3203572480,3203574271,CO +3203574272,3203574527,PE +3203574528,3203661823,CO 3203661824,3203923967,AR 3203923968,3204448255,CO 3204448256,3204934655,BR @@ -110206,29 +112053,167 @@ 3209691136,3210084351,AR 3210084352,3210215423,BR 3210215424,3210739711,CO -3210739712,3210765567,CL +3210739712,3210739967,AE +3210739968,3210740479,CL +3210740480,3210741759,AE +3210741760,3210742015,CL +3210742016,3210742783,AE +3210742784,3210743039,US +3210743040,3210743295,AE +3210743296,3210743551,US +3210743552,3210744319,AE +3210744320,3210744575,US +3210744576,3210745087,AE +3210745088,3210745343,JP +3210745344,3210745599,AE +3210745600,3210745855,BR +3210745856,3210746111,AE +3210746112,3210746367,US +3210746368,3210746623,AE +3210746624,3210746879,US +3210746880,3210747135,AE +3210747136,3210747647,CL +3210747648,3210748159,US +3210748160,3210748671,AE +3210748672,3210748927,CL +3210748928,3210749183,AE +3210749184,3210749439,TH +3210749440,3210749951,US +3210749952,3210750207,CL +3210750208,3210751999,AE +3210752000,3210752511,JP +3210752512,3210753023,AE +3210753024,3210753535,AP +3210753536,3210754047,US +3210754048,3210755327,AE +3210755328,3210755839,CL +3210755840,3210756095,AE +3210756096,3210756351,CL +3210756352,3210756863,US +3210756864,3210757119,RU +3210757120,3210757375,US +3210757376,3210758143,AE +3210758144,3210758399,BR +3210758400,3210758655,AE +3210758656,3210758911,CL +3210758912,3210759423,US +3210759424,3210759679,VN +3210759680,3210760191,CL +3210760192,3210761215,AE +3210761216,3210763263,US +3210763264,3210763775,TH +3210763776,3210764031,CL +3210764032,3210764287,AE +3210764288,3210764543,NL +3210764544,3210764799,AE +3210764800,3210765055,BR +3210765056,3210765311,AE +3210765312,3210765567,JP 3210765568,3210765823,US 3210765824,3210766079,CL 3210766080,3210766335,DE -3210766336,3210767871,CL +3210766336,3210766847,US +3210766848,3210767871,CL 3210767872,3210768127,GB -3210768128,3210772991,CL -3210772992,3210773247,TR -3210773248,3210779391,CL +3210768128,3210768383,AE +3210768384,3210769407,JP +3210769408,3210769919,AE +3210769920,3210770175,US +3210770176,3210770431,AE +3210770432,3210770943,US +3210770944,3210771199,CL +3210771200,3210772479,AE +3210772480,3210772991,CL +3210772992,3210773247,US +3210773248,3210773503,MY +3210773504,3210773759,AE +3210773760,3210774015,CL +3210774016,3210774271,US +3210774272,3210774527,AE +3210774528,3210774783,US +3210774784,3210775039,AE +3210775040,3210775295,CL +3210775296,3210775551,AE +3210775552,3210775807,US +3210775808,3210776319,AE +3210776320,3210776575,US +3210776576,3210776831,AE +3210776832,3210777087,MX +3210777088,3210777599,AE +3210777600,3210778111,US +3210778112,3210778367,IN +3210778368,3210779135,US +3210779136,3210779391,BA 3210779392,3210779647,US -3210779648,3210782207,CL -3210782208,3210782463,US -3210782464,3210787327,CL -3210787328,3210787583,US -3210787584,3210789887,CL +3210779648,3210780159,CL +3210780160,3210780415,BR +3210780416,3210780671,PE +3210780672,3210781695,CL +3210781696,3210781951,DO +3210781952,3210782463,US +3210782464,3210782719,BA +3210782720,3210782975,CL +3210782976,3210783231,AE +3210783232,3210783487,CL +3210783488,3210783743,AE +3210783744,3210783999,IT +3210784000,3210784255,AE +3210784256,3210784511,CL +3210784512,3210784767,AE +3210784768,3210785279,US +3210785280,3210785791,JP +3210785792,3210786047,FR +3210786048,3210786303,AE +3210786304,3210786559,US +3210786560,3210786815,AE +3210786816,3210787071,CL +3210787072,3210787327,SC +3210787328,3210787839,US +3210787840,3210788095,CL +3210788096,3210788351,IN +3210788352,3210788607,MX +3210788608,3210789119,AE +3210789120,3210789631,US +3210789632,3210789887,AE 3210789888,3210790399,US -3210790400,3210793215,CL +3210790400,3210790911,CL +3210790912,3210791167,AE +3210791168,3210791423,CL +3210791424,3210791679,CA +3210791680,3210792447,US +3210792448,3210792703,CL +3210792704,3210792959,US +3210792960,3210793215,AE 3210793216,3210793471,GB -3210793472,3210802175,CL +3210793472,3210793727,IT +3210793728,3210793983,US +3210793984,3210794239,CL +3210794240,3210794495,AE +3210794496,3210795007,CL +3210795008,3210796031,PA +3210796032,3210796287,BR +3210796288,3210796543,US +3210796544,3210796799,AE +3210796800,3210797055,US +3210797056,3210797567,CL +3210797568,3210798079,US +3210798080,3210798591,AE +3210798592,3210798847,US +3210798848,3210799103,VE +3210799104,3210799359,CL +3210799360,3210799615,AE +3210799616,3210799871,CL +3210799872,3210800127,US +3210800128,3210800895,JP +3210800896,3210801151,US +3210801152,3210802175,AE 3210802176,3210802431,NL -3210802432,3210803455,CL +3210802432,3210802943,US +3210802944,3210803455,AE 3210803456,3210803711,GB -3210803712,3210805247,CL +3210803712,3210804735,AE +3210804736,3210804991,US +3210804992,3210805247,TR 3210805248,3210809343,CO 3210809344,3210810367,VE 3210810368,3210811391,PE @@ -110239,7 +112224,8 @@ 3210825728,3210827775,BZ 3210827776,3210829823,DO 3210829824,3210830847,AR -3210830848,3210831871,PE +3210830848,3210831359,PE +3210831360,3210831871,BR 3210831872,3210832895,DO 3210832896,3210835967,AR 3210835968,3210838015,PY @@ -110255,25 +112241,117 @@ 3210931968,3210932223,BR 3210932224,3210936319,NI 3210936320,3211067391,EC -3211067392,3211075071,CL +3211067392,3211071487,AE +3211071488,3211071999,US +3211072000,3211072511,AE +3211072512,3211073023,GB +3211073024,3211073279,AE +3211073280,3211073535,GB +3211073536,3211073791,CL +3211073792,3211074047,VE +3211074048,3211074303,US +3211074304,3211074559,VE +3211074560,3211074815,CL +3211074816,3211075071,GB 3211075072,3211075327,US -3211075328,3211076863,CL +3211075328,3211075839,CL +3211075840,3211076095,US +3211076096,3211076607,BR +3211076608,3211076863,CL 3211076864,3211077119,AP -3211077120,3211081983,CL +3211077120,3211077375,DO +3211077376,3211077631,CL +3211077632,3211078143,PA +3211078144,3211078655,US +3211078656,3211079935,CL +3211079936,3211080191,BA +3211080192,3211080447,CL +3211080448,3211080703,DE +3211080704,3211081983,CL 3211081984,3211082239,US -3211082240,3211082495,CL +3211082240,3211082495,DO 3211082496,3211082751,GB -3211082752,3211101695,CL -3211101696,3211101951,GB -3211101952,3211109887,CL +3211082752,3211083007,IT +3211083008,3211083263,DO +3211083264,3211083519,AE +3211083520,3211083775,DO +3211083776,3211087871,DE +3211087872,3211088383,AE +3211088384,3211088639,DE +3211088640,3211090175,AE +3211090176,3211090431,DE +3211090432,3211091967,AE +3211091968,3211096063,DE +3211096064,3211097087,AE +3211097088,3211097343,DE +3211097344,3211097599,AE +3211097600,3211097855,US +3211097856,3211098111,AE +3211098112,3211098367,US +3211098368,3211099135,AE +3211099136,3211099391,DE +3211099392,3211099647,AE +3211099648,3211099903,DE +3211099904,3211100159,AE +3211100160,3211101695,BR +3211101696,3211101951,TR +3211101952,3211102207,GB +3211102208,3211104767,AE +3211104768,3211105023,GB +3211105024,3211105279,AE +3211105280,3211105791,GB +3211105792,3211106303,DK +3211106304,3211108351,AE +3211108352,3211108607,US +3211108608,3211108863,CL +3211108864,3211109887,AE 3211109888,3211110143,US -3211110144,3211111423,CL -3211111424,3211111679,US -3211111680,3211112191,CL +3211110144,3211110399,CL +3211110400,3211110655,US +3211110656,3211111167,AE +3211111168,3211111423,DK +3211111424,3211112191,US 3211112192,3211112447,NL -3211112448,3211120127,CL +3211112448,3211112703,US +3211112704,3211112959,BR +3211112960,3211113471,JP +3211113472,3211113727,BR +3211113728,3211114239,US +3211114240,3211114495,CL +3211114496,3211115007,TH +3211115008,3211116031,US +3211116032,3211116287,ES +3211116288,3211116543,CL +3211116544,3211117055,US +3211117056,3211117567,AE +3211117568,3211118079,US +3211118080,3211119103,AE +3211119104,3211119615,JP +3211119616,3211119871,AE +3211119872,3211120127,GB 3211120128,3211120383,DE -3211120384,3211132927,CL +3211120384,3211120639,US +3211120640,3211120895,AE +3211120896,3211121663,CL +3211121664,3211122687,TH +3211122688,3211123199,CL +3211123200,3211123455,AE +3211123456,3211123711,DK +3211123712,3211123967,CL +3211123968,3211124479,AE +3211124480,3211124735,CL +3211124736,3211128831,AE +3211128832,3211129087,GB +3211129088,3211129343,US +3211129344,3211130111,AE +3211130112,3211130367,CL +3211130368,3211130623,FR +3211130624,3211130879,GB +3211130880,3211131391,AE +3211131392,3211132159,CL +3211132160,3211132415,US +3211132416,3211132671,TR +3211132672,3211132927,US 3211132928,3211137023,CO 3211137024,3211141119,AR 3211141120,3211142143,CL @@ -110282,7 +112360,12 @@ 3211145216,3211147263,NI 3211147264,3211148287,CR 3211148288,3211165695,CO -3211165696,3211182079,HN +3211165696,3211167999,US +3211168000,3211168255,CA +3211168256,3211177471,US +3211177472,3211177727,HN +3211177728,3211181567,US +3211181568,3211182079,HN 3211182080,3211194367,CO 3211194368,3211195391,DO 3211195392,3211214847,AR @@ -110613,7 +112696,7 @@ 3223569664,3223570175,GB 3223570176,3223571711,US 3223571712,3223571967,ES -3223571968,3223572223,US +3223571968,3223572223,MD 3223572224,3223572479,IE 3223572480,3223577855,US 3223577856,3223578111,DE @@ -110697,7 +112780,9 @@ 3223650048,3223650303,GB 3223650304,3223715839,CH 3223715840,3223781375,DK -3223781376,3223855103,US +3223781376,3223846911,US +3223846912,3223847935,KR +3223847936,3223855103,US 3223855104,3223857151,CA 3223857664,3223859711,US 3223859968,3223864575,US @@ -110798,7 +112883,6 @@ 3224038912,3224042751,US 3224042752,3224043007,DE 3224043008,3224084735,US -3224084736,3224084991,?? 3224084992,3224087551,SE 3224087552,3224088063,US 3224088320,3224090879,US @@ -110909,7 +112993,9 @@ 3224694784,3224698111,US 3224698112,3224698367,GB 3224698368,3224698623,FR -3224698624,3224725247,US +3224698624,3224710655,US +3224710656,3224710911,GB +3224710912,3224725247,US 3224725248,3224725503,DE 3224725504,3224725759,CH 3224725760,3224772351,US @@ -111479,12 +113565,12 @@ 3226307584,3226308095,ES 3226308096,3226318335,US 3226318848,3226333183,US -3226333184,3226335231,?? 3226337280,3226378239,US 3226378240,3226382335,DE 3226382336,3226386431,US 3226386432,3226390527,DE -3226390528,3226473471,US +3226390528,3226470911,US +3226471168,3226473471,US 3226473472,3226473983,PT 3226473984,3226474495,US 3226474496,3226474751,CL @@ -112032,11 +114118,7 @@ 3227853312,3227853567,GB 3227853568,3227860991,US 3227860992,3227862015,NL -3227862016,3227862271,US -3227862272,3227862527,NL -3227862528,3227862783,US -3227862784,3227863039,NL -3227863040,3227863807,US +3227862016,3227863807,US 3227863808,3227864063,DE 3227864064,3227865599,US 3227865600,3227865855,NL @@ -112324,7 +114406,7 @@ 3228403712,3228403967,US 3228403968,3228404223,DE 3228404224,3228404479,BG -3228404480,3228404735,GB +3228404480,3228404735,TR 3228404736,3228405503,FR 3228405504,3228405759,HK 3228405760,3228406015,ZA @@ -112410,7 +114492,8 @@ 3228564736,3228572927,US 3228572928,3228573183,CA 3228573184,3228573951,PT -3228573952,3228577023,US +3228573952,3228574975,US +3228575232,3228577023,US 3228577024,3228577279,PT 3228577280,3228578047,US 3228578048,3228578303,GB @@ -112615,16 +114698,13 @@ 3229395968,3229396223,CZ 3229396224,3229397247,RU 3229397248,3229397503,JP -3229397504,3229397759,TR -3229397760,3229398015,RU +3229397504,3229398015,RU 3229398016,3229399039,LT 3229399040,3229401087,RU 3229401088,3229402879,GB 3229402880,3229403135,NO 3229403136,3229405183,GB -3229405184,3229405439,RU -3229405440,3229405695,NL -3229405696,3229407231,RU +3229405184,3229407231,RU 3229407232,3229407487,CZ 3229407488,3229408255,RU 3229408256,3229412095,US @@ -112640,8 +114720,7 @@ 3229483008,3229483263,US 3229483264,3229499647,FI 3229499648,3229511679,US -3229511680,3229514751,?? -3229515008,3229515519,?? +3229513728,3229513983,?? 3229515776,3229679871,US 3229679872,3229680383,DE 3229680384,3229680895,RO @@ -113004,10 +115083,7 @@ 3230525440,3230528511,BR 3230528512,3230529535,MX 3230529536,3230531583,BR -3230531584,3230539775,ES -3230539776,3230547967,US -3230547968,3230556159,ES -3230556160,3230597119,US +3230531584,3230597119,US 3230597120,3230662655,ZA 3230662656,3230663679,ES 3230663680,3230664703,RU @@ -113039,7 +115115,7 @@ 3230686208,3230687231,ID 3230687232,3230691327,BR 3230691328,3230692351,CO -3230692352,3230694399,BR +3230692352,3230695423,BR 3230695424,3230728191,CN 3230728192,3230729215,RU 3230729216,3230730239,FR @@ -113053,12 +115129,12 @@ 3230738432,3230739455,ES 3230739456,3230740479,DE 3230740480,3230741503,SM -3230741504,3230742527,GB +3230741504,3230742527,US 3230742528,3230743551,NL 3230743552,3230744575,CH 3230744576,3230745855,US 3230745856,3230746111,TH -3230746112,3230746367,AR +3230746112,3230746367,BR 3230746368,3230746623,VN 3230746624,3230747391,AU 3230747392,3230747647,DE @@ -113654,7 +115730,9 @@ 3231722752,3231723007,BR 3231723008,3231724031,US 3231724032,3231724287,BR -3231724288,3231727871,US +3231724288,3231725567,US +3231725568,3231725823,?? +3231725824,3231727871,US 3231727872,3231728127,DE 3231728128,3231728383,US 3231728384,3231728639,AT @@ -113852,13 +115930,14 @@ 3232115712,3232115967,NL 3232115968,3232116735,GB 3232116736,3232125183,DE -3232125184,3232125951,NL +3232125184,3232125439,NL +3232125440,3232125951,TR 3232125952,3232129023,DE 3232129024,3232130047,NL 3232130048,3232131071,UA 3232131072,3232133119,DE 3232133120,3232133631,UA -3232133632,3232134143,NL +3232133632,3232134143,GB 3232134144,3232135167,RU 3232135168,3232135679,PL 3232135680,3232135935,RO @@ -113914,7 +115993,6 @@ 3232462848,3232464895,BB 3232464896,3232483327,GB 3232483328,3232489471,US -3232493824,3232494079,?? 3232495104,3232495615,?? 3232497664,3232555775,US 3232555776,3232557055,JP @@ -114449,7 +116527,8 @@ 3235278848,3235282943,BB 3235282944,3235291135,CA 3235291136,3235299327,DE -3235299328,3235315711,CA +3235299328,3235307519,FR +3235307520,3235315711,CA 3235315712,3235512319,US 3235512320,3235577855,JP 3235577856,3235585279,CA @@ -114491,7 +116570,9 @@ 3236241408,3236302847,US 3236308224,3236309503,?? 3236309760,3236310015,?? -3236310272,3236313599,?? +3236310272,3236310783,?? +3236311040,3236313087,?? +3236313344,3236313599,?? 3236315136,3236365567,US 3236365568,3236365823,CA 3236365824,3236368127,US @@ -114590,8 +116671,6 @@ 3236827136,3236958207,US 3236958208,3236962303,AU 3236962304,3237003263,US -3237011456,3237012479,?? -3237015552,3237019647,?? 3237019648,3237036031,US 3237036032,3237052415,CA 3237052416,3237163007,US @@ -114671,7 +116750,10 @@ 3237552128,3237554687,US 3237554688,3237555199,SG 3237555200,3237564415,US -3237564416,3237568255,AP +3237564416,3237566719,AP +3237566720,3237566975,HK +3237566976,3237567743,AP +3237567744,3237568255,HK 3237568256,3237568511,US 3237568512,3237572607,CA 3237572608,3237576703,US @@ -114729,7 +116811,6 @@ 3237896192,3237900287,PR 3237900288,3237953535,US 3237954816,3237955071,?? -3237959168,3237959679,?? 3237969920,3238002687,US 3238002688,3238010879,NL 3238010880,3238017023,CH @@ -114749,7 +116830,7 @@ 3238042624,3238042879,IR 3238042880,3238043135,IT 3238043136,3238043391,GB -3238043648,3238043903,NL +3238043648,3238043903,US 3238043904,3238044159,DK 3238044160,3238044671,KZ 3238044672,3238045183,ES @@ -114802,13 +116883,15 @@ 3238067456,3238067711,SE 3238067712,3238067967,AT 3238067968,3238068223,GB -3238068224,3238133759,IE +3238068224,3238111231,IE +3238111232,3238111487,GB +3238111488,3238133759,IE 3238133760,3238199295,SI 3238199296,3238199551,ES 3238199552,3238203391,DK 3238203392,3238203647,US 3238203648,3238204415,RU -3238204416,3238204671,TR +3238204416,3238204671,US 3238204672,3238204927,FR 3238204928,3238205439,RU 3238205440,3238205695,FR @@ -114916,7 +116999,8 @@ 3238340608,3238340863,CH 3238340864,3238341119,IT 3238341120,3238342143,CH -3238342144,3238342655,FR +3238342144,3238342399,FR +3238342400,3238342655,HK 3238342656,3238346751,CH 3238346752,3238347263,NL 3238347264,3238361087,CH @@ -114940,7 +117024,9 @@ 3238461440,3238502399,DE 3238502400,3238504447,RU 3238504448,3238510591,DE -3238510592,3238511615,GB +3238510592,3238511103,GB +3238511104,3238511359,PL +3238511360,3238511615,GB 3238511616,3238512639,RU 3238512640,3238513663,AE 3238513664,3238514687,GB @@ -115057,7 +117143,7 @@ 3238598656,3238598911,CH 3238598912,3238599167,NL 3238599168,3238599679,HU -3238599680,3238599935,US +3238599680,3238599935,UA 3238599936,3238600191,GB 3238600192,3238600703,PL 3238600704,3238601727,US @@ -115163,7 +117249,7 @@ 3239106048,3239106559,DE 3239106560,3239106815,ES 3239106816,3239107071,CH -3239107072,3239107327,RO +3239107072,3239107327,HU 3239107328,3239107583,GR 3239107584,3239107839,CH 3239107840,3239108095,FR @@ -115300,7 +117386,7 @@ 3239173632,3239173887,AT 3239173888,3239174143,PL 3239174144,3239174399,DE -3239174400,3239174655,TR +3239174400,3239174655,US 3239174656,3239174911,GB 3239174912,3239175167,SI 3239175424,3239175679,BG @@ -115309,9 +117395,7 @@ 3239181312,3239181567,AT 3239181568,3239181823,DE 3239181824,3239182079,GB -3239182080,3239205887,DE -3239205888,3239206399,US -3239206400,3239230975,DE +3239182080,3239230975,DE 3239230976,3239231487,HK 3239231488,3239264255,DE 3239264256,3239264767,NO @@ -115470,7 +117554,7 @@ 3239509760,3239510015,DE 3239510016,3239510527,CH 3239510528,3239510783,DE -3239510784,3239511039,RU +3239510784,3239511039,NL 3239511040,3239512063,RO 3239512064,3239514111,DE 3239514112,3239515135,NL @@ -115652,7 +117736,7 @@ 3239693312,3239693567,BH 3239693568,3239693823,SA 3239693824,3239694079,ES -3239694080,3239694335,GB +3239694080,3239694335,LT 3239694336,3239694847,DE 3239694848,3239695359,RU 3239695360,3239695871,DE @@ -115699,7 +117783,8 @@ 3239714816,3239735295,DE 3239735296,3239735807,US 3239735808,3239736063,NL -3239736064,3239737343,GB +3239736064,3239736319,DE +3239736320,3239737343,GB 3239737344,3239737599,DE 3239737600,3239737855,FR 3239737856,3239738111,RU @@ -115969,7 +118054,7 @@ 3239930112,3239930367,SE 3239930368,3239930623,DE 3239930624,3239930879,DK -3239930880,3239931903,US +3239930880,3239931903,GB 3239931904,3239935999,DE 3239936000,3239936511,GB 3239936512,3239938815,DE @@ -116034,6 +118119,7 @@ 3239993344,3239994367,LB 3239994368,3239995391,ES 3239995392,3239996415,DE +3239996416,3239996671,RU 3239996672,3239996927,FI 3239996928,3239997183,BE 3239997184,3239997439,GB @@ -116041,7 +118127,7 @@ 3239997696,3239997951,FI 3239997952,3239998463,IE 3239998464,3239998719,KZ -3239998720,3239998975,GB +3239998720,3239998975,US 3239998976,3239999231,BG 3239999232,3239999487,NO 3239999488,3240000511,DE @@ -116186,7 +118272,7 @@ 3240123648,3240123903,GB 3240123904,3240124159,IT 3240124160,3240124415,PL -3240124416,3240125439,JP +3240124416,3240125439,RU 3240125440,3240125695,RO 3240125696,3240125951,GB 3240125952,3240126207,NO @@ -116210,7 +118296,10 @@ 3240139776,3240140799,ES 3240140800,3240141567,RO 3240141568,3240141823,GB -3240141824,3240142847,RU +3240141824,3240142079,ID +3240142080,3240142335,AU +3240142336,3240142591,PT +3240142592,3240142847,SG 3240142848,3240143871,NL 3240143872,3240144127,ZA 3240144128,3240144895,AU @@ -116337,7 +118426,8 @@ 3240216064,3240216575,GB 3240216576,3240217087,RO 3240217088,3240217599,UA -3240217600,3240218111,TR +3240217600,3240217855,TR +3240217856,3240218111,DE 3240218112,3240218623,UA 3240218624,3240218879,RU 3240218880,3240219135,DE @@ -116373,7 +118463,9 @@ 3240240128,3240241151,US 3240241152,3240242175,FI 3240242176,3240243199,PL -3240243200,3240244223,DE +3240243200,3240243455,SK +3240243456,3240243967,DE +3240243968,3240244223,SK 3240244224,3240245247,PL 3240245248,3240246271,IL 3240246272,3240247295,UA @@ -116513,7 +118605,7 @@ 3240354304,3240354559,US 3240354560,3240354815,RU 3240354816,3240355327,NL -3240355328,3240355583,DE +3240355328,3240355583,SK 3240355584,3240355839,NL 3240355840,3240361983,GB 3240361984,3240362239,TR @@ -116540,12 +118632,13 @@ 3240376320,3240377343,RU 3240377344,3240378367,TR 3240378368,3240380415,GB -3240380416,3240380927,AU +3240380416,3240380671,US +3240380672,3240380927,TR 3240380928,3240381183,DE 3240381184,3240381439,GB 3240381440,3240381695,LT 3240381696,3240383487,GB -3240383488,3240383999,AU +3240383488,3240383999,US 3240384000,3240384255,LT 3240384256,3240384511,GB 3240384512,3240384767,ES @@ -116568,7 +118661,7 @@ 3240392704,3240393727,DE 3240393728,3240394751,JP 3240394752,3240395775,GB -3240395776,3240396031,US +3240395776,3240396031,SG 3240396032,3240396287,GB 3240396288,3240396799,ES 3240396800,3240398847,GB @@ -116612,11 +118705,12 @@ 3240422400,3240422655,DE 3240422656,3240423423,US 3240423424,3240435711,GB -3240435712,3240436223,SG +3240435712,3240435967,SG +3240435968,3240436223,US 3240436224,3240436479,RU 3240436480,3240437759,GB 3240437760,3240438783,US -3240438784,3240439039,BG +3240438784,3240439039,DE 3240439040,3240439295,NL 3240439296,3240439551,US 3240439552,3240439807,NL @@ -116660,11 +118754,10 @@ 3240467200,3240467455,RU 3240467456,3240467711,UA 3240467712,3240467967,RU -3240467968,3240468223,GB 3240468224,3240468479,CH 3240468480,3240476671,GB 3240476672,3240477695,UA -3240477696,3240478719,LT +3240477696,3240478719,SK 3240478720,3240479743,US 3240479744,3240480767,NL 3240480768,3240481791,GB @@ -116684,7 +118777,7 @@ 3240487936,3240488191,CH 3240488192,3240488447,GB 3240488448,3240488703,BG -3240488704,3240488959,LT +3240488704,3240488959,DE 3240488960,3240491007,GB 3240491008,3240491519,NL 3240491520,3240491775,FR @@ -116697,12 +118790,12 @@ 3240502784,3240503039,DE 3240503040,3240503295,GB 3240503296,3240504319,DE -3240504320,3240505343,US +3240504320,3240505343,TR 3240505344,3240505599,PL 3240505600,3240505855,GB 3240505856,3240506367,RU 3240506368,3240506623,GB -3240506624,3240506879,TR +3240506624,3240506879,LT 3240506880,3240507391,NL 3240507392,3240525823,GB 3240525824,3240526847,FR @@ -116739,7 +118832,7 @@ 3240560128,3240560639,NL 3240560640,3240560895,GB 3240560896,3240561151,IR -3240561152,3240561407,TR +3240561152,3240561407,US 3240561408,3240561663,GB 3240561664,3240562687,HU 3240562688,3240575487,GB @@ -116789,7 +118882,8 @@ 3240608512,3240608767,PT 3240608768,3240609791,BG 3240609792,3240611839,DE -3240611840,3240612351,AU +3240611840,3240612095,AU +3240612096,3240612351,NL 3240612352,3240612863,DE 3240612864,3240613119,GB 3240613120,3240613375,TR @@ -116819,7 +118913,8 @@ 3240698368,3240698623,HU 3240698624,3240699135,SI 3240699136,3240699391,DE -3240699392,3240699903,AU +3240699392,3240699647,AU +3240699648,3240699903,US 3240699904,3240700159,LT 3240700160,3240700415,AT 3240700416,3240700671,BE @@ -116948,8 +119043,7 @@ 3240760576,3240760831,SE 3240760832,3240761087,DE 3240761088,3240761343,NL -3240761344,3240762111,AP -3240762112,3240762367,HK +3240761344,3240762367,HK 3240762368,3240763391,ES 3240763392,3240764415,US 3240764416,3240764671,PL @@ -116981,7 +119075,8 @@ 3240788992,3240789247,HK 3240789248,3240789759,IT 3240789760,3240790015,HK -3240790016,3240790527,DE +3240790016,3240790271,DE +3240790272,3240790527,US 3240790528,3240791551,IT 3240791552,3240791807,RU 3240791808,3240792063,ES @@ -117004,10 +119099,10 @@ 3240809216,3240809471,PL 3240809472,3240809727,NL 3240809728,3240809983,FR -3240809984,3240810239,IT +3240809984,3240810239,DE 3240810240,3240810495,SE 3240810496,3240810751,TR -3240810752,3240811007,IT +3240810752,3240811007,DE 3240811008,3240811263,PL 3240811264,3240811519,SE 3240811520,3240811775,SA @@ -117085,7 +119180,8 @@ 3240857088,3240857599,AT 3240857600,3240857855,PL 3240857856,3240858111,SY -3240858112,3240858623,RU +3240858112,3240858367,LV +3240858368,3240858623,NL 3240858624,3240858879,PL 3240858880,3240859135,SY 3240859136,3240859391,GB @@ -117112,7 +119208,9 @@ 3240881152,3240882175,BE 3240882176,3240883199,PL 3240883200,3240884223,IL -3240884224,3240886271,UA +3240884224,3240884735,RU +3240884736,3240885247,KZ +3240885248,3240886271,UA 3240886272,3241017343,SE 3241017344,3241017599,US 3241017600,3241017855,AT @@ -117128,7 +119226,8 @@ 3241029120,3241029375,UA 3241029376,3241029631,PL 3241029632,3241031679,AT -3241031680,3241032191,RU +3241031680,3241031935,TR +3241031936,3241032191,RU 3241032192,3241032703,AT 3241032704,3241032959,RU 3241032960,3241033215,GB @@ -117202,8 +119301,7 @@ 3241081344,3241081855,DE 3241081856,3241082111,FR 3241082112,3241082367,AT -3241082368,3241082623,GB -3241082624,3241082879,NL +3241082368,3241082879,GB 3241082880,3241083135,FR 3241083136,3241091071,DK 3241091072,3241091839,RU @@ -117298,7 +119396,8 @@ 3241477632,3241477887,GB 3241477888,3241478143,CA 3241478144,3241478655,BE -3241478656,3241479167,NL +3241478656,3241478911,AR +3241478912,3241479167,NL 3241479168,3241479423,CA 3241479424,3241481727,BE 3241481728,3241481983,PT @@ -117314,11 +119413,10 @@ 3241497344,3241497599,UA 3241497600,3241497855,SE 3241497856,3241498111,DK -3241498112,3241498367,BE 3241498368,3241498623,TR 3241498624,3241498879,NO 3241498880,3241499135,UA -3241499136,3241499647,NL +3241499136,3241499647,AR 3241499648,3241500159,DE 3241500160,3241500671,GB 3241500672,3241501183,NL @@ -117379,15 +119477,21 @@ 3241688064,3241688319,FR 3241688320,3241688575,IR 3241688576,3241689087,PL -3241689088,3241690111,US +3241689088,3241689343,US +3241689344,3241689599,TR +3241689600,3241689855,IN +3241689856,3241690111,US 3241690112,3241690367,PL 3241690368,3241690623,DE 3241690624,3241690879,PL 3241690880,3241691135,FR -3241691136,3241692159,US +3241691136,3241691391,US +3241691392,3241691647,TR +3241691648,3241691903,IN +3241691904,3241692159,US 3241692160,3241693183,BE 3241693184,3241699327,FR -3241699328,3241699839,MD +3241699328,3241699839,PL 3241699840,3241700095,FR 3241700096,3241700351,IR 3241700352,3241701375,FR @@ -117468,7 +119572,7 @@ 3241743616,3241743871,FR 3241743872,3241744383,NO 3241744384,3241745151,FR -3241745152,3241745407,GB +3241745152,3241745407,SK 3241745408,3241746431,AM 3241746432,3241746687,FR 3241746688,3241746943,GB @@ -117516,7 +119620,8 @@ 3241776128,3241777151,GB 3241777152,3241778943,FR 3241778944,3241779199,GB -3241779200,3241780735,ES +3241779200,3241780479,ES +3241780480,3241780735,GB 3241780736,3241780991,US 3241780992,3241781503,GB 3241781504,3241782271,DE @@ -117711,22 +119816,22 @@ 3243526912,3243527167,SE 3243527168,3243527423,RU 3243527424,3243527679,UA -3243527680,3243527935,EU +3243527680,3243527935,RU 3243527936,3243528191,PL 3243528192,3243529215,CZ 3243529216,3243529471,BE -3243529472,3243529727,EU +3243529472,3243529727,RU 3243529728,3243529983,BG 3243529984,3243530239,GB -3243530240,3243530495,EU +3243530240,3243530495,RU 3243530496,3243530751,FR -3243530752,3243531007,EU +3243530752,3243531007,RU 3243531008,3243531263,DE 3243531264,3243531775,ES 3243531776,3243532031,AT 3243532032,3243532287,DE 3243532288,3243533311,CZ -3243533312,3243534335,VG +3243533312,3243534335,RU 3243534336,3243535359,CZ 3243535360,3243535615,IT 3243535616,3243535871,LT @@ -117840,8 +119945,9 @@ 3244142592,3244143615,DE 3244143616,3244144639,FR 3244144640,3244146687,UA -3244146688,3244146943,GB -3244146944,3244147455,RU +3244146688,3244146943,PL +3244146944,3244147199,EE +3244147200,3244147455,ES 3244147456,3244147711,NL 3244147712,3244149759,GB 3244149760,3244150783,PL @@ -118067,7 +120173,7 @@ 3244869632,3244869887,NL 3244869888,3244870143,TR 3244870144,3244870399,DK -3244870400,3244870655,UA +3244870400,3244870655,RU 3244870656,3244870911,SA 3244870912,3244871167,FR 3244871168,3244871423,LT @@ -118119,6 +120225,7 @@ 3244884224,3244884479,FR 3244884480,3244884735,IR 3244884736,3244884991,NL +3244884992,3244885247,RU 3244885248,3244885503,CH 3244885504,3244885759,IR 3244885760,3244886015,UA @@ -118232,7 +120339,6 @@ 3244914688,3244914943,GB 3244914944,3244915199,FI 3244915200,3244915455,PL -3244915456,3244915711,FI 3244915712,3244915967,UA 3244915968,3244916223,PL 3244916224,3244916479,RU @@ -118319,7 +120425,6 @@ 3244939008,3244939263,NL 3244939264,3244939519,UA 3244939520,3244939775,NO -3244939776,3244940031,GB 3244940032,3244940287,UA 3244940288,3244940543,DK 3244940544,3244940799,PL @@ -118424,7 +120529,7 @@ 3245018880,3245019135,IT 3245019136,3245020159,UZ 3245020160,3245020415,DE -3245020416,3245020671,TR +3245020416,3245020671,US 3245020672,3245020927,RU 3245020928,3245021183,US 3245021184,3245022207,UA @@ -118433,7 +120538,7 @@ 3245024256,3245025279,BG 3245025280,3245026303,UA 3245026304,3245027327,GB -3245027328,3245029375,RU +3245028352,3245029375,RU 3245029376,3245030399,FR 3245030400,3245031423,RU 3245031424,3245031679,FR @@ -118765,7 +120870,7 @@ 3245245952,3245246463,US 3245246464,3245246719,RU 3245246720,3245246975,PL -3245246976,3245247231,GB +3245246976,3245247231,CH 3245247232,3245247487,DE 3245247488,3245247743,FR 3245247744,3245247999,RU @@ -118909,7 +121014,8 @@ 3245328384,3245328895,GB 3245328896,3245329407,CH 3245329408,3245329919,UA -3245329920,3245333503,DE +3245329920,3245330431,DE +3245331456,3245333503,DE 3245333504,3245334527,SI 3245334528,3245334783,HU 3245334784,3245335039,BE @@ -118970,8 +121076,7 @@ 3245776128,3245776383,US 3245776384,3245776639,KR 3245776640,3245776895,HK -3245776896,3245777919,JP -3245777920,3245778175,GB +3245776896,3245778175,JP 3245778176,3245778431,PT 3245778432,3245784831,GB 3245784832,3245785087,JP @@ -119010,9 +121115,7 @@ 3246129408,3246129663,ES 3246129664,3246129919,RU 3246129920,3246130175,DE -3246130176,3246131199,RU -3246131200,3246131455,DE -3246131456,3246131711,RU +3246130176,3246131711,RU 3246131712,3246132735,SY 3246132736,3246132991,DE 3246132992,3246134271,RU @@ -119025,9 +121128,7 @@ 3246137600,3246138623,RU 3246138624,3246138879,ES 3246138880,3246139391,SY -3246139392,3246139647,RU -3246139648,3246139903,DE -3246139904,3246140159,RU +3246139392,3246140159,RU 3246140160,3246140415,ES 3246140416,3246141695,RU 3246141696,3246141951,US @@ -119049,9 +121150,7 @@ 3246150656,3246150911,DE 3246150912,3246151167,ES 3246151168,3246151679,SY -3246151680,3246152703,RU -3246152704,3246152959,DE -3246152960,3246153727,RU +3246151680,3246153727,RU 3246153728,3246157823,SY 3246157824,3246159871,RU 3246159872,3246160127,ES @@ -119173,7 +121272,7 @@ 3247046656,3247046911,AT 3247046912,3247047679,SI 3247047680,3247048191,IT -3247048192,3247048447,NO +3247048192,3247048447,US 3247048448,3247048703,FI 3247048704,3247048959,EE 3247048960,3247049215,SI @@ -119305,7 +121404,7 @@ 3247308800,3247309055,BG 3247309056,3247309567,FI 3247309568,3247309823,PL -3247309824,3247310079,LT +3247309824,3247310079,US 3247310080,3247310335,FI 3247310336,3247310591,DE 3247310592,3247313407,FI @@ -119488,7 +121587,8 @@ 3247718144,3247718399,US 3247718400,3247719423,IR 3247719424,3247720447,DE -3247720448,3247721471,US +3247720448,3247720703,AP +3247720704,3247721471,US 3247721472,3247722495,EE 3247722496,3247723519,FR 3247723520,3247724543,ES @@ -119547,7 +121647,8 @@ 3247810816,3247811071,CA 3247811072,3247811327,US 3247811328,3247811839,DK -3247811840,3247812863,US +3247811840,3247812095,CA +3247812096,3247812863,US 3247812864,3247813119,DK 3247813120,3247813631,SE 3247813632,3247813887,US @@ -119707,7 +121808,9 @@ 3248498688,3248504831,NO 3248504832,3248505343,US 3248505344,3248505855,NL -3248505856,3248507903,US +3248505856,3248506879,US +3248506880,3248507391,RU +3248507392,3248507903,US 3248507904,3248508927,MY 3248508928,3248509183,CZ 3248509184,3248509439,MX @@ -119748,8 +121851,7 @@ 3248541184,3248541695,SE 3248541696,3248542207,ES 3248542208,3248542719,RU -3248542720,3248542975,US -3248542976,3248543231,HK +3248542720,3248543231,US 3248543232,3248543487,TR 3248543488,3248544511,US 3248544512,3248544767,UA @@ -119875,8 +121977,8 @@ 3248689920,3248690175,EU 3248690176,3248690431,ID 3248690432,3248690687,KZ -3248690688,3248690943,US -3248690944,3248691199,NL +3248690688,3248690943,UA +3248690944,3248691199,SG 3248691200,3248693759,DK 3248693760,3248694015,FR 3248694016,3248694271,US @@ -119977,14 +122079,13 @@ 3248738048,3248738303,NL 3248738304,3248750591,DK 3248750592,3248750847,PT -3248750848,3248751103,LT +3248750848,3248751103,NL 3248751104,3248751615,ES 3248751616,3248752639,TR 3248752640,3248752895,DE 3248752896,3248753151,TR 3248753152,3248753407,LT 3248753408,3248753663,GB -3248753664,3248753919,FR 3248753920,3248754431,GB 3248754432,3248754687,AT 3248754688,3248755711,RU @@ -120001,7 +122102,6 @@ 3248785408,3248785663,RO 3248785664,3248786943,SI 3248786944,3248787199,PL -3248787200,3248787455,GB 3248787456,3248787711,NL 3248787712,3248787967,CH 3248787968,3248788223,RU @@ -120093,12 +122193,9 @@ 3249068288,3249068543,RU 3249068544,3249068799,PL 3249068800,3249069055,FR -3249069056,3249069567,BR -3249069568,3249070079,NL +3249069056,3249070079,BR 3249070080,3249070335,GE -3249070336,3249070591,RU -3249070592,3249070847,SC -3249070848,3249071103,RU +3249070336,3249071103,RU 3249071104,3249074175,DE 3249074176,3249075199,PL 3249075200,3249076223,CZ @@ -120131,7 +122228,6 @@ 3249091584,3249092095,RU 3249092096,3249092607,DE 3249092608,3249093119,IT -3249093120,3249093631,GB 3249093632,3249094655,RU 3249094656,3249095679,FR 3249095680,3249096191,NL @@ -120223,9 +122319,7 @@ 3249142784,3249143807,PL 3249143808,3249274879,AT 3249274880,3249405951,NL -3249405952,3249406975,DE -3249406976,3249407231,IT -3249407232,3249537023,DE +3249405952,3249537023,DE 3249537024,3249537279,PT 3249537280,3249537535,DE 3249537536,3249537791,UA @@ -120256,7 +122350,8 @@ 3249566720,3249567743,US 3249567744,3249568767,DE 3249568768,3249569791,NO -3249569792,3249574143,NL +3249569792,3249570303,GB +3249570304,3249574143,NL 3249574144,3249574399,RU 3249574400,3249574655,DE 3249574656,3249574911,GB @@ -120273,9 +122368,9 @@ 3249591040,3249591295,HK 3249591296,3249592319,GE 3249592320,3249593343,NL -3249593344,3249593599,UA +3249593344,3249593599,RU 3249593600,3249595135,NL -3249595136,3249595391,UA +3249595136,3249595391,RU 3249595392,3249596415,ES 3249596416,3249596671,NL 3249596672,3249596927,RU @@ -120286,7 +122381,7 @@ 3249598464,3249599487,IR 3249599488,3249599999,US 3249600000,3249600255,IT -3249600256,3249600511,AT +3249600256,3249600511,DE 3249600512,3249601535,UA 3249601536,3249601791,IT 3249601792,3249602047,NL @@ -120296,7 +122391,8 @@ 3249602816,3249635327,NL 3249635328,3249636351,DE 3249636352,3249637375,US -3249637376,3249644031,NL +3249637376,3249638399,GB +3249638400,3249644031,NL 3249644032,3249644287,FR 3249644288,3249644543,NL 3249644544,3249645055,PL @@ -120326,7 +122422,7 @@ 3249681408,3249681663,ES 3249681664,3249681919,IE 3249681920,3249682431,GB -3249682432,3249683455,AP +3249682432,3249683455,HK 3249683456,3249684479,SE 3249684480,3249696767,IE 3249696768,3249697279,GB @@ -120624,7 +122720,7 @@ 3250257152,3250257407,US 3250257408,3250257663,AT 3250257664,3250257919,PL -3250257920,3250258175,EU +3250257920,3250258175,DE 3250258176,3250258431,US 3250258432,3250271231,AT 3250271232,3250271743,PL @@ -120647,10 +122743,12 @@ 3250284544,3250285567,RU 3250285568,3250286591,US 3250286592,3250287615,MY -3250287616,3250288639,AP +3250287616,3250288639,HK 3250288640,3250290687,NL -3250290688,3250292735,US -3250292736,3250293759,GB +3250290688,3250290943,US +3250290944,3250291199,DE +3250291200,3250292735,US +3250292736,3250293759,NL 3250293760,3250294783,US 3250294784,3250295807,RU 3250295808,3250296831,RO @@ -120676,8 +122774,8 @@ 3250326528,3250327039,BH 3250327040,3250327551,EU 3250327552,3250328575,AT -3250328576,3250329599,RU -3250329600,3250330623,NL +3250328576,3250329343,RU +3250329344,3250330623,NL 3250330624,3250331647,IT 3250331648,3250335743,MT 3250335744,3250339839,KW @@ -120906,7 +123004,8 @@ 3251123200,3251123711,FI 3251123712,3251124223,RU 3251124224,3251124735,FI -3251124736,3251125247,FR +3251124736,3251125503,FR +3251125504,3251125759,AR 3251125760,3251126271,RO 3251126272,3251127295,PL 3251127296,3251127807,UA @@ -121055,7 +123154,7 @@ 3251177472,3251178239,RU 3251178240,3251178495,RO 3251178496,3251179263,NL -3251179264,3251179519,ES +3251179264,3251179519,CY 3251179520,3251180031,SE 3251180032,3251180543,PL 3251180544,3251181055,RO @@ -121268,7 +123367,7 @@ 3251356672,3251357183,EE 3251357184,3251357695,BG 3251357696,3251358207,ES -3251358208,3251358463,UA +3251358208,3251358463,NL 3251358464,3251358719,CA 3251358720,3251359231,RO 3251359232,3251360255,PL @@ -121372,7 +123471,7 @@ 3252337152,3252337407,GB 3252337408,3252337663,GR 3252337664,3252338175,RU -3252338176,3252338431,BZ +3252338176,3252338431,NL 3252338432,3252338687,RU 3252338688,3252340735,BE 3252340736,3252341247,GB @@ -121492,7 +123591,7 @@ 3252516096,3252516351,FR 3252516352,3252516607,GB 3252516608,3252517119,SE -3252517120,3252517375,EU +3252517120,3252517375,DE 3252517376,3252517631,PL 3252517632,3252517887,SE 3252517888,3252518143,DK @@ -121510,7 +123609,8 @@ 3252539648,3252539903,AT 3252539904,3252540159,NL 3252540160,3252540415,AT -3252540416,3252541439,BR +3252540416,3252541183,BR +3252541184,3252541439,RU 3252541440,3252541951,CH 3252541952,3252542207,CI 3252542208,3252542463,SE @@ -121688,8 +123788,8 @@ 3252976640,3252976895,GB 3252976896,3252977151,UA 3252977152,3252977407,GE -3252977408,3252977663,NL -3252977664,3252979711,RU +3252977408,3252977919,NL +3252977920,3252979711,RU 3252979712,3252979967,IR 3252979968,3252980223,DE 3252980224,3252980479,FR @@ -121765,11 +123865,16 @@ 3253293568,3253294079,US 3253294080,3253295103,RU 3253295104,3253296127,US -3253296128,3253305343,RU +3253296128,3253297151,RU +3253297152,3253298175,US +3253298176,3253299199,TR +3253299200,3253300223,US +3253300224,3253305343,RU 3253305344,3253309439,US 3253309440,3253313535,RU 3253313536,3253313791,NL -3253313792,3253316351,RU +3253313792,3253314047,US +3253314048,3253316351,RU 3253316352,3253316607,US 3253316608,3253317375,RU 3253317376,3253317631,US @@ -121777,7 +123882,8 @@ 3253321728,3253323007,RU 3253323008,3253323775,US 3253323776,3253324031,RU -3253324032,3253324799,US +3253324032,3253324287,US +3253324288,3253324799,MD 3253324800,3253325823,RU 3253325824,3253326847,US 3253326848,3253327871,RU @@ -121955,8 +124061,9 @@ 3253652480,3253653503,DK 3253653504,3253654527,IL 3253654528,3253657599,LV -3253657600,3253658623,UA -3253658624,3253659647,DE +3253657600,3253658111,DE +3253658112,3253658367,UA +3253658368,3253659647,DE 3253659648,3253660671,GB 3253660672,3253661695,AT 3253661696,3253662719,NL @@ -122198,7 +124305,7 @@ 3253964288,3253964799,PL 3253964800,3253965311,SE 3253965312,3253966335,PL -3253966336,3253966847,AP +3253966336,3253966847,HK 3253966848,3253967359,UA 3253967360,3253967871,PL 3253967872,3253968895,UA @@ -122218,7 +124325,7 @@ 3253975808,3253976063,SE 3253976064,3253976319,IS 3253976320,3253976575,US -3253976576,3253976831,GB +3253976576,3253976831,SK 3253976832,3253977087,RU 3253977088,3253985279,TR 3253985280,3253993471,GB @@ -122226,7 +124333,7 @@ 3254067200,3254069247,CZ 3254069248,3254124543,BE 3254124544,3254125567,CH -3254125568,3254126079,AT +3254125568,3254126079,US 3254126080,3254137599,CH 3254137600,3254137855,RU 3254137856,3254138879,GB @@ -122688,7 +124795,8 @@ 3255130112,3255130623,FR 3255130624,3255131135,HU 3255131136,3255131647,US -3255131648,3255132159,TR +3255131648,3255131903,RU +3255131904,3255132159,TR 3255132160,3255132415,UA 3255132416,3255133183,EU 3255133184,3255133695,DE @@ -122704,8 +124812,7 @@ 3255141632,3255142143,FR 3255142144,3255142399,US 3255142400,3255144703,FR -3255144704,3255144959,NL -3255144960,3255145983,LT +3255144704,3255145983,NL 3255145984,3255146495,FR 3255146496,3255147519,US 3255147520,3255147775,NL @@ -123291,7 +125398,9 @@ 3256492032,3256501503,NL 3256501504,3256501759,RU 3256501760,3256502271,DE -3256502272,3256503039,HK +3256502272,3256502527,HK +3256502528,3256502783,BR +3256502784,3256503039,HK 3256503040,3256503295,PH 3256503296,3256509439,NL 3256509440,3256509695,ES @@ -123303,7 +125412,7 @@ 3256512000,3256513023,NL 3256513024,3256513535,TR 3256513536,3256513791,RU -3256513792,3256514047,IR +3256513792,3256514047,TR 3256514048,3256514303,BE 3256514304,3256516607,NL 3256516608,3256516863,DE @@ -123338,7 +125447,7 @@ 3256533760,3256534015,GB 3256534016,3256534271,CZ 3256534272,3256534527,SA -3256534528,3256534783,LU +3256534528,3256534783,US 3256534784,3256535039,LV 3256535040,3256535295,NL 3256535296,3256535551,PL @@ -123353,7 +125462,8 @@ 3256537856,3256538111,FR 3256538112,3256538367,DE 3256538368,3256538623,IE -3256538624,3256539135,GB +3256538624,3256538879,GB +3256538880,3256539135,TR 3256539136,3256539391,RU 3256539392,3256539647,SE 3256539648,3256539903,GB @@ -123362,14 +125472,15 @@ 3256540416,3256540671,RU 3256540672,3256540927,GB 3256540928,3256541183,CY -3256541184,3256541439,RU +3256541184,3256541439,UA 3256541440,3256541695,IT 3256541696,3256541951,CZ 3256541952,3256542719,RU 3256542720,3256543231,US 3256543232,3256543487,NL 3256543488,3256543743,RU -3256543744,3256544511,GB +3256543744,3256543999,IT +3256544000,3256544511,GB 3256544512,3256544767,DE 3256544768,3256545023,GB 3256545024,3256545279,CZ @@ -123688,7 +125799,8 @@ 3256934912,3256935423,NL 3256935424,3256935679,UA 3256935680,3256936447,RU -3256936448,3256937471,US +3256936448,3256937215,US +3256937216,3256937471,IE 3256937472,3256939263,RU 3256939264,3256939519,UA 3256939520,3256940543,NL @@ -123710,7 +125822,7 @@ 3256950016,3256950271,NL 3256950272,3256950527,NO 3256950528,3256950783,GB -3256950784,3256951039,SC +3256950784,3256951039,NL 3256951040,3256951295,GB 3256951296,3256951807,RU 3256951808,3256952831,US @@ -123806,7 +125918,9 @@ 3257065984,3257066495,AT 3257066496,3257067007,US 3257067008,3257067263,NL -3257067264,3257068543,US +3257067264,3257067519,US +3257067520,3257067775,DE +3257067776,3257068543,US 3257068544,3257069567,RU 3257069568,3257070591,DE 3257070592,3257070847,RU @@ -124272,8 +126386,7 @@ 3258013696,3258014719,NL 3258014720,3258014975,DE 3258014976,3258015231,IT -3258015232,3258015487,DE -3258015488,3258015743,US +3258015232,3258015743,US 3258015744,3258016767,GR 3258016768,3258018815,PL 3258018816,3258019071,US @@ -124291,7 +126404,8 @@ 3258023424,3258023679,TR 3258023680,3258023935,RU 3258023936,3258056703,DE -3258056704,3258057215,GB +3258056704,3258056959,TR +3258056960,3258057215,GB 3258057216,3258057471,CZ 3258057472,3258057727,NL 3258057728,3258058239,GB @@ -124341,7 +126455,7 @@ 3258074880,3258075135,IL 3258075136,3258075391,US 3258075392,3258075647,RU -3258075648,3258075903,US +3258075648,3258075903,ES 3258075904,3258076159,PL 3258076160,3258076415,BG 3258076416,3258076927,FR @@ -124427,11 +126541,10 @@ 3258103040,3258103295,SE 3258103296,3258103551,DE 3258103552,3258103807,AE -3258103808,3258104319,GB +3258103808,3258104319,US 3258104320,3258104575,PL 3258104576,3258104831,DE -3258104832,3258105343,GB -3258105344,3258105599,US +3258104832,3258105599,US 3258105600,3258105855,DE 3258105856,3258106879,US 3258106880,3258107135,DE @@ -124481,7 +126594,7 @@ 3258265600,3258266623,FR 3258266624,3258266879,FI 3258266880,3258267135,SG -3258267136,3258267391,FI +3258267136,3258267391,CZ 3258267392,3258268671,NL 3258268672,3258268927,IT 3258268928,3258269183,PL @@ -124505,8 +126618,7 @@ 3258284288,3258284543,NL 3258284544,3258285055,IR 3258285056,3258286079,RS -3258286080,3258286335,CH -3258286336,3258286591,CZ +3258286080,3258286591,CH 3258286592,3258287871,NL 3258287872,3258288127,DE 3258288128,3258289151,US @@ -124522,7 +126634,7 @@ 3258298112,3258298367,GB 3258298368,3258300415,IT 3258300416,3258301439,GB -3258301440,3258302463,JP +3258301440,3258302463,RU 3258302464,3258303487,PL 3258303488,3258304511,UA 3258304512,3258305535,EU @@ -124674,14 +126786,11 @@ 3258588160,3258588927,ES 3258588928,3258589951,RU 3258589952,3258590207,ES -3258590208,3258591487,RU -3258591488,3258591743,DE -3258591744,3258593279,RU +3258590208,3258593279,RU 3258593280,3258595327,SY 3258595328,3258597375,RU 3258597376,3258597887,US -3258597888,3258598143,DE -3258598144,3258599423,RU +3258597888,3258599423,RU 3258599424,3258600959,PS 3258600960,3258601471,RU 3258601472,3258601983,ES @@ -124818,13 +126927,14 @@ 3258780672,3258781695,IE 3258781696,3258782719,ES 3258782720,3258783743,IS -3258783744,3258785023,NL +3258783744,3258784767,NL +3258784768,3258785023,DE 3258785024,3258785791,US 3258785792,3258786047,BG 3258786048,3258786303,DE 3258786304,3258786815,RU 3258786816,3258787839,AT -3258787840,3258788863,GB +3258787840,3258788863,NL 3258788864,3258789887,DE 3258789888,3258790911,CZ 3258790912,3258791423,UA @@ -124881,7 +126991,8 @@ 3258844928,3258847231,GB 3258847232,3258847487,NL 3258847488,3258847743,IR -3258847744,3258848255,NL +3258847744,3258847999,CH +3258848000,3258848255,BY 3258848256,3258848767,GB 3258848768,3258849023,RO 3258849024,3258849279,DE @@ -124974,8 +127085,8 @@ 3259012096,3259013119,DE 3259013120,3259014143,US 3259014144,3259015167,DE -3259015168,3259019263,US -3259019264,3259039743,DE +3259015168,3259018239,US +3259018240,3259039743,DE 3259039744,3259105279,PT 3259105280,3259170815,GB 3259170816,3259236351,RU @@ -125066,7 +127177,7 @@ 3259347200,3259347455,DE 3259347456,3259347711,CH 3259347712,3259347967,DE -3259347968,3259348223,EU +3259347968,3259348223,BG 3259348224,3259348479,CH 3259348480,3259348735,EU 3259348736,3259348991,CH @@ -125125,7 +127236,7 @@ 3259650560,3259650815,EU 3259650816,3259652095,NL 3259652096,3259760639,GB -3259760640,3259761151,US +3259760640,3259761151,HK 3259761152,3259763199,DE 3259763200,3259764223,FR 3259764224,3259764479,DE @@ -125160,7 +127271,7 @@ 3259793408,3259794431,NL 3259794432,3259794943,US 3259794944,3259795199,NL -3259795200,3259795455,GB +3259795200,3259795455,IT 3259795456,3259796479,US 3259796480,3259797247,DE 3259797248,3259797503,PL @@ -125180,7 +127291,7 @@ 3259808256,3259808511,NL 3259808512,3259808767,DE 3259808768,3259809791,UA -3259809792,3259810047,GB +3259809792,3259810047,RU 3259810048,3259811327,DE 3259811328,3259811839,PT 3259811840,3259812863,SE @@ -125197,8 +127308,7 @@ 3259818496,3259818751,DE 3259818752,3259819007,EE 3259819008,3259821055,DE -3259821056,3259821567,RU -3259821568,3259821823,GB +3259821056,3259821823,RU 3259821824,3259822079,AT 3259822080,3259822591,PL 3259822592,3259823103,DE @@ -125259,9 +127369,10 @@ 3260487680,3260488703,NL 3260488704,3260489215,RU 3260489216,3260489471,CZ -3260489472,3260492031,RU +3260489472,3260490751,US +3260490752,3260492031,RU 3260492032,3260492287,US -3260492288,3260492543,CZ +3260492288,3260492543,NL 3260492544,3260492799,AX 3260492800,3260493055,GB 3260493056,3260494591,RU @@ -125275,8 +127386,10 @@ 3260496896,3260497151,RU 3260497152,3260497407,US 3260497408,3260497663,RU -3260497664,3260497919,DE -3260497920,3260501503,RU +3260497664,3260497919,CZ +3260497920,3260499967,RU +3260499968,3260500991,CZ +3260500992,3260501503,RU 3260501504,3260501759,FR 3260501760,3260503039,RU 3260503040,3260504063,NL @@ -125286,12 +127399,16 @@ 3260508416,3260508671,GB 3260508672,3260509439,RU 3260509440,3260509695,CH -3260509696,3260512255,RU -3260512256,3260514303,US -3260514304,3260515327,CZ -3260515328,3260516351,NL +3260509696,3260510719,RU +3260510720,3260510975,NL +3260510976,3260511231,CZ +3260511232,3260514303,US +3260514304,3260514559,NL +3260514560,3260515071,CZ +3260515072,3260516351,NL 3260516352,3260516863,RU -3260516864,3260518399,DE +3260516864,3260517375,US +3260517376,3260518399,DE 3260518400,3260519935,RU 3260519936,3260520191,FR 3260520192,3260520447,GB @@ -125304,31 +127421,30 @@ 3260528384,3260528639,IL 3260528640,3260529407,RU 3260529408,3260529663,DE -3260529664,3260530175,GB -3260530176,3260530687,RU +3260529664,3260530687,RU 3260530688,3260531711,US 3260531712,3260532479,RU -3260532480,3260532735,DE +3260532480,3260532735,CZ 3260532736,3260532991,RU 3260532992,3260533247,NL 3260533248,3260533759,RU -3260533760,3260534015,DE +3260533760,3260534015,CZ 3260534016,3260534527,RU 3260534528,3260534783,GB -3260534784,3260535295,CZ +3260534784,3260535295,NL 3260535296,3260535551,RU 3260535552,3260535807,IL 3260535808,3260536063,FR -3260536064,3260537599,RU -3260537600,3260537855,DE +3260536064,3260536831,RU +3260536832,3260537087,NL +3260537088,3260537599,RU +3260537600,3260537855,NL 3260537856,3260538367,RU 3260538368,3260538879,DE 3260538880,3260539647,RU -3260539648,3260539903,CZ -3260539904,3260540415,ES -3260540416,3260540671,CZ -3260540672,3260540927,ES -3260540928,3260544255,RU +3260539648,3260539903,NL +3260539904,3260540159,CZ +3260540160,3260544255,RU 3260544256,3260544511,NL 3260544512,3260544767,FR 3260544768,3260546047,RU @@ -125472,8 +127588,8 @@ 3261281280,3261281535,EE 3261281536,3261282559,DE 3261282560,3261282815,EE -3261282816,3261283327,AT -3261283328,3261284351,JP +3261282816,3261283327,US +3261283328,3261284351,RU 3261284352,3261284863,DE 3261284864,3261285375,AT 3261285376,3261286399,DE @@ -125481,7 +127597,8 @@ 3261286656,3261286911,DE 3261286912,3261287167,EE 3261287168,3261287935,DE -3261287936,3261288959,LU +3261287936,3261288703,LU +3261288704,3261288959,US 3261288960,3261289983,DE 3261289984,3261290495,PL 3261290496,3261292543,DE @@ -125506,9 +127623,7 @@ 3261308928,3261333503,DE 3261333504,3261399039,FI 3261399040,3261472767,GB -3261472768,3261503487,RO -3261503488,3261503743,MD -3261503744,3261525759,RO +3261472768,3261525759,RO 3261525760,3261526015,NL 3261526016,3261530111,RO 3261530112,3261531903,SE @@ -125571,7 +127686,7 @@ 3261628160,3261628671,NL 3261628672,3261628927,CH 3261628928,3261629183,DE -3261629184,3261629439,RU +3261629184,3261629439,GB 3261629440,3261629695,BG 3261629696,3261629951,NL 3261629952,3261630207,LV @@ -125583,8 +127698,7 @@ 3261632000,3261632511,RU 3261632512,3261632767,JP 3261632768,3261633023,US -3261633024,3261633279,GB -3261633280,3261633535,US +3261633024,3261633535,HK 3261633536,3261634047,DE 3261634048,3261634559,NL 3261634560,3261634815,DE @@ -125651,7 +127765,6 @@ 3261767680,3261775871,RS 3261775872,3261776383,PL 3261776384,3261777407,RU -3261777408,3261777663,NL 3261777664,3261777919,GB 3261777920,3261778431,PL 3261778432,3261778943,LI @@ -125765,7 +127878,7 @@ 3262009088,3262009343,UA 3262009344,3262010367,RU 3262010368,3262010623,FI -3262010624,3262010879,DE +3262010624,3262010879,LU 3262010880,3262011391,GB 3262011392,3262012415,JP 3262012416,3262013439,US @@ -125814,7 +127927,7 @@ 3262035968,3262036735,FI 3262036736,3262038015,AX 3262038016,3262038271,FR -3262038272,3262038527,DE +3262038272,3262038527,US 3262038528,3262038783,IL 3262038784,3262039039,NO 3262039040,3262039295,DE @@ -125965,9 +128078,11 @@ 3262239232,3262239743,US 3262239744,3262240767,GB 3262240768,3262242303,DE -3262242304,3262242815,US +3262242304,3262242559,US +3262242560,3262242815,TR 3262242816,3262243327,DE -3262243328,3262243839,NL +3262243328,3262243583,GB +3262243584,3262243839,TR 3262243840,3262244863,CH 3262244864,3262246399,RU 3262246400,3262246655,CA @@ -125980,7 +128095,8 @@ 3262283776,3262284799,RU 3262284800,3262285823,UA 3262285824,3262286079,JP -3262286080,3262286847,US +3262286080,3262286335,US +3262286336,3262286847,SG 3262286848,3262287871,SE 3262287872,3262288127,MD 3262288128,3262288383,EU @@ -126302,19 +128418,20 @@ 3263143936,3263144447,DE 3263144448,3263144959,ES 3263144960,3263145215,EE -3263145216,3263145727,US +3263145216,3263145727,GB 3263145728,3263145983,EE 3263145984,3263147007,DE 3263147008,3263147519,NL 3263147520,3263148287,DE -3263148288,3263149055,NL +3263148288,3263148543,JP +3263148544,3263149055,NL 3263149056,3263149311,DE -3263149312,3263149567,NL +3263149312,3263149567,JP 3263149568,3263149823,DE -3263149824,3263150079,NL +3263149824,3263150079,JP 3263150080,3263152127,DE 3263152128,3263152639,SG -3263152640,3263152895,NL +3263152640,3263152895,JP 3263152896,3263153151,DE 3263153152,3263153407,AT 3263153408,3263153663,DE @@ -126384,11 +128501,12 @@ 3263627264,3263627519,ES 3263627520,3263628031,RU 3263628032,3263628287,ES -3263628288,3263632127,RU +3263628288,3263631871,RU +3263631872,3263632127,NL 3263632128,3263632383,ES 3263632384,3263632639,CZ 3263632640,3263633151,RU -3263633152,3263633407,DE +3263633152,3263633407,ES 3263633408,3263633663,AX 3263633664,3263633919,RU 3263633920,3263634431,US @@ -126419,7 +128537,7 @@ 3263659008,3263659263,TR 3263659264,3263660031,ES 3263660032,3263661055,DE -3263661056,3263661567,MD +3263661056,3263661567,US 3263661568,3263661823,ES 3263661824,3263666175,RU 3263666176,3263676415,AZ @@ -126736,7 +128854,7 @@ 3264448000,3264449535,CH 3264449536,3264449791,RU 3264449792,3264450047,CH -3264450048,3264450303,NL +3264450048,3264450303,IR 3264450304,3264450559,CH 3264450560,3264451583,ES 3264451584,3264452351,NL @@ -127183,11 +129301,11 @@ 3265474560,3265478655,DE 3265478656,3265479679,US 3265479680,3265482751,DE -3265482752,3265484799,US -3265484800,3265485311,DE -3265485312,3265485567,US -3265485568,3265486847,DE -3265486848,3265495039,US +3265482752,3265483775,US +3265483776,3265484799,DE +3265484800,3265486079,US +3265486080,3265486335,DE +3265486336,3265495039,US 3265495040,3265511423,DE 3265511424,3265519615,US 3265519616,3265523711,GB @@ -127203,7 +129321,8 @@ 3265596416,3265596927,GB 3265596928,3265597439,FR 3265597440,3265597951,LT -3265597952,3265599999,RU +3265597952,3265599487,RU +3265599488,3265599999,AT 3265600000,3265600255,RO 3265600256,3265601023,GB 3265601024,3265601535,RU @@ -127235,8 +129354,7 @@ 3265608192,3265608447,DK 3265608448,3265608703,SE 3265608704,3265608959,GB -3265608960,3265609471,RU -3265609472,3265609727,UA +3265608960,3265609727,RU 3265609728,3265617919,NL 3265617920,3265626111,SI 3265626112,3265634303,JO @@ -127259,7 +129377,7 @@ 3265877504,3265877759,UA 3265877760,3265878015,KZ 3265878016,3265879039,BG -3265879040,3265880063,US +3265879040,3265880063,TR 3265880064,3265886207,GB 3265886208,3265886463,TR 3265886464,3265887231,PS @@ -127704,19 +129822,21 @@ 3267575808,3267579903,DE 3267579904,3267580927,OM 3267580928,3267581183,US -3267581184,3267581439,TR +3267581184,3267581439,DE 3267581440,3267581951,US 3267581952,3267582975,TR 3267582976,3267583231,US 3267583232,3267583487,DE 3267583488,3267583999,TR -3267584000,3267588095,DE +3267584000,3267585023,US +3267585024,3267586047,DE +3267586048,3267587071,US +3267587072,3267588095,DE 3267588096,3267592191,GB 3267592192,3267608575,DE 3267608576,3267612671,US 3267612672,3267616767,GB -3267616768,3267618815,DE -3267618816,3267620863,US +3267616768,3267620863,DE 3267620864,3267624959,GB 3267624960,3267625215,EU 3267625216,3267625471,GB @@ -128070,9 +130190,7 @@ 3269443584,3269459967,JP 3269459968,3269525503,ES 3269525504,3269591039,IR -3269591040,3269626623,RU -3269626624,3269626879,GB -3269626880,3269627391,RU +3269591040,3269627391,RU 3269627392,3269627647,GB 3269627648,3269631999,RU 3269632000,3269632255,GB @@ -128090,19 +130208,25 @@ 3270049792,3270051839,US 3270051840,3270056959,DE 3270056960,3270057727,US -3270057728,3270057983,SA +3270057728,3270057983,DE 3270057984,3270062079,US -3270062080,3270066175,DE +3270062080,3270064127,DE +3270064128,3270065151,US +3270065152,3270066175,DE 3270066176,3270074367,SG 3270074368,3270074623,DE 3270074624,3270074879,NL -3270074880,3270076415,US +3270074880,3270075135,AP +3270075136,3270076415,US 3270076416,3270077439,FI -3270077440,3270086655,DE -3270086656,3270088703,US +3270077440,3270078463,OM +3270078464,3270086655,DE +3270086656,3270088447,US +3270088448,3270088703,SG 3270088704,3270090751,DE 3270090752,3270098943,GB -3270098944,3270111231,DE +3270098944,3270107135,DE +3270107136,3270111231,US 3270111232,3270115327,GB 3270115328,3270246399,DE 3270246400,3270377471,SE @@ -128174,7 +130298,7 @@ 3270903808,3270905855,SE 3270905856,3270909951,IT 3270909952,3270910975,DE -3270910976,3270911487,US +3270910976,3270911487,GB 3270911488,3270911743,RO 3270912000,3270913023,JP 3270913024,3270920703,DE @@ -128418,7 +130542,7 @@ 3271750656,3271751167,GB 3271751168,3271751679,RO 3271752192,3271752703,IL -3271752704,3271753215,RO +3271752704,3271753215,US 3271753216,3271753727,PL 3271753728,3271770111,FR 3271770112,3271786495,AT @@ -128454,8 +130578,7 @@ 3271819264,3271884799,DE 3271884800,3271901183,UA 3271901184,3271909375,ES -3271909376,3271909887,RO -3271909888,3271910399,DE +3271909376,3271910399,DE 3271910400,3271910911,DK 3271910912,3271911423,LV 3271911424,3271911935,LI @@ -128782,7 +130905,8 @@ 3272504320,3272504831,PL 3272504832,3272505343,RU 3272505344,3272505855,AT -3272505856,3272506367,UA +3272505856,3272506111,UA +3272506112,3272506367,RU 3272506368,3272506879,IE 3272506880,3272507391,CH 3272507392,3272515583,CY @@ -128790,7 +130914,9 @@ 3272523776,3272540159,DE 3272540160,3272546559,CH 3272546560,3272546815,FR -3272546816,3272605695,CH +3272546816,3272572927,CH +3272572928,3272589311,FR +3272589312,3272605695,CH 3272605696,3272613887,BE 3272613888,3272622079,RU 3272622080,3272623103,CA @@ -129080,8 +131206,7 @@ 3273363456,3273364479,GB 3273364480,3273364991,EU 3273364992,3273365247,DE -3273365248,3273366015,EU -3273366016,3273366527,DE +3273365248,3273366527,EU 3273366528,3273367551,GB 3273367552,3273368063,EU 3273368064,3273368575,DE @@ -129376,7 +131501,7 @@ 3274408704,3274408959,SI 3274408960,3274409215,GR 3274409216,3274409471,SI -3274409728,3274409983,RU +3274409472,3274409983,RU 3274409984,3274410239,LT 3274410240,3274410495,SA 3274410496,3274410751,DK @@ -129682,9 +131807,7 @@ 3275292672,3275358207,ES 3275358208,3275366911,RU 3275366912,3275367167,GB -3275367168,3275367423,RU -3275367424,3275367679,DE -3275367680,3275367935,RU +3275367168,3275367935,RU 3275367936,3275368447,DE 3275368448,3275374591,RU 3275374592,3275382783,GB @@ -129785,7 +131908,8 @@ 3275489280,3275497471,GB 3275497472,3275505663,DE 3275505664,3275506175,PL -3275506176,3275506687,UA +3275506176,3275506431,AT +3275506432,3275506687,UA 3275506688,3275507199,SE 3275507200,3275507711,UA 3275507712,3275509759,RO @@ -129801,7 +131925,7 @@ 3275533056,3275533311,RU 3275533312,3275533823,GB 3275533824,3275534335,UA -3275534336,3275534847,NL +3275534336,3275534847,DE 3275534848,3275535359,RO 3275535360,3275535871,DE 3275535872,3275536383,SE @@ -130076,7 +132200,7 @@ 3276096512,3276097535,IT 3276097536,3276098559,NL 3276098560,3276098815,UA -3276098816,3276099327,LT +3276098816,3276099327,GB 3276099328,3276099583,RU 3276099584,3276100607,PL 3276100608,3276101631,UA @@ -130219,7 +132343,7 @@ 3276480512,3276480767,RU 3276480768,3276481023,EU 3276481024,3276481535,RU -3276481536,3276482559,EU +3276481536,3276482559,GB 3276482560,3276482815,GR 3276482816,3276483071,EU 3276483072,3276483327,GR @@ -130478,8 +132602,7 @@ 3276810240,3276811263,NL 3276811264,3276812287,FR 3276812288,3276812543,TR -3276812544,3276812799,GB -3276812800,3276813311,US +3276812544,3276813311,US 3276813312,3276814335,DE 3276814336,3276815359,RU 3276815360,3276816383,ES @@ -130701,9 +132824,7 @@ 3277137152,3277137407,DK 3277137408,3277137663,DE 3277137664,3277137919,DK -3277137920,3277138431,US -3277138432,3277138687,KR -3277138688,3277138943,US +3277137920,3277138943,US 3277138944,3277139199,IS 3277139200,3277139967,DK 3277139968,3277140223,US @@ -130839,8 +132960,7 @@ 3277344768,3277345279,RO 3277345280,3277345791,SI 3277345792,3277346303,FR -3277346304,3277346559,US -3277346560,3277346815,DE +3277346304,3277346815,DE 3277346816,3277347071,SE 3277347072,3277347327,GB 3277347328,3277347839,PL @@ -130955,7 +133075,9 @@ 3277469184,3277469439,US 3277469440,3277471487,EU 3277471488,3277471743,US -3277471744,3277479935,CZ +3277471744,3277476863,CZ +3277476864,3277477887,IE +3277477888,3277479935,CZ 3277479936,3277480447,GB 3277480448,3277480959,HU 3277480960,3277481471,DK @@ -131121,15 +133243,14 @@ 3277832192,3277833215,EU 3277833216,3277833727,BE 3277833728,3277834239,NL -3277834240,3277834751,MD +3277834240,3277834751,EU 3277834752,3277835263,UA -3277835264,3277835775,SI +3277835264,3277835775,EU 3277835776,3277836287,UA 3277836288,3277836799,FI 3277836800,3277837311,UA 3277837312,3277839103,RU -3277839104,3277839359,CH -3277839360,3277839871,DE +3277839104,3277839871,DE 3277839872,3277840383,UA 3277840384,3277840895,FR 3277840896,3277841407,GR @@ -131150,7 +133271,7 @@ 3277881344,3277881599,IR 3277881600,3277881855,IT 3277881856,3277882367,US -3277882368,3277882623,ES +3277882368,3277882623,GB 3277882624,3277882879,PL 3277882880,3277883391,GB 3277883392,3277883647,RU @@ -131490,7 +133611,7 @@ 3279987456,3279987711,US 3279987712,3279988223,CH 3279988224,3279988735,AM -3279988736,3279989247,PL +3279988736,3279989247,DE 3279989248,3279989759,AT 3279989760,3279990271,PL 3279990272,3279990783,DK @@ -131563,7 +133684,6 @@ 3280126208,3280126463,IS 3280126464,3280126719,SI 3280126720,3280126975,IT -3280126976,3280127231,CH 3280127232,3280127487,PL 3280127488,3280127743,AT 3280127744,3280127999,NL @@ -131604,15 +133724,15 @@ 3280279296,3280281855,RU 3280281856,3280282111,IL 3280282112,3280282367,RU -3280282368,3280282623,DE -3280282624,3280284671,NL +3280282368,3280284671,NL 3280284672,3280288255,RU 3280288256,3280288511,NL -3280288512,3280288767,RU -3280288768,3280290815,DE +3280288512,3280289791,RU +3280289792,3280290815,DE 3280290816,3280293119,RU 3280293120,3280293887,GB -3280293888,3280294399,FR +3280293888,3280294143,NL +3280294144,3280294399,FR 3280294400,3280296959,RU 3280296960,3280297471,SC 3280297472,3280297727,RU @@ -131628,7 +133748,8 @@ 3280323072,3280325119,RU 3280325120,3280325631,CA 3280325632,3280326655,ES -3280326656,3280327679,US +3280326656,3280327167,MD +3280327168,3280327679,US 3280327680,3280328703,ES 3280328704,3280329727,RU 3280329728,3280330751,IQ @@ -131658,7 +133779,7 @@ 3280420864,3280437247,FR 3280437248,3280453631,DE 3280453632,3280454143,NL -3280454144,3280454399,RO +3280454144,3280454399,US 3280454400,3280454655,NL 3280454656,3280455679,UA 3280455680,3280456703,IT @@ -131710,7 +133831,7 @@ 3280584448,3280584703,DE 3280584704,3280585215,FR 3280585216,3280585727,DK -3280585728,3280586239,UA +3280585728,3280586239,PL 3280586240,3280586751,DE 3280586752,3280587263,RU 3280587264,3280587775,UA @@ -131931,7 +134052,6 @@ 3280998656,3280999423,NL 3280999424,3280999679,HU 3280999680,3280999935,AT -3280999936,3281000191,DE 3281000192,3281000703,FR 3281000704,3281000959,UA 3281000960,3281001215,SI @@ -132296,22 +134416,28 @@ 3283251712,3283252223,PL 3283252224,3283252735,BG 3283252736,3283253247,SI -3283253248,3283253759,US +3283253248,3283253503,DE +3283253504,3283253759,US 3283253760,3283254271,PL 3283254272,3283255295,DE -3283255296,3283257343,TR +3283255296,3283256319,TR +3283256320,3283257343,UA 3283257344,3283258367,HK 3283258368,3283258879,TR 3283258880,3283259391,US -3283259392,3283262463,UA +3283259392,3283259903,UA +3283259904,3283260415,TR +3283260416,3283262463,UA 3283262464,3283262719,GB 3283262720,3283263231,UA 3283263232,3283263487,KR 3283263488,3283271679,SE 3283271680,3283279871,RU 3283279872,3283288063,SE -3283288064,3283308543,DE -3283308544,3283312639,US +3283288064,3283298303,DE +3283298304,3283299327,US +3283299328,3283309567,DE +3283309568,3283312639,US 3283312640,3283337471,DE 3283337472,3283337727,NL 3283337728,3283338239,DE @@ -132320,11 +134446,10 @@ 3283345408,3283348479,IT 3283348480,3283353599,US 3283353600,3283388415,DE -3283388416,3283389439,US +3283388416,3283389439,IT 3283389440,3283391487,DE 3283391488,3283391999,US -3283392000,3283392255,JP -3283392256,3283392511,HK +3283392000,3283392511,JP 3283392512,3283393535,GB 3283393536,3283394559,US 3283394560,3283396607,DE @@ -132406,7 +134531,7 @@ 3283498496,3283498751,PL 3283498752,3283499007,AT 3283499008,3283499263,DE -3283499264,3283499519,RU +3283499264,3283499519,GE 3283499520,3283499775,DE 3283499776,3283500031,GB 3283500032,3283500287,DE @@ -132613,13 +134738,14 @@ 3283978752,3283979263,RO 3283979264,3283979775,IL 3283979776,3283980287,NL -3283980288,3283980799,RO +3283980288,3283980543,CZ +3283980544,3283980799,RO 3283980800,3283981823,CH 3283981824,3283982335,RO 3283982336,3283982847,LU 3283982848,3283983103,SE 3283983104,3283983359,RO -3283983360,3283983871,CY +3283983360,3283983871,DE 3283983872,3283984383,GB 3283984384,3283984895,SE 3283984896,3283985407,GR @@ -132782,7 +134908,8 @@ 3284092928,3284093439,UA 3284093440,3284093951,IR 3284093952,3284094975,RU -3284094976,3284095487,EU +3284094976,3284095231,EU +3284095232,3284095487,UA 3284095488,3284095999,RU 3284096000,3284096511,IT 3284096512,3284097023,GB @@ -132934,7 +135061,7 @@ 3284719872,3284720127,FR 3284720128,3284720383,CH 3284720384,3284720895,SE -3284720896,3284721151,DE +3284720896,3284721151,AP 3284721152,3284721407,TR 3284721408,3284721663,NL 3284721664,3284722175,BE @@ -133004,7 +135131,6 @@ 3285118208,3285118463,RU 3285118464,3285118975,UA 3285118976,3285119487,RU -3285119488,3285119999,RO 3285120000,3285120511,RU 3285120512,3285121023,IT 3285121024,3285121535,SE @@ -133060,8 +135186,7 @@ 3285336064,3285344255,IT 3285344256,3285347583,GB 3285347584,3285347839,PL -3285347840,3285348095,GB -3285348096,3285348351,PL +3285347840,3285348351,GB 3285348352,3285349375,US 3285349376,3285352447,GB 3285352448,3285368831,RU @@ -133091,7 +135216,7 @@ 3285406720,3285407743,UA 3285407744,3285408767,RU 3285408768,3285409791,GB -3285409792,3285410815,CZ +3285409792,3285410815,US 3285410816,3285412863,RU 3285412864,3285413887,UA 3285413888,3285414911,RU @@ -133252,7 +135377,12 @@ 3285752064,3285752319,DE 3285752320,3285752831,RU 3285752832,3285753855,US -3285753856,3285757951,FR +3285753856,3285754367,FR +3285754368,3285754879,RU +3285754880,3285756159,FR +3285756160,3285756415,RU +3285756416,3285756927,FR +3285756928,3285757951,RU 3285757952,3285762047,US 3285762048,3285762559,FR 3285762560,3285763071,RU @@ -133267,7 +135397,8 @@ 3285767680,3285768191,FR 3285768192,3285768703,RU 3285768704,3285768959,RO -3285768960,3285769727,DE +3285768960,3285769215,AP +3285769216,3285769727,DE 3285769728,3285770239,RO 3285770240,3285770495,NL 3285770496,3285770751,US @@ -133292,7 +135423,6 @@ 3285775616,3285775871,ES 3285775872,3285776127,NL 3285776128,3285776383,ES -3285776384,3285776639,UA 3285776640,3285776895,DE 3285776896,3285777151,PL 3285777152,3285777407,HU @@ -133426,7 +135556,9 @@ 3285956096,3285956351,FR 3285956352,3285956607,DE 3285956608,3285956863,GB -3285956864,3285957631,PT +3285956864,3285957119,PT +3285957120,3285957375,FR +3285957376,3285957631,PT 3285957632,3285957887,PL 3285957888,3285958143,GB 3285958144,3285958399,BG @@ -133517,7 +135649,7 @@ 3286326272,3286327295,PL 3286327296,3286327551,RU 3286327552,3286328063,NL -3286328064,3286328319,CH +3286328064,3286328319,RU 3286328320,3286329343,NL 3286329344,3286330367,DE 3286330368,3286331391,RU @@ -133599,17 +135731,13 @@ 3286425344,3286425599,IR 3286425600,3286433791,KW 3286433792,3286499327,DE -3286499328,3286499583,HU -3286499584,3286499839,BG -3286499840,3286502143,HU +3286499328,3286502143,HU 3286502144,3286502399,BG 3286502400,3286510335,HU 3286510336,3286510591,BG 3286510592,3286514431,HU 3286514432,3286514687,RO -3286514688,3286537983,HU -3286537984,3286538239,GR -3286538240,3286564863,HU +3286514688,3286564863,HU 3286564864,3286566655,AE 3286566656,3286567423,KW 3286567424,3286571007,AE @@ -133728,7 +135856,7 @@ 3286913536,3286914047,RO 3286914048,3286915071,BG 3286915072,3286915583,NL -3286915584,3286916095,GB +3286915584,3286916095,RU 3286916096,3286917119,IT 3286917120,3286917631,RU 3286917632,3286917887,BG @@ -133888,7 +136016,7 @@ 3287434752,3287435263,GB 3287435264,3287436287,ES 3287436288,3287436799,RS -3287436800,3287437311,US +3287436800,3287437311,DE 3287437312,3287437823,UA 3287437824,3287438335,RU 3287438336,3287438847,CH @@ -133980,7 +136108,7 @@ 3287549952,3287550463,UA 3287550464,3287550975,DE 3287550976,3287551487,LT -3287551488,3287551999,AT +3287551488,3287551999,US 3287552000,3287552511,GB 3287552512,3287553023,AT 3287553024,3287553535,FR @@ -134161,7 +136289,6 @@ 3287830016,3287830271,NO 3287830272,3287830527,RO 3287830528,3287830783,IE -3287830784,3287831039,GB 3287831040,3287831295,RU 3287831296,3287831551,CH 3287831552,3287831807,NL @@ -134291,14 +136418,13 @@ 3288242688,3288243711,PL 3288243712,3288244735,FR 3288244736,3288245247,DE -3288245248,3288245759,GB 3288245760,3288246271,RO 3288246272,3288246783,DK 3288246784,3288247295,KW 3288247296,3288247807,NO 3288247808,3288248831,PL 3288248832,3288249855,GB -3288249856,3288250367,RO +3288249856,3288250367,ES 3288250368,3288250879,PL 3288250880,3288251391,CH 3288251392,3288251903,RU @@ -134328,8 +136454,7 @@ 3288417536,3288418047,KW 3288418048,3288418303,ZA 3288418304,3288418815,US -3288418816,3288422143,ZA -3288422144,3288423423,MU +3288418816,3288423423,ZA 3288423424,3288425727,SN 3288425728,3288426495,ZA 3288426496,3288427263,IN @@ -134448,7 +136573,9 @@ 3288793088,3288897791,ZA 3288897792,3288898047,CD 3288898048,3288898303,LS -3288898304,3288910335,ZA +3288898304,3288901631,ZA +3288901632,3288901887,GH +3288901888,3288910335,ZA 3288910336,3288910847,MZ 3288910848,3288911103,GH 3288911104,3288911359,ZA @@ -134629,18 +136756,68 @@ 3289321472,3289325567,IN 3289325568,3289333759,SA 3289333760,3289382911,ZA -3289382912,3289477631,SC +3289382912,3289410559,SC +3289410560,3289412607,BR +3289412608,3289445375,SC +3289445376,3289445631,BR +3289445632,3289464831,SC +3289464832,3289465855,BR +3289465856,3289467903,SC +3289467904,3289468927,BR +3289468928,3289477631,SC 3289477632,3289478143,GB 3289478144,3289479167,JP -3289479168,3289554431,SC +3289479168,3289491455,SC +3289491456,3289492479,BR +3289492480,3289505535,SC +3289505536,3289505791,BR +3289505792,3289512191,SC +3289512192,3289512959,BR +3289512960,3289513983,SC +3289513984,3289515007,BR +3289515008,3289517055,SC +3289517056,3289518079,BR +3289518080,3289544703,SC +3289544704,3289545727,US +3289545728,3289554431,SC 3289554432,3289554943,GB -3289554944,3289569535,SC +3289554944,3289555967,SC +3289555968,3289556991,BR +3289556992,3289560063,SC +3289560064,3289561087,BR +3289561088,3289564159,SC +3289564160,3289564415,US +3289564416,3289564671,SC +3289564672,3289565183,BR +3289565184,3289569535,SC 3289569536,3289569791,JP -3289569792,3289611519,SC +3289569792,3289570303,SC +3289570304,3289571583,BR +3289571584,3289572095,SC +3289572096,3289572607,BR +3289572608,3289572863,SC +3289572864,3289573375,BR +3289573376,3289574655,SC +3289574656,3289574911,BR +3289574912,3289581567,SC +3289581568,3289582591,BR +3289582592,3289610239,SC +3289610240,3289611263,BR +3289611264,3289611519,SC 3289611520,3289611775,NL -3289611776,3289637631,SC +3289611776,3289619455,SC +3289619456,3289620479,BR +3289620480,3289624575,SC +3289624576,3289625599,BR +3289625600,3289629695,SC +3289629696,3289629951,US +3289629952,3289637631,SC 3289637632,3289637887,JP -3289637888,3289645055,SC +3289637888,3289638911,US +3289638912,3289641215,SC +3289641216,3289641727,US +3289641728,3289641983,BR +3289641984,3289645055,SC 3289645056,3289653247,NA 3289653248,3289661439,MU 3289661440,3289677823,DZ @@ -134827,9 +137004,14 @@ 3291234304,3291242495,ZA 3291242496,3291246591,GH 3291246592,3291246847,DE -3291246848,3291248383,GH +3291246848,3291247871,GH +3291247872,3291248127,NG +3291248128,3291248383,TR 3291248384,3291248639,DE -3291248640,3291250687,GH +3291248640,3291249663,GH +3291249664,3291250175,US +3291250176,3291250431,PE +3291250432,3291250687,GH 3291250688,3291258879,NA 3291258880,3291262975,TZ 3291262976,3291267071,ZW @@ -134990,7 +137172,11 @@ 3291660288,3291742207,ZA 3291742208,3291753215,MU 3291753216,3291753471,NL -3291753472,3292004351,MU +3291753472,3291835903,MU +3291835904,3291836159,US +3291836160,3291885055,MU +3291885056,3291885311,US +3291885312,3292004351,MU 3292004352,3292266495,SE 3292266496,3292266751,TZ 3292266752,3292267007,MU @@ -135052,7 +137238,11 @@ 3292288000,3292288255,CM 3292288256,3292288511,MU 3292288512,3292288767,EG -3292288768,3292334079,MU +3292288768,3292289023,MU +3292289024,3292289279,SS +3292289280,3292289535,MU +3292289536,3292289791,LY +3292289792,3292334079,MU 3292334080,3292336127,TZ 3292336128,3292340223,ZA 3292340224,3292344319,GH @@ -135131,9 +137321,7 @@ 3301198080,3301201919,SE 3301201920,3301202175,EU 3301202176,3301202431,SE -3301202432,3301202687,EU -3301202688,3301202943,SE -3301202944,3301203199,EU +3301202432,3301203199,EU 3301203200,3301203455,SE 3301203456,3301203711,EU 3301203712,3301204479,SE @@ -135329,7 +137517,7 @@ 3302547968,3302548479,CI 3302548480,3302548991,GH 3302548992,3302549503,ZA -3302549504,3302550015,KE +3302549504,3302550015,MU 3302550016,3302550527,TZ 3302550528,3302551551,ZA 3302551552,3302552063,EG @@ -135443,7 +137631,8 @@ 3304093952,3304094207,EU 3304094208,3304095231,SE 3304095232,3304095487,ZA -3304095488,3304099583,SE +3304095488,3304099327,SE +3304099328,3304099583,EU 3304099584,3304099839,ZA 3304099840,3304107263,SE 3304107264,3304107519,EU @@ -135467,7 +137656,9 @@ 3304126720,3304127231,ZA 3304127232,3304127999,SE 3304128000,3304128511,ZA -3304128512,3304194815,SE +3304128512,3304174591,SE +3304174592,3304174847,EU +3304174848,3304194815,SE 3304194816,3304195327,ZA 3304195328,3304195583,SE 3304195584,3304195839,ZA @@ -135558,9 +137749,7 @@ 3304449024,3304450815,SC 3304450816,3304451071,EU 3304451072,3304452351,SC -3304452352,3304453119,EU -3304453120,3304453375,SC -3304453376,3304456191,EU +3304452352,3304456191,EU 3304456192,3304507391,MU 3304507392,3304507647,PK 3304507648,3304507903,MU @@ -135748,7 +137937,8 @@ 3315548160,3315552255,NG 3315552256,3315554303,MU 3315554304,3315556351,ZA -3315556352,3315560447,KE +3315556352,3315559423,KE +3315559424,3315560447,TZ 3315560448,3315564543,MU 3315564544,3315568639,GH 3315568640,3315572735,MG @@ -135775,7 +137965,15 @@ 3318943744,3318943999,KE 3318944000,3318944255,AE 3318944256,3318947839,KE -3318947840,3318956031,NG +3318947840,3318948351,NG +3318948352,3318948607,NF +3318948608,3318950399,NG +3318950400,3318950655,NF +3318950656,3318951679,NG +3318951680,3318951935,NF +3318951936,3318952959,NG +3318952960,3318953215,NF +3318953216,3318956031,NG 3318956032,3318964223,ZA 3318964224,3318972415,MW 3318972416,3318988799,ZA @@ -135955,7 +138153,9 @@ 3322609664,3322610687,SA 3322610688,3322683391,US 3322683392,3322691583,AR -3322691584,3322875903,US +3322691584,3322740735,US +3322744832,3322806271,US +3322810368,3322875903,US 3322880000,3322888191,AU 3322888192,3322970111,US 3322970112,3323002879,CA @@ -136035,7 +138235,9 @@ 3324259584,3324259839,SA 3324259840,3324277759,US 3324277760,3324278783,CA -3324278784,3324354559,US +3324278784,3324315391,US +3324315392,3324315647,?? +3324315648,3324354559,US 3324354560,3324362751,CA 3324362752,3324379135,US 3324379136,3324380159,CA @@ -136047,7 +138249,9 @@ 3324383232,3324579839,US 3324582912,3324583935,CA 3324583936,3324587775,CL -3324587776,3324814079,US +3324587776,3324813311,US +3324813312,3324813567,AP +3324813568,3324814079,US 3324814080,3324814335,HK 3324814336,3324818943,US 3324818944,3324819199,HK @@ -136074,6 +138278,7 @@ 3325110272,3325120511,US 3325120512,3325120767,?? 3325120768,3325122303,US +3325122304,3325122559,AU 3325122560,3325123071,CA 3325123072,3325128703,US 3325128704,3325129215,TH @@ -136129,7 +138334,6 @@ 3325290496,3325296383,US 3325296384,3325296639,CA 3325296640,3325304831,US -3325305856,3325306367,?? 3325306880,3325307903,US 3325307904,3325308927,GB 3325308928,3325313023,CA @@ -136437,7 +138641,6 @@ 3331563776,3331565567,US 3331565568,3331566079,CA 3331566080,3331632639,US -3331632640,3331632895,CA 3331632896,3331633407,US 3331633408,3331633919,CH 3331633920,3331636479,US @@ -136755,7 +138958,11 @@ 3338069760,3338070271,US 3338070528,3338350591,US 3338350592,3338354687,CA -3338354688,3338424319,US +3338354688,3338359807,US +3338359808,3338360063,LU +3338360064,3338360831,US +3338360832,3338361343,LU +3338361344,3338424319,US 3338424320,3338429695,CA 3338429696,3338429951,SG 3338429952,3338431231,CA @@ -136771,7 +138978,8 @@ 3338460672,3338460927,?? 3338460928,3338567679,US 3338567680,3338600447,CA -3338600448,3338964991,US +3338600448,3338962687,US +3338962944,3338964991,US 3338964992,3338965247,CA 3338965248,3338976767,US 3338976768,3338977023,CA @@ -136781,7 +138989,13 @@ 3339000832,3339028991,US 3339029760,3339039743,US 3339039744,3339040255,GB -3339040256,3339142655,US +3339040256,3339133183,US +3339133184,3339133439,NL +3339133440,3339135231,US +3339135232,3339135487,NL +3339135488,3339136255,US +3339136256,3339136511,NL +3339136512,3339142655,US 3339142912,3339147775,US 3339147776,3339148031,MS 3339148032,3339153407,US @@ -136893,7 +139107,7 @@ 3340679168,3340835327,US 3340835840,3340851455,US 3340851456,3340851711,CA -3340851712,3340852735,US +3340851712,3340852479,US 3340852736,3340853247,CA 3340853248,3340857343,US 3340857344,3340858367,CA @@ -137096,7 +139310,9 @@ 3343466496,3343472639,US 3343472640,3343474687,?? 3343474688,3343575807,US -3343576064,3343905023,US +3343576064,3343666943,US +3343666944,3343667199,HK +3343667200,3343905023,US 3343905280,3344112127,US 3344112640,3344126975,US 3344126976,3344127999,CA @@ -137112,8 +139328,8 @@ 3344154624,3344156671,GD 3344156672,3344158719,CA 3344158720,3344166911,US -3344166912,3344168959,CA -3344168960,3344171263,US +3344166912,3344167935,CA +3344167936,3344171263,US 3344171264,3344195583,CA 3344195584,3344203775,US 3344203776,3344208639,CA @@ -137162,13 +139378,16 @@ 3344486400,3344488447,NL 3344488448,3344534271,US 3344534272,3344534527,CA -3344534528,3344633855,US +3344534528,3344557567,US +3344557824,3344633855,US 3344633856,3344637951,CH 3344637952,3344649215,US 3344649216,3344650239,PR 3344650240,3344652287,CA 3344652288,3344654335,US -3344654336,3344656383,VG +3344654336,3344654591,AP +3344654592,3344654847,US +3344654848,3344656383,VG 3344656384,3344658431,US 3344658432,3344660479,CA 3344660480,3344670719,US @@ -137373,14 +139592,14 @@ 3349725184,3349726207,?? 3349726208,3349731327,US 3349731328,3349733375,CA -3349733376,3349734399,US -3349734400,3349735423,?? -3349735424,3349739519,US +3349733376,3349739519,US 3349739520,3349740543,CA 3349740544,3350134783,US 3350134784,3350136575,CA 3350136576,3350136831,US -3350136832,3350146047,CA +3350136832,3350145279,CA +3350145280,3350145535,US +3350145536,3350146047,CA 3350146048,3350150143,US 3350150144,3350160639,CA 3350160640,3350160895,US @@ -137388,9 +139607,7 @@ 3350161920,3350162431,US 3350162432,3350162943,CA 3350162944,3350167551,US -3350167552,3350169855,CA -3350169856,3350170111,US -3350170112,3350175743,CA +3350167552,3350175743,CA 3350176256,3350181887,CA 3350181888,3350183167,US 3350183168,3350196223,CA @@ -137487,7 +139704,6 @@ 3351104512,3351112703,US 3351112704,3351113727,CA 3351113728,3351115775,US -3351115776,3351116799,?? 3351117824,3351275519,US 3351275520,3351276543,CA 3351276544,3351293951,US @@ -137565,9 +139781,7 @@ 3352066048,3352067071,CA 3352067072,3352068095,US 3352068096,3352069119,CA -3352069120,3352079359,US -3352079360,3352080383,?? -3352080384,3352082431,US +3352069120,3352082431,US 3352082432,3352083455,CA 3352083456,3352088575,US 3352088576,3352089087,CA @@ -137628,7 +139842,6 @@ 3354132480,3354468351,US 3354468864,3354469375,US 3354476032,3354490879,US -3354490880,3354491903,?? 3354492928,3354494975,CA 3354494976,3354501119,US 3354501120,3354503167,CA @@ -137668,7 +139881,9 @@ 3354874880,3354875391,CA 3354875392,3354886143,US 3354886144,3354918911,CA -3354918912,3354955775,US +3354918912,3354933247,US +3354933248,3354934271,NL +3354934272,3354955775,US 3354955776,3354956031,AR 3354956032,3354972159,US 3354972160,3354972415,CA @@ -137696,7 +139911,8 @@ 3355372288,3355372543,CA 3355372544,3355384831,US 3355384832,3355385855,CA -3355385856,3355407359,US +3355385856,3355406335,US +3355406336,3355407359,AT 3355407360,3355408383,PR 3355408384,3355432959,US 3355432960,3355435007,CA @@ -137712,7 +139928,8 @@ 3355449344,3355450367,CU 3355450368,3355451391,EC 3355451392,3355458559,BR -3355458560,3355459071,HN +3355458560,3355458815,US +3355458816,3355459071,ES 3355459072,3355459327,BR 3355459328,3355459583,EC 3355459584,3355459839,BR @@ -137940,7 +140157,7 @@ 3356065792,3356066047,CL 3356066048,3356069119,BR 3356069120,3356069631,CL -3356069632,3356069887,BR +3356069632,3356070143,BR 3356070144,3356070655,CL 3356070656,3356070911,AR 3356070912,3356071423,BR @@ -137996,7 +140213,11 @@ 3356102400,3356102655,PA 3356102656,3356105727,CL 3356105728,3356106751,CO -3356106752,3356110847,HN +3356106752,3356108799,US +3356108800,3356109055,AT +3356109056,3356110079,US +3356110080,3356110335,DE +3356110336,3356110847,US 3356110848,3356113919,BR 3356113920,3356114943,UY 3356114944,3356123135,PE @@ -138134,7 +140355,9 @@ 3356303360,3356303615,BR 3356303616,3356305663,MX 3356305664,3356307455,AR -3356307456,3356316415,MX +3356307456,3356311551,MX +3356311552,3356315647,RU +3356315648,3356316415,MX 3356316416,3356316671,AR 3356316672,3356317695,BR 3356317696,3356328959,MX @@ -138142,7 +140365,15 @@ 3356329984,3356332031,GF 3356332032,3356334079,CU 3356334080,3356336127,BO -3356336128,3356344319,SV +3356336128,3356336639,SV +3356336640,3356338175,HN +3356338176,3356339967,SV +3356339968,3356341247,HN +3356341248,3356341503,SV +3356341504,3356342271,HN +3356342272,3356343039,SV +3356343040,3356343551,HN +3356343552,3356344319,SV 3356344320,3356360703,CO 3356360704,3356362751,CL 3356362752,3356364799,VE @@ -138155,7 +140386,11 @@ 3356370944,3356372991,CO 3356372992,3356375039,CU 3356375040,3356376063,BR -3356376064,3356379647,CL +3356376064,3356376319,CO +3356376320,3356376575,EC +3356376576,3356376831,PE +3356376832,3356377087,AR +3356377088,3356379647,CL 3356379648,3356380159,AR 3356380160,3356380927,CL 3356380928,3356381183,DO @@ -138240,7 +140475,33 @@ 3357065216,3357073407,EC 3357073408,3357077503,CL 3357077504,3357081599,AR -3357081600,3357114367,CO +3357081600,3357084927,CO +3357084928,3357085183,CR +3357085184,3357085439,CO +3357085440,3357085695,MX +3357085696,3357086207,BR +3357086208,3357086719,PR +3357086720,3357087743,CL +3357087744,3357088767,CO +3357088768,3357089279,PE +3357089280,3357089791,CO +3357089792,3357090815,MX +3357090816,3357091071,BR +3357091072,3357091327,CO +3357091328,3357091839,EC +3357091840,3357092351,CO +3357092352,3357092607,BR +3357092608,3357092863,CO +3357092864,3357093887,PE +3357093888,3357094399,US +3357094400,3357094911,CO +3357094912,3357095935,BR +3357095936,3357096959,CO +3357096960,3357097983,AR +3357097984,3357098495,CO +3357098496,3357099007,BR +3357099008,3357099263,CR +3357099264,3357114367,CO 3357114368,3357138943,EC 3357138944,3357147135,CO 3357147136,3357179903,AR @@ -138248,9 +140509,11 @@ 3357188096,3357190143,VE 3357190144,3357192191,DO 3357192192,3357194239,PY -3357194240,3357195263,AR +3357194240,3357194495,DO +3357194496,3357195263,AR 3357195264,3357195519,RU -3357195520,3357196287,AR +3357195520,3357195775,AR +3357195776,3357196287,BZ 3357196288,3357204479,CW 3357204480,3357205503,AR 3357205504,3357206527,BR @@ -138265,16 +140528,64 @@ 3357407232,3357409279,AR 3357409280,3357425663,US 3357425664,3357442047,CO -3357442048,3357458431,GT +3357442048,3357442303,NI +3357442304,3357442559,HN +3357442560,3357442815,NI +3357442816,3357443071,SV +3357443072,3357443327,NI +3357443328,3357443583,GT +3357443584,3357444607,HN +3357444608,3357444863,SV +3357444864,3357448191,GT +3357448192,3357448703,SV +3357448704,3357448959,GT +3357448960,3357449727,HN +3357449728,3357450751,GT +3357450752,3357451007,SV +3357451008,3357451519,HN +3357451520,3357451775,NI +3357451776,3357452287,GT +3357452288,3357452799,HN +3357452800,3357453055,NI +3357453056,3357453311,SV +3357453312,3357454591,GT +3357454592,3357454847,NI +3357454848,3357455103,HN +3357455104,3357455359,SV +3357455360,3357455871,GT +3357455872,3357456127,NI +3357456128,3357456639,GT +3357456640,3357456895,HN +3357456896,3357457663,GT +3357457664,3357457919,CR +3357457920,3357458431,HN 3357458432,3357474815,CL -3357474816,3357483007,AR +3357474816,3357475071,US +3357475072,3357475839,AR +3357475840,3357476351,VE +3357476352,3357476607,EC +3357476608,3357476863,US +3357476864,3357477631,EC +3357477632,3357477887,AR +3357477888,3357480959,CO +3357480960,3357483007,EC 3357483008,3357491199,CL 3357491200,3357499391,CO 3357499392,3357507583,PE 3357507584,3357515775,VE 3357515776,3357523967,SV 3357523968,3357532159,CO -3357532160,3357581311,AR +3357532160,3357556735,AR +3357556736,3357556991,VE +3357556992,3357557759,AR +3357557760,3357559295,EC +3357559296,3357559551,CA +3357559552,3357559807,US +3357559808,3357560319,VE +3357560320,3357560575,AR +3357560576,3357560831,US +3357560832,3357561855,CO +3357561856,3357581311,AR 3357581312,3357589503,CL 3357589504,3357605887,BZ 3357605888,3357606911,MX @@ -138338,7 +140649,10 @@ 3357776128,3357776383,UY 3357776384,3357776895,US 3357776896,3357777919,CL -3357777920,3357786111,GT +3357777920,3357783807,GT +3357783808,3357784063,NI +3357784064,3357785855,GT +3357785856,3357786111,NI 3357786112,3357802495,VE 3357802496,3357835263,MX 3357835264,3357841407,BR @@ -138367,18 +140681,51 @@ 3358039040,3358040063,BR 3358040064,3358064639,MX 3358064640,3358130175,UY -3358130176,3358236671,AR +3358130176,3358131199,EC +3358131200,3358132223,CO +3358132224,3358132479,AR +3358132480,3358132735,CO +3358132736,3358133247,EC +3358133248,3358133759,VE +3358133760,3358142719,AR +3358142720,3358142975,US +3358142976,3358143231,CO +3358143232,3358143487,VE +3358143488,3358143999,US +3358144000,3358144511,CL +3358144512,3358145023,VE +3358145024,3358149631,AR +3358149632,3358150655,CO +3358150656,3358151679,EC +3358151680,3358152703,PE +3358152704,3358152959,US +3358152960,3358153215,EC +3358153216,3358153727,AR +3358153728,3358153983,EC +3358153984,3358154239,US +3358154240,3358154751,CL +3358154752,3358158847,PE +3358158848,3358159359,AR +3358159360,3358159615,EC +3358159616,3358159871,US +3358159872,3358160895,VE +3358160896,3358236671,AR 3358236672,3358244863,CL 3358244864,3358261247,DO 3358261248,3358326783,AR 3358326784,3358392319,VE 3358392320,3358457855,AR 3358457856,3358523391,PA -3358523392,3358567423,AR -3358567424,3358568447,CO +3358523392,3358543871,AR +3358543872,3358544127,MX +3358544128,3358563327,AR +3358563328,3358564095,CO +3358564096,3358566911,AR +3358566912,3358568447,CO 3358568448,3358578687,AR -3358578688,3358579711,CO -3358579712,3358588927,AR +3358578688,3358579967,CO +3358579968,3358587903,AR +3358587904,3358588927,CL 3358588928,3358654463,PE 3358654464,3358658559,AR 3358658560,3358660607,CL @@ -138388,7 +140735,7 @@ 3358703616,3358715903,AR 3358715904,3358716927,PE 3358716928,3358717951,MX -3358717952,3358719999,AR +3358717952,3358719999,US 3358720000,3358728191,PR 3358728192,3358736383,CL 3358736384,3358744575,BB @@ -138441,9 +140788,7 @@ 3359365120,3359366143,BR 3359366144,3359375359,AR 3359375360,3359440895,PE -3359440896,3359473663,AR -3359473664,3359481855,CO -3359481856,3359498239,AR +3359440896,3359498239,AR 3359498240,3359502335,PY 3359502336,3359505407,AR 3359505408,3359505663,VE @@ -138484,14 +140829,15 @@ 3360123904,3360124927,MX 3360124928,3360125951,VE 3360125952,3360127999,BR -3360128000,3360129023,HN +3360128000,3360128511,US +3360128512,3360128767,DE +3360128768,3360129023,US 3360129024,3360145407,VE 3360145408,3360153599,CL 3360153600,3360157695,AR 3360157696,3360159743,VE 3360159744,3360161791,BQ -3360161792,3360227327,CL -3360227328,3360251903,CO +3360161792,3360251903,CL 3360251904,3360253951,BO 3360253952,3360255999,SV 3360256000,3360260095,CL @@ -138520,8 +140866,9 @@ 3360538624,3360667647,MX 3360667648,3360669695,BR 3360669696,3360686079,MX -3360686080,3360702463,CO -3360702464,3360706559,AR +3360686080,3360698367,AR +3360698368,3360699135,UY +3360699136,3360706559,AR 3360706560,3360710655,MX 3360710656,3360718847,BR 3360718848,3360763903,AR @@ -138535,7 +140882,9 @@ 3360948224,3361013759,VE 3361013760,3361021951,SV 3361021952,3361030143,PY -3361030144,3361034239,AR +3361030144,3361030655,VE +3361030656,3361033983,AR +3361033984,3361034239,VE 3361034240,3361036287,EC 3361036288,3361046527,AR 3361046528,3361048575,BO @@ -138583,7 +140932,13 @@ 3361726464,3361734655,MX 3361734656,3362258943,BR 3362258944,3362324479,CL -3362324480,3362349055,AR +3362324480,3362326015,AR +3362326016,3362326271,US +3362326272,3362337279,AR +3362337280,3362337535,US +3362337536,3362337791,AR +3362337792,3362338047,US +3362338048,3362349055,AR 3362349056,3362351103,CR 3362351104,3362353151,AR 3362353152,3362355199,EC @@ -138604,7 +140959,9 @@ 3362441216,3362446335,BR 3362446336,3362446847,AR 3362446848,3362447359,BR -3362447360,3362451455,SV +3362447360,3362449407,HN +3362449408,3362450175,SV +3362450176,3362451455,HN 3362451456,3362452479,AR 3362452480,3362452991,BO 3362452992,3362453247,HN @@ -138621,7 +140978,10 @@ 3362486272,3362488319,HN 3362488320,3362504703,PE 3362504704,3362506751,VE -3362506752,3362508799,AR +3362506752,3362507775,AR +3362507776,3362508287,CO +3362508288,3362508543,EC +3362508544,3362508799,PE 3362508800,3362510847,HN 3362510848,3362512895,BR 3362512896,3362514943,AR @@ -138630,7 +140990,11 @@ 3362519040,3362521087,EC 3362521088,3362529279,TT 3362529280,3362537471,PA -3362537472,3362545663,AR +3362537472,3362542079,AR +3362542080,3362542335,PE +3362542336,3362542591,AR +3362542592,3362543103,PE +3362543104,3362545663,AR 3362545664,3362549759,PE 3362549760,3362553855,AR 3362553856,3362557951,PY @@ -138649,14 +141013,19 @@ 3362678784,3362679807,MX 3362679808,3362680831,BR 3362680832,3362684927,EC -3362684928,3362693119,CO -3362693120,3362695167,AR +3362684928,3362690815,AR +3362690816,3362692095,PA +3362692096,3362692607,AR +3362692608,3362692863,BR +3362692864,3362695167,AR 3362695168,3362697215,CO 3362697216,3362703359,AR 3362703360,3362705407,BR 3362705408,3362711551,AR 3362711552,3362713599,EC -3362713600,3362717695,AR +3362713600,3362716415,AR +3362716416,3362716671,CR +3362716672,3362717695,AR 3362717696,3362815999,CL 3362816000,3362832383,AR 3362832384,3362838527,CO @@ -138669,7 +141038,9 @@ 3362936832,3362938879,CL 3362938880,3362942975,AR 3362942976,3362945023,GT -3362945024,3362983935,AR +3362945024,3362983423,AR +3362983424,3362983679,CL +3362983680,3362983935,AR 3362983936,3362984447,PY 3362984448,3362984703,CR 3362984704,3362984959,PA @@ -138709,7 +141080,11 @@ 3363471360,3363487743,CR 3363487744,3363504127,CO 3363504128,3363512319,PE -3363512320,3363557375,AR +3363512320,3363555071,AR +3363555072,3363555327,US +3363555328,3363555583,PA +3363555584,3363556863,US +3363556864,3363557375,AR 3363557376,3363559423,BZ 3363559424,3363561471,AR 3363561472,3363562495,BR @@ -138749,7 +141124,10 @@ 3363708928,3363713023,CL 3363713024,3363713279,EC 3363713280,3363714047,CL -3363714048,3363717119,PE +3363714048,3363715583,PE +3363715584,3363716095,CL +3363716096,3363716607,PE +3363716608,3363717119,AR 3363717120,3363733503,CL 3363733504,3363831807,AR 3363831808,3364809727,BR @@ -138757,7 +141135,7 @@ 3364810752,3367763967,BR 3367763968,3367804927,MX 3367804928,3367840767,BR -3367840768,3367841791,HN +3367840768,3367841791,US 3367841792,3368052991,BR 3368052992,3368053247,PE 3368053248,3368053503,CO @@ -138785,11 +141163,15 @@ 3370196992,3370201087,US 3370201088,3370218495,BR 3370218496,3370219519,AR -3370219520,3370450943,BR +3370219520,3370287103,BR +3370287104,3370303487,RU +3370303488,3370450943,BR 3370450944,3370455039,CR 3370455040,3370459135,US 3370459136,3370487807,BR -3370487808,3370488831,CR +3370487808,3370488319,CR +3370488320,3370488575,EC +3370488576,3370488831,HN 3370488832,3370489855,AR 3370489856,3370490879,VE 3370490880,3370506239,BR @@ -138799,7 +141181,9 @@ 3370516480,3370723327,BR 3370723328,3370724351,AR 3370724352,3370725375,PE -3370725376,3370819583,BR +3370725376,3370811391,BR +3370811392,3370812415,TR +3370812416,3370819583,BR 3370819584,3370820607,TR 3370820608,3370926079,BR 3370926080,3370942463,MX @@ -138926,7 +141310,7 @@ 3381947392,3381952511,BR 3381952512,3381960703,MX 3381960704,3381962751,BR -3381962752,3381963775,HN +3381962752,3381963775,US 3381963776,3381968895,BR 3381968896,3381972991,MX 3381972992,3381974015,BR @@ -138985,7 +141369,8 @@ 3382661120,3382662143,MX 3382662144,3382665215,BR 3382665216,3382669311,MX -3382669312,3382670335,GT +3382669312,3382669823,SV +3382669824,3382670335,HN 3382670336,3382672383,BR 3382672384,3382677503,MX 3382677504,3382683647,BR @@ -139042,7 +141427,9 @@ 3386392576,3386408959,BR 3386408960,3386425343,GT 3386425344,3386441727,AR -3386441728,3386458111,PY +3386441728,3386445055,PY +3386445056,3386445311,PE +3386445312,3386458111,PY 3386458112,3386474495,EC 3386474496,3386490879,UY 3386490880,3386499071,CO @@ -139052,7 +141439,16 @@ 3386505216,3386507263,CL 3386507264,3386523647,EC 3386523648,3386540031,PA -3386540032,3386548223,CL +3386540032,3386544127,CL +3386544128,3386544383,PE +3386544384,3386544639,CL +3386544640,3386544895,PE +3386544896,3386545663,CL +3386545664,3386546175,PE +3386546176,3386547199,CL +3386547200,3386547455,PE +3386547456,3386547711,CL +3386547712,3386548223,PE 3386548224,3386551295,BR 3386551296,3386552319,MX 3386552320,3386553343,BR @@ -139072,7 +141468,11 @@ 3386634240,3386636287,CO 3386636288,3386637311,BR 3386637312,3386638335,UY -3386638336,3386642431,SX +3386638336,3386640895,SX +3386640896,3386641151,US +3386641152,3386641663,SX +3386641664,3386641919,CW +3386641920,3386642431,SX 3386642432,3386644735,AR 3386644736,3386644991,PY 3386644992,3386645247,CR @@ -139086,7 +141486,9 @@ 3386687488,3386695679,CU 3386695680,3386703871,CL 3386703872,3386720255,UY -3386720256,3386728447,TT +3386720256,3386726399,TT +3386726400,3386727423,GD +3386727424,3386728447,TT 3386728448,3386732543,AR 3386732544,3386733567,VE 3386733568,3386734591,BR @@ -139120,7 +141522,18 @@ 3387293696,3387359231,PE 3387359232,3387424767,AR 3387424768,3387555839,CO -3387555840,3387686911,AR +3387555840,3387568127,AR +3387568128,3387572223,PE +3387572224,3387576319,CO +3387576320,3387578367,EC +3387578368,3387584511,AR +3387584512,3387588607,PE +3387588608,3387600895,AR +3387600896,3387604991,CO +3387604992,3387613183,EC +3387613184,3387617279,VE +3387617280,3387619327,CO +3387619328,3387686911,AR 3387686912,3387736063,CL 3387736064,3387752447,CO 3387752448,3387817983,CR @@ -139263,7 +141676,7 @@ 3389227008,3389227519,CN 3389227520,3389228031,PK 3389228032,3389228543,AU -3389228544,3389228799,CN +3389228544,3389228799,HK 3389228800,3389229055,SG 3389229056,3389229567,AU 3389229568,3389230079,SG @@ -139726,8 +142139,7 @@ 3390482176,3390482687,GB 3390482688,3390482943,TR 3390482944,3390483967,GB -3390483968,3390484223,DE -3390484224,3390484479,GB +3390483968,3390484479,DE 3390484480,3390488575,GU 3390488576,3390492671,BD 3390492672,3390496767,JP @@ -139981,8 +142393,7 @@ 3391811072,3391811327,JP 3391811328,3391815679,SG 3391815680,3391816703,AU -3391816704,3391816959,TR -3391816960,3391817727,US +3391816704,3391817727,US 3391817728,3391819775,TO 3391819776,3391823871,JP 3391823872,3391827967,TH @@ -140037,8 +142448,7 @@ 3391901696,3391905791,PK 3391905792,3391906047,TH 3391906048,3391906303,CN -3391906304,3391906815,AU -3391906816,3391907839,PH +3391906304,3391907839,AU 3391907840,3391909887,BD 3391909888,3391910911,IO 3391910912,3391911935,AU @@ -140234,7 +142644,8 @@ 3392440832,3392441343,BD 3392441344,3392441855,ID 3392441856,3392442111,AU -3392442112,3392442623,CN +3392442112,3392442367,CN +3392442368,3392442623,HK 3392442624,3392442879,AU 3392442880,3392443391,ID 3392443392,3392443647,IN @@ -140333,9 +142744,11 @@ 3392819200,3392823295,MY 3392823296,3392824319,KH 3392824320,3392824575,AU -3392824576,3392824831,CN +3392824576,3392824831,HK 3392824832,3392825343,IN -3392825344,3392826111,AP +3392825344,3392825599,AP +3392825600,3392825855,CN +3392825856,3392826111,AP 3392826112,3392826367,CN 3392826368,3392827391,BD 3392827392,3392828415,CN @@ -140372,7 +142785,8 @@ 3392864768,3392865279,IN 3392865280,3392866303,NU 3392866304,3392866559,NL -3392866560,3392867327,MY +3392866560,3392867071,MY +3392867072,3392867327,US 3392867328,3392868351,PK 3392868352,3392880639,AU 3392880640,3392888831,PK @@ -140590,7 +143004,10 @@ 3393500672,3393501439,US 3393501440,3393501951,SG 3393501952,3393502207,US -3393502208,3393503231,SG +3393502208,3393502463,SG +3393502464,3393502719,US +3393502720,3393502975,SG +3393502976,3393503231,US 3393503232,3393507327,HK 3393507328,3393511423,SG 3393511424,3393519615,KR @@ -140638,7 +143055,8 @@ 3393662976,3393675263,JP 3393675264,3393679359,MY 3393679360,3393683455,TH -3393683456,3393691647,IN +3393683456,3393687551,DE +3393687552,3393691647,IN 3393691648,3393695743,AU 3393695744,3393699839,PH 3393699840,3393717759,HK @@ -140667,7 +143085,9 @@ 3393782784,3393783551,BD 3393783552,3393783807,CA 3393783808,3393785855,MY -3393785856,3393789951,ID +3393785856,3393788927,ID +3393788928,3393789439,NZ +3393789440,3393789951,AU 3393789952,3393798143,SG 3393798144,3393806335,JP 3393806336,3393814527,ID @@ -140793,7 +143213,14 @@ 3394121728,3394125823,SG 3394125824,3394142207,PH 3394142208,3394150399,NZ -3394150400,3394154495,AU +3394150400,3394150655,EU +3394150656,3394152191,AU +3394152192,3394152447,JP +3394152448,3394152703,FR +3394152704,3394153471,AU +3394153472,3394153727,US +3394153728,3394153983,EU +3394153984,3394154495,AU 3394154496,3394158591,JP 3394158592,3394162687,ID 3394162688,3394166783,JP @@ -140951,7 +143378,7 @@ 3394813952,3394815999,JP 3394816000,3394818047,HK 3394818048,3394830335,IN -3394830336,3394831359,HK +3394830336,3394831359,AP 3394831360,3394832383,NZ 3394832384,3394834431,CN 3394834432,3394834687,HK @@ -141031,7 +143458,7 @@ 3394963456,3394965503,ID 3394965504,3394967551,TH 3394967552,3394969599,ID -3394969600,3394969855,GB +3394969600,3394969855,IN 3394969856,3394970623,US 3394970624,3394971647,HK 3394971648,3394972671,BD @@ -141088,7 +143515,7 @@ 3395174400,3395174911,AU 3395174912,3395175167,NP 3395175168,3395175423,IN -3395175424,3395175679,CN +3395175424,3395175679,HK 3395175680,3395175935,AU 3395175936,3395176191,SG 3395176192,3395176703,AU @@ -141114,8 +143541,7 @@ 3395200512,3395200767,TH 3395200768,3395201023,MY 3395201024,3395202047,TH -3395202048,3395202559,AU -3395202560,3395202815,IN +3395202048,3395202815,IN 3395202816,3395203071,AU 3395203072,3395215359,JP 3395215360,3395219455,HK @@ -141534,7 +143960,9 @@ 3398615040,3398616063,IN 3398616064,3398619135,CN 3398619136,3398621183,AU -3398621184,3398623231,AP +3398621184,3398622719,AP +3398622720,3398622975,HK +3398622976,3398623231,AP 3398623232,3398631423,ID 3398631424,3398641663,JP 3398641664,3398642175,AU @@ -141761,7 +144189,10 @@ 3399825408,3399826431,KR 3399826432,3399826943,PH 3399826944,3399827455,IN -3399827456,3399829503,AU +3399827456,3399828479,AU +3399828480,3399828991,FR +3399828992,3399829247,HK +3399829248,3399829503,AU 3399829504,3399831551,US 3399831552,3399835647,MM 3399835648,3399836671,US @@ -142011,7 +144442,7 @@ 3400861696,3400862719,CN 3400862720,3400864767,BD 3400864768,3400865791,FR -3400865792,3400866815,AP +3400865792,3400866815,HK 3400866816,3400867839,CN 3400867840,3400876031,AU 3400876032,3400880127,SG @@ -142402,7 +144833,8 @@ 3406451712,3406452991,CN 3406452992,3406454527,AU 3406454528,3406454783,CN -3406454784,3406455807,AU +3406454784,3406455295,JP +3406455296,3406455807,US 3406455808,3406456319,SG 3406456320,3406462207,AU 3406462208,3406462463,CN @@ -142675,7 +145107,8 @@ 3406949632,3406949887,US 3406949888,3406950399,AU 3406950400,3406951423,NF -3406951424,3406952447,AU +3406951424,3406951935,NL +3406951936,3406952447,AU 3406952448,3406952959,CN 3406952960,3406954239,AU 3406954240,3406954495,CN @@ -142720,7 +145153,9 @@ 3406991360,3406991615,CN 3406991616,3406993663,AU 3406993664,3406993919,CN -3406993920,3406999551,AU +3406993920,3406994175,AU +3406994176,3406994431,US +3406994432,3406999551,AU 3406999552,3406999807,CA 3406999808,3407000063,HK 3407000064,3407000319,CA @@ -142812,7 +145247,9 @@ 3407108608,3407112447,AU 3407112448,3407112703,SG 3407112704,3407113215,CN -3407113216,3407115007,AU +3407113216,3407114495,AU +3407114496,3407114751,US +3407114752,3407115007,AU 3407115008,3407115263,CN 3407115264,3407115519,AU 3407115520,3407116287,CN @@ -142952,7 +145389,8 @@ 3407326208,3407326463,CN 3407326464,3407327231,AU 3407327232,3407327743,HK -3407327744,3407328767,AU +3407327744,3407328255,DE +3407328256,3407328767,AU 3407328768,3407329023,CN 3407329024,3407329791,AU 3407329792,3407330303,CN @@ -143176,7 +145614,9 @@ 3407546880,3407547135,CN 3407547136,3407548159,AU 3407548160,3407548671,CN -3407548672,3407549439,AU +3407548672,3407548927,AU +3407548928,3407549183,NZ +3407549184,3407549439,AU 3407549440,3407549695,CN 3407549696,3407549951,AU 3407549952,3407550463,CN @@ -143878,7 +146318,7 @@ 3410818560,3410818815,SG 3410818816,3410819071,JP 3410819072,3410820095,IN -3410820096,3410821119,RU +3410820096,3410821119,LA 3410821120,3410853887,TW 3410853888,3410862079,HK 3410862080,3410866175,AU @@ -143908,7 +146348,7 @@ 3410924544,3410925567,SG 3410925568,3410926591,MH 3410926592,3410927615,CN -3410927616,3410927871,NP +3410927616,3410927871,ES 3410927872,3410928127,US 3410928128,3410928383,MY 3410928384,3410928895,US @@ -144136,7 +146576,7 @@ 3411738624,3411746815,TW 3411746816,3411755007,CN 3411755008,3411757055,AU -3411757056,3411759103,US +3411757056,3411759103,SG 3411759104,3411763199,HK 3411763200,3411767295,CN 3411767296,3411769343,MN @@ -144812,8 +147252,7 @@ 3416137728,3416145919,AU 3416145920,3416154111,IN 3416154112,3416215551,TH -3416215552,3416216319,NL -3416216320,3416216575,GB +3416215552,3416216575,NL 3416216576,3416216831,SG 3416216832,3416217087,US 3416217088,3416217343,SG @@ -144830,7 +147269,7 @@ 3416264704,3416268799,JP 3416268800,3416272895,HK 3416272896,3416273919,ID -3416273920,3416274943,AP +3416273920,3416274943,HK 3416274944,3416276991,ID 3416276992,3416285183,HK 3416285184,3416287231,VN @@ -144852,9 +147291,7 @@ 3416327168,3416328191,HK 3416328192,3416330239,AU 3416330240,3416334335,ID -3416334336,3416339455,SG -3416339456,3416339711,IN -3416339712,3416342527,SG +3416334336,3416342527,US 3416342528,3416371199,AU 3416371200,3416371711,PH 3416371712,3416371967,VN @@ -144889,9 +147326,10 @@ 3416668160,3416686591,AU 3416686592,3416687615,SG 3416687616,3416688639,US -3416688640,3416690687,SG +3416688640,3416689663,SG +3416689664,3416690687,US 3416690688,3416694271,CA -3416694272,3416694783,SG +3416694272,3416694783,MM 3416694784,3416702975,CN 3416702976,3416707071,ID 3416707072,3416709119,KR @@ -144903,7 +147341,7 @@ 3416719360,3416721407,PH 3416721408,3416723455,VN 3416723456,3416724479,KH -3416724480,3416725503,HK +3416724480,3416725503,SG 3416725504,3416726527,AU 3416726528,3416727551,CN 3416727552,3416735743,JP @@ -145100,7 +147538,7 @@ 3418208256,3418210303,LK 3418210304,3418218495,CN 3418218496,3418220543,BD -3418220544,3418221567,AP +3418220544,3418221567,HK 3418221568,3418222591,PS 3418222592,3418223615,CN 3418223616,3418226687,IN @@ -145402,9 +147840,14 @@ 3420061696,3420127231,HK 3420127232,3420323839,AU 3420323840,3420332031,TW -3420332032,3420336895,AU +3420332032,3420334335,AU +3420334336,3420334591,SG +3420334592,3420335871,AU +3420335872,3420336127,MY +3420336128,3420336895,AU 3420336896,3420337151,HK -3420337152,3420369919,AU +3420337152,3420369663,AU +3420369664,3420369919,SG 3420369920,3420370175,HK 3420370176,3420370687,AU 3420370688,3420370943,HK @@ -145502,7 +147945,9 @@ 3423137024,3423137279,CA 3423137536,3423143935,US 3423143936,3423145983,CA -3423145984,3423162367,US +3423145984,3423151103,US +3423151104,3423151871,BR +3423151872,3423162367,US 3423162368,3423163391,CA 3423163392,3423182847,US 3423182848,3423184895,CA @@ -145617,7 +148062,9 @@ 3424393984,3424394239,GB 3424394240,3424412415,US 3424412416,3424412671,CA -3424412672,3424489983,US +3424412672,3424467967,US +3424467968,3424468479,?? +3424468480,3424489983,US 3424489984,3424490239,ES 3424490240,3424493823,US 3424493824,3424494079,CA @@ -145655,7 +148102,8 @@ 3426617856,3426618367,?? 3426618368,3426646015,US 3426648064,3426655999,US -3426656256,3426671103,US +3426656256,3426661887,US +3426662144,3426671103,US 3426671104,3426671359,GB 3426671360,3426725119,US 3426725120,3426725887,CA @@ -145671,8 +148119,7 @@ 3427127296,3427127551,CA 3427127552,3427130367,US 3427130368,3427130623,CA -3427130880,3427136511,US -3427137024,3427503615,US +3427130880,3427503615,US 3427503616,3427503871,AU 3427503872,3427525887,US 3427525888,3427526143,NL @@ -145871,7 +148318,8 @@ 3432538624,3432538879,DE 3432538880,3432570879,US 3432570880,3432572927,HK -3432572928,3432585215,US +3432572928,3432580863,US +3432581120,3432585215,US 3432585216,3432585727,MX 3432586240,3432613631,US 3432613632,3432613887,CA @@ -145947,9 +148395,15 @@ 3436807168,3436807679,GB 3436807680,3436810239,US 3436810240,3436811263,GB -3436811264,3436827647,US +3436811264,3436816383,US +3436816384,3436818431,BR +3436818432,3436826623,US +3436826624,3436827135,GB +3436827136,3436827647,US 3436827648,3436827903,GB -3436827904,3437297919,US +3436827904,3436830719,US +3436830720,3436831231,GB +3436831232,3437297919,US 3437297920,3437301759,CA 3437301760,3437305855,US 3437305856,3437307391,CA @@ -146032,7 +148486,7 @@ 3438167552,3438167807,PR 3438167808,3438215423,US 3438215424,3438215679,CA -3438215936,3438216191,US +3438215936,3438216191,?? 3438216192,3438217983,CA 3438217984,3438218239,US 3438218240,3438218751,CA @@ -146149,7 +148603,7 @@ 3452186624,3452317695,US 3452317696,3452321791,MO 3452321792,3452338175,US -3452338176,3452342271,AP +3452338176,3452342271,HK 3452342272,3452346367,US 3452346368,3452351487,AP 3452351488,3452352511,US @@ -146173,7 +148627,6 @@ 3452895488,3452902399,CA 3452902400,3452902655,US 3452902656,3452912127,CA -3452912128,3452912383,US 3452912384,3452914175,CA 3452914176,3452914431,US 3452914432,3452919551,CA @@ -146301,7 +148754,8 @@ 3454815744,3454816255,US 3454816256,3454816511,CA 3454816512,3454816767,US -3454816768,3454821631,CA +3454816768,3454821119,CA +3454821376,3454821631,CA 3454821632,3454821887,US 3454821888,3454828287,CA 3454828288,3454828543,US @@ -146330,7 +148784,8 @@ 3456892928,3456958463,CA 3456958464,3457986559,US 3457986560,3457987583,CA -3457987584,3458811903,US +3457987584,3458805759,US +3458809856,3458811903,US 3458811904,3458813951,GB 3458813952,3458818047,CA 3458818048,3458820095,US @@ -146413,7 +148868,15 @@ 3461557504,3461557759,BL 3461557760,3461558015,CA 3461558016,3461558271,VC -3461558272,3461583871,US +3461558272,3461570559,US +3461570560,3461571839,AU +3461571840,3461572607,NZ +3461572608,3461574655,US +3461574656,3461575423,AU +3461575424,3461575935,NZ +3461575936,3461576191,US +3461576192,3461576703,AU +3461576704,3461583871,US 3461583872,3461584383,CA 3461584384,3461808127,US 3461808128,3461873663,CA @@ -146439,15 +148902,16 @@ 3463936000,3463938047,AP 3463938048,3463946239,MO 3463946240,3463947263,US -3463947264,3463948543,HK +3463947264,3463947519,HK +3463947520,3463948287,US +3463948288,3463948543,HK 3463948544,3463948799,US -3463948800,3463949311,HK -3463949312,3463949567,US -3463949568,3463949823,HK -3463949824,3463950079,US +3463948800,3463949055,HK +3463949056,3463950079,US 3463950080,3463950335,HK 3463950336,3463954431,US -3463954432,3463963647,AP +3463954432,3463962623,HK +3463962624,3463963647,AP 3463963648,3463964671,US 3463964672,3463966719,AP 3463966720,3464167423,US @@ -146486,7 +148950,9 @@ 3464426496,3464426751,GD 3464426752,3464429311,US 3464429312,3464429567,CA -3464429568,3464626175,US +3464429568,3464479743,US +3464479744,3464480767,BR +3464480768,3464626175,US 3464626432,3464626687,CA 3464626688,3464627199,GB 3464627200,3464627967,US @@ -146528,7 +148994,8 @@ 3466756096,3466772479,CA 3466772480,3466846207,US 3466846208,3466854399,CA -3466854400,3467037695,US +3466854400,3467036927,US +3467037184,3467037695,US 3467037696,3467038719,PR 3467038720,3467051007,US 3467051008,3467051263,CA @@ -146547,7 +149014,7 @@ 3467132928,3467137023,US 3467141120,3467149311,US 3467155712,3467155967,US -3467160576,3467160831,?? +3467160576,3467160831,US 3467164416,3467165183,US 3467171840,3467173119,US 3467173376,3467175935,US @@ -146622,7 +149089,9 @@ 3470558208,3470559231,HK 3470559232,3470572543,US 3470572544,3470575615,CA -3470575616,3470610431,US +3470575616,3470599423,US +3470599424,3470599679,HK +3470599680,3470610431,US 3470610432,3470614527,AR 3470614528,3470651391,US 3470651392,3470655487,CA @@ -146640,26 +149109,28 @@ 3470749952,3470750207,CA 3470750464,3470752767,US 3470752768,3470753023,CO -3470753024,3470753535,US -3470753536,3470753791,CA -3470753792,3470754047,US +3470753024,3470754047,US 3470754048,3470754303,CA 3470754304,3470754559,PE 3470754560,3470755839,US 3470755840,3470756095,ZA 3470756096,3470761983,US 3470761984,3470770175,CA -3470770176,3470779391,US -3470785792,3470786047,?? +3470770176,3470778367,US 3470786560,3470794751,US 3470794752,3470802943,PA -3470802944,3470884863,US +3470802944,3470857215,US +3470857216,3470858239,AT +3470858240,3470884863,US 3470884864,3470885887,HK -3470886400,3470886655,?? 3470886912,3471322623,US 3471322624,3471323647,GB -3471323648,3471332351,US -3471332352,3471332863,GB +3471323648,3471324159,US +3471324160,3471324671,SG +3471324672,3471331327,US +3471331328,3471332351,BR +3471332352,3471332607,US +3471332608,3471332863,GB 3471332864,3471409151,US 3471409152,3471441919,HK 3471441920,3471638527,US @@ -146724,8 +149195,7 @@ 3478837248,3478841343,US 3478841344,3478842367,CA 3478842368,3478843391,RU -3478843392,3478845439,US -3478846208,3478846975,US +3478843392,3478846975,US 3478846976,3478847487,GP 3478847488,3479207935,US 3479207936,3479240703,CA @@ -146768,7 +149238,8 @@ 3483828224,3483836415,CA 3483836416,3483846655,US 3483846656,3483847679,CA -3483847680,3483849727,US +3483847680,3483848703,US +3483848704,3483849727,AP 3483849728,3483850751,PR 3483850752,3483851775,CA 3483851776,3483852799,KN @@ -146848,7 +149319,9 @@ 3487105024,3487236095,US 3487236096,3487301631,CA 3487301632,3487711231,US -3487711232,3487712767,NL +3487711232,3487712255,NL +3487712256,3487712511,US +3487712512,3487712767,NL 3487712768,3487713023,US 3487713024,3487713279,NL 3487713280,3487842303,US @@ -146860,8 +149333,8 @@ 3487913472,3487913983,CA 3487913984,3487915775,US 3487916032,3487916543,US -3487916544,3487916799,CA -3487916800,3487919615,US +3487916544,3487917055,CA +3487917056,3487919615,US 3487919616,3487920127,CA 3487920128,3487921407,NL 3487921408,3487921663,US @@ -146936,7 +149409,7 @@ 3489345536,3489464319,US 3489464320,3489529855,CA 3489529856,3489562623,US -3489562624,3489564671,?? +3489562624,3489566719,JM 3489566720,3492151295,US 3492151296,3492167679,CA 3492167680,3493105663,US @@ -146980,7 +149453,7 @@ 3494004736,3494014975,US 3494014976,3494017023,CA 3494017024,3494043647,US -3494043648,3494045695,CA +3494044672,3494045695,CA 3494045696,3494046719,JP 3494046720,3494047743,ID 3494047744,3494049791,US @@ -147130,7 +149603,8 @@ 3494917120,3494918143,CA 3494918144,3494928383,US 3494928384,3494930431,CA -3494930432,3494931455,?? +3494930432,3494930943,?? +3494931200,3494931455,?? 3494931456,3494964223,US 3494964224,3494965247,PR 3494965248,3494968319,US @@ -147180,7 +149654,7 @@ 3495153664,3495155711,CA 3495155712,3495175167,US 3495175168,3495176191,CA -3495176192,3495192575,US +3495176192,3495190527,US 3495192576,3495193599,CA 3495193600,3495197695,US 3495197696,3495198719,CA @@ -147203,7 +149677,9 @@ 3495349248,3495350271,CA 3495350272,3495358463,US 3495358464,3495359487,CA -3495359488,3495367679,US +3495359488,3495363583,US +3495363584,3495364607,?? +3495364608,3495367679,US 3495367680,3495368703,CA 3495368704,3495370751,US 3495370752,3495372799,BS @@ -147214,7 +149690,6 @@ 3495400448,3495403519,US 3495403520,3495404031,CA 3495404032,3495404543,US -3495404800,3495405055,?? 3495405056,3495405567,HK 3495405568,3495412735,US 3495412736,3495413759,CA @@ -147294,7 +149769,8 @@ 3495930880,3495931903,CA 3495931904,3495968767,US 3495968768,3495985151,CA -3495985152,3496034303,US +3495985152,3495988223,NI +3495988224,3496034303,US 3496034304,3496050687,CA 3496050688,3496132607,US 3496132608,3496148991,CA @@ -147422,7 +149898,8 @@ 3508772608,3508772863,CA 3508772864,3508776959,PH 3508776960,3508779007,US -3508779008,3508781055,CA +3508779008,3508780031,MX +3508780032,3508781055,CA 3508781056,3508782079,US 3508782080,3508782335,CA 3508782336,3508782591,IL @@ -147510,13 +149987,13 @@ 3512987648,3513188351,US 3513188352,3513204735,CA 3513204736,3513231103,US -3513231104,3513232127,AP +3513231104,3513232127,HK 3513232128,3513232383,US -3513232384,3513232639,AP +3513232384,3513232639,HK 3513232640,3513233407,US -3513233408,3513233663,AP +3513233408,3513233663,HK 3513233664,3513235199,US -3513235200,3513235455,AP +3513235200,3513235455,HK 3513235456,3513270271,US 3513270272,3513286655,CA 3513286656,3513294847,US @@ -147531,14 +150008,22 @@ 3514007552,3514040319,CA 3514040320,3514367999,US 3514368000,3514433535,CA -3514433536,3514761215,US +3514433536,3514590207,US +3514590208,3514590719,NI +3514590720,3514591487,US +3514591488,3514592255,NI +3514592256,3514761215,US 3514761216,3514777599,CA 3514777600,3514779647,US -3514779648,3514786815,CA +3514779648,3514781695,CA +3514781696,3514785791,US +3514785792,3514786815,CA 3514786816,3514787839,US 3514787840,3514796799,CA 3514796800,3514797055,US -3514797056,3514810623,CA +3514797056,3514800127,CA +3514800128,3514802175,US +3514802176,3514810623,CA 3514810624,3514810879,US 3514810880,3514811135,CA 3514811136,3514811391,US @@ -147551,9 +150036,7 @@ 3514813440,3514813695,CA 3514813696,3514815487,US 3514815488,3514815743,CA -3514815744,3514815999,US -3514816000,3514816255,CA -3514816256,3514816511,US +3514815744,3514816511,US 3514816512,3514816767,CA 3514816768,3514817023,US 3514817024,3514817279,CA @@ -147665,7 +150148,9 @@ 3519397888,3519475711,US 3519475712,3519477759,CH 3519477760,3519602687,US -3519602688,3519610879,CA +3519602688,3519604735,CA +3519604736,3519604991,US +3519604992,3519610879,CA 3519610880,3519676415,US 3519676416,3519709183,CA 3519709184,3519725567,US @@ -147738,10 +150223,8 @@ 3520163840,3520164863,RU 3520164864,3520167167,CA 3520167168,3520192511,US -3520192512,3520193023,?? 3520193536,3520193791,?? 3520194560,3520195071,?? -3520197632,3520198655,US 3520199936,3520200447,?? 3520200704,3520356351,US 3520356352,3520364543,ZA @@ -147774,7 +150257,9 @@ 3521028096,3521032191,CA 3521032192,3521044479,US 3521044480,3521048575,CA -3521048576,3521216511,US +3521048576,3521051391,US +3521051392,3521051647,IN +3521051648,3521216511,US 3521216512,3521232895,CA 3521232896,3521249279,US 3521249280,3521314815,CA @@ -147790,7 +150275,9 @@ 3522174976,3522179071,BM 3522179072,3522195455,US 3522195456,3522199551,CA -3522199552,3522854911,US +3522199552,3522347007,US +3522347008,3522349055,IN +3522349056,3522854911,US 3522854912,3522871295,CA 3522871296,3522879487,US 3522879488,3522881535,GB @@ -147876,7 +150363,9 @@ 3523698944,3523699199,SG 3523699200,3523699455,JP 3523699456,3523699711,SG -3523699712,3523739647,JP +3523699712,3523699967,JP +3523699968,3523700223,AU +3523700224,3523739647,JP 3523739648,3523870719,AU 3523870720,3523874559,SG 3523874560,3523887103,AU @@ -148509,7 +150998,7 @@ 3557416960,3557425151,UA 3557425152,3557490687,DK 3557490688,3557507071,FR -3557507072,3557507327,TR +3557507072,3557507327,CH 3557507328,3557510911,GB 3557510912,3557511167,LT 3557511168,3557513215,GB @@ -148537,9 +151026,7 @@ 3557638144,3557646335,MK 3557646336,3557654527,RU 3557654528,3557670911,KZ -3557670912,3557675007,GB -3557675008,3557675519,NL -3557675520,3557679103,GB +3557670912,3557679103,GB 3557679104,3557687295,SI 3557687296,3557703679,PL 3557703680,3557711871,DE @@ -148595,8 +151082,7 @@ 3557977344,3557977599,GE 3557977600,3557978111,GB 3557978112,3557978623,NL -3557978624,3557979135,US -3557979136,3557979391,TR +3557978624,3557979391,US 3557979392,3557979903,RU 3557979904,3557980159,NL 3557980160,3557980415,RU @@ -148692,7 +151178,7 @@ 3558331136,3558331391,RU 3558331392,3558331647,DK 3558331648,3558331903,DE -3558331904,3558332159,TW +3558331904,3558332159,NL 3558332160,3558332415,GB 3558332416,3558332671,IR 3558332672,3558332927,IQ @@ -148790,8 +151276,8 @@ 3558744832,3558745087,ES 3558745088,3558745343,DE 3558745344,3558745599,NL -3558745600,3558746111,LB -3558746112,3558748159,TR +3558745600,3558746879,LB +3558746880,3558748159,TR 3558748160,3558749183,US 3558749184,3558750207,LB 3558750208,3558751231,TR @@ -148958,7 +151444,37 @@ 3559751680,3559759871,IT 3559759872,3559768063,NO 3559768064,3559776255,CH -3559776256,3559792639,RU +3559776256,3559792895,RU +3559792896,3559793151,GB +3559793152,3559793407,EU +3559793408,3559793663,GB +3559793664,3559793919,EU +3559793920,3559794175,GB +3559794176,3559794431,DE +3559794432,3559794687,GB +3559794688,3559794943,IL +3559794944,3559795199,UA +3559795200,3559795455,GB +3559795456,3559795711,NL +3559795712,3559795967,CZ +3559795968,3559796223,IR +3559796224,3559796479,GB +3559796480,3559796735,RU +3559796736,3559796991,UA +3559796992,3559797247,FR +3559797248,3559797503,IT +3559797504,3559797759,SE +3559797760,3559798015,FR +3559798016,3559798271,CZ +3559798272,3559798527,RU +3559798528,3559798783,GR +3559798784,3559799039,KZ +3559799040,3559799551,GB +3559799552,3559799807,US +3559799808,3559800063,IS +3559800064,3559800319,DE +3559800320,3559800575,CZ +3559800576,3559800831,AE 3559800832,3559809023,IT 3559809024,3559814911,DE 3559814912,3559815167,NL @@ -149045,7 +151561,9 @@ 3560183296,3560183551,NO 3560183552,3560183807,PT 3560183808,3560184063,NL -3560184064,3560185087,US +3560184064,3560184575,UA +3560184576,3560184831,IT +3560184832,3560185087,US 3560185088,3560185343,NL 3560185344,3560185855,ID 3560185856,3560194047,LT @@ -149226,11 +151744,14 @@ 3561234432,3561242623,TR 3561242624,3561259007,DE 3561259008,3561267199,IL -3561267200,3561271295,UA -3561271296,3561272319,TR -3561272320,3561275391,UA +3561267200,3561275391,UA 3561275392,3561291775,BE -3561291776,3561297407,RS +3561291776,3561292287,US +3561292288,3561294335,RS +3561294336,3561294847,US +3561294848,3561296383,RS +3561296384,3561296639,US +3561296640,3561297407,RS 3561297408,3561298943,ME 3561298944,3561299967,RS 3561299968,3561308159,GB @@ -149238,7 +151759,7 @@ 3561316352,3561324543,RU 3561324544,3561325567,CZ 3561325568,3561326335,US -3561326336,3561326591,GB +3561326336,3561326591,RU 3561326592,3561328639,IT 3561328640,3561332735,US 3561332736,3561340927,AT @@ -149367,9 +151888,7 @@ 3561975808,3561979903,UA 3561979904,3561988095,ES 3561988096,3562012671,DE -3562012672,3562017791,IR -3562017792,3562018303,ES -3562018304,3562020863,IR +3562012672,3562020863,IR 3562020864,3562029055,UA 3562029056,3562037247,CZ 3562037248,3562045439,CH @@ -149478,9 +151997,10 @@ 3562520576,3562521599,NL 3562521600,3562522623,US 3562522624,3562523647,RO -3562523648,3562524671,BG -3562524672,3562525695,DE -3562525696,3562528767,US +3562523648,3562525695,DE +3562525696,3562526463,US +3562526464,3562526719,DE +3562526720,3562528767,US 3562528768,3562536959,PL 3562536960,3562545151,AT 3562545152,3562553343,GB @@ -149501,7 +152021,8 @@ 3562676224,3562684415,UA 3562684416,3562692607,FI 3562692608,3562693631,RU -3562693632,3562694655,AU +3562693632,3562694143,AU +3562694144,3562694655,US 3562694656,3562695679,EU 3562695680,3562696703,UA 3562696704,3562697727,GB @@ -149611,8 +152132,7 @@ 3563466240,3563466495,GB 3563466496,3563466751,US 3563466752,3563467263,ES -3563467264,3563467519,GB -3563467520,3563467775,JP +3563467264,3563467775,JP 3563467776,3563468287,GB 3563468288,3563468799,IT 3563468800,3563469311,DE @@ -149636,7 +152156,7 @@ 3563482880,3563483135,ES 3563483136,3563483391,AT 3563483392,3563483647,BG -3563483648,3563483903,US +3563483648,3563483903,TR 3563483904,3563484159,BE 3563484160,3563484415,LT 3563484416,3563484927,DE @@ -149646,13 +152166,15 @@ 3563485696,3563485951,IT 3563485952,3563486207,CH 3563486208,3563486463,GB -3563486464,3563486719,RU +3563486464,3563486719,NL 3563486720,3563486975,CH 3563486976,3563487231,DE 3563487232,3563491327,RS -3563491328,3563492351,EE -3563492352,3563493375,BY -3563493376,3563494399,SI +3563491328,3563492095,RU +3563492096,3563492351,EE +3563492352,3563492863,BY +3563492864,3563493887,RU +3563493888,3563494399,SI 3563494400,3563494911,NO 3563494912,3563495167,NZ 3563495168,3563495423,RO @@ -149771,13 +152293,15 @@ 3564060672,3564068863,RU 3564068864,3564077055,ES 3564077056,3564093439,GB -3564093440,3564097279,UA +3564093440,3564095487,UA +3564095488,3564095743,TR +3564095744,3564097279,UA 3564097280,3564097535,TR 3564097536,3564098303,UA 3564098304,3564098559,US 3564098560,3564099583,UA 3564099584,3564100607,US -3564100608,3564101631,TR +3564100608,3564101631,UA 3564101632,3564109823,DE 3564109824,3564126207,SE 3564126208,3564133119,IT @@ -149812,9 +152336,7 @@ 3564198144,3564198399,EU 3564198400,3564198655,BE 3564198656,3564199935,EU -3564199936,3564206079,RU -3564206080,3564207103,TR -3564207104,3564208127,RU +3564199936,3564208127,RU 3564208128,3564216319,GB 3564216320,3564224511,PT 3564224512,3564232703,GB @@ -150080,7 +152602,9 @@ 3565501440,3565501695,IT 3565501696,3565502463,GB 3565502464,3565502719,BE -3565502720,3565503999,GB +3565502720,3565502975,PL +3565502976,3565503231,ES +3565503232,3565503999,GB 3565504000,3565504511,NL 3565504512,3565505023,GB 3565505024,3565505279,EU @@ -150359,16 +152883,20 @@ 3569277440,3569287167,BE 3569287168,3569352703,PL 3569352704,3569354751,RU -3569354752,3569355775,DE +3569354752,3569355775,NL 3569355776,3569356799,RU 3569356800,3569358847,US -3569358848,3569361919,RU +3569358848,3569359871,RU +3569359872,3569360383,US +3569360384,3569360895,NL +3569360896,3569361919,RU 3569361920,3569362943,GB 3569362944,3569405951,RU 3569405952,3569406975,US 3569406976,3569407999,GB -3569408000,3569409023,NL -3569409024,3569410047,GB +3569408000,3569409279,NL +3569409280,3569409791,RU +3569409792,3569410047,GB 3569410048,3569414143,RU 3569414144,3569416191,NL 3569416192,3569418239,GB @@ -150455,13 +152983,17 @@ 3571256576,3571256831,DE 3571256832,3571257343,GB 3571257344,3571258367,DE -3571258368,3571259903,GB +3571258368,3571259391,GB +3571259392,3571259903,DE 3571259904,3571260159,BE 3571260160,3571268863,GB 3571268864,3571269119,ES -3571269120,3571272703,GB +3571269120,3571270911,GB +3571270912,3571271167,IT +3571271168,3571272703,GB 3571272704,3571272959,HK -3571272960,3571273727,GB +3571272960,3571273215,DE +3571273216,3571273727,GB 3571273728,3571274751,DE 3571274752,3571275775,GB 3571275776,3571277823,DE @@ -150698,9 +153230,7 @@ 3574515456,3574515967,EU 3574515968,3574518271,TR 3574518272,3574518783,EU -3574518784,3574519807,TR -3574519808,3574520063,EU -3574520064,3574520319,TR +3574518784,3574520319,TR 3574520320,3574520575,EU 3574520576,3574521087,TR 3574521088,3574521599,EU @@ -150774,8 +153304,8 @@ 3574844928,3574845183,FR 3574845184,3574845439,HR 3574845440,3574845951,NL -3574845952,3574846207,FR -3574846208,3574846719,GB +3574845952,3574846463,FR +3574846464,3574846719,GB 3574846720,3574847231,NL 3574847232,3574857727,GB 3574857728,3574917375,DE @@ -150792,11 +153322,7 @@ 3574984960,3574985215,TR 3574985216,3574985727,LV 3574985728,3574985983,TR -3574985984,3574987519,LV -3574987520,3574987775,TR -3574987776,3574988287,LV -3574988288,3574988543,TR -3574988544,3574988799,LV +3574985984,3574988799,LV 3574988800,3575054335,PT 3575054336,3575119871,DE 3575119872,3575185407,RU @@ -150996,8 +153522,8 @@ 3576999168,3576999423,NL 3576999424,3577000959,GB 3577000960,3577001215,NL -3577001216,3577003007,GB -3577003008,3577003519,NL +3577001216,3577003263,GB +3577003264,3577003519,NL 3577003520,3577020415,GB 3577020416,3577085951,NL 3577085952,3577151487,DE @@ -151185,7 +153711,11 @@ 3579221760,3579222015,DE 3579222016,3579226623,GB 3579226624,3579226879,DE -3579226880,3579237119,GB +3579226880,3579230463,GB +3579230464,3579230719,ES +3579230720,3579232255,GB +3579232256,3579232511,ES +3579232512,3579237119,GB 3579237120,3579237375,IT 3579237376,3579237631,GB 3579237632,3579237887,ES @@ -151776,7 +154306,6 @@ 3583967232,3583969279,TR 3583969280,3583969791,FR 3583969792,3583970815,US -3583970816,3583971327,?? 3583971328,3583973887,NL 3583973888,3583974399,IT 3583974400,3583975423,TR @@ -151801,7 +154330,8 @@ 3583998720,3583998975,RU 3583998976,3583999231,US 3583999232,3583999487,RU -3583999488,3583999999,GB +3583999488,3583999743,GB +3583999744,3583999999,RU 3584000000,3584001023,IE 3584001024,3584004095,US 3584004096,3584008191,CH @@ -152149,7 +154679,9 @@ 3585679360,3585687551,FI 3585687552,3585693183,DE 3585693184,3585693695,US -3585693696,3585696255,GB +3585693696,3585694719,GB +3585694720,3585695743,NL +3585695744,3585696255,GB 3585696256,3585696511,ES 3585696512,3585697279,GB 3585697280,3585697535,NO @@ -152289,8 +154821,8 @@ 3586261504,3586269183,NL 3586269184,3586270207,GB 3586270208,3586270975,ES -3586270976,3586273023,GB -3586273024,3586276351,NL +3586270976,3586273279,GB +3586273280,3586276351,NL 3586276352,3586276863,GB 3586276864,3586277375,NL 3586277376,3586293759,TR @@ -152331,7 +154863,9 @@ 3586545920,3586546175,IQ 3586546176,3586546687,DE 3586546688,3586546943,NL -3586546944,3586555903,DE +3586546944,3586549759,DE +3586549760,3586550015,FR +3586550016,3586555903,DE 3586555904,3586572287,IT 3586572288,3586588671,RS 3586588672,3586596863,IT @@ -152425,24 +154959,34 @@ 3587241728,3587244031,NL 3587244032,3587260415,IT 3587260416,3587277055,DE -3587277056,3587277311,TR -3587277312,3587277823,DE +3587277056,3587277311,MD +3587277312,3587277567,DE +3587277568,3587277823,US 3587277824,3587278079,FI -3587278080,3587278335,MD +3587278080,3587278335,DE 3587278336,3587278591,TR -3587278592,3587278847,DE -3587278848,3587279103,MD +3587278592,3587279103,DE 3587279104,3587279359,US -3587279360,3587280639,DE -3587280640,3587281663,TR -3587281664,3587281919,DE +3587279360,3587279615,DE +3587279616,3587279871,US +3587279872,3587280639,DE +3587280640,3587280895,TR +3587280896,3587281151,IN +3587281152,3587281407,TR +3587281408,3587281663,NL +3587281664,3587281919,TR 3587281920,3587282175,FI 3587282176,3587282431,TR -3587282432,3587283711,DE +3587282432,3587282687,DE +3587282688,3587282943,IN +3587282944,3587283199,US +3587283200,3587283711,DE 3587283712,3587283967,US 3587283968,3587284735,TR 3587284736,3587284991,MD -3587284992,3587286271,IT +3587284992,3587285759,IT +3587285760,3587286015,SS +3587286016,3587286271,IT 3587286272,3587286527,ZM 3587286528,3587287295,IT 3587287296,3587287807,IE @@ -152563,9 +155107,7 @@ 3588387584,3588387839,BR 3588387840,3588388863,TR 3588388864,3588390911,RU -3588390912,3588393983,LT -3588393984,3588394495,LV -3588394496,3588407295,LT +3588390912,3588407295,LT 3588407296,3588423679,CZ 3588423680,3588440063,ES 3588440064,3588456447,PL @@ -152614,8 +155156,7 @@ 3588770816,3588771839,ES 3588771840,3588772863,FR 3588772864,3588773119,DE -3588773120,3588773375,FR -3588773376,3588773631,DE +3588773120,3588773631,AP 3588773632,3588773887,NL 3588773888,3588774911,BG 3588774912,3588775935,US @@ -152660,7 +155201,7 @@ 3588811520,3588811775,MD 3588811776,3588812031,GB 3588812032,3588812287,BG -3588812288,3588812543,DE +3588812288,3588812543,TR 3588812544,3588812799,EE 3588812800,3588813055,RU 3588813056,3588813311,SA @@ -152719,7 +155260,9 @@ 3589259264,3589275647,DE 3589275648,3589283071,RS 3589283072,3589283327,CS -3589283328,3589285631,RS +3589283328,3589283839,RS +3589283840,3589284095,MK +3589284096,3589285631,RS 3589285632,3589285887,CS 3589285888,3589292031,RS 3589292032,3589308415,AT @@ -152895,13 +155438,9 @@ 3590062080,3590078463,DE 3590078464,3590094847,RU 3590094848,3590111231,DE -3590111232,3590112767,LT -3590112768,3590113279,LV -3590113280,3590124287,LT +3590111232,3590124287,LT 3590124288,3590124543,EU -3590124544,3590127103,LT -3590127104,3590127359,EU -3590127360,3590127615,LT +3590124544,3590127615,LT 3590127616,3590143999,GB 3590144000,3590147839,HR 3590147840,3590148095,SI @@ -152983,7 +155522,9 @@ 3624484864,3624525823,US 3624525824,3624529919,?? 3624529920,3624534015,CA -3624534016,3624587263,US +3624534016,3624551679,US +3624551680,3624551935,?? +3624551936,3624587263,US 3624587264,3624591359,JM 3624591360,3624592383,US 3624592384,3624593919,CA @@ -153123,7 +155664,9 @@ 3629588480,3629633535,US 3629633536,3629637631,CA 3629637632,3630292991,US -3630292992,3630297087,CA +3630292992,3630293759,CA +3630293760,3630294527,NL +3630294528,3630297087,CA 3630297088,3630313471,US 3630313472,3630317567,CA 3630317568,3630354431,US @@ -153196,7 +155739,13 @@ 3631901696,3631906815,US 3631906816,3631912959,CA 3631912960,3631915007,US -3631915008,3631923199,CA +3631915008,3631915519,CA +3631915520,3631915775,AP +3631915776,3631916287,US +3631916288,3631920127,CA +3631920128,3631921151,RU +3631921152,3631922175,CA +3631922176,3631923199,RU 3631923200,3631939583,US 3631939584,3632005119,CA 3632005120,3632146943,US @@ -153301,11 +155850,9 @@ 3635048960,3635049215,US 3635049216,3635049471,NL 3635049472,3635049727,US -3635049728,3635049983,CA -3635049984,3635050239,US -3635050240,3635050495,CA -3635050496,3635051519,US -3635051520,3635051775,CA +3635049728,3635050495,CA +3635050496,3635051263,US +3635051264,3635051775,CA 3635051776,3635052031,US 3635052032,3635052287,CA 3635052288,3635109887,US @@ -153364,7 +155911,8 @@ 3635772928,3635773951,CA 3635773952,3635774207,US 3635774208,3635781119,CA -3635781120,3635783167,US +3635781120,3635781631,CH +3635781632,3635783167,US 3635783168,3635799551,CA 3635799552,3635800063,US 3635800064,3635804159,CA @@ -153378,7 +155926,9 @@ 3635904512,3635912703,CA 3635912704,3635924991,US 3635924992,3635929087,MV -3635929088,3636014079,US +3635929088,3636012799,US +3636012800,3636013055,BR +3636013056,3636014079,US 3636014080,3636014591,NL 3636014592,3636019199,US 3636019200,3636027391,CA @@ -153465,7 +156015,7 @@ 3639611392,3639664639,US 3639664640,3639668735,CA 3639668736,3639672831,US -3639672832,3639681023,CO +3639672832,3639681023,CL 3639681024,3639701503,US 3639701504,3639705599,CA 3639705600,3639713791,CY @@ -153492,8 +156042,8 @@ 3640096768,3640098815,FR 3640098816,3640115199,IT 3640115200,3640123391,US -3640123392,3640126463,CA -3640126464,3640126719,US +3640123392,3640125439,CA +3640125440,3640126719,US 3640126720,3640127231,CA 3640127232,3640130559,US 3640130560,3640131071,CA @@ -153505,7 +156055,9 @@ 3640202240,3640205311,US 3640205312,3640209407,BM 3640209408,3640213503,CA -3640213504,3640287231,US +3640213504,3640264703,US +3640264704,3640266751,TM +3640266752,3640287231,US 3640287232,3640287743,HK 3640287744,3640287999,NZ 3640288000,3640288255,US @@ -153781,7 +156333,9 @@ 3642031104,3642032127,GB 3642032128,3642036223,PS 3642036224,3642040319,HU -3642040320,3642048511,BY +3642040320,3642041087,BY +3642041088,3642041343,LV +3642041344,3642048511,BY 3642048512,3642049535,US 3642049536,3642050559,GB 3642050560,3642051583,SG @@ -153853,8 +156407,8 @@ 3642302464,3642306559,SE 3642306560,3642310655,IR 3642310656,3642314751,DE -3642314752,3642316799,RU -3642316800,3642318847,PL +3642314752,3642318591,RU +3642318592,3642318847,PL 3642318848,3642322943,FI 3642322944,3642327039,AT 3642327040,3642331135,DE @@ -153968,7 +156522,9 @@ 3642695680,3642699775,SK 3642699776,3642703871,CZ 3642703872,3642707967,LU -3642707968,3642712063,DE +3642707968,3642711039,DE +3642711040,3642711551,LU +3642711552,3642712063,DE 3642712064,3642716159,NO 3642716160,3642720255,IT 3642720256,3642728447,GB @@ -154290,7 +156846,9 @@ 3645808640,3645812735,DE 3645812736,3645816831,RU 3645816832,3645825023,FI -3645825024,3645829119,RU +3645825024,3645828607,RU +3645828608,3645828863,SA +3645828864,3645829119,EE 3645829120,3645833215,NL 3645833216,3645841407,RU 3645841408,3645845503,BG @@ -154328,14 +156886,15 @@ 3647919104,3647919359,ES 3647919360,3647919615,DE 3647919616,3647920127,GB -3647920128,3647964415,DE +3647920128,3647935999,DE +3647936000,3647936255,NO +3647936256,3647964415,DE 3647964416,3647964671,NO 3647964672,3647965695,DE 3647965696,3647966207,CH 3647966208,3647967231,GB 3647967232,3647967487,BE -3647967488,3647967999,DE -3647968000,3647968255,BE +3647967488,3647968255,DE 3647968256,3647969279,FR 3647969280,3647970303,DE 3647970304,3647971327,FR @@ -154371,7 +156930,9 @@ 3647990272,3647990527,ES 3647990528,3647991039,DE 3647991040,3647991295,ES -3647991296,3647992831,DE +3647991296,3647992063,DE +3647992064,3647992319,GB +3647992320,3647992831,DE 3647992832,3647993343,BE 3647993344,3647993855,DE 3647993856,3647994367,BE @@ -154429,16 +156990,16 @@ 3648126976,3648135423,RU 3648135424,3648135679,NL 3648135680,3648135935,PL -3648135936,3648136191,DE +3648135936,3648136191,US 3648136192,3648136447,NL 3648136448,3648136703,ES 3648136704,3648136959,US 3648136960,3648137215,NL -3648137216,3648137471,GB +3648137216,3648137471,SK 3648137472,3648138239,RU 3648138240,3648138495,ES 3648138496,3648138751,PL -3648138752,3648139007,DE +3648138752,3648139007,SK 3648139008,3648143359,GB 3648143360,3648147455,DE 3648147456,3648151551,SE @@ -154655,15 +157216,14 @@ 3650216960,3650217983,IQ 3650217984,3650219007,NO 3650219008,3650219263,CN -3650219264,3650219519,US -3650219520,3650219775,GB +3650219264,3650219775,GB 3650219776,3650220031,US 3650220032,3650224127,SA 3650224128,3650228735,AT 3650228736,3650228991,EU 3650228992,3650232319,AT -3650232320,3650233343,RU -3650233344,3650236415,DE +3650232320,3650234367,RU +3650234368,3650236415,DE 3650236416,3650238463,EU 3650238464,3650240511,GB 3650240512,3650244607,EE @@ -154958,9 +157518,7 @@ 3651723264,3651723519,IT 3651723520,3651723775,CH 3651723776,3651727359,IT -3651727360,3651728639,RU -3651728640,3651728895,TR -3651728896,3651729407,RU +3651727360,3651729407,RU 3651729408,3651747839,GB 3651747840,3651751935,FI 3651751936,3651756031,RU @@ -155053,7 +157611,8 @@ 3652083712,3652087807,RU 3652087808,3652095999,IT 3652096000,3652100095,BG -3652100096,3652108287,RU +3652100096,3652107263,RU +3652107264,3652108287,NL 3652108288,3652116479,FR 3652116480,3652120575,TM 3652120576,3652124671,GB @@ -155219,6 +157778,18 @@ 3653664768,3653668863,DE 3653668864,3653672959,SE 3653672960,3653677055,RU +3653677056,3653677311,UA +3653677312,3653677567,RO +3653677568,3653678847,UA +3653678848,3653679103,GB +3653679104,3653679359,FR +3653679360,3653679615,DE +3653679616,3653679871,IE +3653679872,3653680127,AT +3653680128,3653680383,JE +3653680384,3653680639,DE +3653680640,3653680895,IR +3653680896,3653681151,DE 3653681152,3653685247,ES 3653685248,3653689343,DK 3653689344,3653693439,LV @@ -155460,8 +158031,8 @@ 3706232832,3706233343,HK 3706233344,3706234367,JP 3706234368,3706237951,HK -3706237952,3706238463,AP -3706238464,3706238975,JP +3706237952,3706238719,AP +3706238720,3706238975,JP 3706238976,3706244095,HK 3706244096,3706244863,JP 3706244864,3706245887,HK @@ -155549,15 +158120,11 @@ 3716184576,3716184831,SG 3716184832,3716185087,JP 3716185088,3716186111,TH -3716186112,3716186367,CN -3716186368,3716186623,NL -3716186624,3716187135,CN -3716187136,3716187647,NL -3716187648,3716189183,CN -3716189184,3716189439,NL -3716189440,3716196863,CN -3716196864,3716197119,NL -3716197120,3716415487,CN +3716186112,3716187903,CN +3716187904,3716188159,NL +3716188160,3716203775,CN +3716203776,3716204031,NL +3716204032,3716415487,CN 3716415488,3716431871,VN 3716431872,3716440063,KR 3716440064,3716444159,JP @@ -155569,8 +158136,8 @@ 3716493312,3716497407,KR 3716497408,3716513791,JP 3716513792,3716530175,KR -3716530176,3716538367,AU -3716538368,3716546559,CN +3716530176,3716542463,AU +3716542464,3716546559,CN 3716546560,3716653055,IN 3716653056,3716653311,US 3716653312,3716676351,IN @@ -155625,7 +158192,7 @@ 3742973952,3742982143,SG 3742982144,3742986239,ID 3742986240,3742988287,AU -3742988288,3742990335,VU +3742988288,3742990335,IQ 3742990336,3743006719,JP 3743006720,3743014911,TH 3743014912,3743016959,AU @@ -155675,8 +158242,8 @@ 3743273984,3743275007,BD 3743275008,3743276031,JP 3743276032,3743277055,IN -3743277056,3743277567,TR -3743277568,3743281151,PK +3743277056,3743280127,PK +3743280128,3743281151,NL 3743281152,3743282175,AU 3743282176,3743283199,JP 3743283200,3743284223,HK diff --git a/src/config/geoip6 b/src/config/geoip6 index 94a55d8398..26ef1f85a2 100644 --- a/src/config/geoip6 +++ b/src/config/geoip6 @@ -7,7 +7,7 @@ # # Location Database Export # -# Generated: Fri, 04 Feb 2022 05:51:31 GMT +# Generated: Fri, 25 Mar 2022 06:19:41 GMT # Vendor: IPFire Project # License: CC BY-SA 4.0 # @@ -277,11 +277,13 @@ 2001:504:97::,2001:504:9b:ffff:ffff:ffff:ffff:ffff,US 2001:504:9c::,2001:504:9c:ffff:ffff:ffff:ffff:ffff,CA 2001:504:9d::,2001:504:a0:ffff:ffff:ffff:ffff:ffff,US -2001:504:100::,2001:504:109:ffff:ffff:ffff:ffff:ffff,US +2001:504:100::,2001:504:102:ffff:ffff:ffff:ffff:ffff,US +2001:504:104::,2001:504:109:ffff:ffff:ffff:ffff:ffff,US 2001:504:110::,2001:504:110:ffff:ffff:ffff:ffff:ffff,US 2001:504:111::,2001:504:111:ffff:ffff:ffff:ffff:ffff,BL 2001:504:112::,2001:504:112:ffff:ffff:ffff:ffff:ffff,CA 2001:504:113::,2001:504:116:ffff:ffff:ffff:ffff:ffff,US +2001:504:117::,2001:504:117:ffff:ffff:ffff:ffff:ffff,CA 2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US 2001:506:8::,2001:506:9:ffff:ffff:ffff:ffff:ffff,US 2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA @@ -301,7 +303,11 @@ 2001:530::,2001:530:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:538::,2001:538:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:548::,2001:548:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:550::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:550::,2001:550:906:ffff:ffff:ffff:ffff:ffff,US +2001:550:907::,2001:550:907:ffff:ffff:ffff:ffff:ffff,CA +2001:550:908::,2001:550:909:ffff:ffff:ffff:ffff:ffff,US +2001:550:90a::,2001:550:90a:ffff:ffff:ffff:ffff:ffff,CA +2001:550:90b::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:558::,2001:560:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:568::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA 2001:570::,2001:570:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -621,7 +627,9 @@ 2001:678:1e0::,2001:678:1e0:ffff:ffff:ffff:ffff:ffff,DE 2001:678:1e1::,2001:678:1e3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:1e4::,2001:678:1e4:ffff:ffff:ffff:ffff:ffff,DE -2001:678:1e5::,2001:678:1eb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:1e5::,2001:678:1e7:ffff:ffff:ffff:ffff:ffff,EU +2001:678:1e8::,2001:678:1e8:ffff:ffff:ffff:ffff:ffff,DE +2001:678:1e9::,2001:678:1eb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:1ec::,2001:678:1ec:ffff:ffff:ffff:ffff:ffff,SI 2001:678:1ed::,2001:678:1ef:ffff:ffff:ffff:ffff:ffff,EU 2001:678:1f0::,2001:678:1f0:ffff:ffff:ffff:ffff:ffff,GB @@ -663,9 +671,7 @@ 2001:678:23c::,2001:678:23c:ffff:ffff:ffff:ffff:ffff,PL 2001:678:23d::,2001:678:23f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:240::,2001:678:240:ffff:ffff:ffff:ffff:ffff,SE -2001:678:241::,2001:678:243:ffff:ffff:ffff:ffff:ffff,EU -2001:678:244::,2001:678:244:ffff:ffff:ffff:ffff:ffff,CZ -2001:678:245::,2001:678:247:ffff:ffff:ffff:ffff:ffff,EU +2001:678:241::,2001:678:247:ffff:ffff:ffff:ffff:ffff,EU 2001:678:248::,2001:678:248:ffff:ffff:ffff:ffff:ffff,DE 2001:678:249::,2001:678:24b:ffff:ffff:ffff:ffff:ffff,EU 2001:678:24c::,2001:678:24c:ffff:ffff:ffff:ffff:ffff,DE @@ -835,7 +841,9 @@ 2001:678:3b0::,2001:678:3b0:ffff:ffff:ffff:ffff:ffff,PL 2001:678:3b1::,2001:678:3b3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:3b4::,2001:678:3b4:ffff:ffff:ffff:ffff:ffff,DE -2001:678:3b5::,2001:678:3bb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:3b5::,2001:678:3b7:ffff:ffff:ffff:ffff:ffff,EU +2001:678:3b8::,2001:678:3b8:ffff:ffff:ffff:ffff:ffff,DE +2001:678:3b9::,2001:678:3bb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:3bc::,2001:678:3bc:ffff:ffff:ffff:ffff:ffff,FR 2001:678:3bd::,2001:678:3bf:ffff:ffff:ffff:ffff:ffff,EU 2001:678:3c0::,2001:678:3c0:ffff:ffff:ffff:ffff:ffff,PL @@ -917,9 +925,7 @@ 2001:678:464::,2001:678:464:ffff:ffff:ffff:ffff:ffff,NO 2001:678:465::,2001:678:467:ffff:ffff:ffff:ffff:ffff,EU 2001:678:468::,2001:678:468:ffff:ffff:ffff:ffff:ffff,UA -2001:678:469::,2001:678:46b:ffff:ffff:ffff:ffff:ffff,EU -2001:678:46c::,2001:678:46c:ffff:ffff:ffff:ffff:ffff,RU -2001:678:46d::,2001:678:46f:ffff:ffff:ffff:ffff:ffff,EU +2001:678:469::,2001:678:46f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:470::,2001:678:470:ffff:ffff:ffff:ffff:ffff,PL 2001:678:471::,2001:678:473:ffff:ffff:ffff:ffff:ffff,EU 2001:678:474::,2001:678:474:ffff:ffff:ffff:ffff:ffff,GB @@ -1107,9 +1113,7 @@ 2001:678:5f0::,2001:678:5f0:ffff:ffff:ffff:ffff:ffff,UA 2001:678:5f1::,2001:678:5f3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:5f4::,2001:678:5f4:ffff:ffff:ffff:ffff:ffff,PS -2001:678:5f5::,2001:678:5f7:ffff:ffff:ffff:ffff:ffff,EU -2001:678:5f8::,2001:678:5f8:ffff:ffff:ffff:ffff:ffff,NL -2001:678:5f9::,2001:678:5fb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:5f5::,2001:678:5fb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:5fc::,2001:678:5fc:ffff:ffff:ffff:ffff:ffff,KG 2001:678:5fd::,2001:678:5ff:ffff:ffff:ffff:ffff:ffff,EU 2001:678:600::,2001:678:600:ffff:ffff:ffff:ffff:ffff,RU @@ -1129,9 +1133,7 @@ 2001:678:61c::,2001:678:61c:ffff:ffff:ffff:ffff:ffff,PL 2001:678:61d::,2001:678:61f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:620::,2001:678:620:ffff:ffff:ffff:ffff:ffff,PL -2001:678:621::,2001:678:623:ffff:ffff:ffff:ffff:ffff,EU -2001:678:624::,2001:678:624:ffff:ffff:ffff:ffff:ffff,RU -2001:678:625::,2001:678:627:ffff:ffff:ffff:ffff:ffff,EU +2001:678:621::,2001:678:627:ffff:ffff:ffff:ffff:ffff,EU 2001:678:628::,2001:678:628:ffff:ffff:ffff:ffff:ffff,PL 2001:678:629::,2001:678:62b:ffff:ffff:ffff:ffff:ffff,EU 2001:678:62c::,2001:678:62c:ffff:ffff:ffff:ffff:ffff,RU @@ -1185,7 +1187,9 @@ 2001:678:694::,2001:678:694:ffff:ffff:ffff:ffff:ffff,SE 2001:678:695::,2001:678:697:ffff:ffff:ffff:ffff:ffff,EU 2001:678:698::,2001:678:698:ffff:ffff:ffff:ffff:ffff,NL -2001:678:699::,2001:678:69f:ffff:ffff:ffff:ffff:ffff,EU +2001:678:699::,2001:678:69b:ffff:ffff:ffff:ffff:ffff,EU +2001:678:69c::,2001:678:69c:ffff:ffff:ffff:ffff:ffff,NO +2001:678:69d::,2001:678:69f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:6a0::,2001:678:6a0:ffff:ffff:ffff:ffff:ffff,NL 2001:678:6a1::,2001:678:6a3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:6a4::,2001:678:6a4:ffff:ffff:ffff:ffff:ffff,SE @@ -1227,9 +1231,7 @@ 2001:678:708::,2001:678:708:ffff:ffff:ffff:ffff:ffff,UA 2001:678:709::,2001:678:70f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:710::,2001:678:710:ffff:ffff:ffff:ffff:ffff,DE -2001:678:711::,2001:678:713:ffff:ffff:ffff:ffff:ffff,EU -2001:678:714::,2001:678:714:ffff:ffff:ffff:ffff:ffff,RU -2001:678:715::,2001:678:717:ffff:ffff:ffff:ffff:ffff,EU +2001:678:711::,2001:678:717:ffff:ffff:ffff:ffff:ffff,EU 2001:678:718::,2001:678:718:ffff:ffff:ffff:ffff:ffff,GB 2001:678:719::,2001:678:71b:ffff:ffff:ffff:ffff:ffff,EU 2001:678:71c::,2001:678:71c:ffff:ffff:ffff:ffff:ffff,BE @@ -1327,9 +1329,7 @@ 2001:678:7d4::,2001:678:7d4:ffff:ffff:ffff:ffff:ffff,DE 2001:678:7d5::,2001:678:7d7:ffff:ffff:ffff:ffff:ffff,EU 2001:678:7d8::,2001:678:7d8:ffff:ffff:ffff:ffff:ffff,RU -2001:678:7d9::,2001:678:7db:ffff:ffff:ffff:ffff:ffff,EU -2001:678:7dc::,2001:678:7dc:ffff:ffff:ffff:ffff:ffff,RO -2001:678:7dd::,2001:678:7df:ffff:ffff:ffff:ffff:ffff,EU +2001:678:7d9::,2001:678:7df:ffff:ffff:ffff:ffff:ffff,EU 2001:678:7e0::,2001:678:7e0:ffff:ffff:ffff:ffff:ffff,BG 2001:678:7e1::,2001:678:7e3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:7e4::,2001:678:7e4:ffff:ffff:ffff:ffff:ffff,BG @@ -1531,7 +1531,9 @@ 2001:678:980::,2001:678:980:ffff:ffff:ffff:ffff:ffff,DE 2001:678:981::,2001:678:983:ffff:ffff:ffff:ffff:ffff,EU 2001:678:984::,2001:678:984:ffff:ffff:ffff:ffff:ffff,FR -2001:678:985::,2001:678:98b:ffff:ffff:ffff:ffff:ffff,EU +2001:678:985::,2001:678:987:ffff:ffff:ffff:ffff:ffff,EU +2001:678:988::,2001:678:988:ffff:ffff:ffff:ffff:ffff,TW +2001:678:989::,2001:678:98b:ffff:ffff:ffff:ffff:ffff,EU 2001:678:98c::,2001:678:98c:ffff:ffff:ffff:ffff:ffff,DE 2001:678:98d::,2001:678:98f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:990::,2001:678:990:ffff:ffff:ffff:ffff:ffff,DE @@ -1577,7 +1579,9 @@ 2001:678:9e0::,2001:678:9e0:ffff:ffff:ffff:ffff:ffff,NO 2001:678:9e1::,2001:678:9e3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:9e4::,2001:678:9e4:ffff:ffff:ffff:ffff:ffff,CH -2001:678:9e5::,2001:678:9eb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:9e5::,2001:678:9e7:ffff:ffff:ffff:ffff:ffff,EU +2001:678:9e8::,2001:678:9e8:ffff:ffff:ffff:ffff:ffff,RU +2001:678:9e9::,2001:678:9eb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:9ec::,2001:678:9ec:ffff:ffff:ffff:ffff:ffff,DK 2001:678:9ed::,2001:678:9ef:ffff:ffff:ffff:ffff:ffff,EU 2001:678:9f0::,2001:678:9f0:ffff:ffff:ffff:ffff:ffff,DE @@ -1795,7 +1799,9 @@ 2001:678:bb0::,2001:678:bb0:ffff:ffff:ffff:ffff:ffff,GB 2001:678:bb1::,2001:678:bb3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:bb4::,2001:678:bb4:ffff:ffff:ffff:ffff:ffff,PL -2001:678:bb5::,2001:678:bbb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:bb5::,2001:678:bb7:ffff:ffff:ffff:ffff:ffff,EU +2001:678:bb8::,2001:678:bb8:ffff:ffff:ffff:ffff:ffff,RU +2001:678:bb9::,2001:678:bbb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:bbc::,2001:678:bbc:ffff:ffff:ffff:ffff:ffff,DE 2001:678:bbd::,2001:678:bbf:ffff:ffff:ffff:ffff:ffff,EU 2001:678:bc0::,2001:678:bc0:ffff:ffff:ffff:ffff:ffff,FR @@ -1862,7 +1868,7 @@ 2001:678:c3d::,2001:678:c3f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:c40::,2001:678:c40:ffff:ffff:ffff:ffff:ffff,GB 2001:678:c41::,2001:678:c43:ffff:ffff:ffff:ffff:ffff,EU -2001:678:c44::,2001:678:c44:ffff:ffff:ffff:ffff:ffff,BE +2001:678:c44::,2001:678:c44:ffff:ffff:ffff:ffff:ffff,US 2001:678:c45::,2001:678:c47:ffff:ffff:ffff:ffff:ffff,EU 2001:678:c48::,2001:678:c48:ffff:ffff:ffff:ffff:ffff,DE 2001:678:c49::,2001:678:c4b:ffff:ffff:ffff:ffff:ffff,EU @@ -2011,7 +2017,9 @@ 2001:678:d7c::,2001:678:d7c:ffff:ffff:ffff:ffff:ffff,DE 2001:678:d7d::,2001:678:d7f:ffff:ffff:ffff:ffff:ffff,EU 2001:678:d80::,2001:678:d80:ffff:ffff:ffff:ffff:ffff,LV -2001:678:d81::,2001:678:d87:ffff:ffff:ffff:ffff:ffff,EU +2001:678:d81::,2001:678:d83:ffff:ffff:ffff:ffff:ffff,EU +2001:678:d84::,2001:678:d84:ffff:ffff:ffff:ffff:ffff,DE +2001:678:d85::,2001:678:d87:ffff:ffff:ffff:ffff:ffff,EU 2001:678:d88::,2001:678:d88:ffff:ffff:ffff:ffff:ffff,IR 2001:678:d89::,2001:678:d8b:ffff:ffff:ffff:ffff:ffff,EU 2001:678:d8c::,2001:678:d8c:ffff:ffff:ffff:ffff:ffff,GB @@ -2165,15 +2173,11 @@ 2001:678:ec0::,2001:678:ec0:ffff:ffff:ffff:ffff:ffff,CH 2001:678:ec1::,2001:678:ec3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:ec4::,2001:678:ec4:ffff:ffff:ffff:ffff:ffff,CH -2001:678:ec5::,2001:678:ec7:ffff:ffff:ffff:ffff:ffff,EU -2001:678:ec8::,2001:678:ec8:ffff:ffff:ffff:ffff:ffff,DE -2001:678:ec9::,2001:678:ecb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:ec5::,2001:678:ecb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:ecc::,2001:678:ecc:ffff:ffff:ffff:ffff:ffff,RO 2001:678:ecd::,2001:678:ecf:ffff:ffff:ffff:ffff:ffff,EU 2001:678:ed0::,2001:678:ed0:ffff:ffff:ffff:ffff:ffff,DE -2001:678:ed1::,2001:678:ed3:ffff:ffff:ffff:ffff:ffff,EU -2001:678:ed4::,2001:678:ed4:ffff:ffff:ffff:ffff:ffff,RU -2001:678:ed5::,2001:678:ed7:ffff:ffff:ffff:ffff:ffff,EU +2001:678:ed1::,2001:678:ed7:ffff:ffff:ffff:ffff:ffff,EU 2001:678:ed8::,2001:678:ed8:ffff:ffff:ffff:ffff:ffff,QA 2001:678:ed9::,2001:678:edb:ffff:ffff:ffff:ffff:ffff,EU 2001:678:edc::,2001:678:edc:ffff:ffff:ffff:ffff:ffff,SE @@ -2305,7 +2309,9 @@ 2001:678:fe4::,2001:678:fe4:ffff:ffff:ffff:ffff:ffff,NL 2001:678:fe5::,2001:678:fe7:ffff:ffff:ffff:ffff:ffff,EU 2001:678:fe8::,2001:678:fe8:ffff:ffff:ffff:ffff:ffff,NL -2001:678:fe9::,2001:678:fef:ffff:ffff:ffff:ffff:ffff,EU +2001:678:fe9::,2001:678:feb:ffff:ffff:ffff:ffff:ffff,EU +2001:678:fec::,2001:678:fec:ffff:ffff:ffff:ffff:ffff,DE +2001:678:fed::,2001:678:fef:ffff:ffff:ffff:ffff:ffff,EU 2001:678:ff0::,2001:678:ff0:ffff:ffff:ffff:ffff:ffff,DE 2001:678:ff1::,2001:678:ff3:ffff:ffff:ffff:ffff:ffff,EU 2001:678:ff4::,2001:678:ff4:ffff:ffff:ffff:ffff:ffff,ES @@ -2635,9 +2641,7 @@ 2001:67c:284::,2001:67c:284:ffff:ffff:ffff:ffff:ffff,CZ 2001:67c:285::,2001:67c:287:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:288::,2001:67c:288:ffff:ffff:ffff:ffff:ffff,FR -2001:67c:289::,2001:67c:28b:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:28c::,2001:67c:28c:ffff:ffff:ffff:ffff:ffff,NL -2001:67c:28d::,2001:67c:28f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:289::,2001:67c:28f:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:290::,2001:67c:290:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:291::,2001:67c:293:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:294::,2001:67c:294:ffff:ffff:ffff:ffff:ffff,NL @@ -2741,9 +2745,7 @@ 2001:67c:358::,2001:67c:358:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:359::,2001:67c:35b:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:35c::,2001:67c:35c:ffff:ffff:ffff:ffff:ffff,SE -2001:67c:35d::,2001:67c:35f:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:360::,2001:67c:360:ffff:ffff:ffff:ffff:ffff,GB -2001:67c:361::,2001:67c:363:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:35d::,2001:67c:363:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:364::,2001:67c:364:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:365::,2001:67c:367:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:368::,2001:67c:368:ffff:ffff:ffff:ffff:ffff,LV @@ -2837,9 +2839,7 @@ 2001:67c:420::,2001:67c:420:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:421::,2001:67c:423:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:424::,2001:67c:424:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:425::,2001:67c:427:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:428::,2001:67c:428:ffff:ffff:ffff:ffff:ffff,RU -2001:67c:429::,2001:67c:42b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:425::,2001:67c:42b:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:42c::,2001:67c:42c:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:42d::,2001:67c:42f:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:430::,2001:67c:430:ffff:ffff:ffff:ffff:ffff,RU @@ -3463,7 +3463,53 @@ 2001:67c:920::,2001:67c:920:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:921::,2001:67c:923:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:924::,2001:67c:924:ffff:ffff:ffff:ffff:ffff,CH -2001:67c:925::,2001:67c:fff:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:925::,2001:67c:92b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:92c::,2001:67c:92c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:92d::,2001:67c:92f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:930::,2001:67c:930:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:931::,2001:67c:933:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:934::,2001:67c:934:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:935::,2001:67c:937:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:938::,2001:67c:938:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:939::,2001:67c:93b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:93c::,2001:67c:93c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:93d::,2001:67c:93f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:940::,2001:67c:940:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:941::,2001:67c:943:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:944::,2001:67c:944:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:945::,2001:67c:947:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:948::,2001:67c:948:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:949::,2001:67c:94b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:94c::,2001:67c:94c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:94d::,2001:67c:94f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:950::,2001:67c:950:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:951::,2001:67c:953:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:954::,2001:67c:954:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:955::,2001:67c:957:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:958::,2001:67c:958:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:959::,2001:67c:95b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:95c::,2001:67c:95c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:95d::,2001:67c:95f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:960::,2001:67c:960:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:961::,2001:67c:963:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:964::,2001:67c:964:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:965::,2001:67c:967:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:968::,2001:67c:968:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:969::,2001:67c:96b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:96c::,2001:67c:96c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:96d::,2001:67c:96f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:970::,2001:67c:970:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:971::,2001:67c:973:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:974::,2001:67c:974:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:975::,2001:67c:977:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:978::,2001:67c:978:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:979::,2001:67c:97b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:97c::,2001:67c:97c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:97d::,2001:67c:97f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:980::,2001:67c:980:ffff:ffff:ffff:ffff:ffff,LT +2001:67c:981::,2001:67c:983:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:984::,2001:67c:984:ffff:ffff:ffff:ffff:ffff,LT +2001:67c:985::,2001:67c:fff:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:1000::,2001:67c:1001:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:1002::,2001:67c:1007:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:1008::,2001:67c:1009:ffff:ffff:ffff:ffff:ffff,RU @@ -3757,9 +3803,7 @@ 2001:67c:12a0::,2001:67c:12a0:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:12a1::,2001:67c:12a3:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:12a4::,2001:67c:12a4:ffff:ffff:ffff:ffff:ffff,TR -2001:67c:12a5::,2001:67c:12a7:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:12a8::,2001:67c:12a8:ffff:ffff:ffff:ffff:ffff,FI -2001:67c:12a9::,2001:67c:12ab:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:12a5::,2001:67c:12ab:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:12ac::,2001:67c:12ac:ffff:ffff:ffff:ffff:ffff,LU 2001:67c:12ad::,2001:67c:12af:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:12b0::,2001:67c:12b0:ffff:ffff:ffff:ffff:ffff,SE @@ -4445,9 +4489,7 @@ 2001:67c:1940::,2001:67c:1940:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:1941::,2001:67c:1943:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:1944::,2001:67c:1944:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:1945::,2001:67c:1947:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:1948::,2001:67c:1948:ffff:ffff:ffff:ffff:ffff,UA -2001:67c:1949::,2001:67c:194b:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:1945::,2001:67c:194b:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:194c::,2001:67c:194c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:194d::,2001:67c:194f:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:1950::,2001:67c:1950:ffff:ffff:ffff:ffff:ffff,DE @@ -4493,9 +4535,7 @@ 2001:67c:19a0::,2001:67c:19a0:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:19a1::,2001:67c:19a3:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:19a4::,2001:67c:19a4:ffff:ffff:ffff:ffff:ffff,SE -2001:67c:19a5::,2001:67c:19a7:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:19a8::,2001:67c:19a8:ffff:ffff:ffff:ffff:ffff,RO -2001:67c:19a9::,2001:67c:19ab:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:19a5::,2001:67c:19ab:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:19ac::,2001:67c:19ac:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:19ad::,2001:67c:19af:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:19b0::,2001:67c:19b3:ffff:ffff:ffff:ffff:ffff,FI @@ -4969,9 +5009,7 @@ 2001:67c:2280::,2001:67c:2280:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2281::,2001:67c:2287:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2288::,2001:67c:2288:ffff:ffff:ffff:ffff:ffff,SI -2001:67c:2289::,2001:67c:228b:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:228c::,2001:67c:228c:ffff:ffff:ffff:ffff:ffff,RO -2001:67c:228d::,2001:67c:228f:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:2289::,2001:67c:228f:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2290::,2001:67c:2290:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2291::,2001:67c:2293:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2294::,2001:67c:2294:ffff:ffff:ffff:ffff:ffff,ES @@ -5627,9 +5665,7 @@ 2001:67c:27f8::,2001:67c:27f8:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:27f9::,2001:67c:27fb:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:27fc::,2001:67c:27fc:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:27fd::,2001:67c:27ff:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:2800::,2001:67c:2800:ffff:ffff:ffff:ffff:ffff,CH -2001:67c:2801::,2001:67c:2803:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:27fd::,2001:67c:2803:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2804::,2001:67c:2804:ffff:ffff:ffff:ffff:ffff,PL 2001:67c:2805::,2001:67c:2807:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2808::,2001:67c:2808:ffff:ffff:ffff:ffff:ffff,PL @@ -6119,13 +6155,9 @@ 2001:67c:2be0::,2001:67c:2be0:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:2be1::,2001:67c:2be3:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2be4::,2001:67c:2be4:ffff:ffff:ffff:ffff:ffff,RU -2001:67c:2be5::,2001:67c:2be7:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:2be8::,2001:67c:2be8:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:2be9::,2001:67c:2beb:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:2be5::,2001:67c:2beb:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2bec::,2001:67c:2bec:ffff:ffff:ffff:ffff:ffff,PL -2001:67c:2bed::,2001:67c:2bef:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:2bf0::,2001:67c:2bf0:ffff:ffff:ffff:ffff:ffff,UA -2001:67c:2bf1::,2001:67c:2bf3:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:2bed::,2001:67c:2bf3:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2bf4::,2001:67c:2bf4:ffff:ffff:ffff:ffff:ffff,KG 2001:67c:2bf5::,2001:67c:2bf7:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2bf8::,2001:67c:2bf8:ffff:ffff:ffff:ffff:ffff,SE @@ -6295,9 +6327,7 @@ 2001:67c:2d78::,2001:67c:2d78:ffff:ffff:ffff:ffff:ffff,NL 2001:67c:2d79::,2001:67c:2d7b:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2d7c::,2001:67c:2d7c:ffff:ffff:ffff:ffff:ffff,SE -2001:67c:2d7d::,2001:67c:2d7f:ffff:ffff:ffff:ffff:ffff,EU -2001:67c:2d80::,2001:67c:2d80:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:2d81::,2001:67c:2d83:ffff:ffff:ffff:ffff:ffff,EU +2001:67c:2d7d::,2001:67c:2d83:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2d84::,2001:67c:2d84:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2d85::,2001:67c:2d87:ffff:ffff:ffff:ffff:ffff,EU 2001:67c:2d88::,2001:67c:2d88:ffff:ffff:ffff:ffff:ffff,DE @@ -6783,8 +6813,8 @@ 2001:7f0:191::,2001:7f0:1cf:ffff:ffff:ffff:ffff:ffff,EU 2001:7f0:1d0::,2001:7f0:1d0:ffff:ffff:ffff:ffff:ffff,DE 2001:7f0:1d1::,2001:7f0:1ef:ffff:ffff:ffff:ffff:ffff,EU -2001:7f0:1f0::,2001:7f0:1f0:ffff:ffff:ffff:ffff:ffff,DE -2001:7f0:1f1::,2001:7f0:1ff:ffff:ffff:ffff:ffff:ffff,EU +2001:7f0:1f0::,2001:7f0:1f1:ffff:ffff:ffff:ffff:ffff,DE +2001:7f0:1f2::,2001:7f0:1ff:ffff:ffff:ffff:ffff:ffff,EU 2001:7f0:200::,2001:7f0:200:ffff:ffff:ffff:ffff:ffff,DE 2001:7f0:201::,2001:7f0:fff:ffff:ffff:ffff:ffff:ffff,EU 2001:7f0:1000::,2001:7f0:1000:ffff:ffff:ffff:ffff:ffff,DE @@ -6990,7 +7020,7 @@ 2001:7f8:c6::,2001:7f8:c6:ffff:ffff:ffff:ffff:ffff,ES 2001:7f8:c7::,2001:7f8:c7:ffff:ffff:ffff:ffff:ffff,PT 2001:7f8:c8::,2001:7f8:c9:ffff:ffff:ffff:ffff:ffff,RU -2001:7f8:ca::,2001:7f8:ca:ffff:ffff:ffff:ffff:ffff,EU +2001:7f8:ca::,2001:7f8:ca:ffff:ffff:ffff:ffff:ffff,CH 2001:7f8:cb::,2001:7f8:cb:ffff:ffff:ffff:ffff:ffff,MK 2001:7f8:cc::,2001:7f8:cc:ffff:ffff:ffff:ffff:ffff,CH 2001:7f8:cd::,2001:7f8:cd:ffff:ffff:ffff:ffff:ffff,NL @@ -7078,7 +7108,13 @@ 2001:7f8:120::,2001:7f8:120:ffff:ffff:ffff:ffff:ffff,NO 2001:7f8:121::,2001:7f8:121:ffff:ffff:ffff:ffff:ffff,ES 2001:7f8:122::,2001:7f8:122:ffff:ffff:ffff:ffff:ffff,FI -2001:7f8:123::,2001:7f8:ffff:ffff:ffff:ffff:ffff:ffff,EU +2001:7f8:123::,2001:7f8:123:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:124::,2001:7f8:124:ffff:ffff:ffff:ffff:ffff,SK +2001:7f8:125::,2001:7f8:125:ffff:ffff:ffff:ffff:ffff,EE +2001:7f8:126::,2001:7f8:126:ffff:ffff:ffff:ffff:ffff,LV +2001:7f8:127::,2001:7f8:127:ffff:ffff:ffff:ffff:ffff,ES +2001:7f8:128::,2001:7f8:128:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:129::,2001:7f8:ffff:ffff:ffff:ffff:ffff:ffff,EU 2001:7f9::,2001:7f9:0:ffff:ffff:ffff:ffff:ffff,PL 2001:7f9:1::,2001:7f9:3:ffff:ffff:ffff:ffff:ffff,EU 2001:7f9:4::,2001:7f9:4:ffff:ffff:ffff:ffff:ffff,AL @@ -7171,9 +7207,7 @@ 2001:920:c00::,2001:920:17ff:ffff:ffff:ffff:ffff:ffff,GB 2001:920:1800::,2001:920:1811:ffff:ffff:ffff:ffff:ffff,DE 2001:920:1812::,2001:920:1812:ffff:ffff:ffff:ffff:ffff,CH -2001:920:1813::,2001:920:1821:ffff:ffff:ffff:ffff:ffff,DE -2001:920:1822::,2001:920:1822:ffff:ffff:ffff:ffff:ffff,FR -2001:920:1823::,2001:920:1846:ffff:ffff:ffff:ffff:ffff,DE +2001:920:1813::,2001:920:1846:ffff:ffff:ffff:ffff:ffff,DE 2001:920:1847::,2001:920:1847:ffff:ffff:ffff:ffff:ffff,GB 2001:920:1848::,2001:920:184b:ffff:ffff:ffff:ffff:ffff,DE 2001:920:184c::,2001:920:184c:ffff:ffff:ffff:ffff:ffff,GB @@ -7289,8 +7323,8 @@ 2001:920:400f::,2001:920:4011:ffff:ffff:ffff:ffff:ffff,GB 2001:920:4012::,2001:920:4013:ffff:ffff:ffff:ffff:ffff,BE 2001:920:4014::,2001:920:4015:ffff:ffff:ffff:ffff:ffff,GB -2001:920:4016::,2001:920:4017:ffff:ffff:ffff:ffff:ffff,BE -2001:920:4018::,2001:920:4018:ffff:ffff:ffff:ffff:ffff,GB +2001:920:4016::,2001:920:4016:ffff:ffff:ffff:ffff:ffff,BE +2001:920:4017::,2001:920:4018:ffff:ffff:ffff:ffff:ffff,GB 2001:920:4019::,2001:920:4019:ffff:ffff:ffff:ffff:ffff,BE 2001:920:401a::,2001:920:401b:ffff:ffff:ffff:ffff:ffff,GB 2001:920:401c::,2001:920:401c:ffff:ffff:ffff:ffff:ffff,BE @@ -7333,8 +7367,8 @@ 2001:920:6001::,2001:920:6021:ffff:ffff:ffff:ffff:ffff,GB 2001:920:6022::,2001:920:6022:ffff:ffff:ffff:ffff:ffff,IT 2001:920:6023::,2001:920:6026:ffff:ffff:ffff:ffff:ffff,GB -2001:920:6027::,2001:920:6029:ffff:ffff:ffff:ffff:ffff,IT -2001:920:602a::,2001:920:602f:ffff:ffff:ffff:ffff:ffff,GB +2001:920:6027::,2001:920:6028:ffff:ffff:ffff:ffff:ffff,IT +2001:920:6029::,2001:920:602f:ffff:ffff:ffff:ffff:ffff,GB 2001:920:6030::,2001:920:6031:ffff:ffff:ffff:ffff:ffff,IT 2001:920:6032::,2001:920:6033:ffff:ffff:ffff:ffff:ffff,GB 2001:920:6034::,2001:920:6034:ffff:ffff:ffff:ffff:ffff,IT @@ -7369,8 +7403,8 @@ 2001:920:684a::,2001:920:6860:ffff:ffff:ffff:ffff:ffff,GB 2001:920:6861::,2001:920:6861:ffff:ffff:ffff:ffff:ffff,CH 2001:920:6862::,2001:920:68bf:ffff:ffff:ffff:ffff:ffff,GB -2001:920:68c0::,2001:920:68c2:ffff:ffff:ffff:ffff:ffff,CH -2001:920:68c3::,2001:920:6fff:ffff:ffff:ffff:ffff:ffff,GB +2001:920:68c0::,2001:920:68c1:ffff:ffff:ffff:ffff:ffff,CH +2001:920:68c2::,2001:920:6fff:ffff:ffff:ffff:ffff:ffff,GB 2001:920:7000::,2001:920:701f:ffff:ffff:ffff:ffff:ffff,FR 2001:920:7020::,2001:920:70a9:ffff:ffff:ffff:ffff:ffff,GB 2001:920:70aa::,2001:920:70aa:ffff:ffff:ffff:ffff:ffff,FR @@ -7461,8 +7495,7 @@ 2001:978:2402::,2001:978:2402:ffff:ffff:ffff:ffff:ffff,GB 2001:978:2403::,2001:978:27ff:ffff:ffff:ffff:ffff:ffff,DE 2001:978:2800::,2001:978:2800:ffff:ffff:ffff:ffff:ffff,HR -2001:978:2801::,2001:978:29ff:ffff:ffff:ffff:ffff:ffff,DE -2001:978:2a00::,2001:978:2a00:ffff:ffff:ffff:ffff:ffff,IE +2001:978:2801::,2001:978:2a00:ffff:ffff:ffff:ffff:ffff,DE 2001:978:2a01::,2001:978:2a01:ffff:ffff:ffff:ffff:ffff,GB 2001:978:2a02::,2001:978:2a02:ffff:ffff:ffff:ffff:ffff,IE 2001:978:2a03::,2001:978:2c01:ffff:ffff:ffff:ffff:ffff,DE @@ -7512,8 +7545,8 @@ 2001:978:7301::,2001:978:73ff:ffff:ffff:ffff:ffff:ffff,DE 2001:978:7400::,2001:978:7401:ffff:ffff:ffff:ffff:ffff,FI 2001:978:7402::,2001:978:74ff:ffff:ffff:ffff:ffff:ffff,DE -2001:978:7500::,2001:978:7501:ffff:ffff:ffff:ffff:ffff,ES -2001:978:7502::,2001:978:7600:ffff:ffff:ffff:ffff:ffff,DE +2001:978:7500::,2001:978:7500:ffff:ffff:ffff:ffff:ffff,ES +2001:978:7501::,2001:978:7600:ffff:ffff:ffff:ffff:ffff,DE 2001:978:7601::,2001:978:7601:ffff:ffff:ffff:ffff:ffff,NL 2001:978:7602::,2001:978:86ff:ffff:ffff:ffff:ffff:ffff,DE 2001:978:8700::,2001:978:8700:ffff:ffff:ffff:ffff:ffff,CH @@ -7576,11 +7609,7 @@ 2001:a69::,2001:a6f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2001:a70::,2001:a70:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:a71::,2001:a77:ffff:ffff:ffff:ffff:ffff:ffff,EU -2001:a78::,2001:a7a:ff03:ffff:ffff:ffff:ffff:ffff,DE -2001:a7a:ff04::,2001:a7a:ff04:ffff:ffff:ffff:ffff:ffff,CH -2001:a7a:ff05::,2001:a7a:ff06:ffff:ffff:ffff:ffff:ffff,DE -2001:a7a:ff07::,2001:a7a:ff07:ffff:ffff:ffff:ffff:ffff,CH -2001:a7a:ff08::,2001:a7a:ff14:ffff:ffff:ffff:ffff:ffff,DE +2001:a78::,2001:a7a:ff14:ffff:ffff:ffff:ffff:ffff,DE 2001:a7a:ff15::,2001:a7a:ff15:ffff:ffff:ffff:ffff:ffff,CH 2001:a7a:ff16::,2001:a7a:ff1f:ffff:ffff:ffff:ffff:ffff,DE 2001:a7a:ff20::,2001:a7a:ff20:ffff:ffff:ffff:ffff:ffff,CH @@ -7979,9 +8008,7 @@ 2001:de8:1b::,2001:de8:1c:ffff:ffff:ffff:ffff:ffff,AU 2001:de8:1d::,2001:de8:1d:ffff:ffff:ffff:ffff:ffff,KH 2001:de8:1e::,2001:de8:1e:ffff:ffff:ffff:ffff:ffff,JP -2001:de8:1f::,2001:de8:3fff:ffff:ffff:ffff:ffff:ffff,AU -2001:de8:4000::,2001:de8:4000:ffff:ffff:ffff:ffff:ffff,IN -2001:de8:4001::,2001:de8:7fff:ffff:ffff:ffff:ffff:ffff,AU +2001:de8:1f::,2001:de8:7fff:ffff:ffff:ffff:ffff:ffff,AU 2001:de8:8000::,2001:de8:8000:ffff:ffff:ffff:ffff:ffff,WS 2001:de8:8001::,2001:de8:bfff:ffff:ffff:ffff:ffff:ffff,AU 2001:de8:c000::,2001:de8:c000:ffff:ffff:ffff:ffff:ffff,IN @@ -9049,131 +9076,283 @@ 2001:df0:6740::,2001:df0:6740:ffff:ffff:ffff:ffff:ffff,IN 2001:df0:6741::,2001:df0:677f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6780::,2001:df0:6780:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:6781::,2001:df0:67ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6781::,2001:df0:67bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:67c0::,2001:df0:67c0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:67c1::,2001:df0:67ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP -2001:df0:6801::,2001:df0:687f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6801::,2001:df0:683f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6840::,2001:df0:6840:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:6841::,2001:df0:687f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6880::,2001:df0:6880:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:6881::,2001:df0:697f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6881::,2001:df0:68bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:68c0::,2001:df0:68c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:68c1::,2001:df0:693f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6940::,2001:df0:6940:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:6941::,2001:df0:697f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6980::,2001:df0:6980:ffff:ffff:ffff:ffff:ffff,VN -2001:df0:6981::,2001:df0:69ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6981::,2001:df0:69bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:69c0::,2001:df0:69c0:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:69c1::,2001:df0:69ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6a00::,2001:df0:6a00:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:6a01::,2001:df0:6a7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6a80::,2001:df0:6a80:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:6a81::,2001:df0:6b7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6a81::,2001:df0:6abf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6ac0::,2001:df0:6ac0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:6ac1::,2001:df0:6b3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6b40::,2001:df0:6b40:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:6b41::,2001:df0:6b7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6b80::,2001:df0:6b80:ffff:ffff:ffff:ffff:ffff,SG -2001:df0:6b81::,2001:df0:6c7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6b81::,2001:df0:6bbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6bc0::,2001:df0:6bc0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:6bc1::,2001:df0:6c3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6c40::,2001:df0:6c40:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:6c41::,2001:df0:6c7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6c80::,2001:df0:6c80:ffff:ffff:ffff:ffff:ffff,PK -2001:df0:6c81::,2001:df0:6dff:ffff:ffff:ffff:ffff:ffff,AU -2001:df0:6e00::,2001:df0:6e00:ffff:ffff:ffff:ffff:ffff,BD -2001:df0:6e01::,2001:df0:6e7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6c81::,2001:df0:6cbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6cc0::,2001:df0:6cc0:ffff:ffff:ffff:ffff:ffff,MM +2001:df0:6cc1::,2001:df0:6d3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6d40::,2001:df0:6d40:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:6d41::,2001:df0:6dbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6dc0::,2001:df0:6dc0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:6dc1::,2001:df0:6e7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6e80::,2001:df0:6e80:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:6e81::,2001:df0:6eff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6e81::,2001:df0:6ebf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6ec0::,2001:df0:6ec0:ffff:ffff:ffff:ffff:ffff,PK +2001:df0:6ec1::,2001:df0:6eff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6f00::,2001:df0:6f00:ffff:ffff:ffff:ffff:ffff,MY -2001:df0:6f01::,2001:df0:6f7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6f01::,2001:df0:6f3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6f40::,2001:df0:6f40:ffff:ffff:ffff:ffff:ffff,US +2001:df0:6f41::,2001:df0:6f7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6f80::,2001:df0:6f80:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:6f81::,2001:df0:707f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6f81::,2001:df0:6fbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:6fc0::,2001:df0:6fc0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:6fc1::,2001:df0:703f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7040::,2001:df0:7040:ffff:ffff:ffff:ffff:ffff,MV +2001:df0:7041::,2001:df0:707f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7080::,2001:df0:7080:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7081::,2001:df0:717f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7081::,2001:df0:70bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:70c0::,2001:df0:70c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:70c1::,2001:df0:713f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7140::,2001:df0:7140:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:7141::,2001:df0:717f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7180::,2001:df0:7180:ffff:ffff:ffff:ffff:ffff,JP -2001:df0:7181::,2001:df0:71ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7181::,2001:df0:71bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:71c0::,2001:df0:71c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:71c1::,2001:df0:71ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7200::,2001:df0:7200:ffff:ffff:ffff:ffff:ffff,HK -2001:df0:7201::,2001:df0:727f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7201::,2001:df0:723f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7240::,2001:df0:7240:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7241::,2001:df0:727f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7280::,2001:df0:7280:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7281::,2001:df0:73ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7281::,2001:df0:733f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7340::,2001:df0:7340:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7341::,2001:df0:73ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7400::,2001:df0:7400:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:7401::,2001:df0:747f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7401::,2001:df0:743f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7440::,2001:df0:7440:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:7441::,2001:df0:747f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7480::,2001:df0:7480:ffff:ffff:ffff:ffff:ffff,JP -2001:df0:7481::,2001:df0:74ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7481::,2001:df0:74bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:74c0::,2001:df0:74c0:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:74c1::,2001:df0:74ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7500::,2001:df0:7500:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7501::,2001:df0:757f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7501::,2001:df0:753f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7540::,2001:df0:7540:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7541::,2001:df0:757f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7580::,2001:df0:7580:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7581::,2001:df0:75ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7581::,2001:df0:75bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:75c0::,2001:df0:75c0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:75c1::,2001:df0:75ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7600::,2001:df0:7600:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:7601::,2001:df0:767f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7601::,2001:df0:763f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7640::,2001:df0:7640:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7641::,2001:df0:767f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7680::,2001:df0:7680:ffff:ffff:ffff:ffff:ffff,SG -2001:df0:7681::,2001:df0:76ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7681::,2001:df0:76bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:76c0::,2001:df0:76c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:76c1::,2001:df0:76ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7700::,2001:df0:7700:ffff:ffff:ffff:ffff:ffff,BD -2001:df0:7701::,2001:df0:777f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7701::,2001:df0:773f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7740::,2001:df0:7740:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7741::,2001:df0:777f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7780::,2001:df0:7780:ffff:ffff:ffff:ffff:ffff,TH -2001:df0:7781::,2001:df0:787f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7781::,2001:df0:77bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:77c0::,2001:df0:77c0:ffff:ffff:ffff:ffff:ffff,NC +2001:df0:77c1::,2001:df0:783f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7840::,2001:df0:7840:ffff:ffff:ffff:ffff:ffff,US +2001:df0:7841::,2001:df0:787f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7880::,2001:df0:7880:ffff:ffff:ffff:ffff:ffff,PK -2001:df0:7881::,2001:df0:797f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7881::,2001:df0:78bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:78c0::,2001:df0:78c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:78c1::,2001:df0:793f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7940::,2001:df0:7940:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7941::,2001:df0:797f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7980::,2001:df0:7980:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7981::,2001:df0:79ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7981::,2001:df0:79bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:79c0::,2001:df0:79c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:79c1::,2001:df0:79ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7a00::,2001:df0:7a00:ffff:ffff:ffff:ffff:ffff,TL -2001:df0:7a01::,2001:df0:7a7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7a01::,2001:df0:7a3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7a40::,2001:df0:7a40:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7a41::,2001:df0:7a7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7a80::,2001:df0:7a80:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7a81::,2001:df0:7aff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7a81::,2001:df0:7abf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7ac0::,2001:df0:7ac0:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:7ac1::,2001:df0:7aff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7b00::,2001:df0:7b00:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:7b01::,2001:df0:7bff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7b01::,2001:df0:7b3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7b40::,2001:df0:7b40:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:7b41::,2001:df0:7bbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7bc0::,2001:df0:7bc0:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:7bc1::,2001:df0:7bff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7c00::,2001:df0:7c00:ffff:ffff:ffff:ffff:ffff,HK -2001:df0:7c01::,2001:df0:7c7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7c01::,2001:df0:7c3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7c40::,2001:df0:7c40:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:7c41::,2001:df0:7c7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7c80::,2001:df0:7c80:ffff:ffff:ffff:ffff:ffff,SG -2001:df0:7c81::,2001:df0:7cff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7c81::,2001:df0:7cbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7cc0::,2001:df0:7cc0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:7cc1::,2001:df0:7cff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7d00::,2001:df0:7d00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:7d01::,2001:df0:7d7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7d80::,2001:df0:7d80:ffff:ffff:ffff:ffff:ffff,PK -2001:df0:7d81::,2001:df0:7dff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7d81::,2001:df0:7dbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7dc0::,2001:df0:7dc0:ffff:ffff:ffff:ffff:ffff,NP +2001:df0:7dc1::,2001:df0:7dff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:7e00::,2001:df0:7e00:ffff:ffff:ffff:ffff:ffff,SG -2001:df0:7e01::,2001:df0:7fff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7e01::,2001:df0:7f3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7f40::,2001:df0:7f40:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:7f41::,2001:df0:7fbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7fc0::,2001:df0:7fc0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:7fc1::,2001:df0:7fff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8000::,2001:df0:8000:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:8001::,2001:df0:807f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8001::,2001:df0:803f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8040::,2001:df0:8040:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:8041::,2001:df0:807f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8080::,2001:df0:8080:ffff:ffff:ffff:ffff:ffff,BD -2001:df0:8081::,2001:df0:817f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8081::,2001:df0:80bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:80c0::,2001:df0:80c0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:80c1::,2001:df0:813f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8140::,2001:df0:8140:ffff:ffff:ffff:ffff:ffff,NP +2001:df0:8141::,2001:df0:817f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8180::,2001:df0:8180:ffff:ffff:ffff:ffff:ffff,NP -2001:df0:8181::,2001:df0:827f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8181::,2001:df0:823f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8240::,2001:df0:8240:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:8241::,2001:df0:827f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8280::,2001:df0:8280:ffff:ffff:ffff:ffff:ffff,VN -2001:df0:8281::,2001:df0:82ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8281::,2001:df0:82bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:82c0::,2001:df0:82c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:82c1::,2001:df0:82ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8300::,2001:df0:8300:ffff:ffff:ffff:ffff:ffff,PH -2001:df0:8301::,2001:df0:837f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8301::,2001:df0:833f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8340::,2001:df0:8340:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8341::,2001:df0:837f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8380::,2001:df0:8380:ffff:ffff:ffff:ffff:ffff,VN -2001:df0:8381::,2001:df0:83ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8381::,2001:df0:83bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:83c0::,2001:df0:83c0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:83c1::,2001:df0:83ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8400::,2001:df0:8400:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:8401::,2001:df0:847f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8401::,2001:df0:843f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8440::,2001:df0:8440:ffff:ffff:ffff:ffff:ffff,KH +2001:df0:8441::,2001:df0:847f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8480::,2001:df0:8480:ffff:ffff:ffff:ffff:ffff,VN -2001:df0:8481::,2001:df0:84ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8481::,2001:df0:84bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:84c0::,2001:df0:84c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:84c1::,2001:df0:84ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8500::,2001:df0:8500:ffff:ffff:ffff:ffff:ffff,JP -2001:df0:8501::,2001:df0:857f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8501::,2001:df0:853f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8540::,2001:df0:8540:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8541::,2001:df0:857f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8580::,2001:df0:8580:ffff:ffff:ffff:ffff:ffff,BD -2001:df0:8581::,2001:df0:85ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8581::,2001:df0:85bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:85c0::,2001:df0:85c0:ffff:ffff:ffff:ffff:ffff,CN +2001:df0:85c1::,2001:df0:85ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8600::,2001:df0:8600:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:8601::,2001:df0:867f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8601::,2001:df0:863f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8640::,2001:df0:8640:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8641::,2001:df0:867f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8680::,2001:df0:8680:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:8681::,2001:df0:86ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8681::,2001:df0:86bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:86c0::,2001:df0:86c0:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:86c1::,2001:df0:86ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8700::,2001:df0:8700:ffff:ffff:ffff:ffff:ffff,HK -2001:df0:8701::,2001:df0:877f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8701::,2001:df0:873f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8740::,2001:df0:8740:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8741::,2001:df0:877f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8780::,2001:df0:8780:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:8781::,2001:df0:87ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8781::,2001:df0:87bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:87c0::,2001:df0:87c0:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:87c1::,2001:df0:87ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8800::,2001:df0:8800:ffff:ffff:ffff:ffff:ffff,IN -2001:df0:8801::,2001:df0:88ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8801::,2001:df0:883f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8840::,2001:df0:8840:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:8841::,2001:df0:88bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:88c0::,2001:df0:88c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:88c1::,2001:df0:88ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8900::,2001:df0:8900:ffff:ffff:ffff:ffff:ffff,PK -2001:df0:8901::,2001:df0:89ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8901::,2001:df0:893f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8940::,2001:df0:8940:ffff:ffff:ffff:ffff:ffff,MM +2001:df0:8941::,2001:df0:89bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:89c0::,2001:df0:89c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:89c1::,2001:df0:89ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8a00::,2001:df0:8a00:ffff:ffff:ffff:ffff:ffff,NP -2001:df0:8a01::,2001:df0:8a7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8a01::,2001:df0:8a3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8a40::,2001:df0:8a40:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8a41::,2001:df0:8a7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8a80::,2001:df0:8a80:ffff:ffff:ffff:ffff:ffff,MY -2001:df0:8a81::,2001:df0:8b7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8a81::,2001:df0:8abf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8ac0::,2001:df0:8ac0:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:8ac1::,2001:df0:8b3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8b40::,2001:df0:8b40:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:8b41::,2001:df0:8b7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8b80::,2001:df0:8b80:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:8b81::,2001:df0:8bff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8b81::,2001:df0:8bbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8bc0::,2001:df0:8bc0:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:8bc1::,2001:df0:8bff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8c00::,2001:df0:8c00:ffff:ffff:ffff:ffff:ffff,MY -2001:df0:8c01::,2001:df0:8cff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8c01::,2001:df0:8c3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8c40::,2001:df0:8c40:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:8c41::,2001:df0:8cbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8cc0::,2001:df0:8cc0:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:8cc1::,2001:df0:8cff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8d00::,2001:df0:8d00:ffff:ffff:ffff:ffff:ffff,MV -2001:df0:8d01::,2001:df0:8d7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8d01::,2001:df0:8d3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8d40::,2001:df0:8d40:ffff:ffff:ffff:ffff:ffff,CN +2001:df0:8d41::,2001:df0:8d7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8d80::,2001:df0:8d80:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:8d81::,2001:df0:8dff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8d81::,2001:df0:8dbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8dc0::,2001:df0:8dc0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8dc1::,2001:df0:8dff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8e00::,2001:df0:8e00:ffff:ffff:ffff:ffff:ffff,HK -2001:df0:8e01::,2001:df0:8e7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8e01::,2001:df0:8e3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8e40::,2001:df0:8e40:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8e41::,2001:df0:8e7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8e80::,2001:df0:8e80:ffff:ffff:ffff:ffff:ffff,BD -2001:df0:8e81::,2001:df0:8eff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8e81::,2001:df0:8ebf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8ec0::,2001:df0:8ec0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8ec1::,2001:df0:8eff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8f00::,2001:df0:8f00:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:8f01::,2001:df0:8f7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8f01::,2001:df0:8f3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8f40::,2001:df0:8f40:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:8f41::,2001:df0:8f7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:8f80::,2001:df0:8f80:ffff:ffff:ffff:ffff:ffff,HK -2001:df0:8f81::,2001:df0:907f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8f81::,2001:df0:8fbf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:8fc0::,2001:df0:8fc0:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:8fc1::,2001:df0:903f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:9040::,2001:df0:9040:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:9041::,2001:df0:907f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:9080::,2001:df0:9080:ffff:ffff:ffff:ffff:ffff,VN -2001:df0:9081::,2001:df0:90ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:9081::,2001:df0:90bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:90c0::,2001:df0:90c0:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:90c1::,2001:df0:90ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:9100::,2001:df0:9100:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:9101::,2001:df0:917f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:9101::,2001:df0:913f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:9140::,2001:df0:9140:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:9141::,2001:df0:917f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:9180::,2001:df0:9180:ffff:ffff:ffff:ffff:ffff,MM -2001:df0:9181::,2001:df0:91ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:9181::,2001:df0:91bf:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:91c0::,2001:df0:91c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:91c1::,2001:df0:91ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:9200::,2001:df0:9200:ffff:ffff:ffff:ffff:ffff,MM 2001:df0:9201::,2001:df0:927f:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:9280::,2001:df0:9280:ffff:ffff:ffff:ffff:ffff,MM @@ -9952,9 +10131,7 @@ 2001:df1:9180::,2001:df1:9180:ffff:ffff:ffff:ffff:ffff,BD 2001:df1:9181::,2001:df1:91ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:9200::,2001:df1:9200:ffff:ffff:ffff:ffff:ffff,BD -2001:df1:9201::,2001:df1:927f:ffff:ffff:ffff:ffff:ffff,AU -2001:df1:9280::,2001:df1:9280:ffff:ffff:ffff:ffff:ffff,PH -2001:df1:9281::,2001:df1:92ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:9201::,2001:df1:92ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:9300::,2001:df1:9300:ffff:ffff:ffff:ffff:ffff,ID 2001:df1:9301::,2001:df1:937f:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:9380::,2001:df1:9380:ffff:ffff:ffff:ffff:ffff,ID @@ -10292,7 +10469,7 @@ 2001:df1:fc01::,2001:df1:fc7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:fc80::,2001:df1:fc80:ffff:ffff:ffff:ffff:ffff,ID 2001:df1:fc81::,2001:df1:fd7f:ffff:ffff:ffff:ffff:ffff,AU -2001:df1:fd80::,2001:df1:fd80:ffff:ffff:ffff:ffff:ffff,CN +2001:df1:fd80::,2001:df1:fd80:ffff:ffff:ffff:ffff:ffff,AP 2001:df1:fd81::,2001:df1:fdff:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:fe00::,2001:df1:fe00:ffff:ffff:ffff:ffff:ffff,ID 2001:df1:fe01::,2001:df1:fe7f:ffff:ffff:ffff:ffff:ffff,AU @@ -10609,9 +10786,7 @@ 2001:df2:5c00::,2001:df2:5c00:ffff:ffff:ffff:ffff:ffff,TH 2001:df2:5c01::,2001:df2:5cff:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:5d00::,2001:df2:5d00:ffff:ffff:ffff:ffff:ffff,MN -2001:df2:5d01::,2001:df2:5d7f:ffff:ffff:ffff:ffff:ffff,AU -2001:df2:5d80::,2001:df2:5d80:ffff:ffff:ffff:ffff:ffff,MM -2001:df2:5d81::,2001:df2:5dff:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:5d01::,2001:df2:5dff:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:5e00::,2001:df2:5e00:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:5e01::,2001:df2:5e7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:5e80::,2001:df2:5e80:ffff:ffff:ffff:ffff:ffff,NZ @@ -11463,9 +11638,7 @@ 2001:df3:6600::,2001:df3:6600:ffff:ffff:ffff:ffff:ffff,NZ 2001:df3:6601::,2001:df3:667f:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:6680::,2001:df3:6680:ffff:ffff:ffff:ffff:ffff,ID -2001:df3:6681::,2001:df3:66ff:ffff:ffff:ffff:ffff:ffff,AU -2001:df3:6700::,2001:df3:6700:ffff:ffff:ffff:ffff:ffff,HK -2001:df3:6701::,2001:df3:677f:ffff:ffff:ffff:ffff:ffff,AU +2001:df3:6681::,2001:df3:677f:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:6780::,2001:df3:6780:ffff:ffff:ffff:ffff:ffff,ID 2001:df3:6781::,2001:df3:687f:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:6880::,2001:df3:6880:ffff:ffff:ffff:ffff:ffff,ID @@ -11572,7 +11745,7 @@ 2001:df3:8781::,2001:df3:87ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:8800::,2001:df3:8800:ffff:ffff:ffff:ffff:ffff,IN 2001:df3:8801::,2001:df3:887f:ffff:ffff:ffff:ffff:ffff,AU -2001:df3:8880::,2001:df3:8880:ffff:ffff:ffff:ffff:ffff,US +2001:df3:8880::,2001:df3:8880:ffff:ffff:ffff:ffff:ffff,IN 2001:df3:8881::,2001:df3:88ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:8900::,2001:df3:8900:ffff:ffff:ffff:ffff:ffff,NC 2001:df3:8901::,2001:df3:897f:ffff:ffff:ffff:ffff:ffff,AU @@ -12449,9 +12622,7 @@ 2001:df4:9780::,2001:df4:9780:ffff:ffff:ffff:ffff:ffff,IN 2001:df4:9781::,2001:df4:97ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df4:9800::,2001:df4:9800:ffff:ffff:ffff:ffff:ffff,ID -2001:df4:9801::,2001:df4:987f:ffff:ffff:ffff:ffff:ffff,AU -2001:df4:9880::,2001:df4:9880:ffff:ffff:ffff:ffff:ffff,PK -2001:df4:9881::,2001:df4:98ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df4:9801::,2001:df4:98ff:ffff:ffff:ffff:ffff:ffff,AU 2001:df4:9900::,2001:df4:9900:ffff:ffff:ffff:ffff:ffff,ID 2001:df4:9901::,2001:df4:997f:ffff:ffff:ffff:ffff:ffff,AU 2001:df4:9980::,2001:df4:9980:ffff:ffff:ffff:ffff:ffff,WS @@ -12975,9 +13146,7 @@ 2001:df5:3a80::,2001:df5:3a80:ffff:ffff:ffff:ffff:ffff,BD 2001:df5:3a81::,2001:df5:3aff:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:3b00::,2001:df5:3b00:ffff:ffff:ffff:ffff:ffff,IN -2001:df5:3b01::,2001:df5:3b7f:ffff:ffff:ffff:ffff:ffff,AU -2001:df5:3b80::,2001:df5:3b80:ffff:ffff:ffff:ffff:ffff,IN -2001:df5:3b81::,2001:df5:3cff:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:3b01::,2001:df5:3cff:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:3d00::,2001:df5:3d00:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:3d01::,2001:df5:3d7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:3d80::,2001:df5:3d80:ffff:ffff:ffff:ffff:ffff,ID @@ -15145,9 +15314,7 @@ 2001:df7:db00::,2001:df7:db00:ffff:ffff:ffff:ffff:ffff,BD 2001:df7:db01::,2001:df7:db7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df7:db80::,2001:df7:db80:ffff:ffff:ffff:ffff:ffff,BD -2001:df7:db81::,2001:df7:dbff:ffff:ffff:ffff:ffff:ffff,AU -2001:df7:dc00::,2001:df7:dc00:ffff:ffff:ffff:ffff:ffff,TH -2001:df7:dc01::,2001:df7:dc7f:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:db81::,2001:df7:dc7f:ffff:ffff:ffff:ffff:ffff,AU 2001:df7:dc80::,2001:df7:dc80:ffff:ffff:ffff:ffff:ffff,HK 2001:df7:dc81::,2001:df7:dcff:ffff:ffff:ffff:ffff:ffff,AU 2001:df7:dd00::,2001:df7:dd00:ffff:ffff:ffff:ffff:ffff,IN @@ -15446,7 +15613,9 @@ 2001:1388::,2001:1388:ffff:ffff:ffff:ffff:ffff:ffff,PE 2001:1398::,2001:1398:ffff:ffff:ffff:ffff:ffff:ffff,CL 2001:13a8::,2001:13a8:ffff:ffff:ffff:ffff:ffff:ffff,MX -2001:13b0::,2001:13b7:ffff:ffff:ffff:ffff:ffff:ffff,AR +2001:13b0::,2001:13b1:3fff:ffff:ffff:ffff:ffff:ffff,AR +2001:13b1:4000::,2001:13b1:7fff:ffff:ffff:ffff:ffff:ffff,VE +2001:13b1:8000::,2001:13b7:ffff:ffff:ffff:ffff:ffff:ffff,AR 2001:13c7:6000::,2001:13c7:6000:ffff:ffff:ffff:ffff:ffff,CO 2001:13c7:6001::,2001:13c7:6001:ffff:ffff:ffff:ffff:ffff,AR 2001:13c7:6002::,2001:13c7:6002:ffff:ffff:ffff:ffff:ffff,SX @@ -15560,8 +15729,7 @@ 2001:1531::,2001:1537:ffff:ffff:ffff:ffff:ffff:ffff,EU 2001:1538::,2001:1538:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:1539::,2001:153f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2001:1540::,2001:1540:ffff:ffff:ffff:ffff:ffff:ffff,NL -2001:1541::,2001:1547:ffff:ffff:ffff:ffff:ffff:ffff,EU +2001:1540::,2001:1547:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:1548::,2001:154f:ffff:ffff:ffff:ffff:ffff:ffff,GR 2001:1550::,2001:1557:ffff:ffff:ffff:ffff:ffff:ffff,EU 2001:1558::,2001:1558:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -15916,8 +16084,7 @@ 2001:2030:2a::,2001:2030:2a:ffff:ffff:ffff:ffff:ffff,EU 2001:2030:2b::,2001:2030:2c:ffff:ffff:ffff:ffff:ffff,DE 2001:2030:2d::,2001:2030:2d:ffff:ffff:ffff:ffff:ffff,US -2001:2030:2e::,2001:2030:2e:ffff:ffff:ffff:ffff:ffff,SE -2001:2030:2f::,2001:2030:2f:ffff:ffff:ffff:ffff:ffff,DE +2001:2030:2e::,2001:2030:2f:ffff:ffff:ffff:ffff:ffff,DE 2001:2030:30::,2001:2030:30:ffff:ffff:ffff:ffff:ffff,IT 2001:2030:31::,2001:2030:31:ffff:ffff:ffff:ffff:ffff,CZ 2001:2030:32::,2001:2030:32:ffff:ffff:ffff:ffff:ffff,NL @@ -16269,7 +16436,9 @@ 2001:43f8:30::,2001:43f8:30:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:31::,2001:43f8:3f:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:40::,2001:43f8:41:ffff:ffff:ffff:ffff:ffff,EG -2001:43f8:42::,2001:43f8:5f:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:42::,2001:43f8:4f:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:50::,2001:43f8:50:ffff:ffff:ffff:ffff:ffff,LY +2001:43f8:51::,2001:43f8:5f:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:60::,2001:43f8:60:ffff:ffff:ffff:ffff:ffff,KE 2001:43f8:61::,2001:43f8:6f:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:70::,2001:43f8:77:ffff:ffff:ffff:ffff:ffff,ZA @@ -16647,9 +16816,7 @@ 2001:43f8:14d0::,2001:43f8:14d0:ffff:ffff:ffff:ffff:ffff,TZ 2001:43f8:14d1::,2001:43f8:14df:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:14e0::,2001:43f8:14e0:ffff:ffff:ffff:ffff:ffff,ZA -2001:43f8:14e1::,2001:43f8:14ef:ffff:ffff:ffff:ffff:ffff,MU -2001:43f8:14f0::,2001:43f8:14f0:ffff:ffff:ffff:ffff:ffff,KE -2001:43f8:14f1::,2001:43f8:14ff:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:14e1::,2001:43f8:14ff:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:1500::,2001:43f8:150f:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:1510::,2001:43f8:15ff:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:1600::,2001:43f8:1600:ffff:ffff:ffff:ffff:ffff,GH @@ -16663,7 +16830,9 @@ 2001:43f8:1640::,2001:43f8:1640:ffff:ffff:ffff:ffff:ffff,MW 2001:43f8:1641::,2001:43f8:164f:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:1650::,2001:43f8:1650:ffff:ffff:ffff:ffff:ffff,GH -2001:43f8:1651::,2001:43f8:16ff:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:1651::,2001:43f8:165f:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:1660::,2001:43f8:1660:ffff:ffff:ffff:ffff:ffff,SS +2001:43f8:1661::,2001:43f8:16ff:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:1700::,2001:43f8:1703:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:1704::,2001:43f8:17ff:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:1800::,2001:43f8:18ff:ffff:ffff:ffff:ffff:ffff,ZA @@ -17078,7 +17247,9 @@ 2001:4d48::,2001:4d4f:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4d50::,2001:4d50:f001:ffff:ffff:ffff:ffff:ffff,DE 2001:4d50:f002::,2001:4d50:f002:ffff:ffff:ffff:ffff:ffff,NL -2001:4d50:f003::,2001:4d50:fcff:ffff:ffff:ffff:ffff:ffff,DE +2001:4d50:f003::,2001:4d50:f017:ffff:ffff:ffff:ffff:ffff,DE +2001:4d50:f018::,2001:4d50:f018:ffff:ffff:ffff:ffff:ffff,GB +2001:4d50:f019::,2001:4d50:fcff:ffff:ffff:ffff:ffff:ffff,DE 2001:4d50:fd00::,2001:4d50:feff:ffff:ffff:ffff:ffff:ffff,US 2001:4d50:ff00::,2001:4d50:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4d51::,2001:4d5f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -17100,8 +17271,8 @@ 2001:4d78:515::,2001:4d78:515:ffff:ffff:ffff:ffff:ffff,GB 2001:4d78:516::,2001:4d78:516:ffff:ffff:ffff:ffff:ffff,NL 2001:4d78:517::,2001:4d78:517:ffff:ffff:ffff:ffff:ffff,GB -2001:4d78:518::,2001:4d78:519:ffff:ffff:ffff:ffff:ffff,NL -2001:4d78:51a::,2001:4d78:600:ffff:ffff:ffff:ffff:ffff,GB +2001:4d78:518::,2001:4d78:51c:ffff:ffff:ffff:ffff:ffff,NL +2001:4d78:51d::,2001:4d78:600:ffff:ffff:ffff:ffff:ffff,GB 2001:4d78:601::,2001:4d78:604:ffff:ffff:ffff:ffff:ffff,FR 2001:4d78:605::,2001:4d78:608:ffff:ffff:ffff:ffff:ffff,GB 2001:4d78:609::,2001:4d78:609:ffff:ffff:ffff:ffff:ffff,FR @@ -17435,9 +17606,7 @@ 2400:3080::,2400:3080:ffff:ffff:ffff:ffff:ffff:ffff,AF 2400:3081::,2400:309f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:30a0::,2400:30a0:ffff:ffff:ffff:ffff:ffff:ffff,TW -2400:30a1::,2400:30bf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:30c0::,2400:30c0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2400:30c1::,2400:30df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:30a1::,2400:30df:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:30e0::,2400:30e0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:30e1::,2400:30ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:3100::,2400:3100:3fff:ffff:ffff:ffff:ffff:ffff,VU @@ -17630,10 +17799,9 @@ 2400:3e01::,2400:3e1f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:3e20::,2400:3e20:fff:ffff:ffff:ffff:ffff:ffff,US 2400:3e20:1000::,2400:3e20:1fff:ffff:ffff:ffff:ffff:ffff,AU -2400:3e20:2000::,2400:3e20:2fff:ffff:ffff:ffff:ffff:ffff,SE -2400:3e20:3000::,2400:3e20:3fff:ffff:ffff:ffff:ffff:ffff,SG -2400:3e20:4000::,2400:3e20:efff:ffff:ffff:ffff:ffff:ffff,SE -2400:3e20:f000::,2400:3e20:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:3e20:2000::,2400:3e20:3fff:ffff:ffff:ffff:ffff:ffff,SG +2400:3e20:4000::,2400:3e20:dfff:ffff:ffff:ffff:ffff:ffff,SE +2400:3e20:e000::,2400:3e20:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:3e21::,2400:3e5f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:3e60::,2400:3e60:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:3e61::,2400:3e7f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -17879,7 +18047,9 @@ 2400:52a1::,2400:52bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:52c0::,2400:52c0:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:52c1::,2400:52df:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:52e0::,2400:52e0:ffff:ffff:ffff:ffff:ffff:ffff,SI +2400:52e0::,2400:52e0:0:ffff:ffff:ffff:ffff:ffff,SI +2400:52e0:1::,2400:52e0:1:ffff:ffff:ffff:ffff:ffff,AU +2400:52e0:2::,2400:52e0:ffff:ffff:ffff:ffff:ffff:ffff,SI 2400:52e1::,2400:52ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5300::,2400:5300:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:5301::,2400:531f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -17939,11 +18109,10 @@ 2400:5660::,2400:5660:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:5661::,2400:567f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5680::,2400:5680:ffff:ffff:ffff:ffff:ffff:ffff,MY -2400:5681::,2400:56a0:80:ffff:ffff:ffff:ffff:ffff,AU -2400:56a0:81::,2400:56a0:81:ffff:ffff:ffff:ffff:ffff,JP -2400:56a0:82::,2400:56a0:851:ffff:ffff:ffff:ffff:ffff,AU -2400:56a0:852::,2400:56a0:852:ffff:ffff:ffff:ffff:ffff,HK -2400:56a0:853::,2400:56bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5681::,2400:56a0:ff:ffff:ffff:ffff:ffff:ffff,AU +2400:56a0:100::,2400:56a0:1ff:ffff:ffff:ffff:ffff:ffff,HK +2400:56a0:200::,2400:56a0:2ff:ffff:ffff:ffff:ffff:ffff,JP +2400:56a0:300::,2400:56bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:56c0::,2400:56c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:56c1::,2400:56df:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:56e0::,2400:56e0:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -17969,106 +18138,218 @@ 2400:5820::,2400:5820:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:5821::,2400:583f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5840::,2400:5840:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5841::,2400:587f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5841::,2400:585f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5860::,2400:5860:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:5861::,2400:587f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5880::,2400:5880:ffff:ffff:ffff:ffff:ffff:ffff,MY 2400:5881::,2400:58bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:58c0::,2400:58c0:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:58c1::,2400:58ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:58c1::,2400:58df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:58e0::,2400:58e0:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:58e1::,2400:58ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5900::,2400:5900:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2400:5901::,2400:59bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5901::,2400:591f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5920::,2400:5920:ffff:ffff:ffff:ffff:ffff:ffff,KR +2400:5921::,2400:599f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:59a0::,2400:59a0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:59a1::,2400:59bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:59c0::,2400:59c0:ffff:ffff:ffff:ffff:ffff:ffff,TH -2400:59c1::,2400:59ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:59c1::,2400:59df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:59e0::,2400:59e0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:59e1::,2400:59ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5a00::,2400:5a00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:5a01::,2400:5a3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5a40::,2400:5a40:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5a41::,2400:5abf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5a41::,2400:5a5f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5a60::,2400:5a60:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:5a61::,2400:5a9f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5aa0::,2400:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5aa1::,2400:5abf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5ac0::,2400:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5ac1::,2400:5b3f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ac1::,2400:5adf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ae0::,2400:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2400:5ae1::,2400:5b1f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5b20::,2400:5b20:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:5b21::,2400:5b3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5b40::,2400:5b40:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5b41::,2400:5bbf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5b41::,2400:5b5f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5b60::,2400:5b60:ffff:ffff:ffff:ffff:ffff:ffff,JP +2400:5b61::,2400:5b9f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ba0::,2400:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,VN +2400:5ba1::,2400:5bbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5bc0::,2400:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5bc1::,2400:5c3f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5bc1::,2400:5c1f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5c20::,2400:5c20:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5c21::,2400:5c3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5c40::,2400:5c40:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5c41::,2400:5c7f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5c41::,2400:5c5f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5c60::,2400:5c60:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5c61::,2400:5c7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5c80::,2400:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5c81::,2400:5cbf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5c81::,2400:5c9f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ca0::,2400:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5ca1::,2400:5cbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5cc0::,2400:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5cc1::,2400:5dff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5cc1::,2400:5cdf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ce0::,2400:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,KR +2400:5ce1::,2400:5d1f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5d20::,2400:5d20:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5d21::,2400:5d5f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5d60::,2400:5d60:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5d61::,2400:5d9f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5da0::,2400:5da0:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:5da1::,2400:5ddf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5de0::,2400:5de0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5de1::,2400:5dff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5e00::,2400:5e00:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:5e01::,2400:5e7f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5e01::,2400:5e1f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5e20::,2400:5e20:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:5e21::,2400:5e7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5e80::,2400:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5e81::,2400:5ebf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5e81::,2400:5e9f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ea0::,2400:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,TW +2400:5ea1::,2400:5ebf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5ec0::,2400:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,ID -2400:5ec1::,2400:5eff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ec1::,2400:5edf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5ee0::,2400:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:5ee1::,2400:5eff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5f00::,2400:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PF -2400:5f01::,2400:5f3f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5f01::,2400:5f1f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5f20::,2400:5f20:ffff:ffff:ffff:ffff:ffff:ffff,ID +2400:5f21::,2400:5f3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5f40::,2400:5f40:ffff:ffff:ffff:ffff:ffff:ffff,MM -2400:5f41::,2400:5f7f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5f41::,2400:5f5f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5f60::,2400:5f60:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:5f61::,2400:5f7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5f80::,2400:5f80:ffff:ffff:ffff:ffff:ffff:ffff,HK -2400:5f81::,2400:5fbf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5f81::,2400:5f9f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5fa0::,2400:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:5fa1::,2400:5fbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:5fc0::,2400:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:5fc1::,2400:5fff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5fc1::,2400:5fdf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:5fe0::,2400:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:5fe1::,2400:5fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6000::,2400:6000:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:6001::,2400:603f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6001::,2400:601f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6020::,2400:6020:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:6021::,2400:603f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6040::,2400:6040:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:6041::,2400:607f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6041::,2400:605f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6060::,2400:6060:ffff:ffff:ffff:ffff:ffff:ffff,KH +2400:6061::,2400:607f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6080::,2400:6080:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2400:6081::,2400:60bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6081::,2400:609f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:60a0::,2400:60a0:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:60a1::,2400:60bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:60c0::,2400:60c0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:60c1::,2400:617f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:60c1::,2400:60df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:60e0::,2400:60e0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:60e1::,2400:611f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6120::,2400:6120:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:6121::,2400:615f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6160::,2400:6160:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:6161::,2400:617f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6180::,2400:6180:ff:ffff:ffff:ffff:ffff:ffff,SG 2400:6180:100::,2400:6180:1ff:ffff:ffff:ffff:ffff:ffff,IN 2400:6180:200::,2400:6180:efff:ffff:ffff:ffff:ffff:ffff,SG 2400:6180:f000::,2400:6180:ffff:ffff:ffff:ffff:ffff:ffff,US -2400:6181::,2400:61bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6181::,2400:619f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:61a0::,2400:61a0:ffff:ffff:ffff:ffff:ffff:ffff,TW +2400:61a1::,2400:61bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:61c0::,2400:61c0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:61c1::,2400:61ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:61c1::,2400:61df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:61e0::,2400:61e0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:61e1::,2400:61ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6200::,2400:6200:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:6201::,2400:623f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6201::,2400:621f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6220::,2400:6220:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:6221::,2400:623f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6240::,2400:6240:ffff:ffff:ffff:ffff:ffff:ffff,ID -2400:6241::,2400:627f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6241::,2400:625f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6260::,2400:6260:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:6261::,2400:627f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6280::,2400:6280:ffff:ffff:ffff:ffff:ffff:ffff,TH -2400:6281::,2400:62bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6281::,2400:629f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:62a0::,2400:62a0:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:62a1::,2400:62bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:62c0::,2400:62c0:ffff:ffff:ffff:ffff:ffff:ffff,MM -2400:62c1::,2400:62ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:62c1::,2400:62df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:62e0::,2400:62e0:ffff:ffff:ffff:ffff:ffff:ffff,TW +2400:62e1::,2400:62ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6300::,2400:6300:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:6301::,2400:633f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6301::,2400:631f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6320::,2400:6320:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2400:6321::,2400:633f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6340::,2400:6340:ffff:ffff:ffff:ffff:ffff:ffff,MM -2400:6341::,2400:63bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6341::,2400:635f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6360::,2400:6360:ffff:ffff:ffff:ffff:ffff:ffff,PH +2400:6361::,2400:639f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:63a0::,2400:63a0:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:63a1::,2400:63bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:63c0::,2400:63c0:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:63c1::,2400:63ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:63c1::,2400:63df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:63e0::,2400:63e0:ffff:ffff:ffff:ffff:ffff:ffff,TW +2400:63e1::,2400:63ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6400::,2400:6400:ffff:ffff:ffff:ffff:ffff:ffff,TO -2400:6401::,2400:643f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6401::,2400:641f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6420::,2400:6420:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:6421::,2400:643f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6440::,2400:6440:ffff:ffff:ffff:ffff:ffff:ffff,MM -2400:6441::,2400:647f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6441::,2400:645f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6460::,2400:6460:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:6461::,2400:647f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6480::,2400:6480:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:6481::,2400:64bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6481::,2400:649f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:64a0::,2400:64a0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:64a1::,2400:64bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:64c0::,2400:64c0:ffff:ffff:ffff:ffff:ffff:ffff,ID -2400:64c1::,2400:64ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:64c1::,2400:64df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:64e0::,2400:64e0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:64e1::,2400:64ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6500::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG -2400:6501::,2400:653f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6501::,2400:651f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6520::,2400:6520:ffff:ffff:ffff:ffff:ffff:ffff,PH +2400:6521::,2400:653f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6540::,2400:6540:ffff:ffff:ffff:ffff:ffff:ffff,VN 2400:6541::,2400:657f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6580::,2400:6580:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:6581::,2400:65bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6581::,2400:659f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:65a0::,2400:65a0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:65a1::,2400:65bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:65c0::,2400:65c0:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:65c1::,2400:65ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:65c1::,2400:65df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:65e0::,2400:65e0:ffff:ffff:ffff:ffff:ffff:ffff,PK +2400:65e1::,2400:65ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6600::,2400:6600:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:6601::,2400:663f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6601::,2400:661f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6620::,2400:6620:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2400:6621::,2400:663f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6640::,2400:6640:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:6641::,2400:667f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6680::,2400:6680:ffff:ffff:ffff:ffff:ffff:ffff,SG -2400:6681::,2400:66bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6681::,2400:669f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:66a0::,2400:66a0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:66a1::,2400:66bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:66c0::,2400:66c0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:66c1::,2400:66ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:66c1::,2400:66df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:66e0::,2400:66e0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:66e1::,2400:66ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6700::,2400:6700:ffff:ffff:ffff:ffff:ffff:ffff,JP -2400:6701::,2400:673f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6701::,2400:671f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6720::,2400:6720:ffff:ffff:ffff:ffff:ffff:ffff,VN +2400:6721::,2400:673f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6740::,2400:6740:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:6741::,2400:677f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6741::,2400:675f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6760::,2400:6760:ffff:ffff:ffff:ffff:ffff:ffff,VN +2400:6761::,2400:677f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6780::,2400:6780:ffff:ffff:ffff:ffff:ffff:ffff,SG -2400:6781::,2400:67bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:6781::,2400:679f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:67a0::,2400:67a0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:67a1::,2400:67bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:67c0::,2400:67c0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:67c1::,2400:683f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:67c1::,2400:67df:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:67e0::,2400:67e0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:67e1::,2400:683f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6840::,2400:6840:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:6841::,2400:68bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:68c0::,2400:68c0:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -18286,7 +18567,9 @@ 2400:8781::,2400:87bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:87c0::,2400:87c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:87c1::,2400:87ff:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:8800::,2400:8800:2080:ffff:ffff:ffff:ffff:ffff,HK +2400:8800::,2400:8800:4ff:ffff:ffff:ffff:ffff:ffff,HK +2400:8800:500::,2400:8800:500:ffff:ffff:ffff:ffff:ffff,SG +2400:8800:501::,2400:8800:2080:ffff:ffff:ffff:ffff:ffff,HK 2400:8800:2081::,2400:8800:2081:ffff:ffff:ffff:ffff:ffff,GR 2400:8800:2082::,2400:8800:dfff:ffff:ffff:ffff:ffff:ffff,HK 2400:8800:e000::,2400:8800:e000:ffff:ffff:ffff:ffff:ffff,GB @@ -18353,9 +18636,7 @@ 2400:8e00::,2400:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:8e01::,2400:8e3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8e40::,2400:8e40:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2400:8e41::,2400:8e7f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:8e80::,2400:8e80:ffff:ffff:ffff:ffff:ffff:ffff,HK -2400:8e81::,2400:8ebf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:8e41::,2400:8ebf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8ec0::,2400:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:8ec1::,2400:8eff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8f00::,2400:8f00:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -18529,9 +18810,7 @@ 2400:9d00::,2400:9d00:ffff:ffff:ffff:ffff:ffff:ffff,PH 2400:9d01::,2400:9d7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:9d80::,2400:9d80:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:9d81::,2400:9dbf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:9dc0::,2400:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:9dc1::,2400:9dff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:9d81::,2400:9dff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:9e00::,2400:9e00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:9e01::,2400:9e3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:9e40::,2400:9e40:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -18708,9 +18987,9 @@ 2400:bb40:200a::,2400:bb40:200f:ffff:ffff:ffff:ffff:ffff,PA 2400:bb40:2010::,2400:bb40:2011:ffff:ffff:ffff:ffff:ffff,US 2400:bb40:2012::,2400:bb40:4443:ffff:ffff:ffff:ffff:ffff,PA -2400:bb40:4444::,2400:bb40:4444:ffff:ffff:ffff:ffff:ffff,US +2400:bb40:4444::,2400:bb40:4444:ffff:ffff:ffff:ffff:ffff,AP 2400:bb40:4445::,2400:bb40:8887:ffff:ffff:ffff:ffff:ffff,PA -2400:bb40:8888::,2400:bb40:8888:ffff:ffff:ffff:ffff:ffff,US +2400:bb40:8888::,2400:bb40:8888:ffff:ffff:ffff:ffff:ffff,AP 2400:bb40:8889::,2400:bb40:ffff:ffff:ffff:ffff:ffff:ffff,PA 2400:bb41::,2400:bbbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:bbc0::,2400:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -21428,9 +21707,7 @@ 2402:7240::,2402:7240:ffff:ffff:ffff:ffff:ffff:ffff,CN 2402:7241::,2402:72bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:72c0::,2402:72c0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2402:72c1::,2402:72ff:ffff:ffff:ffff:ffff:ffff:ffff,AU -2402:7300::,2402:7300:ffff:ffff:ffff:ffff:ffff:ffff,HK -2402:7301::,2402:73bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2402:72c1::,2402:73bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:73c0::,2402:73c0:ffff:ffff:ffff:ffff:ffff:ffff,JP 2402:73c1::,2402:743f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:7440::,2402:7440:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -22382,7 +22659,9 @@ 2402:fbc0::,2402:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2402:fbc1::,2402:fbff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:fc00::,2402:fc00:ffff:ffff:ffff:ffff:ffff:ffff,ID -2402:fc01::,2402:fc7f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2402:fc01::,2402:fc3f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2402:fc40::,2402:fc40:ffff:ffff:ffff:ffff:ffff:ffff,US +2402:fc41::,2402:fc7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:fc80::,2402:fc80:ffff:ffff:ffff:ffff:ffff:ffff,TH 2402:fc81::,2402:fcbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:fcc0::,2402:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -22827,13 +23106,13 @@ 2403:39c1::,2403:39ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:3a00::,2403:3a00:ffff:ffff:ffff:ffff:ffff:ffff,JP 2403:3a01::,2403:3a3f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2403:3a40::,2403:3a40:ffff:ffff:ffff:ffff:ffff:ffff,CN +2403:3a40::,2403:3a40:ffff:ffff:ffff:ffff:ffff:ffff,HK 2403:3a41::,2403:3b3f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2403:3b40::,2403:3b40:ffff:ffff:ffff:ffff:ffff:ffff,CN +2403:3b40::,2403:3b40:ffff:ffff:ffff:ffff:ffff:ffff,HK 2403:3b41::,2403:3b7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:3b80::,2403:3b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:3b81::,2403:3bbf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2403:3bc0::,2403:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2403:3bc0::,2403:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2403:3bc1::,2403:3c3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:3c40::,2403:3c40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:3c41::,2403:3c7f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -22898,9 +23177,7 @@ 2403:4400::,2403:4400:ffff:ffff:ffff:ffff:ffff:ffff,JP 2403:4401::,2403:443f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:4440::,2403:4440:ffff:ffff:ffff:ffff:ffff:ffff,JP -2403:4441::,2403:447f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2403:4480::,2403:4480:ffff:ffff:ffff:ffff:ffff:ffff,WS -2403:4481::,2403:44bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2403:4441::,2403:44bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:44c0::,2403:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2403:44c1::,2403:44ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:4500::,2403:4500:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -23403,7 +23680,9 @@ 2403:8a80::,2403:8a80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:8a81::,2403:8aff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:8b00::,2403:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CN -2403:8b01::,2403:8b7f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2403:8b01::,2403:8b3f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2403:8b40::,2403:8b40:ffff:ffff:ffff:ffff:ffff:ffff,BD +2403:8b41::,2403:8b7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:8b80::,2403:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:8b81::,2403:8bbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:8bc0::,2403:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,TW @@ -23893,11 +24172,9 @@ 2403:cfc0:1004::,2403:cfc0:1004:ffff:ffff:ffff:ffff:ffff,TW 2403:cfc0:1005::,2403:cfc0:1006:ffff:ffff:ffff:ffff:ffff,SG 2403:cfc0:1007::,2403:cfc0:1007:ffff:ffff:ffff:ffff:ffff,US -2403:cfc0:1008::,2403:cfc0:1008:ffff:ffff:ffff:ffff:ffff,SI -2403:cfc0:1009::,2403:cfc0:100f:ffff:ffff:ffff:ffff:ffff,SG +2403:cfc0:1008::,2403:cfc0:100f:ffff:ffff:ffff:ffff:ffff,SG 2403:cfc0:1010::,2403:cfc0:1010:ffff:ffff:ffff:ffff:ffff,ID -2403:cfc0:1011::,2403:cfc0:1011:ffff:ffff:ffff:ffff:ffff,SI -2403:cfc0:1012::,2403:cfc0:1013:ffff:ffff:ffff:ffff:ffff,SG +2403:cfc0:1011::,2403:cfc0:1013:ffff:ffff:ffff:ffff:ffff,SG 2403:cfc0:1014::,2403:cfc0:1014:ffff:ffff:ffff:ffff:ffff,NL 2403:cfc0:1015::,2403:cfc0:1015:ffff:ffff:ffff:ffff:ffff,SG 2403:cfc0:1016::,2403:cfc0:1016:ffff:ffff:ffff:ffff:ffff,AU @@ -24175,9 +24452,7 @@ 2403:f700::,2403:f700:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2403:f701::,2403:f73f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:f740::,2403:f740:ffff:ffff:ffff:ffff:ffff:ffff,CN -2403:f741::,2403:f77f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2403:f780::,2403:f780:ffff:ffff:ffff:ffff:ffff:ffff,BD -2403:f781::,2403:f7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2403:f741::,2403:f7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:f7c0::,2403:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,PK 2403:f7c1::,2403:f87f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:f880::,2403:f880:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -24352,7 +24627,7 @@ 2404:881::,2404:8bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:8c0::,2404:8c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:8c1::,2404:93f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:940::,2404:940:ffff:ffff:ffff:ffff:ffff:ffff,HK +2404:940::,2404:940:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:941::,2404:97f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:980::,2404:980:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:981::,2404:9bf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -24397,9 +24672,7 @@ 2404:f40::,2404:f40:ffff:ffff:ffff:ffff:ffff:ffff,TW 2404:f41::,2404:f7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:f80::,2404:f80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2404:f81::,2404:fbf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:fc0::,2404:fc0:ffff:ffff:ffff:ffff:ffff:ffff,HK -2404:fc1::,2404:fff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:f81::,2404:fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:1000::,2404:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP 2404:1001::,2404:103f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:1040::,2404:1040:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -24684,11 +24957,11 @@ 2404:3b01::,2404:3b3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:3b40::,2404:3b40:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:3b41::,2404:3bbf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:3bc0::,2404:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2404:3bc0::,2404:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:3bc1::,2404:3bff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:3c00::,2404:3c00:ffff:ffff:ffff:ffff:ffff:ffff,PH 2404:3c01::,2404:3c3f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:3c40::,2404:3c40:ffff:ffff:ffff:ffff:ffff:ffff,CN +2404:3c40::,2404:3c40:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:3c41::,2404:3c7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:3c80::,2404:3c80:ffff:ffff:ffff:ffff:ffff:ffff,PK 2404:3c81::,2404:3cbf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -24796,7 +25069,7 @@ 2404:4a01::,2404:4a3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:4a40::,2404:4a40:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:4a41::,2404:4a7f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:4a80::,2404:4a80:ffff:ffff:ffff:ffff:ffff:ffff,IN +2404:4a80::,2404:4a80:ffff:ffff:ffff:ffff:ffff:ffff,US 2404:4a81::,2404:4b7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:4b80::,2404:4b80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:4b81::,2404:4bbf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -25060,7 +25333,7 @@ 2404:7341::,2404:737f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:7380::,2404:7380:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:7381::,2404:73bf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:73c0::,2404:73c0:ffff:ffff:ffff:ffff:ffff:ffff,TW +2404:73c0::,2404:73c0:ffff:ffff:ffff:ffff:ffff:ffff,EU 2404:73c1::,2404:73ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:7400::,2404:7400:ffff:ffff:ffff:ffff:ffff:ffff,PH 2404:7401::,2404:743f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -25114,7 +25387,8 @@ 2404:7ac0:500::,2404:7ac0:5ff:ffff:ffff:ffff:ffff:ffff,US 2404:7ac0:600::,2404:7ac0:606:ffff:ffff:ffff:ffff:ffff,HK 2404:7ac0:607::,2404:7ac0:607:ffff:ffff:ffff:ffff:ffff,CN -2404:7ac0:608::,2404:7ac0:65f:ffff:ffff:ffff:ffff:ffff,HK +2404:7ac0:608::,2404:7ac0:608:ffff:ffff:ffff:ffff:ffff,AP +2404:7ac0:609::,2404:7ac0:65f:ffff:ffff:ffff:ffff:ffff,HK 2404:7ac0:660::,2404:7ac0:66f:ffff:ffff:ffff:ffff:ffff,AP 2404:7ac0:670::,2404:7ac0:670:ffff:ffff:ffff:ffff:ffff,HK 2404:7ac0:671::,2404:7ac0:671:ffff:ffff:ffff:ffff:ffff,FR @@ -25240,7 +25514,7 @@ 2404:8c01::,2404:8c3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:8c40::,2404:8c40:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:8c41::,2404:8c7f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:8c80::,2404:8c80:ffff:ffff:ffff:ffff:ffff:ffff,AP +2404:8c80::,2404:8c80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:8c81::,2404:8cbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:8cc0::,2404:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,TW 2404:8cc1::,2404:8cff:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -25351,9 +25625,7 @@ 2404:9f00::,2404:9f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2404:9f01::,2404:9f3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:9f40::,2404:9f40:ffff:ffff:ffff:ffff:ffff:ffff,AF -2404:9f41::,2404:9f7f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:9f80::,2404:9f80:ffff:ffff:ffff:ffff:ffff:ffff,BD -2404:9f81::,2404:9fbf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:9f41::,2404:9fbf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:9fc0::,2404:9fc0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:9fc1::,2404:9fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:a000::,2404:a000:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -25415,9 +25687,7 @@ 2404:a700::,2404:a700:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:a701::,2404:a73f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:a740::,2404:a740:ffff:ffff:ffff:ffff:ffff:ffff,CN -2404:a741::,2404:a77f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:a780::,2404:a780:ffff:ffff:ffff:ffff:ffff:ffff,BD -2404:a781::,2404:a7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:a741::,2404:a7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:a7c0::,2404:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,PH 2404:a7c1::,2404:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:a800::,2404:a800:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -25508,7 +25778,7 @@ 2404:b782::,2404:b7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:b7c0::,2404:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,VN 2404:b7c1::,2404:b8bf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:b8c0::,2404:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,AP +2404:b8c0::,2404:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:b8c1::,2404:b8ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:b900::,2404:b900:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:b901::,2404:b93f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -25753,9 +26023,7 @@ 2404:df00::,2404:df00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:df01::,2404:df3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:df40::,2404:df40:ffff:ffff:ffff:ffff:ffff:ffff,JP -2404:df41::,2404:df7f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:df80::,2404:df80:ffff:ffff:ffff:ffff:ffff:ffff,IN -2404:df81::,2404:dfff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:df41::,2404:dfff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:e000::,2404:e000:ffff:ffff:ffff:ffff:ffff:ffff,JP 2404:e001::,2404:e03f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:e040::,2404:e040:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -25924,8 +26192,8 @@ 2404:f4c0:c00::,2404:f4c0:cff:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:d00::,2404:f4c0:dff:ffff:ffff:ffff:ffff:ffff,KR 2404:f4c0:e00::,2404:f4c0:fff:ffff:ffff:ffff:ffff:ffff,CN -2404:f4c0:1000::,2404:f4c0:1100:ffff:ffff:ffff:ffff:ffff,US -2404:f4c0:1101::,2404:f4c0:1107:ffff:ffff:ffff:ffff:ffff,CN +2404:f4c0:1000::,2404:f4c0:10ff:ffff:ffff:ffff:ffff:ffff,US +2404:f4c0:1100::,2404:f4c0:1107:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:1108::,2404:f4c0:1108:ffff:ffff:ffff:ffff:ffff,US 2404:f4c0:1109::,2404:f4c0:4fff:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:5000::,2404:f4c0:514f:ffff:ffff:ffff:ffff:ffff,US @@ -25940,9 +26208,7 @@ 2404:f4c0:5600::,2404:f4c0:56ff:ffff:ffff:ffff:ffff:ffff,SG 2404:f4c0:5700::,2404:f4c0:5fff:ffff:ffff:ffff:ffff:ffff,US 2404:f4c0:6000::,2404:f4c0:665f:ffff:ffff:ffff:ffff:ffff,CN -2404:f4c0:6660::,2404:f4c0:6665:ffff:ffff:ffff:ffff:ffff,HK -2404:f4c0:6666::,2404:f4c0:6666:ffff:ffff:ffff:ffff:ffff,US -2404:f4c0:6667::,2404:f4c0:666f:ffff:ffff:ffff:ffff:ffff,HK +2404:f4c0:6660::,2404:f4c0:666f:ffff:ffff:ffff:ffff:ffff,HK 2404:f4c0:6670::,2404:f4c0:885f:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:8860::,2404:f4c0:886f:ffff:ffff:ffff:ffff:ffff,TW 2404:f4c0:8870::,2404:f4c0:9fff:ffff:ffff:ffff:ffff:ffff,CN @@ -25972,7 +26238,8 @@ 2404:f4c0:f6d0::,2404:f4c0:f6df:ffff:ffff:ffff:ffff:ffff,JP 2404:f4c0:f6e0::,2404:f4c0:f6ef:ffff:ffff:ffff:ffff:ffff,KR 2404:f4c0:f6f0::,2404:f4c0:f6ff:ffff:ffff:ffff:ffff:ffff,SG -2404:f4c0:f700::,2404:f4c0:f8ff:ffff:ffff:ffff:ffff:ffff,CN +2404:f4c0:f700::,2404:f4c0:f70f:ffff:ffff:ffff:ffff:ffff,TW +2404:f4c0:f710::,2404:f4c0:f8ff:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:f900::,2404:f4c0:f90f:ffff:ffff:ffff:ffff:ffff,HK 2404:f4c0:f910::,2404:f4c0:f93f:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:f940::,2404:f4c0:f94f:ffff:ffff:ffff:ffff:ffff,US @@ -25989,7 +26256,9 @@ 2404:f4c0:fac0::,2404:f4c0:facf:ffff:ffff:ffff:ffff:ffff,MY 2404:f4c0:fad0::,2404:f4c0:fbff:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:fc00::,2404:f4c0:fc10:ffff:ffff:ffff:ffff:ffff,HK -2404:f4c0:fc11::,2404:f4c0:ffef:ffff:ffff:ffff:ffff:ffff,CN +2404:f4c0:fc11::,2404:f4c0:ff0f:ffff:ffff:ffff:ffff:ffff,CN +2404:f4c0:ff10::,2404:f4c0:ff1f:ffff:ffff:ffff:ffff:ffff,GB +2404:f4c0:ff20::,2404:f4c0:ffef:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c0:fff0::,2404:f4c0:fff0:ffff:ffff:ffff:ffff:ffff,FR 2404:f4c0:fff1::,2404:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:f4c1::,2404:f4ff:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -26164,9 +26433,7 @@ 2405:dc1::,2405:dff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:e00::,2405:e00:ffff:ffff:ffff:ffff:ffff:ffff,JP 2405:e01::,2405:e3f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2405:e40::,2405:e40:2:ffff:ffff:ffff:ffff:ffff,NZ -2405:e40:3::,2405:e40:3:ffff:ffff:ffff:ffff:ffff,PG -2405:e40:4::,2405:e40:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2405:e40::,2405:e40:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2405:e41::,2405:e7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:e80::,2405:e80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:e81::,2405:ebf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -27695,9 +27962,7 @@ 2405:e280::,2405:e280:ffff:ffff:ffff:ffff:ffff:ffff,KH 2405:e281::,2405:e2bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:e2c0::,2405:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,BD -2405:e2c1::,2405:e2ff:ffff:ffff:ffff:ffff:ffff:ffff,AU -2405:e300::,2405:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK -2405:e301::,2405:e33f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2405:e2c1::,2405:e33f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:e340::,2405:e340:ffff:ffff:ffff:ffff:ffff:ffff,BD 2405:e341::,2405:e3bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:e3c0::,2405:e3c0:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -27774,7 +28039,9 @@ 2405:f001::,2405:f03f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:f040::,2405:f040:ffff:ffff:ffff:ffff:ffff:ffff,ID 2405:f041::,2405:f07f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2405:f080::,2405:f080:14ff:ffff:ffff:ffff:ffff:ffff,SG +2405:f080::,2405:f080:7ff:ffff:ffff:ffff:ffff:ffff,SG +2405:f080:800::,2405:f080:8ff:ffff:ffff:ffff:ffff:ffff,TH +2405:f080:900::,2405:f080:14ff:ffff:ffff:ffff:ffff:ffff,SG 2405:f080:1500::,2405:f080:15ff:ffff:ffff:ffff:ffff:ffff,ZA 2405:f080:1600::,2405:f080:1e13:ffff:ffff:ffff:ffff:ffff,SG 2405:f080:1e14::,2405:f080:1e15:ffff:ffff:ffff:ffff:ffff,CZ @@ -27803,9 +28070,9 @@ 2405:f341::,2405:f37f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:f380::,2405:f380:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:f381::,2405:f3bf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2405:f3c0::,2405:f3c0:3f:ffff:ffff:ffff:ffff:ffff,CN -2405:f3c0:40::,2405:f3c0:7f:ffff:ffff:ffff:ffff:ffff,HK -2405:f3c0:80::,2405:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,CN +2405:f3c0::,2405:f3c0:0:ffff:ffff:ffff:ffff:ffff,AP +2405:f3c0:1::,2405:f3c0:3ff:ffff:ffff:ffff:ffff:ffff,US +2405:f3c0:400::,2405:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:f3c1::,2405:f3ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:f400::,2405:f400:ffff:ffff:ffff:ffff:ffff:ffff,PH 2405:f401::,2405:f43f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -27966,14 +28233,11 @@ 2406:840:5880::,2406:840:5881:ffff:ffff:ffff:ffff:ffff,JP 2406:840:5882::,2406:840:7fff:ffff:ffff:ffff:ffff:ffff,CN 2406:840:8000::,2406:840:8fff:ffff:ffff:ffff:ffff:ffff,JP -2406:840:9000::,2406:840:998f:ffff:ffff:ffff:ffff:ffff,CN +2406:840:9000::,2406:840:900f:ffff:ffff:ffff:ffff:ffff,HK +2406:840:9010::,2406:840:998f:ffff:ffff:ffff:ffff:ffff,CN 2406:840:9990::,2406:840:999f:ffff:ffff:ffff:ffff:ffff,GB 2406:840:99a0::,2406:840:cfff:ffff:ffff:ffff:ffff:ffff,CN -2406:840:d000::,2406:840:d00f:ffff:ffff:ffff:ffff:ffff,HK -2406:840:d010::,2406:840:d01f:ffff:ffff:ffff:ffff:ffff,CN -2406:840:d020::,2406:840:d02f:ffff:ffff:ffff:ffff:ffff,HK -2406:840:d030::,2406:840:d05f:ffff:ffff:ffff:ffff:ffff,CN -2406:840:d060::,2406:840:dfff:ffff:ffff:ffff:ffff:ffff,HK +2406:840:d000::,2406:840:dfff:ffff:ffff:ffff:ffff:ffff,HK 2406:840:e000::,2406:840:e00f:ffff:ffff:ffff:ffff:ffff,CN 2406:840:e010::,2406:840:e01f:ffff:ffff:ffff:ffff:ffff,JP 2406:840:e020::,2406:840:e02f:ffff:ffff:ffff:ffff:ffff,HK @@ -28024,9 +28288,9 @@ 2406:840:fd12::,2406:840:fef0:ffff:ffff:ffff:ffff:ffff,CN 2406:840:fef1::,2406:840:fef1:ffff:ffff:ffff:ffff:ffff,SG 2406:840:fef2::,2406:840:fef2:ffff:ffff:ffff:ffff:ffff,HK -2406:840:fef3::,2406:840:fefd:ffff:ffff:ffff:ffff:ffff,CN -2406:840:fefe::,2406:840:fefe:ffff:ffff:ffff:ffff:ffff,HK -2406:840:feff::,2406:840:ffff:ffff:ffff:ffff:ffff:ffff,CN +2406:840:fef3::,2406:840:fef3:ffff:ffff:ffff:ffff:ffff,CN +2406:840:fef4::,2406:840:fef4:ffff:ffff:ffff:ffff:ffff,HK +2406:840:fef5::,2406:840:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:841::,2406:87f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:880::,2406:880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:881::,2406:8bf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -29163,9 +29427,7 @@ 2406:ab40::,2406:ab4f:ffff:ffff:ffff:ffff:ffff:ffff,JP 2406:ab50::,2406:ab7f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:ab80::,2406:ab80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2406:ab81::,2406:abbf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2406:abc0::,2406:abc0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2406:abc1::,2406:abff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2406:ab81::,2406:abff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:ac00::,2406:ac00:ffff:ffff:ffff:ffff:ffff:ffff,PK 2406:ac01::,2406:ac3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:ac40::,2406:ac40:ffff:ffff:ffff:ffff:ffff:ffff,SG @@ -29771,7 +30033,11 @@ 2406:dafc:e000::,2406:dafc:e0ff:ffff:ffff:ffff:ffff:ffff,HK 2406:dafc:e100::,2406:dafc:efff:ffff:ffff:ffff:ffff:ffff,US 2406:dafc:f000::,2406:dafc:f0ff:ffff:ffff:ffff:ffff:ffff,AU -2406:dafc:f100::,2406:dafe:fff:ffff:ffff:ffff:ffff:ffff,US +2406:dafc:f100::,2406:dafc:ff7f:ffff:ffff:ffff:ffff:ffff,US +2406:dafc:ff80::,2406:dafc:ff83:ffff:ffff:ffff:ffff:ffff,DE +2406:dafc:ff84::,2406:dafc:ff9f:ffff:ffff:ffff:ffff:ffff,US +2406:dafc:ffa0::,2406:dafc:ffa3:ffff:ffff:ffff:ffff:ffff,DE +2406:dafc:ffa4::,2406:dafe:fff:ffff:ffff:ffff:ffff:ffff,US 2406:dafe:1000::,2406:dafe:10ff:ffff:ffff:ffff:ffff:ffff,ZA 2406:dafe:1100::,2406:dafe:1fff:ffff:ffff:ffff:ffff:ffff,US 2406:dafe:2000::,2406:dafe:20ff:ffff:ffff:ffff:ffff:ffff,KR @@ -29870,7 +30136,9 @@ 2406:e241::,2406:e2bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:e2c0::,2406:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:e2c1::,2406:e2ff:ffff:ffff:ffff:ffff:ffff:ffff,AU -2406:e300::,2406:e300:ffff:ffff:ffff:ffff:ffff:ffff,AP +2406:e300::,2406:e300:3:ffff:ffff:ffff:ffff:ffff,AP +2406:e300:4::,2406:e300:4:ffff:ffff:ffff:ffff:ffff,HK +2406:e300:5::,2406:e300:ffff:ffff:ffff:ffff:ffff:ffff,AP 2406:e301::,2406:e33f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:e340::,2406:e340:ffff:ffff:ffff:ffff:ffff:ffff,BD 2406:e341::,2406:e37f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -29953,7 +30221,9 @@ 2406:ef80::,2406:ef80:0:ffff:ffff:ffff:ffff:ffff,US 2406:ef80:1::,2406:ef80:1:ffff:ffff:ffff:ffff:ffff,HK 2406:ef80:2::,2406:ef80:2:ffff:ffff:ffff:ffff:ffff,SG -2406:ef80:3::,2406:ef80:ff:ffff:ffff:ffff:ffff:ffff,US +2406:ef80:3::,2406:ef80:3:ffff:ffff:ffff:ffff:ffff,AU +2406:ef80:4::,2406:ef80:4:ffff:ffff:ffff:ffff:ffff,JP +2406:ef80:5::,2406:ef80:ff:ffff:ffff:ffff:ffff:ffff,US 2406:ef80:100::,2406:ef80:1ff:ffff:ffff:ffff:ffff:ffff,AU 2406:ef80:200::,2406:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US 2406:ef81::,2406:efbf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -30010,17 +30280,11 @@ 2406:f5c0::,2406:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,TW 2406:f5c1::,2406:f5ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:f600::,2406:f600:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2406:f601::,2406:f63f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2406:f640::,2406:f640:ffff:ffff:ffff:ffff:ffff:ffff,TW -2406:f641::,2406:f67f:ffff:ffff:ffff:ffff:ffff:ffff,AU +2406:f601::,2406:f67f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:f680::,2406:f680:ffff:ffff:ffff:ffff:ffff:ffff,BD -2406:f681::,2406:f6bf:ffff:ffff:ffff:ffff:ffff:ffff,AU -2406:f6c0::,2406:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,TW -2406:f6c1::,2406:f6ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2406:f681::,2406:f6ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:f700::,2406:f700:ffff:ffff:ffff:ffff:ffff:ffff,HK -2406:f701::,2406:f73f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2406:f740::,2406:f740:ffff:ffff:ffff:ffff:ffff:ffff,TW -2406:f741::,2406:f7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2406:f701::,2406:f7bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:f7c0::,2406:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:f7c1::,2406:f7ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:f800::,2406:f800:ffff:ffff:ffff:ffff:ffff:ffff,FJ @@ -30445,7 +30709,9 @@ 2407:3841::,2407:387f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:3880::,2407:3880:ff:ffff:ffff:ffff:ffff:ffff,HK 2407:3880:100::,2407:3880:100:ffff:ffff:ffff:ffff:ffff,SG -2407:3880:101::,2407:3880:ffff:ffff:ffff:ffff:ffff:ffff,HK +2407:3880:101::,2407:3880:101:ffff:ffff:ffff:ffff:ffff,HK +2407:3880:102::,2407:3880:103:ffff:ffff:ffff:ffff:ffff,SG +2407:3880:104::,2407:3880:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:3881::,2407:38ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:3900::,2407:3900:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:3901::,2407:393f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -31162,9 +31428,7 @@ 2407:a3c0::,2407:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:a3c1::,2407:a43f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:a440::,2407:a440:ffff:ffff:ffff:ffff:ffff:ffff,VN -2407:a441::,2407:a47f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2407:a480::,2407:a480:ffff:ffff:ffff:ffff:ffff:ffff,CN -2407:a481::,2407:a4bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:a441::,2407:a4bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:a4c0::,2407:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,VN 2407:a4c1::,2407:a4ff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:a500::,2407:a500:ffff:ffff:ffff:ffff:ffff:ffff,TH @@ -31469,9 +31733,16 @@ 2407:cdc0:a000::,2407:cdc0:a00f:ffff:ffff:ffff:ffff:ffff,US 2407:cdc0:a010::,2407:cdc0:c00f:ffff:ffff:ffff:ffff:ffff,HK 2407:cdc0:c010::,2407:cdc0:c02f:ffff:ffff:ffff:ffff:ffff,GB -2407:cdc0:c030::,2407:cdc0:e003:ffff:ffff:ffff:ffff:ffff,HK +2407:cdc0:c030::,2407:cdc0:cfff:ffff:ffff:ffff:ffff:ffff,HK +2407:cdc0:d000::,2407:cdc0:dfff:ffff:ffff:ffff:ffff:ffff,SG +2407:cdc0:e000::,2407:cdc0:e003:ffff:ffff:ffff:ffff:ffff,HK 2407:cdc0:e004::,2407:cdc0:e009:ffff:ffff:ffff:ffff:ffff,CN -2407:cdc0:e00a::,2407:cdc0:ffff:ffff:ffff:ffff:ffff:ffff,HK +2407:cdc0:e00a::,2407:cdc0:e00f:ffff:ffff:ffff:ffff:ffff,HK +2407:cdc0:e010::,2407:cdc0:e010:ffff:ffff:ffff:ffff:ffff,IT +2407:cdc0:e011::,2407:cdc0:e017:ffff:ffff:ffff:ffff:ffff,US +2407:cdc0:e018::,2407:cdc0:e018:ffff:ffff:ffff:ffff:ffff,CA +2407:cdc0:e019::,2407:cdc0:efff:ffff:ffff:ffff:ffff:ffff,HK +2407:cdc0:f000::,2407:cdc0:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:cdc1::,2407:ce3f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:ce40::,2407:ce40:ffff:ffff:ffff:ffff:ffff:ffff,VN 2407:ce41::,2407:ce7f:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -31500,13 +31771,12 @@ 2407:d200::,2407:d200:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:d201::,2407:d23f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:d240::,2407:d240:ffff:ffff:ffff:ffff:ffff:ffff,TW -2407:d241::,2407:d27f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2407:d280::,2407:d280:ffff:ffff:ffff:ffff:ffff:ffff,BD -2407:d281::,2407:d2bf:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:d241::,2407:d2bf:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:d2c0::,2407:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,TW 2407:d2c1::,2407:d33f:ffff:ffff:ffff:ffff:ffff:ffff,AU -2407:d340::,2407:d340:0:ffff:ffff:ffff:ffff:ffff,GB -2407:d340:1::,2407:d340:ffff:ffff:ffff:ffff:ffff:ffff,HK +2407:d340::,2407:d340:efff:ffff:ffff:ffff:ffff:ffff,HK +2407:d340:f000::,2407:d340:f000:ffff:ffff:ffff:ffff:ffff,GB +2407:d340:f001::,2407:d340:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:d341::,2407:d37f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:d380::,2407:d380:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:d381::,2407:d3bf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -31543,8 +31813,8 @@ 2407:d800::,2407:d800:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:d801::,2407:d83f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:d840::,2407:d840:0:ffff:ffff:ffff:ffff:ffff,SG -2407:d840:1::,2407:d840:1:ffff:ffff:ffff:ffff:ffff,HK -2407:d840:2::,2407:d840:ffff:ffff:ffff:ffff:ffff:ffff,SG +2407:d840:1::,2407:d840:2:ffff:ffff:ffff:ffff:ffff,HK +2407:d840:3::,2407:d840:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:d841::,2407:d87f:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:d880::,2407:d880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:d881::,2407:d8bf:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -32076,6 +32346,7 @@ 2600:2400::,2600:2407:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2500::,2600:250f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2600::,2600:260f:ffff:ffff:ffff:ffff:ffff:ffff,US +2600:26c6:8::,2600:26c6:8:ffff:ffff:ffff:ffff:ffff,?? 2600:2700::,2600:270f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2800::,2600:2803:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2900::,2600:290f:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -32141,7 +32412,9 @@ 2600:e000::,2600:e00f:ffff:ffff:ffff:ffff:ffff:ffff,CA 2600:e400::,2600:e40f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:e800::,2600:e80f:ffff:ffff:ffff:ffff:ffff:ffff,US +2600:ec00::,2600:ec0f:ffff:ffff:ffff:ffff:ffff:ffff,US 2601::,2601:fff:ffff:ffff:ffff:ffff:ffff:ffff,US +2601:8000::,2601:80ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2602::,2602:10f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:200::,2602:200:ffff:ffff:ffff:ffff:ffff:ffff,CA 2602:210::,2602:210:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -32152,6 +32425,8 @@ 2602:270::,2602:270:fff:ffff:ffff:ffff:ffff:ffff,US 2602:271::,2602:271:fff:ffff:ffff:ffff:ffff:ffff,US 2602:272::,2602:272:fff:ffff:ffff:ffff:ffff:ffff,US +2602:273::,2602:273:fff:ffff:ffff:ffff:ffff:ffff,US +2602:274::,2602:274:fff:ffff:ffff:ffff:ffff:ffff,US 2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:800::,2602:800:f:ffff:ffff:ffff:ffff:ffff,US 2602:800:1000::,2602:800:100f:ffff:ffff:ffff:ffff:ffff,US @@ -32371,6 +32646,62 @@ 2602:80e:c000::,2602:80e:c00f:ffff:ffff:ffff:ffff:ffff,US 2602:80e:d000::,2602:80e:d0ff:ffff:ffff:ffff:ffff:ffff,US 2602:80e:e000::,2602:80e:e00f:ffff:ffff:ffff:ffff:ffff,US +2602:80e:f000::,2602:80e:f00f:ffff:ffff:ffff:ffff:ffff,US +2602:80f::,2602:80f:f:ffff:ffff:ffff:ffff:ffff,US +2602:80f:1000::,2602:80f:100f:ffff:ffff:ffff:ffff:ffff,US +2602:80f:2000::,2602:80f:200f:ffff:ffff:ffff:ffff:ffff,US +2602:80f:3000::,2602:80f:30ff:ffff:ffff:ffff:ffff:ffff,US +2602:fb9d::,2602:fb9d:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fb9e::,2602:fb9e:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fb9f::,2602:fb9f:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba0::,2602:fba0:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba1::,2602:fba1:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba2::,2602:fba2:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba3::,2602:fba3:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba4::,2602:fba4:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba5::,2602:fba5:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fba6::,2602:fba6:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba7::,2602:fba7:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fba8::,2602:fba8:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fba9::,2602:fba9:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbaa::,2602:fbaa:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbab::,2602:fbab:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbac::,2602:fbac:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbad::,2602:fbad:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbae::,2602:fbae:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbaf::,2602:fbaf:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb0::,2602:fbb0:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:fbb1::,2602:fbb1:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb2::,2602:fbb2:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb3::,2602:fbb3:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb4::,2602:fbb4:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb5::,2602:fbb5:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb6::,2602:fbb6:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbb7::,2602:fbb7:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:fbb8::,2602:fbb8:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:fbb9::,2602:fbb9:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbba::,2602:fbba:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbbb::,2602:fbbb:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbbc::,2602:fbbc:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbbd::,2602:fbbd:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbbe::,2602:fbbe:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbbf::,2602:fbbf:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc0::,2602:fbc0:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc1::,2602:fbc1:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc2::,2602:fbc2:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc3::,2602:fbc3:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc4::,2602:fbc4:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc5::,2602:fbc5:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc6::,2602:fbc6:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc7::,2602:fbc7:ff:ffff:ffff:ffff:ffff:ffff,CA +2602:fbc8::,2602:fbc8:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbc9::,2602:fbc9:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbca::,2602:fbca:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbcb::,2602:fbcb:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbcc::,2602:fbcc:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbcd::,2602:fbcd:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbce::,2602:fbce:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fbcf::,2602:fbcf:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fbd0::,2602:fbd0:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fbd1::,2602:fbd1:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fbd2::,2602:fbd2:fff:ffff:ffff:ffff:ffff:ffff,US @@ -32403,8 +32734,7 @@ 2602:fbed::,2602:fbed:ff:ffff:ffff:ffff:ffff:ffff,US 2602:fbee::,2602:fbee:ff:ffff:ffff:ffff:ffff:ffff,US 2602:fbef::,2602:fbef:ff:ffff:ffff:ffff:ffff:ffff,US -2602:fbf0::,2602:fbf0:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fbf1::,2602:fbf1:ff:ffff:ffff:ffff:ffff:ffff,US +2602:fbf0::,2602:fbf1:ff:ffff:ffff:ffff:ffff:ffff,US 2602:fbf2::,2602:fbf2:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:fbf3::,2602:fbf3:ff:ffff:ffff:ffff:ffff:ffff,US 2602:fbf4::,2602:fbf4:ff:ffff:ffff:ffff:ffff:ffff,US @@ -32420,7 +32750,7 @@ 2602:fbfe::,2602:fbfe:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fbff::,2602:fbff:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fc00::,2602:fc00:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fc01::,2602:fc01:fff:ffff:ffff:ffff:ffff:ffff,EU +2602:fc01::,2602:fc01:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fc02::,2602:fc02:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fc03::,2602:fc03:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fc04::,2602:fc04:fff:ffff:ffff:ffff:ffff:ffff,US @@ -32682,7 +33012,6 @@ 2602:fd04::,2602:fd04:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd05::,2602:fd05:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd06::,2602:fd06:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fd07::,2602:fd07:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd08::,2602:fd08:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:fd09::,2602:fd09:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd0a::,2602:fd0a:fff:ffff:ffff:ffff:ffff:ffff,US @@ -32783,9 +33112,7 @@ 2602:fd6b::,2602:fd6b:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd6c::,2602:fd6c:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd6e::,2602:fd6e:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fd6f::,2602:fd6f:0:ffff:ffff:ffff:ffff:ffff,US -2602:fd6f:1::,2602:fd6f:1:ffff:ffff:ffff:ffff:ffff,JP -2602:fd6f:2::,2602:fd6f:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fd6f::,2602:fd6f:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd70::,2602:fd70:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd71::,2602:fd71:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fd72::,2602:fd72:fff:ffff:ffff:ffff:ffff:ffff,AI @@ -32973,7 +33300,6 @@ 2602:fe30::,2602:fe30:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe31::,2602:fe31:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe32::,2602:fe32:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fe33::,2602:fe33:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe34::,2602:fe34:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe35::,2602:fe35:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:fe36::,2602:fe36:fff:ffff:ffff:ffff:ffff:ffff,CA @@ -33046,12 +33372,10 @@ 2602:fe81::,2602:fe81:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:fe82::,2602:fe82:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe85::,2602:fe85:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fe86::,2602:fe86:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe87::,2602:fe87:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe88::,2602:fe88:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fe89::,2602:fe89:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe8a::,2602:fe8a:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fe8b::,2602:fe8b:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:fe8b::,2602:fe8b:ffff:ffff:ffff:ffff:ffff:ffff,CA 2602:fe8c::,2602:fe8c:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe8d::,2602:fe8d:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fe8f::,2602:fe8f:fff:ffff:ffff:ffff:ffff:ffff,US @@ -33113,7 +33437,13 @@ 2602:fecf::,2602:fecf:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fed0::,2602:fed0:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fed1::,2602:fed1:fff:ffff:ffff:ffff:ffff:ffff,US -2602:fed2::,2602:fed2:ffff:ffff:ffff:ffff:ffff:ffff,CA +2602:fed2::,2602:fed2:7105:ffff:ffff:ffff:ffff:ffff,CA +2602:fed2:7106::,2602:fed2:7106:ffff:ffff:ffff:ffff:ffff,US +2602:fed2:7107::,2602:fed2:7307:ffff:ffff:ffff:ffff:ffff,CA +2602:fed2:7308::,2602:fed2:7308:ffff:ffff:ffff:ffff:ffff,US +2602:fed2:7309::,2602:fed2:7708:ffff:ffff:ffff:ffff:ffff,CA +2602:fed2:7709::,2602:fed2:7709:ffff:ffff:ffff:ffff:ffff,US +2602:fed2:770a::,2602:fed2:ffff:ffff:ffff:ffff:ffff:ffff,CA 2602:fed3::,2602:fed3:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fed4::,2602:fed4:fff:ffff:ffff:ffff:ffff:ffff,US 2602:fed5::,2602:fed5:fff:ffff:ffff:ffff:ffff:ffff,US @@ -33362,7 +33692,23 @@ 2603:b000::,2603:b0ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2603:c000::,2603:c0ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2603:d000::,2603:d0ff:ffff:ffff:ffff:ffff:ffff:ffff,US -2603:e000::,2604:0:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:e000::,2603:f0ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:f100::,2603:f107:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:f108::,2603:f2ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:f300::,2603:f307:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:f308::,2603:f3df:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:f3e0::,2603:f3e7:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:f3e8::,2603:f75f:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:f760::,2603:f767:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:f768::,2603:f957:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:f958::,2603:f95f:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:f960::,2603:fa2f:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:fa30::,2603:fa37:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:fa38::,2603:fbd7:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:fbd8::,2603:fbdf:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:fbe0::,2603:fc37:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:fc38::,2603:fc3f:ffff:ffff:ffff:ffff:ffff:ffff,BR +2603:fc40::,2604:0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:10::,2604:10:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:50::,2604:50:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:90::,2604:90:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -33533,7 +33879,7 @@ 2604:2cc0::,2604:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2d00::,2604:2d00:fff:ffff:ffff:ffff:ffff:ffff,US 2604:2d40::,2604:2d40:ffff:ffff:ffff:ffff:ffff:ffff,PR -2604:2d80::,2604:2d80:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2d80::,2604:2d8f:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2dc0::,2604:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2e00::,2604:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2e40::,2604:2e40:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -34284,6 +34630,7 @@ 2604:fa40::,2604:fa40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:fa80::,2604:fa80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:fac0::,2604:fac0:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:fac1::,2604:fac3:ffff:ffff:ffff:ffff:ffff:ffff,?? 2604:fb00::,2604:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:fb40::,2604:fb40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:fb80::,2604:fb80:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -34663,7 +35010,15 @@ 2605:6340::,2605:6340:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:6380::,2605:6380:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:63c0::,2605:63c0:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:6400::,2605:640f:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:6400::,2605:6400:2:ffff:ffff:ffff:ffff:ffff,US +2605:6400:3::,2605:6400:3:ffff:ffff:ffff:ffff:ffff,LU +2605:6400:4::,2605:6400:2f:ffff:ffff:ffff:ffff:ffff,US +2605:6400:30::,2605:6400:30:ffff:ffff:ffff:ffff:ffff,LU +2605:6400:31::,2605:6400:2ff:ffff:ffff:ffff:ffff:ffff,US +2605:6400:300::,2605:6400:300:ffff:ffff:ffff:ffff:ffff,LU +2605:6400:301::,2605:6400:bfff:ffff:ffff:ffff:ffff:ffff,US +2605:6400:c000::,2605:6400:ffff:ffff:ffff:ffff:ffff:ffff,LU +2605:6401::,2605:640f:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:6440::,2605:6440:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:6480::,2605:6480:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:64c0::,2605:64c0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -34781,7 +35136,6 @@ 2605:81c0::,2605:81c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:8200::,2605:8200:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:8240::,2605:8240:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:8280::,2605:8280:ffff:ffff:ffff:ffff:ffff:ffff,?? 2605:82c0::,2605:82c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:8300::,2605:8300:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:8340::,2605:8340:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -35190,7 +35544,6 @@ 2605:ed80::,2605:ed80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:edc0::,2605:edc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ee00::,2605:ee00:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:ee40::,2605:ee40:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ee80::,2605:ee80:fff:ffff:ffff:ffff:ffff:ffff,US 2605:eec0::,2605:eec0:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ef00::,2605:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -35231,7 +35584,6 @@ 2605:f840::,2605:f840:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f880::,2605:f880:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f8c0::,2605:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:f900::,2605:f900:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f940::,2605:f940:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f980::,2605:f980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f9c0::,2605:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -35361,7 +35713,9 @@ 2606:1980::,2606:1980:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:19c0::,2606:19c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1a00::,2606:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:1a40::,2606:1a40:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:1a40::,2606:1a40:2016:ffff:ffff:ffff:ffff:ffff,CA +2606:1a40:2017::,2606:1a40:2017:ffff:ffff:ffff:ffff:ffff,IN +2606:1a40:2018::,2606:1a40:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:1a80::,2606:1a80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1ac0::,2606:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1b00::,2606:1b00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -35890,7 +36244,7 @@ 2606:a2c0::,2606:a2c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a300::,2606:a300:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a340::,2606:a340:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:a380::,2606:a380:ffff:ffff:ffff:ffff:ffff:ffff,?? +2606:a380::,2606:a380:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a3c0::,2606:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a400::,2606:a400:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a440::,2606:a440:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -35931,47 +36285,90 @@ 2606:ad00::,2606:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ad40::,2606:ad40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ad80::,2606:ad80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:adc0::,2606:adc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ae00::,2606:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ae04:8020::,2606:ae04:8020:ffff:ffff:ffff:ffff:ffff,?? +2606:ae40::,2606:ae40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ae80::,2606:ae80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:aec0::,2606:aec0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:af00::,2606:af00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:af40::,2606:af40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:af80::,2606:af80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:afc0::,2606:afc0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:b000::,2606:b000:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b040::,2606:b040:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b080::,2606:b080:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b0c0::,2606:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b100::,2606:b100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b140::,2606:b140:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b180::,2606:b180:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b1c0::,2606:b1c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b200::,2606:b200:ffff:ffff:ffff:ffff:ffff:ffff,KY +2606:b240::,2606:b240:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:b280::,2606:b280:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b2c0::,2606:b2c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b300::,2606:b300:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b340::,2606:b340:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:b380::,2606:b380:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b3c0::,2606:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b400::,2606:b400:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b440::,2606:b440:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b4c0::,2606:b4c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b500::,2606:b500:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b540::,2606:b540:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b580::,2606:b580:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b5c0::,2606:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:b600::,2606:b600:fff:ffff:ffff:ffff:ffff:ffff,US +2606:b640::,2606:b640:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b680::,2606:b680:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b6c0::,2606:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:b700::,2606:b700:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b740::,2606:b740:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:b780::,2606:b780:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b7c0::,2606:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,PR 2606:b800::,2606:b800:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:b840::,2606:b840:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b880::,2606:b880:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b8c0::,2606:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b900::,2606:b900:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b940::,2606:b940:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:b980::,2606:b980:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:b9c0::,2606:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ba00::,2606:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:ba40::,2606:ba40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ba80::,2606:ba80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bac0::,2606:bac0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bb00::,2606:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bb40::,2606:bb40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bb80::,2606:bb80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bbc0::,2606:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bc00::,2606:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bc40::,2606:bc40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bc80::,2606:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bcc0::,2606:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bd00::,2606:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:bd40::,2606:bd40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bd80::,2606:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:bdc0::,2606:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:be00::,2606:be00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:be40::,2606:be40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:be80::,2606:be80:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:bec0::,2606:bec0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bf00::,2606:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bf40::,2606:bf40:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:bf80::,2606:bf80:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:bfc0::,2606:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c000::,2606:c000:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:c040::,2606:c040:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c080::,2606:c080:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:c0c0::,2606:c0c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c100::,2606:c100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:c140::,2606:c140:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c180::,2606:c180:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:c1c0::,2606:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:c240::,2606:c240:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c280::,2606:c280:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:c2c0::,2606:c2c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c300::,2606:c300:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c380::,2606:c380:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:c480::,2606:c480:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -36166,7 +36563,6 @@ 2607:2980::,2607:2980:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:2a00::,2607:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:2a80::,2607:2a80:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:2a99:4::,2607:2a99:4:ffff:ffff:ffff:ffff:ffff,?? 2607:2b00::,2607:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:2b80::,2607:2b80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:2c00::,2607:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -36288,7 +36684,9 @@ 2607:6a00::,2607:6a00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6a80::,2607:6a80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6b00::,2607:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:6b80::,2607:6b80:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:6b80::,2607:6b80:26:ffff:ffff:ffff:ffff:ffff,US +2607:6b80:27::,2607:6b80:31:ffff:ffff:ffff:ffff:ffff,BR +2607:6b80:32::,2607:6b80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6c00::,2607:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6c80::,2607:6c80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:6d00::,2607:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -36336,7 +36734,6 @@ 2607:8400::,2607:8400:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:8480::,2607:8480:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:8500::,2607:8500:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:8580::,2607:8580:ffff:ffff:ffff:ffff:ffff:ffff,VI 2607:8600::,2607:8600:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:8680::,2607:8680:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:8700::,2607:8700:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -36464,7 +36861,7 @@ 2607:cc00::,2607:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:cc80::,2607:cc80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:cd00::,2607:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:cd80::,2607:cd80:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:cd80::,2607:cd8f:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:ce00::,2607:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:ce80::,2607:ce80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:cf00::,2607:cf03:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -37270,7 +37667,6 @@ 2620:1:2000::,2620:1:2000:ffff:ffff:ffff:ffff:ffff,US 2620:1:4000::,2620:1:4000:ffff:ffff:ffff:ffff:ffff,US 2620:1:6000::,2620:1:6000:ffff:ffff:ffff:ffff:ffff,US -2620:1:8000::,2620:1:8000:ffff:ffff:ffff:ffff:ffff,US 2620:1:a000::,2620:1:a000:ffff:ffff:ffff:ffff:ffff,US 2620:1:c000::,2620:1:c000:ffff:ffff:ffff:ffff:ffff,US 2620:2::,2620:2:0:ffff:ffff:ffff:ffff:ffff,US @@ -37319,7 +37715,6 @@ 2620:8:4300::,2620:8:4300:ffff:ffff:ffff:ffff:ffff,US 2620:8:8200::,2620:8:8200:ffff:ffff:ffff:ffff:ffff,US 2620:8:c100::,2620:8:c100:ffff:ffff:ffff:ffff:ffff,US -2620:9:2000::,2620:9:2000:ffff:ffff:ffff:ffff:ffff,US 2620:9:4000::,2620:9:4000:ffff:ffff:ffff:ffff:ffff,US 2620:9:6000::,2620:9:6000:ffff:ffff:ffff:ffff:ffff,US 2620:9:8000::,2620:9:8000:ffff:ffff:ffff:ffff:ffff,US @@ -37616,7 +38011,6 @@ 2620:36:2000::,2620:36:2000:ffff:ffff:ffff:ffff:ffff,US 2620:36:4000::,2620:36:400f:ffff:ffff:ffff:ffff:ffff,CA 2620:36:8000::,2620:36:8000:ffff:ffff:ffff:ffff:ffff,US -2620:36:a000::,2620:36:a000:ffff:ffff:ffff:ffff:ffff,US 2620:36:c000::,2620:36:c000:ffff:ffff:ffff:ffff:ffff,CA 2620:36:e000::,2620:36:e00f:ffff:ffff:ffff:ffff:ffff,US 2620:37::,2620:37:0:ffff:ffff:ffff:ffff:ffff,US @@ -37923,7 +38317,6 @@ 2620:65:8000::,2620:65:800f:ffff:ffff:ffff:ffff:ffff,US 2620:65:a000::,2620:65:a000:ffff:ffff:ffff:ffff:ffff,US 2620:65:c000::,2620:65:c000:ffff:ffff:ffff:ffff:ffff,US -2620:65:e000::,2620:65:e000:ffff:ffff:ffff:ffff:ffff,US 2620:66::,2620:66:0:ffff:ffff:ffff:ffff:ffff,CA 2620:66:2000::,2620:66:2000:ffff:ffff:ffff:ffff:ffff,US 2620:66:4000::,2620:66:400f:ffff:ffff:ffff:ffff:ffff,US @@ -38321,7 +38714,7 @@ 2620:9f:c000::,2620:9f:c00f:ffff:ffff:ffff:ffff:ffff,US 2620:9f:e000::,2620:9f:e000:ffff:ffff:ffff:ffff:ffff,US 2620:a0::,2620:a0:0:ffff:ffff:ffff:ffff:ffff,US -2620:a0:2000::,2620:a0:2000:ffff:ffff:ffff:ffff:ffff,US +2620:a0:2000::,2620:a0:200f:ffff:ffff:ffff:ffff:ffff,US 2620:a0:4000::,2620:a0:400f:ffff:ffff:ffff:ffff:ffff,US 2620:a0:6000::,2620:a0:6000:ffff:ffff:ffff:ffff:ffff,US 2620:a0:8000::,2620:a0:8000:ffff:ffff:ffff:ffff:ffff,US @@ -38368,12 +38761,19 @@ 2620:a6:6000::,2620:a6:6000:ffff:ffff:ffff:ffff:ffff,US 2620:a6:a000::,2620:a6:a000:ffff:ffff:ffff:ffff:ffff,US 2620:a6:c000::,2620:a6:c000:ffff:ffff:ffff:ffff:ffff,US +2620:a6:e000::,2620:a6:e000:ffff:ffff:ffff:ffff:ffff,US 2620:a7::,2620:a7:0:ffff:ffff:ffff:ffff:ffff,US +2620:a7:2000::,2620:a7:2000:ffff:ffff:ffff:ffff:ffff,US 2620:a7:4000::,2620:a7:4000:ffff:ffff:ffff:ffff:ffff,US +2620:a7:6000::,2620:a7:6000:ffff:ffff:ffff:ffff:ffff,CA 2620:a7:8000::,2620:a7:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a7:a000::,2620:a7:a000:ffff:ffff:ffff:ffff:ffff,US 2620:a7:c000::,2620:a7:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:a7:e000::,2620:a7:e000:ffff:ffff:ffff:ffff:ffff,US 2620:a8::,2620:a8:0:ffff:ffff:ffff:ffff:ffff,US +2620:a8:2000::,2620:a8:2000:ffff:ffff:ffff:ffff:ffff,US 2620:a8:4000::,2620:a8:4000:ffff:ffff:ffff:ffff:ffff,US +2620:a8:6000::,2620:a8:6000:ffff:ffff:ffff:ffff:ffff,CA 2620:a8:8000::,2620:a8:8000:ffff:ffff:ffff:ffff:ffff,US 2620:a8:c000::,2620:a8:c000:ffff:ffff:ffff:ffff:ffff,US 2620:a9::,2620:a9:0:ffff:ffff:ffff:ffff:ffff,US @@ -39040,8 +39440,7 @@ 2620:117:8000::,2620:117:80ff:ffff:ffff:ffff:ffff:ffff,US 2620:117:9000::,2620:117:90ff:ffff:ffff:ffff:ffff:ffff,US 2620:117:a000::,2620:117:a0ff:ffff:ffff:ffff:ffff:ffff,US -2620:117:b000::,2620:117:b0ff:ffff:ffff:ffff:ffff:ffff,US -2620:117:c000::,2620:117:c0ff:ffff:ffff:ffff:ffff:ffff,US +2620:117:b000::,2620:117:c0ff:ffff:ffff:ffff:ffff:ffff,US 2620:117:e000::,2620:117:e0ff:ffff:ffff:ffff:ffff:ffff,US 2620:118:1000::,2620:118:10ff:ffff:ffff:ffff:ffff:ffff,US 2620:118:2000::,2620:118:20ff:ffff:ffff:ffff:ffff:ffff,US @@ -39073,7 +39472,6 @@ 2620:119:d000::,2620:119:d0ff:ffff:ffff:ffff:ffff:ffff,US 2620:119:e000::,2620:119:e0ff:ffff:ffff:ffff:ffff:ffff,US 2620:119:f000::,2620:119:f00f:ffff:ffff:ffff:ffff:ffff,US -2620:11a:1000::,2620:11a:100f:ffff:ffff:ffff:ffff:ffff,CA 2620:11a:3000::,2620:11a:30ff:ffff:ffff:ffff:ffff:ffff,US 2620:11a:4000::,2620:11a:40ff:ffff:ffff:ffff:ffff:ffff,US 2620:11a:6000::,2620:11a:600f:ffff:ffff:ffff:ffff:ffff,US @@ -39461,7 +39859,6 @@ 2620:133:b000::,2620:133:b0ff:ffff:ffff:ffff:ffff:ffff,CA 2620:133:c000::,2620:133:c00f:ffff:ffff:ffff:ffff:ffff,US 2620:133:d000::,2620:133:d0ff:ffff:ffff:ffff:ffff:ffff,US -2620:133:f000::,2620:133:f00f:ffff:ffff:ffff:ffff:ffff,US 2620:134::,2620:134:f:ffff:ffff:ffff:ffff:ffff,US 2620:134:1000::,2620:134:100f:ffff:ffff:ffff:ffff:ffff,US 2620:134:3000::,2620:134:300f:ffff:ffff:ffff:ffff:ffff,CA @@ -39536,7 +39933,7 @@ 2620:138:b000::,2620:138:b0ff:ffff:ffff:ffff:ffff:ffff,US 2620:138:c000::,2620:138:c00f:ffff:ffff:ffff:ffff:ffff,US 2620:138:d000::,2620:138:d00f:ffff:ffff:ffff:ffff:ffff,US -2620:138:e000::,2620:138:e00f:ffff:ffff:ffff:ffff:ffff,US +2620:138:e000::,2620:138:e0ff:ffff:ffff:ffff:ffff:ffff,US 2620:138:f000::,2620:138:f0ff:ffff:ffff:ffff:ffff:ffff,US 2620:139:1000::,2620:139:10ff:ffff:ffff:ffff:ffff:ffff,US 2620:139:2000::,2620:139:20ff:ffff:ffff:ffff:ffff:ffff,US @@ -39797,7 +40194,19 @@ 2800:1b0::,2800:1b0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2800:1c0::,2800:1c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:1d0::,2800:1d0:ffff:ffff:ffff:ffff:ffff:ffff,CO -2800:1e0::,2800:1e0:ffff:ffff:ffff:ffff:ffff:ffff,CO +2800:1e0::,2800:1e0:102f:ffff:ffff:ffff:ffff:ffff,CO +2800:1e0:1030::,2800:1e0:103f:ffff:ffff:ffff:ffff:ffff,AR +2800:1e0:1040::,2800:1e0:104f:ffff:ffff:ffff:ffff:ffff,PE +2800:1e0:1050::,2800:1e0:105f:ffff:ffff:ffff:ffff:ffff,CO +2800:1e0:1060::,2800:1e0:106f:ffff:ffff:ffff:ffff:ffff,CL +2800:1e0:1070::,2800:1e0:107f:ffff:ffff:ffff:ffff:ffff,MX +2800:1e0:1080::,2800:1e0:108f:ffff:ffff:ffff:ffff:ffff,CO +2800:1e0:1090::,2800:1e0:109f:ffff:ffff:ffff:ffff:ffff,EC +2800:1e0:10a0::,2800:1e0:1fff:ffff:ffff:ffff:ffff:ffff,CO +2800:1e0:2000::,2800:1e0:20ff:ffff:ffff:ffff:ffff:ffff,US +2800:1e0:2100::,2800:1e0:23ff:ffff:ffff:ffff:ffff:ffff,CO +2800:1e0:2400::,2800:1e0:240f:ffff:ffff:ffff:ffff:ffff,BR +2800:1e0:2410::,2800:1e0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2800:1f0::,2800:1f0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2800:200::,2800:200:ffff:ffff:ffff:ffff:ffff:ffff,PE 2800:220::,2800:220:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -39806,7 +40215,9 @@ 2800:250::,2800:250:ffff:ffff:ffff:ffff:ffff:ffff,UY 2800:260::,2800:26f:ffff:ffff:ffff:ffff:ffff:ffff,CO 2800:270::,2800:270:ffff:ffff:ffff:ffff:ffff:ffff,CL -2800:280::,2800:280:ffff:ffff:ffff:ffff:ffff:ffff,SX +2800:280::,2800:280:4001:ffff:ffff:ffff:ffff:ffff,SX +2800:280:4002::,2800:280:4002:ffff:ffff:ffff:ffff:ffff,US +2800:280:4003::,2800:280:ffff:ffff:ffff:ffff:ffff:ffff,SX 2800:290::,2800:290:ffff:ffff:ffff:ffff:ffff:ffff,CL 2800:2a0::,2800:2a0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2800:2b0::,2800:2b0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -39855,7 +40266,11 @@ 2800:5a0::,2800:5a0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:5b0::,2800:5b0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2800:5c0::,2800:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CO -2800:5d0::,2800:5d0:ffff:ffff:ffff:ffff:ffff:ffff,PA +2800:5d0::,2800:5d0:212:ffff:ffff:ffff:ffff:ffff,PA +2800:5d0:213::,2800:5d0:213:ffff:ffff:ffff:ffff:ffff,US +2800:5d0:214::,2800:5d0:800:ffff:ffff:ffff:ffff:ffff,PA +2800:5d0:801::,2800:5d0:801:ffff:ffff:ffff:ffff:ffff,US +2800:5d0:802::,2800:5d0:ffff:ffff:ffff:ffff:ffff:ffff,PA 2800:5e0::,2800:5e0:ffff:ffff:ffff:ffff:ffff:ffff,VE 2800:5f0::,2800:5f0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2800:600::,2800:600:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -39907,7 +40322,8 @@ 2800:9f0::,2800:9f0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2800:a00::,2800:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:a10::,2800:a10:ffff:ffff:ffff:ffff:ffff:ffff,AR -2800:a20::,2800:a20:ffff:ffff:ffff:ffff:ffff:ffff,CW +2800:a20::,2800:a20:7fff:ffff:ffff:ffff:ffff:ffff,AW +2800:a20:8000::,2800:a20:ffff:ffff:ffff:ffff:ffff:ffff,CW 2800:a30::,2800:a30:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:a40::,2800:a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:a50::,2800:a50:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -39929,7 +40345,34 @@ 2800:b70::,2800:b70:ffff:ffff:ffff:ffff:ffff:ffff,CO 2800:b80::,2800:b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:b90::,2800:b90:ffff:ffff:ffff:ffff:ffff:ffff,CR -2800:ba0::,2800:ba0:ffff:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0::,2800:ba0:0:ffff:ffff:ffff:ffff:ffff,US +2800:ba0:1::,2800:ba0:1:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:2::,2800:ba0:2:ffff:ffff:ffff:ffff:ffff,PE +2800:ba0:3::,2800:ba0:3:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:4::,2800:ba0:4:ffff:ffff:ffff:ffff:ffff,US +2800:ba0:5::,2800:ba0:5:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:6::,2800:ba0:6:ffff:ffff:ffff:ffff:ffff,MX +2800:ba0:7::,2800:ba0:7:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:8::,2800:ba0:8:ffff:ffff:ffff:ffff:ffff,CO +2800:ba0:9::,2800:ba0:f:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:10::,2800:ba0:10:ffff:ffff:ffff:ffff:ffff,US +2800:ba0:11::,2800:ba0:11:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:12::,2800:ba0:12:ffff:ffff:ffff:ffff:ffff,US +2800:ba0:13::,2800:ba0:13:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:14::,2800:ba0:14:ffff:ffff:ffff:ffff:ffff,PA +2800:ba0:15::,2800:ba0:17:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:18::,2800:ba0:18:ffff:ffff:ffff:ffff:ffff,EC +2800:ba0:19::,2800:ba0:1f:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:20::,2800:ba0:20:ffff:ffff:ffff:ffff:ffff,CL +2800:ba0:21::,2800:ba0:21:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:22::,2800:ba0:22:ffff:ffff:ffff:ffff:ffff,BR +2800:ba0:23::,2800:ba0:23:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:24::,2800:ba0:24:ffff:ffff:ffff:ffff:ffff,BR +2800:ba0:25::,2800:ba0:25:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:26::,2800:ba0:26:ffff:ffff:ffff:ffff:ffff,BR +2800:ba0:27::,2800:ba0:69:ffff:ffff:ffff:ffff:ffff,AR +2800:ba0:6a::,2800:ba0:6a:ffff:ffff:ffff:ffff:ffff,MX +2800:ba0:6b::,2800:ba0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:bb0::,2800:bbf:ffff:ffff:ffff:ffff:ffff:ffff,AR 2800:bc0::,2800:bc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2800:bd0::,2800:bd0:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -40070,6 +40513,7 @@ 2801:11:8000::,2801:11:8000:ffff:ffff:ffff:ffff:ffff,CO 2801:11:8800::,2801:11:8800:ffff:ffff:ffff:ffff:ffff,CO 2801:11:9000::,2801:11:9000:ffff:ffff:ffff:ffff:ffff,CO +2801:11:9800::,2801:11:9800:ffff:ffff:ffff:ffff:ffff,EC 2801:11:a000::,2801:11:a000:ffff:ffff:ffff:ffff:ffff,VE 2801:11:a800::,2801:11:a800:ffff:ffff:ffff:ffff:ffff,BO 2801:11:b000::,2801:11:b000:ffff:ffff:ffff:ffff:ffff,AR @@ -40120,6 +40564,7 @@ 2801:13:8000::,2801:13:8000:ffff:ffff:ffff:ffff:ffff,SV 2801:13:8800::,2801:13:8800:ffff:ffff:ffff:ffff:ffff,PA 2801:13:9000::,2801:13:9000:ffff:ffff:ffff:ffff:ffff,AR +2801:13:9800::,2801:13:9800:ffff:ffff:ffff:ffff:ffff,CO 2801:13:a000::,2801:13:a000:ffff:ffff:ffff:ffff:ffff,CO 2801:13:a800::,2801:13:a800:ffff:ffff:ffff:ffff:ffff,CO 2801:13:b000::,2801:13:b000:ffff:ffff:ffff:ffff:ffff,AR @@ -40166,6 +40611,7 @@ 2801:15:7000::,2801:15:7000:ffff:ffff:ffff:ffff:ffff,CO 2801:15:8000::,2801:15:800f:ffff:ffff:ffff:ffff:ffff,CR 2801:15:8800::,2801:15:8800:ffff:ffff:ffff:ffff:ffff,NI +2801:15:9800::,2801:15:9800:ffff:ffff:ffff:ffff:ffff,CO 2801:15:a000::,2801:15:a000:ffff:ffff:ffff:ffff:ffff,DO 2801:15:a800::,2801:15:a800:ffff:ffff:ffff:ffff:ffff,CO 2801:15:b000::,2801:15:b000:ffff:ffff:ffff:ffff:ffff,AR @@ -40190,6 +40636,7 @@ 2801:16:7000::,2801:16:7000:ffff:ffff:ffff:ffff:ffff,AR 2801:16:8800::,2801:16:8800:ffff:ffff:ffff:ffff:ffff,AR 2801:16:9000::,2801:16:9000:ffff:ffff:ffff:ffff:ffff,BO +2801:16:9800::,2801:16:9800:ffff:ffff:ffff:ffff:ffff,EC 2801:16:a000::,2801:16:a000:ffff:ffff:ffff:ffff:ffff,CR 2801:16:a800::,2801:16:a800:ffff:ffff:ffff:ffff:ffff,CO 2801:16:b000::,2801:16:b000:ffff:ffff:ffff:ffff:ffff,CL @@ -40260,6 +40707,7 @@ 2801:19:8000::,2801:19:8000:ffff:ffff:ffff:ffff:ffff,EC 2801:19:8800::,2801:19:8800:ffff:ffff:ffff:ffff:ffff,AR 2801:19:9000::,2801:19:9000:ffff:ffff:ffff:ffff:ffff,AR +2801:19:9800::,2801:19:9800:ffff:ffff:ffff:ffff:ffff,CO 2801:19:a000::,2801:19:a000:ffff:ffff:ffff:ffff:ffff,BO 2801:19:a800::,2801:19:a800:ffff:ffff:ffff:ffff:ffff,CO 2801:19:b000::,2801:19:b000:ffff:ffff:ffff:ffff:ffff,AR @@ -40289,7 +40737,6 @@ 2801:1a:c000::,2801:1a:c000:ffff:ffff:ffff:ffff:ffff,CO 2801:1a:c800::,2801:1a:c800:ffff:ffff:ffff:ffff:ffff,CO 2801:1a:e000::,2801:1a:e000:ffff:ffff:ffff:ffff:ffff,DO -2801:1a:e800::,2801:1a:e800:ffff:ffff:ffff:ffff:ffff,CR 2801:1a:f000::,2801:1a:f000:ffff:ffff:ffff:ffff:ffff,CO 2801:1b::,2801:1b:0:ffff:ffff:ffff:ffff:ffff,CR 2801:1b:800::,2801:1b:800:ffff:ffff:ffff:ffff:ffff,CO @@ -40356,6 +40803,7 @@ 2801:1d:8000::,2801:1d:8000:ffff:ffff:ffff:ffff:ffff,AR 2801:1d:8800::,2801:1d:880f:ffff:ffff:ffff:ffff:ffff,CO 2801:1d:9000::,2801:1d:9000:ffff:ffff:ffff:ffff:ffff,CO +2801:1d:9800::,2801:1d:9800:ffff:ffff:ffff:ffff:ffff,CO 2801:1d:a000::,2801:1d:a00f:ffff:ffff:ffff:ffff:ffff,CR 2801:1d:a800::,2801:1d:a800:ffff:ffff:ffff:ffff:ffff,CL 2801:1d:b000::,2801:1d:b000:ffff:ffff:ffff:ffff:ffff,CO @@ -40380,6 +40828,7 @@ 2801:1e:8000::,2801:1e:8000:ffff:ffff:ffff:ffff:ffff,CR 2801:1e:8800::,2801:1e:8800:ffff:ffff:ffff:ffff:ffff,EC 2801:1e:9000::,2801:1e:9000:ffff:ffff:ffff:ffff:ffff,SV +2801:1e:9800::,2801:1e:9800:ffff:ffff:ffff:ffff:ffff,CO 2801:1e:a000::,2801:1e:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:1e:a800::,2801:1e:a800:ffff:ffff:ffff:ffff:ffff,AR 2801:1e:b000::,2801:1e:b000:ffff:ffff:ffff:ffff:ffff,AR @@ -40906,6 +41355,8 @@ 2801:80:3ec0::,2801:80:3ecf:ffff:ffff:ffff:ffff:ffff,BR 2801:80:3ee0::,2801:80:3ee0:ffff:ffff:ffff:ffff:ffff,BR 2801:80:3ef0::,2801:80:3ef0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:3f00::,2801:80:3f00:ffff:ffff:ffff:ffff:ffff,BR +2801:80:3f10::,2801:80:3f10:ffff:ffff:ffff:ffff:ffff,BR 2801:82::,2801:82:ffff:ffff:ffff:ffff:ffff:ffff,BR 2801:84::,2801:84:ffff:ffff:ffff:ffff:ffff:ffff,BR 2801:86::,2801:86:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -40987,6 +41438,7 @@ 2801:12a::,2801:12a:f:ffff:ffff:ffff:ffff:ffff,CO 2801:12e::,2801:12e:f:ffff:ffff:ffff:ffff:ffff,CO 2801:130::,2801:130:fff:ffff:ffff:ffff:ffff:ffff,CO +2801:131::,2801:131:f:ffff:ffff:ffff:ffff:ffff,CO 2801:132::,2801:132:f:ffff:ffff:ffff:ffff:ffff,CO 2801:134::,2801:134:1f:ffff:ffff:ffff:ffff:ffff,CO 2801:136::,2801:136:f:ffff:ffff:ffff:ffff:ffff,CO @@ -41003,6 +41455,7 @@ 2801:14c::,2801:14c:f:ffff:ffff:ffff:ffff:ffff,HN 2801:14e::,2801:14e:f:ffff:ffff:ffff:ffff:ffff,CO 2801:150::,2801:150:ffff:ffff:ffff:ffff:ffff:ffff,PE +2801:151::,2801:151:fff:ffff:ffff:ffff:ffff:ffff,CR 2801:152::,2801:152:ff:ffff:ffff:ffff:ffff:ffff,CO 2801:154::,2801:154:3f:ffff:ffff:ffff:ffff:ffff,CO 2801:156::,2801:156:f:ffff:ffff:ffff:ffff:ffff,CO @@ -41035,9 +41488,9 @@ 2801:188::,2801:188:ff:ffff:ffff:ffff:ffff:ffff,AR 2801:18a::,2801:18a:f:ffff:ffff:ffff:ffff:ffff,CO 2801:18c::,2801:18c:f:ffff:ffff:ffff:ffff:ffff,CO -2801:18c:10::,2801:18c:ffff:ffff:ffff:ffff:ffff:ffff,?? 2801:18e::,2801:18e:0:ffff:ffff:ffff:ffff:ffff,CO 2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO +2801:191::,2801:191:ff:ffff:ffff:ffff:ffff:ffff,CO 2801:192::,2801:192:ff:ffff:ffff:ffff:ffff:ffff,CO 2801:194::,2801:194:f:ffff:ffff:ffff:ffff:ffff,CO 2801:196::,2801:196:f:ffff:ffff:ffff:ffff:ffff,CO @@ -41071,6 +41524,7 @@ 2801:1cc::,2801:1cc:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1ce::,2801:1ce:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1d0::,2801:1d0:f:ffff:ffff:ffff:ffff:ffff,CO +2801:1d1::,2801:1d1:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1d2::,2801:1d2:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1d4::,2801:1d4:fff:ffff:ffff:ffff:ffff:ffff,CR 2801:1d6::,2801:1d6:ff:ffff:ffff:ffff:ffff:ffff,CO @@ -41095,13 +41549,22 @@ 2801:1fa::,2801:1fa:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1fc::,2801:1fc:ff:ffff:ffff:ffff:ffff:ffff,CO 2801:1fe::,2801:1fe:ff:ffff:ffff:ffff:ffff:ffff,CO -2802::,2802:3:ffff:ffff:ffff:ffff:ffff:ffff,CO +2802::,2802:2:ffff:ffff:ffff:ffff:ffff:ffff,CO +2802:3::,2802:3:1fff:ffff:ffff:ffff:ffff:ffff,PA +2802:3:2000::,2802:3:3fff:ffff:ffff:ffff:ffff:ffff,PE +2802:3:4000::,2802:3:5fff:ffff:ffff:ffff:ffff:ffff,MX +2802:3:6000::,2802:3:7fff:ffff:ffff:ffff:ffff:ffff,EC +2802:3:8000::,2802:3:9fff:ffff:ffff:ffff:ffff:ffff,BR +2802:3:a000::,2802:3:bfff:ffff:ffff:ffff:ffff:ffff,CO +2802:3:c000::,2802:3:cfff:ffff:ffff:ffff:ffff:ffff,GT +2802:3:d000::,2802:3:ffff:ffff:ffff:ffff:ffff:ffff,CO 2802:8000::,2802:80ff:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803::,2803:0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:10::,2803:10:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:40::,2803:40:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:60::,2803:60:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:80::,2803:80:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:80::,2803:80:7fff:ffff:ffff:ffff:ffff:ffff,BZ +2803:80:8000::,2803:80:ffff:ffff:ffff:ffff:ffff:ffff,BR 2803:a0::,2803:a0:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:b4::,2803:b4:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:c0::,2803:c0:ffff:ffff:ffff:ffff:ffff:ffff,PY @@ -41159,6 +41622,7 @@ 2803:6c0::,2803:6c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6e0::,2803:6e0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:700::,2803:700:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:710::,2803:710:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:720::,2803:720:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:740::,2803:740:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:760::,2803:760:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -41185,7 +41649,6 @@ 2803:9e0::,2803:9e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a00::,2803:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a10::,2803:a10:ffff:ffff:ffff:ffff:ffff:ffff,SR -2803:a20::,2803:a20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:a40::,2803:a40:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:a60::,2803:a60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a80::,2803:a80:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -41193,6 +41656,7 @@ 2803:ac0::,2803:ac0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:ae0::,2803:ae0:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:b00::,2803:b00:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:b10::,2803:b10:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:b20::,2803:b20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b40::,2803:b40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b60::,2803:b60:ffff:ffff:ffff:ffff:ffff:ffff,BO @@ -41224,7 +41688,9 @@ 2803:e80::,2803:e80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:ec0::,2803:ec0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:ee0::,2803:ee0:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:f00::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:f00::,2803:f00:48a:ffff:ffff:ffff:ffff:ffff,PE +2803:f00:48b::,2803:f00:48e:ffff:ffff:ffff:ffff:ffff,CO +2803:f00:48f::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:f20::,2803:f20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:f60::,2803:f60:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:f80::,2803:f80:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41259,7 +41725,7 @@ 2803:12e0::,2803:12e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1300::,2803:1300:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:1310::,2803:1310:ffff:ffff:ffff:ffff:ffff:ffff,PY -2803:1320::,2803:1320:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:1320::,2803:1320:ffff:ffff:ffff:ffff:ffff:ffff,?? 2803:1340::,2803:1340:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:1360::,2803:1360:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:13a0::,2803:13a0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41318,11 +41784,11 @@ 2803:1a20::,2803:1a20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1a40::,2803:1a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1a60::,2803:1a60:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:1a80::,2803:1a80:ffff:ffff:ffff:ffff:ffff:ffff,?? 2803:1aa0::,2803:1aa0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1ac0::,2803:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:1ae0::,2803:1ae0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1b00::,2803:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:1b10::,2803:1b10:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:1b20::,2803:1b20:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:1b40::,2803:1b40:ffff:ffff:ffff:ffff:ffff:ffff,?? 2803:1b60::,2803:1b60:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -41351,7 +41817,7 @@ 2803:1e60::,2803:1e60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1e80::,2803:1e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1ea0::,2803:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:1ec0::,2803:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:1ec0::,2803:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:1ee0::,2803:1ee0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1f00::,2803:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1f20::,2803:1f20:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41424,6 +41890,7 @@ 2803:26c0::,2803:26c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:26e0::,2803:26e0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:2700::,2803:2700:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:2710::,2803:2710:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:2720::,2803:2720:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:2740::,2803:2740:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2760::,2803:2760:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -41447,7 +41914,6 @@ 2803:2960::,2803:2960:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:2980::,2803:2980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:29a0::,2803:29a0:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:29c0::,2803:29c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:29e0::,2803:29e0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:2a00::,2803:2a01:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:2a10::,2803:2a10:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -41458,9 +41924,11 @@ 2803:2aa0::,2803:2aa0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:2ac0::,2803:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2ae0::,2803:2ae0:ffff:ffff:ffff:ffff:ffff:ffff,EC -2803:2b00::,2803:2b00:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:2b00::,2803:2b00:800f:ffff:ffff:ffff:ffff:ffff,PA +2803:2b00:8010::,2803:2b00:8010:ffff:ffff:ffff:ffff:ffff,EC +2803:2b00:8011::,2803:2b00:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:2b10::,2803:2b10:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:2b20::,2803:2b20:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:2b40::,2803:2b40:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2b60::,2803:2b60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2b80::,2803:2b80:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:2ba0::,2803:2ba0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41489,7 +41957,6 @@ 2803:2e60::,2803:2e60:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:2e80::,2803:2e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2ea0::,2803:2ea0:ffff:ffff:ffff:ffff:ffff:ffff,CL -2803:2ec0::,2803:2ec0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2ee0::,2803:2ee0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:2f20::,2803:2f20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2f40:ffff::,2803:2f40:ffff:ffff:ffff:ffff:ffff:ffff,?? @@ -41524,6 +41991,7 @@ 2803:32a0::,2803:32a0:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:32c0::,2803:32c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:32e0::,2803:32e0:ffff:ffff:ffff:ffff:ffff:ffff,VE +2803:3310::,2803:3310:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:3320::,2803:3320:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3340::,2803:3340:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3360::,2803:3360:ffff:ffff:ffff:ffff:ffff:ffff,PY @@ -41594,6 +42062,7 @@ 2803:3ac0::,2803:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3ae0::,2803:3ae0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3b00::,2803:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:3b10::,2803:3b10:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:3b20::,2803:3b20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3b40::,2803:3b40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3b60::,2803:3b60:ffff:ffff:ffff:ffff:ffff:ffff,PE @@ -41638,7 +42107,6 @@ 2803:4020::,2803:4020:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4040::,2803:4040:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4060::,2803:4060:ffff:ffff:ffff:ffff:ffff:ffff,CL -2803:40a0::,2803:40a0:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:40c0::,2803:40c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:40e0::,2803:40e0:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:4100::,2803:4100:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41681,7 +42149,18 @@ 2803:4520::,2803:4520:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4540::,2803:4540:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:4560::,2803:4560:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:4580::,2803:4580:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:4580::,2803:4580:7fff:ffff:ffff:ffff:ffff:ffff,CR +2803:4580:8000::,2803:4580:8001:ffff:ffff:ffff:ffff:ffff,EC +2803:4580:8002::,2803:4580:80ff:ffff:ffff:ffff:ffff:ffff,CR +2803:4580:8100::,2803:4580:8101:ffff:ffff:ffff:ffff:ffff,EC +2803:4580:8102::,2803:4580:81ff:ffff:ffff:ffff:ffff:ffff,CR +2803:4580:8200::,2803:4580:8201:ffff:ffff:ffff:ffff:ffff,EC +2803:4580:8202::,2803:4580:820f:ffff:ffff:ffff:ffff:ffff,CR +2803:4580:8210::,2803:4580:821f:ffff:ffff:ffff:ffff:ffff,PE +2803:4580:8220::,2803:4580:8eff:ffff:ffff:ffff:ffff:ffff,CR +2803:4580:8f00::,2803:4580:8f00:ffff:ffff:ffff:ffff:ffff,EC +2803:4580:8f01::,2803:4580:ffef:ffff:ffff:ffff:ffff:ffff,CR +2803:4580:fff0::,2803:4580:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:45e0::,2803:45e0:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:4600::,2803:4600:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:4610::,2803:4610:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -41693,6 +42172,7 @@ 2803:46c0::,2803:46c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:46e0::,2803:46e0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:4700::,2803:4701:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:4710::,2803:4710:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:4720::,2803:4720:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4740::,2803:4740:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:4760::,2803:4760:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41726,12 +42206,12 @@ 2803:4ac0::,2803:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:4ae0::,2803:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:4b00::,2803:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:4b10::,2803:4b10:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:4b20::,2803:4b20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4b40::,2803:4b40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4b60::,2803:4b60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4b80::,2803:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4ba0::,2803:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,PE -2803:4bc0::,2803:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:4be0::,2803:4be0:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:4c00::,2803:4c00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:4c10::,2803:4c10:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -41793,6 +42273,7 @@ 2803:52c0::,2803:52c0:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:52e0::,2803:52e0:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:5300::,2803:5300:ffff:ffff:ffff:ffff:ffff:ffff,GT +2803:5310::,2803:5310:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5320::,2803:5320:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:5340::,2803:5340:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5360::,2803:5360:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -41860,6 +42341,7 @@ 2803:5ac0::,2803:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:5ae0::,2803:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:5b00::,2803:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:5b10::,2803:5b10:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:5b20::,2803:5b20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5b40::,2803:5b40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5b60::,2803:5b60:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41871,7 +42353,27 @@ 2803:5c10::,2803:5c10:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5c40::,2803:5c40:ffff:ffff:ffff:ffff:ffff:ffff,?? 2803:5c60::,2803:5c60:ffff:ffff:ffff:ffff:ffff:ffff,EC -2803:5c80::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80::,2803:5c80:5050:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:5051::,2803:5c80:5051:ffff:ffff:ffff:ffff:ffff,PE +2803:5c80:5052::,2803:5c80:5053:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:5054::,2803:5c80:5054:ffff:ffff:ffff:ffff:ffff,AR +2803:5c80:5055::,2803:5c80:5056:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:5057::,2803:5c80:5057:ffff:ffff:ffff:ffff:ffff,CO +2803:5c80:5058::,2803:5c80:5506:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:5507::,2803:5c80:5507:ffff:ffff:ffff:ffff:ffff,PA +2803:5c80:5508::,2803:5c80:5592:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:5593::,2803:5c80:5593:ffff:ffff:ffff:ffff:ffff,EC +2803:5c80:5594::,2803:5c80:6000:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:6001::,2803:5c80:6001:ffff:ffff:ffff:ffff:ffff,US +2803:5c80:6002::,2803:5c80:6050:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:6051::,2803:5c80:6051:ffff:ffff:ffff:ffff:ffff,PE +2803:5c80:6052::,2803:5c80:6056:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:6057::,2803:5c80:6057:ffff:ffff:ffff:ffff:ffff,CO +2803:5c80:6058::,2803:5c80:6592:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:6593::,2803:5c80:6593:ffff:ffff:ffff:ffff:ffff,EC +2803:5c80:6594::,2803:5c80:8053:ffff:ffff:ffff:ffff:ffff,CL +2803:5c80:8054::,2803:5c80:8054:ffff:ffff:ffff:ffff:ffff,AR +2803:5c80:8055::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5ca0::,2803:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5cc0::,2803:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:5ce0::,2803:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41889,7 +42391,6 @@ 2803:5e60::,2803:5e60:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:5e80::,2803:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5ea0::,2803:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,CO -2803:5ec0::,2803:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:5ee0::,2803:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:5f20::,2803:5f20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5f40::,2803:5f40:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -41981,7 +42482,6 @@ 2803:6960::,2803:6960:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:6980::,2803:6980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:69a0::,2803:69a0:ffff:ffff:ffff:ffff:ffff:ffff,GT -2803:69c0::,2803:69c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:69e0::,2803:69e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6a00::,2803:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:6a10::,2803:6a10:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -41993,6 +42493,7 @@ 2803:6ac0::,2803:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6ae0::,2803:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:6b00::,2803:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:6b10::,2803:6b10:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:6b20::,2803:6b20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6b60::,2803:6b60:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:6b80::,2803:6b80:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42058,9 +42559,10 @@ 2803:72c0::,2803:72c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:72e0::,2803:72e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7300::,2803:7300:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:7310::,2803:7310:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:7320::,2803:7320:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7340::,2803:7340:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:7360::,2803:7360:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:7360::,2803:7360:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:7380::,2803:7380:ffff:ffff:ffff:ffff:ffff:ffff,SX 2803:73a0::,2803:73a0:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:73c0::,2803:73c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42127,6 +42629,7 @@ 2803:7ac0::,2803:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7ae0::,2803:7ae0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7b00::,2803:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:7b10::,2803:7b10:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:7b20::,2803:7b20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7b40::,2803:7b40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:7b60::,2803:7b60:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42146,7 +42649,17 @@ 2803:7d40::,2803:7d40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7d60::,2803:7d60:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:7d80::,2803:7d80:ffff:ffff:ffff:ffff:ffff:ffff,PY -2803:7da0::,2803:7da0:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:7da0::,2803:7da0:0:ffff:ffff:ffff:ffff:ffff,PE +2803:7da0:1::,2803:7da0:1:ffff:ffff:ffff:ffff:ffff,JP +2803:7da0:2::,2803:7da0:3:ffff:ffff:ffff:ffff:ffff,DE +2803:7da0:4::,2803:7da0:9:ffff:ffff:ffff:ffff:ffff,PE +2803:7da0:a::,2803:7da0:a:ffff:ffff:ffff:ffff:ffff,CL +2803:7da0:b::,2803:7da0:b:ffff:ffff:ffff:ffff:ffff,FR +2803:7da0:c::,2803:7da0:c:ffff:ffff:ffff:ffff:ffff,GB +2803:7da0:d::,2803:7da0:d:ffff:ffff:ffff:ffff:ffff,US +2803:7da0:e::,2803:7da0:44:ffff:ffff:ffff:ffff:ffff,PE +2803:7da0:45::,2803:7da0:45:ffff:ffff:ffff:ffff:ffff,CL +2803:7da0:46::,2803:7da0:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:7dc0::,2803:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7de0::,2803:7de0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7e00::,2803:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42181,7 +42694,7 @@ 2803:81a0::,2803:81a0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:81c0::,2803:81c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:81e0::,2803:81e0:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:8200::,2803:8200:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:8200::,2803:8200:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:8210::,2803:8210:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:8220::,2803:8220:ffff:ffff:ffff:ffff:ffff:ffff,?? 2803:8240::,2803:8240:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -42205,7 +42718,7 @@ 2803:8440::,2803:8440:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8460::,2803:8460:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:8480::,2803:8480:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:84a0::,2803:84a0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:84a0::,2803:84a0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:84c0::,2803:84c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:84e0::,2803:84e0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:8500::,2803:8500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42226,6 +42739,7 @@ 2803:86c0::,2803:86c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:86e0::,2803:86e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8700::,2803:8700:ffff:ffff:ffff:ffff:ffff:ffff,?? +2803:8710::,2803:8710:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:8720::,2803:8720:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:8740::,2803:8740:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8760::,2803:8760:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42256,9 +42770,10 @@ 2803:8a40::,2803:8a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8a60::,2803:8a60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:8aa0::,2803:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:8aa0::,2803:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:8ae0::,2803:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8b00::,2803:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:8b10::,2803:8b10:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:8b20::,2803:8b20:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:8b60::,2803:8b60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8b80::,2803:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -42283,7 +42798,7 @@ 2803:8de0::,2803:8de0:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:8e00::,2803:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8e10::,2803:8e10:ffff:ffff:ffff:ffff:ffff:ffff,CR -2803:8e20::,2803:8e20:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:8e20::,2803:8e20:ffff:ffff:ffff:ffff:ffff:ffff,?? 2803:8e40::,2803:8e40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8e60::,2803:8e60:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:8e80::,2803:8e80:ffff:ffff:ffff:ffff:ffff:ffff,PY @@ -42292,7 +42807,7 @@ 2803:8f20::,2803:8f20:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:8f40::,2803:8f40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8f60::,2803:8f60:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:8f80::,2803:8f80:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:8f80::,2803:8f80:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:8fa0::,2803:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8fc0::,2803:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8fe0::,2803:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42360,7 +42875,7 @@ 2803:9760::,2803:9760:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:9780::,2803:9780:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:97a0::,2803:97a0:ffff:ffff:ffff:ffff:ffff:ffff,EC -2803:97c0::,2803:97c0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:97c0::,2803:97c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:97e0::,2803:97e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9800::,2803:9800:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9810::,2803:9810:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -42386,6 +42901,7 @@ 2803:9a80::,2803:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:9ac0::,2803:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:9ae0::,2803:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:9b10::,2803:9b10:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:9b20::,2803:9b20:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:9b40::,2803:9b40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9b60::,2803:9b60:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -42399,7 +42915,7 @@ 2803:9c40::,2803:9c40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9c60::,2803:9c60:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:9c80::,2803:9c80:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:9ca0::,2803:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:9ca0::,2803:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:9cc0::,2803:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:9ce0::,2803:9ce0:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:9d00::,2803:9d00:ffff:ffff:ffff:ffff:ffff:ffff,SV @@ -42461,7 +42977,13 @@ 2803:a3c0::,2803:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a3e0::,2803:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:a400::,2803:a400:ffff:ffff:ffff:ffff:ffff:ffff,EC -2803:a410::,2803:a410:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:a410::,2803:a410:9011:ffff:ffff:ffff:ffff:ffff,EC +2803:a410:9012::,2803:a410:9012:ffff:ffff:ffff:ffff:ffff,CL +2803:a410:9013::,2803:a410:9038:ffff:ffff:ffff:ffff:ffff,EC +2803:a410:9039::,2803:a410:9039:ffff:ffff:ffff:ffff:ffff,MX +2803:a410:903a::,2803:a410:9190:ffff:ffff:ffff:ffff:ffff,EC +2803:a410:9191::,2803:a410:9191:ffff:ffff:ffff:ffff:ffff,CL +2803:a410:9192::,2803:a410:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:a420::,2803:a420:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:a440::,2803:a440:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a460::,2803:a460:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42488,6 +43010,7 @@ 2803:a6c0::,2803:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:a6e0::,2803:a6e0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:a700::,2803:a700:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:a710::,2803:a710:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:a720::,2803:a720:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:a740::,2803:a740:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:a760::,2803:a760:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -42520,11 +43043,16 @@ 2803:aac0::,2803:aac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:aae0::,2803:aae0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:ab00::,2803:ab00:ffff:ffff:ffff:ffff:ffff:ffff,DO +2803:ab10::,2803:ab10:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:ab20::,2803:ab20:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:ab40::,2803:ab40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:ab60::,2803:ab60:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:ab80::,2803:ab80:ffff:ffff:ffff:ffff:ffff:ffff,PE -2803:aba0::,2803:aba0:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:aba0::,2803:aba0:fff:ffff:ffff:ffff:ffff:ffff,CO +2803:aba0:1000::,2803:aba0:1fff:ffff:ffff:ffff:ffff:ffff,MX +2803:aba0:2000::,2803:aba0:20ff:ffff:ffff:ffff:ffff:ffff,AR +2803:aba0:2100::,2803:aba0:21ff:ffff:ffff:ffff:ffff:ffff,CL +2803:aba0:2200::,2803:aba0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:abc0::,2803:abc0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:abe0::,2803:abe0:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:ac10::,2803:ac10:ffff:ffff:ffff:ffff:ffff:ffff,PE @@ -42587,6 +43115,7 @@ 2803:b2c0::,2803:b2c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:b2e0::,2803:b2e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b300::,2803:b300:ffff:ffff:ffff:ffff:ffff:ffff,PY +2803:b310::,2803:b310:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:b320::,2803:b320:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:b340::,2803:b340:ffff:ffff:ffff:ffff:ffff:ffff,SX 2803:b360::,2803:b360:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42608,7 +43137,6 @@ 2803:b520::,2803:b520:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b560::,2803:b560:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:b5a0::,2803:b5a0:ffff:ffff:ffff:ffff:ffff:ffff,CO -2803:b5c0::,2803:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:b5e0::,2803:b5e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b600::,2803:b600:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b610::,2803:b610:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -42642,7 +43170,16 @@ 2803:b940::,2803:b940:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:b960::,2803:b960:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b9a0::,2803:b9a0:ffff:ffff:ffff:ffff:ffff:ffff,CL -2803:b9c0::,2803:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:b9c0::,2803:b9c0:91ff:ffff:ffff:ffff:ffff:ffff,CO +2803:b9c0:9200::,2803:b9c0:94ff:ffff:ffff:ffff:ffff:ffff,PE +2803:b9c0:9500::,2803:b9c0:95ff:ffff:ffff:ffff:ffff:ffff,EC +2803:b9c0:9600::,2803:b9c0:96ff:ffff:ffff:ffff:ffff:ffff,CL +2803:b9c0:9700::,2803:b9c0:98ff:ffff:ffff:ffff:ffff:ffff,CO +2803:b9c0:9900::,2803:b9c0:99ff:ffff:ffff:ffff:ffff:ffff,PE +2803:b9c0:9a00::,2803:b9c0:9aff:ffff:ffff:ffff:ffff:ffff,EC +2803:b9c0:9b00::,2803:b9c0:9dff:ffff:ffff:ffff:ffff:ffff,CO +2803:b9c0:9e00::,2803:b9c0:9eff:ffff:ffff:ffff:ffff:ffff,PE +2803:b9c0:9f00::,2803:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:b9e0::,2803:b9e0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:ba10::,2803:ba10:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -42653,6 +43190,7 @@ 2803:bac0::,2803:bac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:bae0::,2803:bae0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:bb00::,2803:bb00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:bb10::,2803:bb10:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:bb20::,2803:bb20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:bb40::,2803:bb40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:bb60::,2803:bb60:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42740,9 +43278,14 @@ 2803:c540::,2803:c540:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:c560::,2803:c560:dfff:ffff:ffff:ffff:ffff:ffff,PA 2803:c560:e000::,2803:c560:efff:ffff:ffff:ffff:ffff:ffff,BR -2803:c560:f000::,2803:c560:fffa:ffff:ffff:ffff:ffff:ffff,PA -2803:c560:fffb::,2803:c560:fffb:ffff:ffff:ffff:ffff:ffff,BR -2803:c560:fffc::,2803:c560:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:c560:f000::,2803:c560:fff7:ffff:ffff:ffff:ffff:ffff,PA +2803:c560:fff8::,2803:c560:fff8:ffff:ffff:ffff:ffff:ffff,LB +2803:c560:fff9::,2803:c560:fff9:ffff:ffff:ffff:ffff:ffff,IR +2803:c560:fffa::,2803:c560:fffa:ffff:ffff:ffff:ffff:ffff,TR +2803:c560:fffb::,2803:c560:fffc:ffff:ffff:ffff:ffff:ffff,BR +2803:c560:fffd::,2803:c560:fffd:ffff:ffff:ffff:ffff:ffff,AR +2803:c560:fffe::,2803:c560:fffe:ffff:ffff:ffff:ffff:ffff,GE +2803:c560:ffff::,2803:c560:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:c580::,2803:c580:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c5a0::,2803:c5a0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:c5c0::,2803:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -42757,6 +43300,7 @@ 2803:c6c0::,2803:c6c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c6e0::,2803:c6e0:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:c700::,2803:c700:ffff:ffff:ffff:ffff:ffff:ffff,GF +2803:c710::,2803:c710:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c720::,2803:c720:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c740::,2803:c740:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c760::,2803:c760:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42791,6 +43335,7 @@ 2803:cac0::,2803:cac0:ffff:ffff:ffff:ffff:ffff:ffff,HT 2803:cae0::,2803:cae0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:cb00::,2803:cb00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:cb10::,2803:cb10:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:cb20::,2803:cb20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:cb40::,2803:cb40:ffff:ffff:ffff:ffff:ffff:ffff,SV 2803:cb60::,2803:cb60:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42822,7 +43367,6 @@ 2803:ce60::,2803:ce60:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ce80::,2803:ce80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:cea0::,2803:cea0:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:cec0::,2803:cec0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:cf00::,2803:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:cf20::,2803:cf20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:cf60::,2803:cf60:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42830,7 +43374,7 @@ 2803:cfa0::,2803:cfa0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:cfc0::,2803:cfc0:ffff:ffff:ffff:ffff:ffff:ffff,UY 2803:cfe0::,2803:cfe0:ffff:ffff:ffff:ffff:ffff:ffff,CL -2803:d000::,2803:d000:ffff:ffff:ffff:ffff:ffff:ffff,BZ +2803:d000::,2803:d000:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:d010::,2803:d010:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:d020::,2803:d020:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:d040::,2803:d040:ffff:ffff:ffff:ffff:ffff:ffff,PA @@ -42857,6 +43401,7 @@ 2803:d2a0::,2803:d2a0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:d2c0::,2803:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:d2e0::,2803:d2e0:ffff:ffff:ffff:ffff:ffff:ffff,SV +2803:d310::,2803:d310:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:d320::,2803:d320:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:d340::,2803:d340:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:d360::,2803:d360:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42869,7 +43414,7 @@ 2803:d440::,2803:d440:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d460::,2803:d460:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE -2803:d4a0::,2803:d4a0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:d4a0::,2803:d4a0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:d4c0::,2803:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:d4e0::,2803:d4e0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:d510::,2803:d510:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -42923,6 +43468,7 @@ 2803:dac0::,2803:dac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:dae0::,2803:dae0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:db00::,2803:db00:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:db10::,2803:db10:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:db20::,2803:db20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:db40::,2803:db40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:db60::,2803:db60:ffff:ffff:ffff:ffff:ffff:ffff,PA @@ -43016,7 +43562,7 @@ 2803:e610::,2803:e610:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:e620::,2803:e620:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:e660::,2803:e660:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:e680::,2803:e680:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:e680::,2803:e680:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:e6a0::,2803:e6a0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e6c0::,2803:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,SV 2803:e6e0::,2803:e6e0:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -43054,11 +43600,14 @@ 2803:eac0::,2803:eac0:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:eae0::,2803:eae0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:eb00::,2803:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:eb10::,2803:eb10:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:eb20::,2803:eb20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:eb40::,2803:eb40:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:eb80::,2803:eb80:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:eb80::,2803:eb80:4000:ffff:ffff:ffff:ffff:ffff,AR +2803:eb80:4001::,2803:eb80:4001:ffff:ffff:ffff:ffff:ffff,LI +2803:eb80:4002::,2803:eb80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:eba0::,2803:eba0:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:ebc0::,2803:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:ebc0::,2803:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:ebe0::,2803:ebe0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:ec00::,2803:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ec10::,2803:ec10:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -43118,6 +43667,7 @@ 2803:f2c0::,2803:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:f2e0::,2803:f2e0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:f300::,2803:f300:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:f310::,2803:f310:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:f320::,2803:f320:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:f340::,2803:f340:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:f360::,2803:f360:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -43126,7 +43676,7 @@ 2803:f3e0::,2803:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f400::,2803:f400:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:f410::,2803:f410:ffff:ffff:ffff:ffff:ffff:ffff,GY -2803:f420::,2803:f420:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:f420::,2803:f420:ffff:ffff:ffff:ffff:ffff:ffff,US 2803:f440::,2803:f440:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:f460::,2803:f460:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f480::,2803:f480:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -43184,6 +43734,7 @@ 2803:fac0::,2803:fac0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fae0::,2803:fae0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:fb00::,2803:fb00:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:fb10::,2803:fb10:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:fb20::,2803:fb20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fb40::,2803:fb40:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:fb60::,2803:fb60:ffff:ffff:ffff:ffff:ffff:ffff,SV @@ -43295,7 +43846,8 @@ 2804:140::,2804:140:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:144::,2804:144:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:14c::,2804:14d:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:150::,2804:154:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:150::,2804:153:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:154::,2804:154:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:158::,2804:158:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:15c::,2804:15c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:160::,2804:160:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -43398,7 +43950,7 @@ 2804:320::,2804:320:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:328::,2804:328:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:330::,2804:330:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:334::,2804:334:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:334:400::,2804:334:400:ffff:ffff:ffff:ffff:ffff,?? 2804:338::,2804:338:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:33c::,2804:33c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:340::,2804:340:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -43430,7 +43982,6 @@ 2804:3c0::,2804:3c0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3c4::,2804:3c4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3c8::,2804:3c8:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:3d0::,2804:3d0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d4::,2804:3d4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d8::,2804:3d8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3dc::,2804:3dc:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -43521,6 +44072,7 @@ 2804:564::,2804:564:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:568::,2804:568:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:56c::,2804:56c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:570:ffff::,2804:570:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:574::,2804:574:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:578::,2804:578:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:57c::,2804:57c:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -43631,7 +44183,6 @@ 2804:74c::,2804:74c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:750::,2804:750:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:754::,2804:754:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:758::,2804:758:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:75c::,2804:75c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:760::,2804:760:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:764::,2804:764:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -43676,7 +44227,6 @@ 2804:818::,2804:818:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:81c::,2804:81c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:820::,2804:820:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:824::,2804:824:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:828::,2804:828:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:82c::,2804:82c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:830::,2804:830:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -43920,7 +44470,6 @@ 2804:c5c::,2804:c5c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:c60::,2804:c60:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:c64::,2804:c64:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:c68::,2804:c68:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:c6c::,2804:c6c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:c70::,2804:c70:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:c74::,2804:c74:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -44102,6 +44651,7 @@ 2804:f88::,2804:f88:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:f8c::,2804:f8c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:f90::,2804:f90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:f94::,2804:f94:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:f98::,2804:f98:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:f9c::,2804:f9c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:fa0::,2804:fa0:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -44294,7 +44844,6 @@ 2804:12d8::,2804:12d8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:12dc::,2804:12dc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:12e0::,2804:12e0:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:12e4::,2804:12e4:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:12e8::,2804:12e8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:12ec::,2804:12ec:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:12f4::,2804:12f4:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -44378,7 +44927,6 @@ 2804:1440::,2804:1440:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1444::,2804:1444:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1448::,2804:1448:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:144c::,2804:144c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1450::,2804:1450:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1454::,2804:1454:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1458::,2804:1458:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -44490,7 +45038,6 @@ 2804:1620::,2804:1620:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1624::,2804:1624:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1628::,2804:1628:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:162c::,2804:162c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1630::,2804:1630:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1634::,2804:1634:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1638::,2804:1638:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -45162,7 +45709,6 @@ 2804:2234::,2804:2234:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2238::,2804:2238:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:223c::,2804:223c:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:2240::,2804:2240:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2248::,2804:2248:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:224c::,2804:224c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2250::,2804:2250:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -45235,7 +45781,6 @@ 2804:2394::,2804:2394:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2398::,2804:2398:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:239c::,2804:239c:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:23a4::,2804:23a4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:23ac::,2804:23ac:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:23b0::,2804:23b0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:23b4::,2804:23b4:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -45336,7 +45881,6 @@ 2804:2550::,2804:2550:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2554::,2804:2554:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2558::,2804:2558:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:255c::,2804:255c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2564::,2804:2564:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:256c::,2804:256c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2570::,2804:2570:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -45881,7 +46425,6 @@ 2804:2e98::,2804:2e98:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2e9c::,2804:2e9c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2ea0::,2804:2ea0:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:2ea4::,2804:2ea4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2ea8::,2804:2ea8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2eac::,2804:2eac:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2eb0::,2804:2eb0:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46046,7 +46589,6 @@ 2804:315c::,2804:315c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3160::,2804:3160:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3164::,2804:3164:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:3168::,2804:3168:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:316c::,2804:316c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3170::,2804:3170:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3174::,2804:3174:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46078,6 +46620,7 @@ 2804:31e8::,2804:31e8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:31ec::,2804:31ec:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:31f0::,2804:31f0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:31f8:b000::,2804:31f8:b000:ffff:ffff:ffff:ffff:ffff,BR 2804:31fc::,2804:31fc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3200::,2804:3200:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3204::,2804:3204:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46455,7 +46998,6 @@ 2804:3828::,2804:3828:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:382c::,2804:382c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3830::,2804:3830:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:3834::,2804:3834:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3838::,2804:3838:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:383c::,2804:383c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3840::,2804:3840:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46532,7 +47074,6 @@ 2804:396c::,2804:396c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3970::,2804:3970:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3974::,2804:3974:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:3978::,2804:3978:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:397c::,2804:397c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3980::,2804:3980:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3984::,2804:3984:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46601,7 +47142,7 @@ 2804:3a90::,2804:3a90:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3a94::,2804:3a94:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3a98::,2804:3a98:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:3a9c::,2804:3a9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3a9c::,2804:3a9c:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:3aa0::,2804:3aa0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3aa4::,2804:3aa4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3aa8::,2804:3aa8:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46676,6 +47217,7 @@ 2804:3bcc::,2804:3bcc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3bd0::,2804:3bd0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3bd4::,2804:3bd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bd8:8001::,2804:3bd8:8001:ffff:ffff:ffff:ffff:ffff,BR 2804:3bdc::,2804:3bdc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3be0::,2804:3be0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3be4::,2804:3be4:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46749,7 +47291,6 @@ 2804:3cfc::,2804:3cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d00::,2804:3d00:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d04::,2804:3d04:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:3d08::,2804:3d08:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d0c::,2804:3d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d10::,2804:3d10:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d14::,2804:3d14:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46781,6 +47322,7 @@ 2804:3d88::,2804:3d88:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d8c::,2804:3d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d90::,2804:3d90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3d94:2000::,2804:3d94:2000:ffff:ffff:ffff:ffff:ffff,BR 2804:3d98::,2804:3d98:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3d9c::,2804:3d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3da0::,2804:3da0:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -46963,7 +47505,6 @@ 2804:4090::,2804:4090:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4094::,2804:4094:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4098::,2804:4098:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:409c::,2804:409c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:40a0::,2804:40a0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:40a4::,2804:40a4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:40a8::,2804:40a8:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -47235,7 +47776,6 @@ 2804:44f8::,2804:44f8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:44fc::,2804:44fc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4500::,2804:4500:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:4504::,2804:4504:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4508::,2804:4508:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:450c::,2804:450c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4510::,2804:4510:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -47248,7 +47788,7 @@ 2804:452c::,2804:452c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4530::,2804:4530:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4534::,2804:4534:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:4538::,2804:4538:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4538::,2804:4538:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:4540::,2804:4540:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4544::,2804:4544:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4548::,2804:4548:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -47411,7 +47951,6 @@ 2804:47d8::,2804:47d8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:47dc::,2804:47dc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:47e4::,2804:47e4:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:47e8::,2804:47e8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:47ec::,2804:47ec:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:47f0::,2804:47f0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:47f4::,2804:47f4:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -47499,7 +48038,6 @@ 2804:4958::,2804:4958:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:495c::,2804:495c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4960::,2804:4960:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:4964::,2804:4964:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:4968::,2804:4968:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:496c::,2804:496c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4970::,2804:4970:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -47591,11 +48129,10 @@ 2804:4ad4::,2804:4ad4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4ad8::,2804:4ad8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4adc::,2804:4adc:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:4ae0::,2804:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4ae0::,2804:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:4ae4::,2804:4ae4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4ae8::,2804:4ae8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4aec::,2804:4aec:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:4af0::,2804:4af0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4af4::,2804:4af4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4afc::,2804:4afc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4b00::,2804:4b00:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -48501,7 +49038,6 @@ 2804:5974::,2804:5974:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5978::,2804:5978:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:597c::,2804:597c:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:5980::,2804:5980:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5984::,2804:5984:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5988::,2804:5988:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5990::,2804:5990:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -48543,7 +49079,6 @@ 2804:5a2c::,2804:5a2c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5a30::,2804:5a30:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5a34::,2804:5a34:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:5a38::,2804:5a38:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5a3c::,2804:5a3c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5a40::,2804:5a40:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5a44::,2804:5a44:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -48623,7 +49158,6 @@ 2804:5b74::,2804:5b74:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5b78::,2804:5b78:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5b7c::,2804:5b7c:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:5b80::,2804:5b80:ffff:ffff:ffff:ffff:ffff:ffff,?? 2804:5b84::,2804:5b84:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5b88::,2804:5b88:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5b8c::,2804:5b8c:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -48666,7 +49200,6 @@ 2804:5c28::,2804:5c28:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5c2c::,2804:5c2c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5c30::,2804:5c30:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:5c34::,2804:5c34:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5c38::,2804:5c38:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5c3c::,2804:5c3c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:5c40::,2804:5c40:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -49902,7 +50435,6 @@ 2804:6fec::,2804:6fec:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:6ff0::,2804:6ff0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:6ff4::,2804:6ff4:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:6ff8::,2804:6ff8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:6ffc::,2804:6ffc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:7000::,2804:7000:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:7004::,2804:7004:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -51288,6 +51820,50 @@ 2804:85a4::,2804:85a4:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:85a8::,2804:85a8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:85ac::,2804:85ac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85b0::,2804:85b0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85b4::,2804:85b4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85b8::,2804:85b8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85bc::,2804:85bc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85c0::,2804:85c0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85c4::,2804:85c4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85c8::,2804:85c8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85cc::,2804:85cc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85d0::,2804:85d0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85d4::,2804:85d4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85d8::,2804:85d8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85dc::,2804:85dc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85e0::,2804:85e0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85e4::,2804:85e4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85e8::,2804:85e8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85ec::,2804:85ec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85f0::,2804:85f0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85f4::,2804:85f4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85f8::,2804:85f8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:85fc::,2804:85fc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8600::,2804:8600:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8604::,2804:8604:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8608::,2804:8608:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:860c::,2804:860c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8610::,2804:8610:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8614::,2804:8614:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8618::,2804:8618:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:861c::,2804:861c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8620::,2804:8620:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8624::,2804:8624:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8628::,2804:8628:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:862c::,2804:862c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8630::,2804:8630:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8634::,2804:8634:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8638::,2804:8638:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:863c::,2804:863c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8640::,2804:8640:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8644::,2804:8644:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8648::,2804:8648:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:864c::,2804:864c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8650::,2804:8650:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8654::,2804:8654:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:8658::,2804:8658:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:865c::,2804:865c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2805:f10:f12::,2805:f10:f14:ffff:ffff:ffff:ffff:ffff,?? 2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:200::,2806:200:ffff:ffff:ffff:ffff:ffff:ffff,MX @@ -51315,7 +51891,7 @@ 2806:2f6::,2806:33f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:341::,2806:350:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:360::,2806:370:ffff:ffff:ffff:ffff:ffff:ffff,MX -2806:380::,2806:3e3:ffff:ffff:ffff:ffff:ffff:ffff,MX +2806:380::,2806:3e5:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:1000::,2806:10ff:ffff:ffff:ffff:ffff:ffff:ffff,MX 2a00::,2a00:3ff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:400::,2a00:800:3f:ffff:ffff:ffff:ffff:ffff,EU @@ -51882,7 +52458,9 @@ 2a00:1591::,2a00:1597:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:1598::,2a00:159f:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:15a0::,2a00:15a7:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a00:15a8::,2a00:15a8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:15a8::,2a00:15a8:7ff:ffff:ffff:ffff:ffff:ffff,DE +2a00:15a8:800::,2a00:15a8:8ff:ffff:ffff:ffff:ffff:ffff,LU +2a00:15a8:900::,2a00:15a8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:15a9::,2a00:15af:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:15b0::,2a00:15b0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:15b1::,2a00:15b7:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -52130,9 +52708,7 @@ 2a00:19b9::,2a00:19bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:19c0::,2a00:19c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:19c1::,2a00:19c7:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a00:19c8::,2a00:19d0:7ef:ffff:ffff:ffff:ffff:ffff,DE -2a00:19d0:7f0::,2a00:19d0:7f0:ffff:ffff:ffff:ffff:ffff,CH -2a00:19d0:7f1::,2a00:19d7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:19c8::,2a00:19d7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:19d8::,2a00:19d8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:19d9::,2a00:19df:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:19e0::,2a00:19e7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -52409,8 +52985,8 @@ 2a00:1e60::,2a00:1e60:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:1e61::,2a00:1e67:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:1e68::,2a00:1e6f:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a00:1e70::,2a00:1e70:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a00:1e71::,2a00:1e77:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a00:1e70::,2a00:1e73:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:1e74::,2a00:1e77:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:1e78::,2a00:1e78:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1e79::,2a00:1e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:1e80::,2a00:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -52538,8 +53114,8 @@ 2a00:2000:4c00::,2a00:2000:4c01:ffff:ffff:ffff:ffff:ffff,DE 2a00:2000:4c02::,2a00:2000:55ff:ffff:ffff:ffff:ffff:ffff,GB 2a00:2000:5600::,2a00:2000:5601:ffff:ffff:ffff:ffff:ffff,NL -2a00:2000:5602::,2a00:2000:5602:ffff:ffff:ffff:ffff:ffff,GB -2a00:2000:5603::,2a00:2000:5605:ffff:ffff:ffff:ffff:ffff,NL +2a00:2000:5602::,2a00:2000:5603:ffff:ffff:ffff:ffff:ffff,GB +2a00:2000:5604::,2a00:2000:5605:ffff:ffff:ffff:ffff:ffff,NL 2a00:2000:5606::,2a00:2000:5606:ffff:ffff:ffff:ffff:ffff,FR 2a00:2000:5607::,2a00:2000:56ff:ffff:ffff:ffff:ffff:ffff,GB 2a00:2000:5700::,2a00:2000:5700:ffff:ffff:ffff:ffff:ffff,SE @@ -53624,7 +54200,8 @@ 2a00:83c1::,2a00:83df:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:83e0::,2a00:83e0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:83e1::,2a00:841f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a00:8420::,2a00:8427:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a00:8420::,2a00:8420:ffff:ffff:ffff:ffff:ffff:ffff,HK +2a00:8421::,2a00:8427:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:8428::,2a00:843f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:8440::,2a00:8440:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:8441::,2a00:845f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -53741,8 +54318,7 @@ 2a00:8b48::,2a00:8b5f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:8b60::,2a00:8b60:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:8b61::,2a00:8b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a00:8b80::,2a00:8b80:7fff:ffff:ffff:ffff:ffff:ffff,FR -2a00:8b80:8000::,2a00:8b80:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a00:8b80::,2a00:8b80:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:8b81::,2a00:8b9f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:8ba0::,2a00:8ba0:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a00:8ba1::,2a00:8bdf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -54455,9 +55031,7 @@ 2a00:b4a0::,2a00:b4a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:b4a1::,2a00:b4bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:b4c0::,2a00:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a00:b4c8::,2a00:b4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a00:b500::,2a00:b500:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a00:b501::,2a00:b55f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a00:b4c8::,2a00:b55f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:b560::,2a00:b560:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:b561::,2a00:b57f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:b580::,2a00:b580:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -54565,9 +55139,7 @@ 2a00:bc60::,2a00:bc60:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a00:bc61::,2a00:bc7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:bc80::,2a00:bc80:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a00:bc81::,2a00:bc9f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a00:bca0::,2a00:bca0:ffff:ffff:ffff:ffff:ffff:ffff,US -2a00:bca1::,2a00:bcbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a00:bc81::,2a00:bcbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:bcc0::,2a00:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:bcc1::,2a00:bcdf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a00:bce0::,2a00:bce0:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -55913,7 +56485,8 @@ 2a01:3e0:404::,2a01:3e0:500:ffff:ffff:ffff:ffff:ffff,EU 2a01:3e0:501::,2a01:3e0:501:ffff:ffff:ffff:ffff:ffff,RU 2a01:3e0:502::,2a01:3e0:505:ffff:ffff:ffff:ffff:ffff,DE -2a01:3e0:506::,2a01:3e0:700:ffff:ffff:ffff:ffff:ffff,EU +2a01:3e0:506::,2a01:3e0:6ff:ffff:ffff:ffff:ffff:ffff,EU +2a01:3e0:700::,2a01:3e0:700:ffff:ffff:ffff:ffff:ffff,NL 2a01:3e0:701::,2a01:3e0:701:ffff:ffff:ffff:ffff:ffff,GB 2a01:3e0:702::,2a01:3e0:800:ffff:ffff:ffff:ffff:ffff,EU 2a01:3e0:801::,2a01:3e0:802:ffff:ffff:ffff:ffff:ffff,FR @@ -55941,7 +56514,9 @@ 2a01:3e0:1702::,2a01:3e0:1704:ffff:ffff:ffff:ffff:ffff,GB 2a01:3e0:1705::,2a01:3e0:1aff:ffff:ffff:ffff:ffff:ffff,EU 2a01:3e0:1b00::,2a01:3e0:1b00:ffff:ffff:ffff:ffff:ffff,FI -2a01:3e0:1b01::,2a01:3e0:3600:ffff:ffff:ffff:ffff:ffff,EU +2a01:3e0:1b01::,2a01:3e0:2000:ffff:ffff:ffff:ffff:ffff,EU +2a01:3e0:2001::,2a01:3e0:2002:ffff:ffff:ffff:ffff:ffff,FR +2a01:3e0:2003::,2a01:3e0:3600:ffff:ffff:ffff:ffff:ffff,EU 2a01:3e0:3601::,2a01:3e0:3601:ffff:ffff:ffff:ffff:ffff,SA 2a01:3e0:3602::,2a01:3e0:fdff:ffff:ffff:ffff:ffff:ffff,EU 2a01:3e0:fe00::,2a01:3e0:feff:ffff:ffff:ffff:ffff:ffff,GB @@ -57646,9 +58221,7 @@ 2a01:9500:1::,2a01:9500:1:ffff:ffff:ffff:ffff:ffff,CH 2a01:9500:2::,2a01:9500:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:9501::,2a01:951f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a01:9520::,2a01:9521:0:ffff:ffff:ffff:ffff:ffff,RU -2a01:9521:1::,2a01:9521:1:ffff:ffff:ffff:ffff:ffff,NL -2a01:9521:2::,2a01:9527:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a01:9520::,2a01:9527:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:9528::,2a01:953f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a01:9540::,2a01:9540:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:9541::,2a01:955f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -57892,7 +58465,9 @@ 2a01:a401::,2a01:a41f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a01:a420::,2a01:a427:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a01:a428::,2a01:a43f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a01:a440::,2a01:a440:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a01:a440::,2a01:a440:1:ffff:ffff:ffff:ffff:ffff,VC +2a01:a440:2::,2a01:a440:2:ffff:ffff:ffff:ffff:ffff,RU +2a01:a440:3::,2a01:a440:ffff:ffff:ffff:ffff:ffff:ffff,VC 2a01:a441::,2a01:a45f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a01:a460::,2a01:a460:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:a461::,2a01:a47f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -58910,9 +59485,13 @@ 2a02:6b8:c1a::,2a02:6b8:c1a:ffff:ffff:ffff:ffff:ffff,FI 2a02:6b8:c1b::,2a02:6b8:c24:ffff:ffff:ffff:ffff:ffff,RU 2a02:6b8:c25::,2a02:6b8:c26:ffff:ffff:ffff:ffff:ffff,FI -2a02:6b8:c27::,2a02:6b8:b010:ffff:ffff:ffff:ffff:ffff,RU +2a02:6b8:c27::,2a02:6b8:c2c:ffff:ffff:ffff:ffff:ffff,RU +2a02:6b8:c2d::,2a02:6b8:c2d:ffff:ffff:ffff:ffff:ffff,DE +2a02:6b8:c2e::,2a02:6b8:b010:ffff:ffff:ffff:ffff:ffff,RU 2a02:6b8:b011::,2a02:6b8:b011:ffff:ffff:ffff:ffff:ffff,FI -2a02:6b8:b012::,2a02:6b8:fc00:ffff:ffff:ffff:ffff:ffff,RU +2a02:6b8:b012::,2a02:6b8:b071:ffff:ffff:ffff:ffff:ffff,RU +2a02:6b8:b072::,2a02:6b8:b072:ffff:ffff:ffff:ffff:ffff,FI +2a02:6b8:b073::,2a02:6b8:fc00:ffff:ffff:ffff:ffff:ffff,RU 2a02:6b8:fc01::,2a02:6b8:fc01:ffff:ffff:ffff:ffff:ffff,FI 2a02:6b8:fc02::,2a02:6b8:fc0c:ffff:ffff:ffff:ffff:ffff,RU 2a02:6b8:fc0d::,2a02:6b8:fc0d:ffff:ffff:ffff:ffff:ffff,FI @@ -59186,7 +59765,9 @@ 2a02:b28::,2a02:b30:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:b31::,2a02:b47:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:b48::,2a02:b48:ff:ffff:ffff:ffff:ffff:ffff,US -2a02:b48:100::,2a02:b48:8010:ffff:ffff:ffff:ffff:ffff,NL +2a02:b48:100::,2a02:b48:1ff:ffff:ffff:ffff:ffff:ffff,NL +2a02:b48:200::,2a02:b48:2ff:ffff:ffff:ffff:ffff:ffff,US +2a02:b48:300::,2a02:b48:8010:ffff:ffff:ffff:ffff:ffff,NL 2a02:b48:8011::,2a02:b48:8011:ffff:ffff:ffff:ffff:ffff,GB 2a02:b48:8012::,2a02:b48:8017:ffff:ffff:ffff:ffff:ffff,NL 2a02:b48:8018::,2a02:b48:8018:ffff:ffff:ffff:ffff:ffff,FR @@ -60229,9 +60810,7 @@ 2a02:2808:5801::,2a02:2808:5801:ffff:ffff:ffff:ffff:ffff,RU 2a02:2808:5802::,2a02:2808:6100:ffff:ffff:ffff:ffff:ffff,ES 2a02:2808:6101::,2a02:2808:6101:ffff:ffff:ffff:ffff:ffff,UA -2a02:2808:6102::,2a02:2808:6200:ffff:ffff:ffff:ffff:ffff,ES -2a02:2808:6201::,2a02:2808:6201:ffff:ffff:ffff:ffff:ffff,RU -2a02:2808:6202::,2a02:2808:6400:ffff:ffff:ffff:ffff:ffff,ES +2a02:2808:6102::,2a02:2808:6400:ffff:ffff:ffff:ffff:ffff,ES 2a02:2808:6401::,2a02:2808:6404:ffff:ffff:ffff:ffff:ffff,SK 2a02:2808:6405::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:2809::,2a02:280f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -61295,8 +61874,8 @@ 2a02:6ea1::,2a02:6ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:6ec0::,2a02:6ec7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a02:6ec8::,2a02:6eff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a02:6f00::,2a02:6f00:ffff:ffff:ffff:ffff:ffff:ffff,LU -2a02:6f01::,2a02:6f1f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a02:6f00::,2a02:6f07:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a02:6f08::,2a02:6f1f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:6f20::,2a02:6f20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:6f21::,2a02:6f3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:6f40::,2a02:6f40:ffff:ffff:ffff:ffff:ffff:ffff,HU @@ -61415,8 +61994,7 @@ 2a02:7681::,2a02:769f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:76a0::,2a02:76a0:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a02:76a1::,2a02:76bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a02:76c0::,2a02:76c0:1:ffff:ffff:ffff:ffff:ffff,RU -2a02:76c0:2::,2a02:76c0:ffff:ffff:ffff:ffff:ffff:ffff,CY +2a02:76c0::,2a02:76c0:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a02:76c1::,2a02:76df:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:76e0::,2a02:76e0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:76e1::,2a02:76ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -62077,7 +62655,9 @@ 2a02:ee08::,2a02:ee3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:ee40::,2a02:ee47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:ee48::,2a02:ee7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a02:ee80::,2a02:ee87:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:ee80::,2a02:ee80:4175:ffff:ffff:ffff:ffff:ffff,NL +2a02:ee80:4176::,2a02:ee80:4177:ffff:ffff:ffff:ffff:ffff,GB +2a02:ee80:4178::,2a02:ee87:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:ee88::,2a02:eebf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a02:eec0::,2a02:eec7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:eec8::,2a02:eeff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -62452,8 +63032,8 @@ 2a03:e21::,2a03:e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:e40::,2a03:e40:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a03:e41::,2a03:e5f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:e60::,2a03:e60:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:e61::,2a03:e9f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:e60::,2a03:e67:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:e68::,2a03:e9f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:ea0::,2a03:ea0:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a03:ea1::,2a03:ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:ec0::,2a03:ec0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -62728,7 +63308,9 @@ 2a03:1b20:8::,2a03:1b20:8:ffff:ffff:ffff:ffff:ffff,DK 2a03:1b20:9::,2a03:1b20:9:ffff:ffff:ffff:ffff:ffff,FR 2a03:1b20:a::,2a03:1b20:a:ffff:ffff:ffff:ffff:ffff,CH -2a03:1b20:b::,2a03:1b20:fffe:ffff:ffff:ffff:ffff:ffff,EU +2a03:1b20:b::,2a03:1b20:beee:ffff:ffff:ffff:ffff:ffff,EU +2a03:1b20:beef::,2a03:1b20:beef:ffff:ffff:ffff:ffff:ffff,SE +2a03:1b20:bef0::,2a03:1b20:fffe:ffff:ffff:ffff:ffff:ffff,EU 2a03:1b20:ffff::,2a03:1b20:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:1b21::,2a03:1b5f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:1b60::,2a03:1b60:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -62737,8 +63319,8 @@ 2a03:1b88::,2a03:1bdf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:1be0::,2a03:1be0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:1be1::,2a03:1bff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:1c00::,2a03:1c00:ffff:ffff:ffff:ffff:ffff:ffff,BH -2a03:1c01::,2a03:1c1f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:1c00::,2a03:1c07:ffff:ffff:ffff:ffff:ffff:ffff,BH +2a03:1c08::,2a03:1c1f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:1c20::,2a03:1c20:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:1c21::,2a03:1c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:1c40::,2a03:1c40:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -62813,7 +63395,9 @@ 2a03:20a1::,2a03:20df:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:20e0::,2a03:20e0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:20e1::,2a03:20ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:2100::,2a03:2107:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a03:2100::,2a03:2100:31:ffff:ffff:ffff:ffff:ffff,TR +2a03:2100:32::,2a03:2100:32:ffff:ffff:ffff:ffff:ffff,AZ +2a03:2100:33::,2a03:2107:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:2108::,2a03:211f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:2120::,2a03:2120:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:2121::,2a03:213f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -63000,9 +63584,7 @@ 2a03:2ca0::,2a03:2ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2ca1::,2a03:2cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:2cc0::,2a03:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a03:2cc1::,2a03:2cdf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:2ce0::,2a03:2ce0:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a03:2ce1::,2a03:2cff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:2cc1::,2a03:2cff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:2d00::,2a03:2d00:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:2d01::,2a03:2d1f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:2d20::,2a03:2d20:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -63417,9 +63999,7 @@ 2a03:4820::,2a03:4820:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a03:4821::,2a03:483f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:4840::,2a03:4847:ffff:ffff:ffff:ffff:ffff:ffff,AL -2a03:4848::,2a03:487f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:4880::,2a03:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:4881::,2a03:489f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:4848::,2a03:489f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:48a0::,2a03:48a0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:48a1::,2a03:48bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:48c0::,2a03:48c0:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -63624,7 +64204,10 @@ 2a03:53c1::,2a03:53df:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:53e0::,2a03:53e0:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a03:53e1::,2a03:53ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:5400::,2a03:5400:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a03:5400::,2a03:5400:ff:ffff:ffff:ffff:ffff:ffff,BE +2a03:5400:100::,2a03:5400:100:ffff:ffff:ffff:ffff:ffff,GB +2a03:5400:101::,2a03:5400:101:ffff:ffff:ffff:ffff:ffff,DE +2a03:5400:102::,2a03:5400:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a03:5401::,2a03:541f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:5420::,2a03:5420:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:5421::,2a03:543f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -63632,8 +64215,8 @@ 2a03:5448::,2a03:545f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:5460::,2a03:5460:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:5461::,2a03:547f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:5480::,2a03:5480:ffff:ffff:ffff:ffff:ffff:ffff,LI -2a03:5481::,2a03:549f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:5480::,2a03:5487:ffff:ffff:ffff:ffff:ffff:ffff,LI +2a03:5488::,2a03:549f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:54a0::,2a03:54a0:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a03:54a1::,2a03:54bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:54c0::,2a03:54c0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -63687,14 +64270,15 @@ 2a03:5801::,2a03:581f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:5820::,2a03:5820:ffff:ffff:ffff:ffff:ffff:ffff,EE 2a03:5821::,2a03:583f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:5840::,2a03:5840:ff:ffff:ffff:ffff:ffff:ffff,FR -2a03:5840:100::,2a03:5840:10f:ffff:ffff:ffff:ffff:ffff,EU -2a03:5840:110::,2a03:5840:11f:ffff:ffff:ffff:ffff:ffff,FR +2a03:5840::,2a03:5840:0:ffff:ffff:ffff:ffff:ffff,FR +2a03:5840:1::,2a03:5840:11f:ffff:ffff:ffff:ffff:ffff,EU 2a03:5840:120::,2a03:5840:120:ffff:ffff:ffff:ffff:ffff,DE 2a03:5840:121::,2a03:5840:12f:ffff:ffff:ffff:ffff:ffff,FR 2a03:5840:130::,2a03:5840:14f:ffff:ffff:ffff:ffff:ffff,EU -2a03:5840:150::,2a03:5840:fffe:ffff:ffff:ffff:ffff:ffff,FR -2a03:5840:ffff::,2a03:585f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:5840:150::,2a03:5840:19f:ffff:ffff:ffff:ffff:ffff,FR +2a03:5840:1a0::,2a03:5840:1ff:ffff:ffff:ffff:ffff:ffff,EU +2a03:5840:200::,2a03:5840:24f:ffff:ffff:ffff:ffff:ffff,FR +2a03:5840:250::,2a03:585f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:5860::,2a03:5860:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:5861::,2a03:587f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:5880::,2a03:5880:ffff:ffff:ffff:ffff:ffff:ffff,EE @@ -64439,7 +65023,7 @@ 2a03:87e1::,2a03:87ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:8800::,2a03:8800:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a03:8801::,2a03:881f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:8820::,2a03:8820:ffff:ffff:ffff:ffff:ffff:ffff,MT +2a03:8820::,2a03:8820:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a03:8821::,2a03:883f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:8840::,2a03:8840:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:8841::,2a03:885f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -64654,7 +65238,10 @@ 2a03:94a1::,2a03:94bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:94c0::,2a03:94c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:94c1::,2a03:94df:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a03:94e0::,2a03:94e7:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a03:94e0::,2a03:94e0:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a03:94e1::,2a03:94e1:ffff:ffff:ffff:ffff:ffff:ffff,US +2a03:94e2::,2a03:94e2:ffff:ffff:ffff:ffff:ffff:ffff,NG +2a03:94e3::,2a03:94e7:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:94e8::,2a03:94ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:9500::,2a03:9500:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:9501::,2a03:951f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -65070,7 +65657,7 @@ 2a03:afc0:6::,2a03:afc0:6:ffff:ffff:ffff:ffff:ffff,US 2a03:afc0:7::,2a03:afc0:7:ffff:ffff:ffff:ffff:ffff,RU 2a03:afc0:8::,2a03:afc0:8:ffff:ffff:ffff:ffff:ffff,DE -2a03:afc0:9::,2a03:afc0:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:afc0:9::,2a03:afc0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:afc1::,2a03:afdf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:afe0::,2a03:afe1:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:afe2::,2a03:afe2:ffff:ffff:ffff:ffff:ffff:ffff,GR @@ -65392,7 +65979,9 @@ 2a03:d340::,2a03:d340:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:d341::,2a03:d37f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:d380::,2a03:d380:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a03:d381::,2a03:d3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:d381::,2a03:d3bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a03:d3c0::,2a03:d3c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:d3c8::,2a03:d3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:d400::,2a03:d400:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:d401::,2a03:d43f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a03:d440::,2a03:d447:ffff:ffff:ffff:ffff:ffff:ffff,RO @@ -66570,23 +67159,29 @@ 2a04:5b00::,2a04:5b07:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a04:5b08::,2a04:5b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:5b40::,2a04:5b47:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a04:5b48::,2a04:5b80:0:ffff:ffff:ffff:ffff:ffff,EU -2a04:5b80:1::,2a04:5b80:52:ffff:ffff:ffff:ffff:ffff,DE -2a04:5b80:53::,2a04:5b80:53:ffff:ffff:ffff:ffff:ffff,EU -2a04:5b80:54::,2a04:5b80:fffe:ffff:ffff:ffff:ffff:ffff,DE -2a04:5b80:ffff::,2a04:5b80:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a04:5b81::,2a04:5b81:200f:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b48::,2a04:5b80:ff:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b80:100::,2a04:5b80:100:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b80:101::,2a04:5b80:1ff:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b80:200::,2a04:5b80:200:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b80:201::,2a04:5b80:2ff:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b80:300::,2a04:5b80:300:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b80:301::,2a04:5b81:fff:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b81:1000::,2a04:5b81:10ff:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b81:1100::,2a04:5b81:1ffe:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b81:1fff::,2a04:5b81:2000:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b81:2001::,2a04:5b81:200f:ffff:ffff:ffff:ffff:ffff,EU 2a04:5b81:2010::,2a04:5b81:201f:ffff:ffff:ffff:ffff:ffff,ZA -2a04:5b81:2020::,2a04:5b81:202f:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b81:2020::,2a04:5b81:2021:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b81:2022::,2a04:5b81:2022:ffff:ffff:ffff:ffff:ffff,BG +2a04:5b81:2023::,2a04:5b81:202f:ffff:ffff:ffff:ffff:ffff,EU 2a04:5b81:2030::,2a04:5b81:2030:ffff:ffff:ffff:ffff:ffff,US -2a04:5b81:2031::,2a04:5b81:204f:ffff:ffff:ffff:ffff:ffff,DE -2a04:5b81:2050::,2a04:5b81:205f:ffff:ffff:ffff:ffff:ffff,EU -2a04:5b81:2060::,2a04:5b83:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b81:2031::,2a04:5b81:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b82::,2a04:5b82:f:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b82:10::,2a04:5b83:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:5b84::,2a04:5b84:f:ffff:ffff:ffff:ffff:ffff,US -2a04:5b84:10::,2a04:5b86:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a04:5b84:10::,2a04:5b86:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:5b87::,2a04:5b87:f:ffff:ffff:ffff:ffff:ffff,AU -2a04:5b87:10::,2a04:5b87:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a04:5b88::,2a04:5bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a04:5b87:10::,2a04:5bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:5bc0::,2a04:5bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:5bc8::,2a04:5bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:5c00::,2a04:5c07:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -67065,9 +67660,7 @@ 2a04:9288::,2a04:92bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:92c0::,2a04:92c5:0:ffff:ffff:ffff:ffff:ffff,GB 2a04:92c5:1::,2a04:92c5:1:ffff:ffff:ffff:ffff:ffff,DE -2a04:92c5:2::,2a04:92c5:3:ffff:ffff:ffff:ffff:ffff,GB -2a04:92c5:4::,2a04:92c5:4:ffff:ffff:ffff:ffff:ffff,DE -2a04:92c5:5::,2a04:92c7:9:ffff:ffff:ffff:ffff:ffff,GB +2a04:92c5:2::,2a04:92c7:9:ffff:ffff:ffff:ffff:ffff,GB 2a04:92c7:a::,2a04:92c7:b:ffff:ffff:ffff:ffff:ffff,SC 2a04:92c7:c::,2a04:92c7:15:ffff:ffff:ffff:ffff:ffff,GB 2a04:92c7:16::,2a04:92c7:16:ffff:ffff:ffff:ffff:ffff,NL @@ -67281,7 +67874,7 @@ 2a04:a848::,2a04:a87f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:a880::,2a04:a887:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a04:a888::,2a04:a8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a04:a8c0::,2a04:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,US +2a04:a8c0::,2a04:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:a8c8::,2a04:a8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:a900::,2a04:a907:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a04:a908::,2a04:a93f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -68046,7 +68639,11 @@ 2a04:ff00:403::,2a04:ff00:40f:ffff:ffff:ffff:ffff:ffff,SC 2a04:ff00:410::,2a04:ff00:41f:ffff:ffff:ffff:ffff:ffff,EU 2a04:ff00:420::,2a04:ff00:420:ffff:ffff:ffff:ffff:ffff,US -2a04:ff00:421::,2a04:ff00:b00a:ffff:ffff:ffff:ffff:ffff,EU +2a04:ff00:421::,2a04:ff00:4ff:ffff:ffff:ffff:ffff:ffff,EU +2a04:ff00:500::,2a04:ff00:500:ffff:ffff:ffff:ffff:ffff,US +2a04:ff00:501::,2a04:ff00:5ff:ffff:ffff:ffff:ffff:ffff,EU +2a04:ff00:600::,2a04:ff00:6ff:ffff:ffff:ffff:ffff:ffff,GB +2a04:ff00:700::,2a04:ff00:b00a:ffff:ffff:ffff:ffff:ffff,EU 2a04:ff00:b00b::,2a04:ff00:b00b:ffff:ffff:ffff:ffff:ffff,GB 2a04:ff00:b00c::,2a04:ff00:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a04:ff01::,2a04:ff07:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -68216,94 +68813,7 @@ 2a05:1082:e100::,2a05:1082:efff:ffff:ffff:ffff:ffff:ffff,EU 2a05:1082:f000::,2a05:1082:f00f:ffff:ffff:ffff:ffff:ffff,PL 2a05:1082:f010::,2a05:1082:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083::,2a05:1083:1:ffff:ffff:ffff:ffff:ffff,EG -2a05:1083:2::,2a05:1083:2:ffff:ffff:ffff:ffff:ffff,AU -2a05:1083:3::,2a05:1083:ff:ffff:ffff:ffff:ffff:ffff,EG -2a05:1083:100::,2a05:1083:1ff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:200::,2a05:1083:98f:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:990::,2a05:1083:99f:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:9a0::,2a05:1083:9ff:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:a00::,2a05:1083:aff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:b00::,2a05:1083:bff:ffff:ffff:ffff:ffff:ffff,RS -2a05:1083:c00::,2a05:1083:cff:ffff:ffff:ffff:ffff:ffff,CZ -2a05:1083:d00::,2a05:1083:d00:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:d01::,2a05:1083:dff:ffff:ffff:ffff:ffff:ffff,SE -2a05:1083:e00::,2a05:1083:eff:ffff:ffff:ffff:ffff:ffff,BE -2a05:1083:f00::,2a05:1083:fff:ffff:ffff:ffff:ffff:ffff,ES -2a05:1083:1000::,2a05:1083:10ff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:1100::,2a05:1083:110f:ffff:ffff:ffff:ffff:ffff,CN -2a05:1083:1110::,2a05:1083:119f:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:11a0::,2a05:1083:11af:ffff:ffff:ffff:ffff:ffff,CN -2a05:1083:11b0::,2a05:1083:11ef:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:11f0::,2a05:1083:11ff:ffff:ffff:ffff:ffff:ffff,CN -2a05:1083:1200::,2a05:1083:12ff:ffff:ffff:ffff:ffff:ffff,IN -2a05:1083:1300::,2a05:1083:13ff:ffff:ffff:ffff:ffff:ffff,AU -2a05:1083:1400::,2a05:1083:14ff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:1500::,2a05:1083:157f:ffff:ffff:ffff:ffff:ffff,JP -2a05:1083:1580::,2a05:1083:15bf:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:15c0::,2a05:1083:15c0:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:15c1::,2a05:1083:15c1:ffff:ffff:ffff:ffff:ffff,TW -2a05:1083:15c2::,2a05:1083:15c2:ffff:ffff:ffff:ffff:ffff,HK -2a05:1083:15c3::,2a05:1083:15cc:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:15cd::,2a05:1083:15ce:ffff:ffff:ffff:ffff:ffff,CH -2a05:1083:15cf::,2a05:1083:15cf:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:15d0::,2a05:1083:15ff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:1600::,2a05:1083:a9ff:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:aa00::,2a05:1083:aaff:ffff:ffff:ffff:ffff:ffff,AU -2a05:1083:ab00::,2a05:1083:abff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:ac00::,2a05:1083:acff:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:ad00::,2a05:1083:b00a:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:b00b::,2a05:1083:b00b:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:b00c::,2a05:1083:c000:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:c001::,2a05:1083:c002:ffff:ffff:ffff:ffff:ffff,AU -2a05:1083:c003::,2a05:1083:fbff:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:fc00::,2a05:1083:fc0f:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:fc10::,2a05:1083:fc1f:ffff:ffff:ffff:ffff:ffff,ES -2a05:1083:fc20::,2a05:1083:fc2f:ffff:ffff:ffff:ffff:ffff,ZA -2a05:1083:fc30::,2a05:1083:fc3f:ffff:ffff:ffff:ffff:ffff,CL -2a05:1083:fc40::,2a05:1083:fc9f:ffff:ffff:ffff:ffff:ffff,AQ -2a05:1083:fca0::,2a05:1083:fcbf:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:fcc0::,2a05:1083:fccf:ffff:ffff:ffff:ffff:ffff,NO -2a05:1083:fcd0::,2a05:1083:fcdf:ffff:ffff:ffff:ffff:ffff,JP -2a05:1083:fce0::,2a05:1083:fcef:ffff:ffff:ffff:ffff:ffff,SE -2a05:1083:fcf0::,2a05:1083:fcff:ffff:ffff:ffff:ffff:ffff,GB -2a05:1083:fd00::,2a05:1083:fd0f:ffff:ffff:ffff:ffff:ffff,NZ -2a05:1083:fd10::,2a05:1083:fd1f:ffff:ffff:ffff:ffff:ffff,BE -2a05:1083:fd20::,2a05:1083:fd2f:ffff:ffff:ffff:ffff:ffff,SG -2a05:1083:fd30::,2a05:1083:fd3f:ffff:ffff:ffff:ffff:ffff,SE -2a05:1083:fd40::,2a05:1083:fd4f:ffff:ffff:ffff:ffff:ffff,IN -2a05:1083:fd50::,2a05:1083:fd5f:ffff:ffff:ffff:ffff:ffff,KR -2a05:1083:fd60::,2a05:1083:fd6f:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:fd70::,2a05:1083:fd7f:ffff:ffff:ffff:ffff:ffff,CN -2a05:1083:fd80::,2a05:1083:fd8f:ffff:ffff:ffff:ffff:ffff,AU -2a05:1083:fd90::,2a05:1083:fd9f:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:fda0::,2a05:1083:fdff:ffff:ffff:ffff:ffff:ffff,EU -2a05:1083:fe00::,2a05:1083:fe0f:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:fe10::,2a05:1083:fe1f:ffff:ffff:ffff:ffff:ffff,FR -2a05:1083:fe20::,2a05:1083:fe2f:ffff:ffff:ffff:ffff:ffff,CH -2a05:1083:fe30::,2a05:1083:fe3f:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:fe40::,2a05:1083:fe4f:ffff:ffff:ffff:ffff:ffff,CA -2a05:1083:fe50::,2a05:1083:fe5f:ffff:ffff:ffff:ffff:ffff,NL -2a05:1083:fe60::,2a05:1083:fe6f:ffff:ffff:ffff:ffff:ffff,IT -2a05:1083:fe70::,2a05:1083:fe7f:ffff:ffff:ffff:ffff:ffff,US -2a05:1083:fe80::,2a05:1083:fe8f:ffff:ffff:ffff:ffff:ffff,NL -2a05:1083:fe90::,2a05:1083:fe9f:ffff:ffff:ffff:ffff:ffff,CA -2a05:1083:fea0::,2a05:1083:feaf:ffff:ffff:ffff:ffff:ffff,PL -2a05:1083:feb0::,2a05:1083:febf:ffff:ffff:ffff:ffff:ffff,IT -2a05:1083:fec0::,2a05:1083:fecf:ffff:ffff:ffff:ffff:ffff,RO -2a05:1083:fed0::,2a05:1083:fedf:ffff:ffff:ffff:ffff:ffff,HK -2a05:1083:fee0::,2a05:1083:feef:ffff:ffff:ffff:ffff:ffff,RU -2a05:1083:fef0::,2a05:1083:feff:ffff:ffff:ffff:ffff:ffff,KR -2a05:1083:ff00::,2a05:1083:ff00:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:ff01::,2a05:1083:ff01:ffff:ffff:ffff:ffff:ffff,LU -2a05:1083:ff02::,2a05:1083:ff02:ffff:ffff:ffff:ffff:ffff,IT -2a05:1083:ff03::,2a05:1083:ff03:ffff:ffff:ffff:ffff:ffff,RU -2a05:1083:ff04::,2a05:1083:ff04:ffff:ffff:ffff:ffff:ffff,NL -2a05:1083:ff05::,2a05:1083:ff05:ffff:ffff:ffff:ffff:ffff,FR -2a05:1083:ff06::,2a05:1083:ff06:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:ff07::,2a05:1083:ff08:ffff:ffff:ffff:ffff:ffff,NL -2a05:1083:ff09::,2a05:1083:ff09:ffff:ffff:ffff:ffff:ffff,DE -2a05:1083:ff0a::,2a05:1083:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a05:1083::,2a05:1083:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a05:1084::,2a05:1084:6fff:ffff:ffff:ffff:ffff:ffff,SG 2a05:1084:7000::,2a05:1084:73ff:ffff:ffff:ffff:ffff:ffff,HK 2a05:1084:7400::,2a05:1084:74ff:ffff:ffff:ffff:ffff:ffff,DE @@ -68593,7 +69103,8 @@ 2a05:32c8::,2a05:32ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:3300::,2a05:3307:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:3308::,2a05:333f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a05:3340::,2a05:3347:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:3340::,2a05:3340:3f:ffff:ffff:ffff:ffff:ffff,NZ +2a05:3340:40::,2a05:3347:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:3348::,2a05:337f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:3380::,2a05:3387:ffff:ffff:ffff:ffff:ffff:ffff,YE 2a05:3388::,2a05:33bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -69013,7 +69524,8 @@ 2a05:6288::,2a05:62bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:62c0::,2a05:62c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:62c8::,2a05:62ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a05:6300::,2a05:6307:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:6300::,2a05:6303:ffff:ffff:ffff:ffff:ffff:ffff,US +2a05:6304::,2a05:6307:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a05:6308::,2a05:633f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:6340::,2a05:6347:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:6348::,2a05:637f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -69744,17 +70256,15 @@ 2a05:b0c6:2000::,2a05:b0c6:2000:ffff:ffff:ffff:ffff:ffff,GB 2a05:b0c6:2001::,2a05:b0c6:2001:ffff:ffff:ffff:ffff:ffff,IT 2a05:b0c6:2002::,2a05:b0c6:2002:ffff:ffff:ffff:ffff:ffff,IN -2a05:b0c6:2003::,2a05:b0c6:200f:ffff:ffff:ffff:ffff:ffff,GB +2a05:b0c6:2003::,2a05:b0c6:200a:ffff:ffff:ffff:ffff:ffff,GB +2a05:b0c6:200b::,2a05:b0c6:200b:ffff:ffff:ffff:ffff:ffff,NL +2a05:b0c6:200c::,2a05:b0c6:200f:ffff:ffff:ffff:ffff:ffff,GB 2a05:b0c6:2010::,2a05:b0c6:2fff:ffff:ffff:ffff:ffff:ffff,MD 2a05:b0c6:3000::,2a05:b0c6:30ff:ffff:ffff:ffff:ffff:ffff,US 2a05:b0c6:3100::,2a05:b0c6:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a05:b0c7::,2a05:b0c7:e:ffff:ffff:ffff:ffff:ffff,HK 2a05:b0c7:f::,2a05:b0c7:f:ffff:ffff:ffff:ffff:ffff,SG -2a05:b0c7:10::,2a05:b0c7:7fff:ffff:ffff:ffff:ffff:ffff,HK -2a05:b0c7:8000::,2a05:b0c7:8000:ffff:ffff:ffff:ffff:ffff,GB -2a05:b0c7:8001::,2a05:b0c7:8004:ffff:ffff:ffff:ffff:ffff,HK -2a05:b0c7:8005::,2a05:b0c7:8006:ffff:ffff:ffff:ffff:ffff,GB -2a05:b0c7:8007::,2a05:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,HK +2a05:b0c7:10::,2a05:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,HK 2a05:b0c8::,2a05:b0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:b100::,2a05:b107:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:b108::,2a05:b13f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -69983,7 +70493,8 @@ 2a05:cc88::,2a05:ccbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:ccc0::,2a05:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a05:ccc8::,2a05:ccff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a05:cd00::,2a05:cd07:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:cd00::,2a05:cd05:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:cd06::,2a05:cd07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a05:cd08::,2a05:cd3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:cd40::,2a05:cd47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:cd48::,2a05:cd7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -70013,7 +70524,9 @@ 2a05:d000:2000::,2a05:d000:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d000:2100::,2a05:d000:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d000:4000::,2a05:d000:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d000:4100::,2a05:d000:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d000:4100::,2a05:d000:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d000:5000::,2a05:d000:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d000:5100::,2a05:d000:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d000:6000::,2a05:d000:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d000:6100::,2a05:d000:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d000:9000::,2a05:d000:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70029,7 +70542,9 @@ 2a05:d012::,2a05:d012:fff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d012:1000::,2a05:d013:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d014::,2a05:d014:fff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d014:1000::,2a05:d015:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d014:1000::,2a05:d014:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d015::,2a05:d015:fff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d015:1000::,2a05:d015:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d016::,2a05:d016:fff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d016:1000::,2a05:d018:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d019::,2a05:d019:fff:ffff:ffff:ffff:ffff:ffff,CH @@ -70045,7 +70560,9 @@ 2a05:d030:2000::,2a05:d030:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d030:2100::,2a05:d030:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d030:4000::,2a05:d030:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d030:4100::,2a05:d030:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d030:4100::,2a05:d030:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d030:5000::,2a05:d030:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d030:5100::,2a05:d030:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d030:6000::,2a05:d030:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d030:6100::,2a05:d030:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d030:9000::,2a05:d030:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70061,7 +70578,9 @@ 2a05:d034:2000::,2a05:d034:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d034:2100::,2a05:d034:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d034:4000::,2a05:d034:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d034:4100::,2a05:d034:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d034:4100::,2a05:d034:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d034:5000::,2a05:d034:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d034:5100::,2a05:d034:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d034:6000::,2a05:d034:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d034:6100::,2a05:d034:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d034:9000::,2a05:d034:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70093,7 +70612,9 @@ 2a05:d050:2000::,2a05:d050:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d050:2100::,2a05:d050:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d050:4000::,2a05:d050:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d050:4100::,2a05:d050:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d050:4100::,2a05:d050:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d050:5000::,2a05:d050:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d050:5100::,2a05:d050:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d050:6000::,2a05:d050:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d050:6100::,2a05:d050:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d050:9000::,2a05:d050:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70109,7 +70630,9 @@ 2a05:d070:2000::,2a05:d070:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d070:2100::,2a05:d070:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d070:4000::,2a05:d070:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d070:4100::,2a05:d070:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d070:4100::,2a05:d070:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d070:5000::,2a05:d070:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d070:5100::,2a05:d070:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d070:6000::,2a05:d070:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d070:6100::,2a05:d070:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d070:9000::,2a05:d070:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70141,7 +70664,9 @@ 2a05:d078:2000::,2a05:d078:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d078:2100::,2a05:d078:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d078:4000::,2a05:d078:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d078:4100::,2a05:d078:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d078:4100::,2a05:d078:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d078:5000::,2a05:d078:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d078:5100::,2a05:d078:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d078:6000::,2a05:d078:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d078:6100::,2a05:d078:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d078:9000::,2a05:d078:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70157,7 +70682,9 @@ 2a05:d079:2000::,2a05:d079:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d079:2100::,2a05:d079:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d079:4000::,2a05:d079:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d079:4100::,2a05:d079:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d079:4100::,2a05:d079:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d079:5000::,2a05:d079:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d079:5100::,2a05:d079:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d079:6000::,2a05:d079:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d079:6100::,2a05:d079:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d079:9000::,2a05:d079:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70185,7 +70712,9 @@ 2a05:d07c:2000::,2a05:d07c:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d07c:2100::,2a05:d07c:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07c:4000::,2a05:d07c:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d07c:4100::,2a05:d07c:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07c:4100::,2a05:d07c:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07c:5000::,2a05:d07c:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d07c:5100::,2a05:d07c:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07c:6000::,2a05:d07c:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d07c:6100::,2a05:d07c:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07c:9000::,2a05:d07c:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70201,7 +70730,9 @@ 2a05:d07e:2000::,2a05:d07e:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d07e:2100::,2a05:d07e:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07e:4000::,2a05:d07e:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d07e:4100::,2a05:d07e:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07e:4100::,2a05:d07e:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07e:5000::,2a05:d07e:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d07e:5100::,2a05:d07e:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07e:6000::,2a05:d07e:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d07e:6100::,2a05:d07e:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07e:9000::,2a05:d07e:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70217,7 +70748,9 @@ 2a05:d07f:2000::,2a05:d07f:20ff:ffff:ffff:ffff:ffff:ffff,FR 2a05:d07f:2100::,2a05:d07f:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07f:4000::,2a05:d07f:40ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:d07f:4100::,2a05:d07f:5fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07f:4100::,2a05:d07f:4fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07f:5000::,2a05:d07f:50ff:ffff:ffff:ffff:ffff:ffff,IL +2a05:d07f:5100::,2a05:d07f:5fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07f:6000::,2a05:d07f:60ff:ffff:ffff:ffff:ffff:ffff,SE 2a05:d07f:6100::,2a05:d07f:8fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07f:9000::,2a05:d07f:90ff:ffff:ffff:ffff:ffff:ffff,CH @@ -70293,9 +70826,7 @@ 2a05:db80::,2a05:db87:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a05:db88::,2a05:dbbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:dbc0::,2a05:dbc7:ffff:ffff:ffff:ffff:ffff:ffff,HR -2a05:dbc8::,2a05:dbff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a05:dc00::,2a05:dc07:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a05:dc08::,2a05:dc3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a05:dbc8::,2a05:dc3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:dc40::,2a05:dc47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:dc48::,2a05:dc7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a05:dc80::,2a05:dc87:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -70901,7 +71432,9 @@ 2a06:600::,2a06:607:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:608::,2a06:63f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:640::,2a06:647:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a06:648::,2a06:6bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a06:648::,2a06:67f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a06:680::,2a06:687:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a06:688::,2a06:6bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:6c0::,2a06:6c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a06:6c8::,2a06:6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:700::,2a06:707:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -71135,7 +71668,11 @@ 2a06:16c8::,2a06:16ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:1700::,2a06:1700:0:ffff:ffff:ffff:ffff:ffff,RO 2a06:1700:1::,2a06:1700:1:ffff:ffff:ffff:ffff:ffff,FI -2a06:1700:2::,2a06:1707:ffff:ffff:ffff:ffff:ffff:ffff,IS +2a06:1700:2::,2a06:1700:2:ffff:ffff:ffff:ffff:ffff,IS +2a06:1700:3::,2a06:1700:3:ffff:ffff:ffff:ffff:ffff,NL +2a06:1700:4::,2a06:1700:ff:ffff:ffff:ffff:ffff:ffff,IS +2a06:1700:100::,2a06:1700:100:ffff:ffff:ffff:ffff:ffff,RO +2a06:1700:101::,2a06:1707:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a06:1708::,2a06:173f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:1740::,2a06:1747:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:1748::,2a06:177f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -71232,9 +71769,7 @@ 2a06:1e83:cafe::,2a06:1e83:caff:ffff:ffff:ffff:ffff:ffff,EU 2a06:1e83:cb00::,2a06:1e86:5554:ffff:ffff:ffff:ffff:ffff,GB 2a06:1e86:5555::,2a06:1e86:5555:ffff:ffff:ffff:ffff:ffff,AQ -2a06:1e86:5556::,2a06:1e86:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a06:1e87::,2a06:1e87:ff:ffff:ffff:ffff:ffff:ffff,US -2a06:1e87:100::,2a06:1e87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:1e86:5556::,2a06:1e87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:1e88::,2a06:1ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:1ec0::,2a06:1ec7:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a06:1ec8::,2a06:1eff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -71427,11 +71962,9 @@ 2a06:3548::,2a06:357f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:3580::,2a06:3587:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a06:3588::,2a06:35bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:35c0::,2a06:35c0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a06:35c1::,2a06:35c3:ffff:ffff:ffff:ffff:ffff:ffff,BE -2a06:35c4::,2a06:35c7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a06:35c0::,2a06:35c7:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:35c8::,2a06:35ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:3600::,2a06:3607:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:3600::,2a06:3607:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:3608::,2a06:363f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:3640::,2a06:3647:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a06:3648::,2a06:367f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -71478,8 +72011,7 @@ 2a06:3b48::,2a06:3b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:3b80::,2a06:3b87:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:3b88::,2a06:3bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:3bc0::,2a06:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a06:3bc1::,2a06:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a06:3bc0::,2a06:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:3bc8::,2a06:3bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:3c00::,2a06:3c07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a06:3c08::,2a06:3c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -71637,7 +72169,7 @@ 2a06:4d08::,2a06:4d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:4d40::,2a06:4d47:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a06:4d48::,2a06:4d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:4d80::,2a06:4d87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:4d80::,2a06:4d87:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:4d88::,2a06:4dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:4dc0::,2a06:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a06:4dc8::,2a06:4dff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -71660,7 +72192,7 @@ 2a06:5008::,2a06:503f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:5040::,2a06:5040:0:ffff:ffff:ffff:ffff:ffff,HK 2a06:5040:1::,2a06:5040:2:ffff:ffff:ffff:ffff:ffff,US -2a06:5040:3::,2a06:5040:3:ffff:ffff:ffff:ffff:ffff,AP +2a06:5040:3::,2a06:5040:3:ffff:ffff:ffff:ffff:ffff,HK 2a06:5040:4::,2a06:5040:4:ffff:ffff:ffff:ffff:ffff,GB 2a06:5040:5::,2a06:5040:5:ffff:ffff:ffff:ffff:ffff,JP 2a06:5040:6::,2a06:5040:6:ffff:ffff:ffff:ffff:ffff,GB @@ -71692,7 +72224,7 @@ 2a06:5208::,2a06:523f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:5240::,2a06:5247:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:5248::,2a06:527f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:5280::,2a06:5287:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:5280::,2a06:5287:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:5288::,2a06:52bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:52c0::,2a06:52c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a06:52c8::,2a06:52ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -71730,9 +72262,7 @@ 2a06:56c0::,2a06:56c0:10:ffff:ffff:ffff:ffff:ffff,CH 2a06:56c0:11::,2a06:56c0:11:ffff:ffff:ffff:ffff:ffff,EE 2a06:56c0:12::,2a06:56c0:12:ffff:ffff:ffff:ffff:ffff,NO -2a06:56c0:13::,2a06:56c0:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a06:56c1::,2a06:56c1:ff:ffff:ffff:ffff:ffff:ffff,DE -2a06:56c1:100::,2a06:56c1:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a06:56c0:13::,2a06:56c1:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a06:56c2::,2a06:56c2:ff:ffff:ffff:ffff:ffff:ffff,US 2a06:56c2:100::,2a06:56c7:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a06:56c8::,2a06:56ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -72345,7 +72875,7 @@ 2a06:9948::,2a06:997f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:9980::,2a06:9987:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a06:9988::,2a06:99bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:99c0::,2a06:99c7:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a06:99c0::,2a06:99c7:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a06:99c8::,2a06:99ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:9a00::,2a06:9a07:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a06:9a08::,2a06:9a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -72415,11 +72945,12 @@ 2a06:a000::,2a06:a000:52:ffff:ffff:ffff:ffff:ffff,IS 2a06:a000:53::,2a06:a000:53:ffff:ffff:ffff:ffff:ffff,NL 2a06:a000:54::,2a06:a000:ff:ffff:ffff:ffff:ffff:ffff,IS -2a06:a000:100::,2a06:a000:15f:ffff:ffff:ffff:ffff:ffff,US +2a06:a000:100::,2a06:a000:14f:ffff:ffff:ffff:ffff:ffff,US +2a06:a000:150::,2a06:a000:15f:ffff:ffff:ffff:ffff:ffff,IN 2a06:a000:160::,2a06:a000:16f:ffff:ffff:ffff:ffff:ffff,NL 2a06:a000:170::,2a06:a000:17f:ffff:ffff:ffff:ffff:ffff,IN 2a06:a000:180::,2a06:a000:180:ffff:ffff:ffff:ffff:ffff,SG -2a06:a000:181::,2a06:a000:18f:ffff:ffff:ffff:ffff:ffff,US +2a06:a000:181::,2a06:a000:18f:ffff:ffff:ffff:ffff:ffff,HK 2a06:a000:190::,2a06:a000:19f:ffff:ffff:ffff:ffff:ffff,SE 2a06:a000:1a0::,2a06:a000:1af:ffff:ffff:ffff:ffff:ffff,US 2a06:a000:1b0::,2a06:a000:1bf:ffff:ffff:ffff:ffff:ffff,SG @@ -72433,16 +72964,8 @@ 2a06:a000:200::,2a06:a000:2ff:ffff:ffff:ffff:ffff:ffff,IN 2a06:a000:300::,2a06:a000:5352:ffff:ffff:ffff:ffff:ffff,IS 2a06:a000:5353::,2a06:a000:5353:ffff:ffff:ffff:ffff:ffff,NL -2a06:a000:5354::,2a06:a001:101b:ffff:ffff:ffff:ffff:ffff,IS -2a06:a001:101c::,2a06:a001:101d:ffff:ffff:ffff:ffff:ffff,HK -2a06:a001:101e::,2a06:a001:101f:ffff:ffff:ffff:ffff:ffff,TW -2a06:a001:1020::,2a06:a001:9fff:ffff:ffff:ffff:ffff:ffff,IS -2a06:a001:a000::,2a06:a001:a000:ffff:ffff:ffff:ffff:ffff,US -2a06:a001:a001::,2a06:a001:a001:ffff:ffff:ffff:ffff:ffff,SG -2a06:a001:a002::,2a06:a001:a003:ffff:ffff:ffff:ffff:ffff,US -2a06:a001:a004::,2a06:a001:a005:ffff:ffff:ffff:ffff:ffff,HK -2a06:a001:a006::,2a06:a001:a006:ffff:ffff:ffff:ffff:ffff,US -2a06:a001:a007::,2a06:a001:a00f:ffff:ffff:ffff:ffff:ffff,JP +2a06:a000:5354::,2a06:a001:9fff:ffff:ffff:ffff:ffff:ffff,IS +2a06:a001:a000::,2a06:a001:a00f:ffff:ffff:ffff:ffff:ffff,SG 2a06:a001:a010::,2a06:a001:a01f:ffff:ffff:ffff:ffff:ffff,NL 2a06:a001:a020::,2a06:a001:a025:ffff:ffff:ffff:ffff:ffff,SG 2a06:a001:a026::,2a06:a001:a026:ffff:ffff:ffff:ffff:ffff,JP @@ -72460,7 +72983,9 @@ 2a06:a001:a0b0::,2a06:a001:a0b1:ffff:ffff:ffff:ffff:ffff,NL 2a06:a001:a0b2::,2a06:a001:a0b2:ffff:ffff:ffff:ffff:ffff,US 2a06:a001:a0b3::,2a06:a001:a0bf:ffff:ffff:ffff:ffff:ffff,EU -2a06:a001:a0c0::,2a06:a001:a0cf:ffff:ffff:ffff:ffff:ffff,JP +2a06:a001:a0c0::,2a06:a001:a0c3:ffff:ffff:ffff:ffff:ffff,JP +2a06:a001:a0c4::,2a06:a001:a0c4:ffff:ffff:ffff:ffff:ffff,CA +2a06:a001:a0c5::,2a06:a001:a0cf:ffff:ffff:ffff:ffff:ffff,JP 2a06:a001:a0d0::,2a06:a001:a0d1:ffff:ffff:ffff:ffff:ffff,DE 2a06:a001:a0d2::,2a06:a001:a0d2:ffff:ffff:ffff:ffff:ffff,TR 2a06:a001:a0d3::,2a06:a001:a0d3:ffff:ffff:ffff:ffff:ffff,DE @@ -72487,7 +73012,9 @@ 2a06:a005:6::,2a06:a005:6:ffff:ffff:ffff:ffff:ffff,FR 2a06:a005:7::,2a06:a005:7:ffff:ffff:ffff:ffff:ffff,AQ 2a06:a005:8::,2a06:a005:8:ffff:ffff:ffff:ffff:ffff,US -2a06:a005:9::,2a06:a005:f:ffff:ffff:ffff:ffff:ffff,EU +2a06:a005:9::,2a06:a005:9:ffff:ffff:ffff:ffff:ffff,KP +2a06:a005:a::,2a06:a005:b:ffff:ffff:ffff:ffff:ffff,SG +2a06:a005:c::,2a06:a005:f:ffff:ffff:ffff:ffff:ffff,EU 2a06:a005:10::,2a06:a005:1f:ffff:ffff:ffff:ffff:ffff,NC 2a06:a005:20::,2a06:a005:2f:ffff:ffff:ffff:ffff:ffff,NO 2a06:a005:30::,2a06:a005:3f:ffff:ffff:ffff:ffff:ffff,US @@ -72495,7 +73022,9 @@ 2a06:a005:50::,2a06:a005:5f:ffff:ffff:ffff:ffff:ffff,LU 2a06:a005:60::,2a06:a005:7f:ffff:ffff:ffff:ffff:ffff,SG 2a06:a005:80::,2a06:a005:8f:ffff:ffff:ffff:ffff:ffff,NO -2a06:a005:90::,2a06:a005:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a06:a005:90::,2a06:a005:af:ffff:ffff:ffff:ffff:ffff,GB +2a06:a005:b0::,2a06:a005:df:ffff:ffff:ffff:ffff:ffff,IN +2a06:a005:e0::,2a06:a005:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:a006::,2a06:a006:ffff:ffff:ffff:ffff:ffff:ffff,CL 2a06:a007::,2a06:a007:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:a008::,2a06:a03f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -72737,7 +73266,20 @@ 2a06:bc48::,2a06:bc7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:bc80::,2a06:bc87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:bc88::,2a06:bcbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:bcc0::,2a06:bcc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:bcc0::,2a06:bcc0:0:ffff:ffff:ffff:ffff:ffff,DE +2a06:bcc0:1::,2a06:bcc0:1:ffff:ffff:ffff:ffff:ffff,US +2a06:bcc0:2::,2a06:bcc0:2:ffff:ffff:ffff:ffff:ffff,DE +2a06:bcc0:3::,2a06:bcc0:3:ffff:ffff:ffff:ffff:ffff,US +2a06:bcc0:4::,2a06:bcc0:4:ffff:ffff:ffff:ffff:ffff,GB +2a06:bcc0:5::,2a06:bcc0:5:ffff:ffff:ffff:ffff:ffff,US +2a06:bcc0:6::,2a06:bcc0:6:ffff:ffff:ffff:ffff:ffff,SG +2a06:bcc0:7::,2a06:bcc0:7:ffff:ffff:ffff:ffff:ffff,AU +2a06:bcc0:8::,2a06:bcc0:8:ffff:ffff:ffff:ffff:ffff,JP +2a06:bcc0:9::,2a06:bcc0:f:ffff:ffff:ffff:ffff:ffff,DE +2a06:bcc0:10::,2a06:bcc0:10:ffff:ffff:ffff:ffff:ffff,US +2a06:bcc0:11::,2a06:bcc0:11:ffff:ffff:ffff:ffff:ffff,DE +2a06:bcc0:12::,2a06:bcc0:12:ffff:ffff:ffff:ffff:ffff,FR +2a06:bcc0:13::,2a06:bcc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:bcc8::,2a06:bcff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:bd00::,2a06:bd07:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:bd08::,2a06:bd3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -72913,7 +73455,9 @@ 2a06:d148::,2a06:d17f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:d180::,2a06:d187:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a06:d188::,2a06:d1bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:d1c0::,2a06:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:d1c0::,2a06:d1c0:2341:ffff:ffff:ffff:ffff:ffff,DE +2a06:d1c0:2342::,2a06:d1c0:2342:ffff:ffff:ffff:ffff:ffff,NL +2a06:d1c0:2343::,2a06:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:d1c1::,2a06:d1ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:d200::,2a06:d207:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a06:d208::,2a06:d23f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -73029,7 +73573,7 @@ 2a06:df48::,2a06:df7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:df80::,2a06:df87:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a06:df88::,2a06:dfbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:dfc0::,2a06:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:dfc0::,2a06:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:dfc8::,2a06:dfff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:e000::,2a06:e007:ffff:ffff:ffff:ffff:ffff:ffff,US 2a06:e008::,2a06:e03f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -73263,7 +73807,9 @@ 2a06:e881:7100::,2a06:e881:710f:ffff:ffff:ffff:ffff:ffff,GB 2a06:e881:7110::,2a06:e881:71ff:ffff:ffff:ffff:ffff:ffff,EU 2a06:e881:7200::,2a06:e881:72ff:ffff:ffff:ffff:ffff:ffff,IT -2a06:e881:7300::,2a06:e881:73ff:ffff:ffff:ffff:ffff:ffff,EU +2a06:e881:7300::,2a06:e881:7301:ffff:ffff:ffff:ffff:ffff,EU +2a06:e881:7302::,2a06:e881:73fe:ffff:ffff:ffff:ffff:ffff,DE +2a06:e881:73ff::,2a06:e881:73ff:ffff:ffff:ffff:ffff:ffff,EU 2a06:e881:7400::,2a06:e881:74ff:ffff:ffff:ffff:ffff:ffff,GB 2a06:e881:7500::,2a06:e881:75ff:ffff:ffff:ffff:ffff:ffff,DE 2a06:e881:7600::,2a06:e881:7600:ffff:ffff:ffff:ffff:ffff,US @@ -73283,10 +73829,12 @@ 2a06:e881:8600::,2a06:e881:86ff:ffff:ffff:ffff:ffff:ffff,SE 2a06:e881:8700::,2a06:e881:87ff:ffff:ffff:ffff:ffff:ffff,EU 2a06:e881:8800::,2a06:e881:880f:ffff:ffff:ffff:ffff:ffff,FR -2a06:e881:8810::,2a06:e8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a06:e881:8810::,2a06:e881:8fff:ffff:ffff:ffff:ffff:ffff,EU +2a06:e881:9000::,2a06:e881:900f:ffff:ffff:ffff:ffff:ffff,DE +2a06:e881:9010::,2a06:e8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:e8c0::,2a06:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a06:e8c8::,2a06:e8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a06:e900::,2a06:e907:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:e900::,2a06:e907:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a06:e908::,2a06:e93f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a06:e940::,2a06:e947:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:e948::,2a06:e97f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -73737,9 +74285,7 @@ 2a07:1a80:1::,2a07:1a80:1:ffff:ffff:ffff:ffff:ffff,GB 2a07:1a80:2::,2a07:1a80:5fff:ffff:ffff:ffff:ffff:ffff,SE 2a07:1a80:6000::,2a07:1a80:60ff:ffff:ffff:ffff:ffff:ffff,IT -2a07:1a80:6100::,2a07:1a80:6fff:ffff:ffff:ffff:ffff:ffff,SE -2a07:1a80:7000::,2a07:1a80:70ff:ffff:ffff:ffff:ffff:ffff,AT -2a07:1a80:7100::,2a07:1a87:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a07:1a80:6100::,2a07:1a87:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a07:1a88::,2a07:1abf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:1ac0::,2a07:1ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a07:1ac8::,2a07:1aff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -73820,7 +74366,8 @@ 2a07:22c1:36::,2a07:22c1:36:ffff:ffff:ffff:ffff:ffff,GB 2a07:22c1:37::,2a07:22c1:37:ffff:ffff:ffff:ffff:ffff,DE 2a07:22c1:38::,2a07:22c1:38:ffff:ffff:ffff:ffff:ffff,SI -2a07:22c1:39::,2a07:22c1:c000:ffff:ffff:ffff:ffff:ffff,DE +2a07:22c1:39::,2a07:22c1:39:ffff:ffff:ffff:ffff:ffff,GB +2a07:22c1:3a::,2a07:22c1:c000:ffff:ffff:ffff:ffff:ffff,DE 2a07:22c1:c001::,2a07:22c1:c002:ffff:ffff:ffff:ffff:ffff,US 2a07:22c1:c003::,2a07:22c1:c0ff:ffff:ffff:ffff:ffff:ffff,DE 2a07:22c1:c100::,2a07:22c1:c1ff:ffff:ffff:ffff:ffff:ffff,FI @@ -74150,7 +74697,9 @@ 2a07:47c8::,2a07:47ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:4800::,2a07:4807:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a07:4808::,2a07:483f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:4840::,2a07:4847:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a07:4840::,2a07:4842:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a07:4843::,2a07:4843:0:ffff:ffff:ffff:ffff:ffff,DE +2a07:4843:1::,2a07:4847:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a07:4848::,2a07:487f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:4880::,2a07:4887:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a07:4888::,2a07:48bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -74168,7 +74717,7 @@ 2a07:4a08::,2a07:4a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:4a40::,2a07:4a47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a07:4a48::,2a07:4a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:4a80::,2a07:4a87:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a07:4a80::,2a07:4a87:ffff:ffff:ffff:ffff:ffff:ffff,US 2a07:4a88::,2a07:4abf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:4ac0::,2a07:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a07:4ac8::,2a07:4aff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -74291,7 +74840,11 @@ 2a07:5988::,2a07:59bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:59c0::,2a07:59c1:1fff:ffff:ffff:ffff:ffff:ffff,IT 2a07:59c1:2000::,2a07:59c1:200f:ffff:ffff:ffff:ffff:ffff,PL -2a07:59c1:2010::,2a07:59c1:201f:ffff:ffff:ffff:ffff:ffff,IT +2a07:59c1:2010::,2a07:59c1:2019:ffff:ffff:ffff:ffff:ffff,IT +2a07:59c1:201a::,2a07:59c1:201a:ffff:ffff:ffff:ffff:ffff,UA +2a07:59c1:201b::,2a07:59c1:201b:ffff:ffff:ffff:ffff:ffff,US +2a07:59c1:201c::,2a07:59c1:201d:ffff:ffff:ffff:ffff:ffff,DE +2a07:59c1:201e::,2a07:59c1:201f:ffff:ffff:ffff:ffff:ffff,IT 2a07:59c1:2020::,2a07:59c1:20ff:ffff:ffff:ffff:ffff:ffff,PL 2a07:59c1:2100::,2a07:59c1:2fff:ffff:ffff:ffff:ffff:ffff,IT 2a07:59c1:3000::,2a07:59c1:30bf:ffff:ffff:ffff:ffff:ffff,CN @@ -74592,9 +75145,7 @@ 2a07:7a40::,2a07:7a47:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a07:7a48::,2a07:7a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:7a80::,2a07:7a87:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a07:7a88::,2a07:7abf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:7ac0::,2a07:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a07:7ac8::,2a07:7aff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a07:7a88::,2a07:7aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:7b00::,2a07:7b07:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a07:7b08::,2a07:7b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:7b40::,2a07:7b47:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -74802,7 +75353,7 @@ 2a07:9108::,2a07:913f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:9140::,2a07:9147:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a07:9148::,2a07:917f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:9180::,2a07:9187:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a07:9180::,2a07:9187:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a07:9188::,2a07:91bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:91c0::,2a07:91c7:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a07:91c8::,2a07:91ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -75057,7 +75608,8 @@ 2a07:a9c8::,2a07:a9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:aa00::,2a07:aa00:0:ffff:ffff:ffff:ffff:ffff,GB 2a07:aa00:1::,2a07:aa00:1:ffff:ffff:ffff:ffff:ffff,DE -2a07:aa00:2::,2a07:aa00:88:ffff:ffff:ffff:ffff:ffff,GB +2a07:aa00:2::,2a07:aa00:2:ffff:ffff:ffff:ffff:ffff,PT +2a07:aa00:3::,2a07:aa00:88:ffff:ffff:ffff:ffff:ffff,GB 2a07:aa00:89::,2a07:aa00:89:ffff:ffff:ffff:ffff:ffff,SE 2a07:aa00:8a::,2a07:aa07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a07:aa08::,2a07:aa3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -75087,7 +75639,7 @@ 2a07:ad08::,2a07:ad3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:ad40::,2a07:ad47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a07:ad48::,2a07:ad7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:ad80::,2a07:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a07:ad80::,2a07:ad87:ffff:ffff:ffff:ffff:ffff:ffff,US 2a07:ad88::,2a07:adbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:adc0::,2a07:adc7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a07:adc8::,2a07:adff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -75446,8 +75998,8 @@ 2a07:dfc8::,2a07:dfff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:e000::,2a07:e007:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2a07:e008::,2a07:e03f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:e040::,2a07:e040:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a07:e041::,2a07:e047:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a07:e040::,2a07:e041:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a07:e042::,2a07:e047:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a07:e048::,2a07:e07f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:e080::,2a07:e087:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a07:e088::,2a07:e0bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -75576,9 +76128,7 @@ 2a07:efc0::,2a07:efc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a07:efc1::,2a07:efff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:f000::,2a07:f000:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a07:f001::,2a07:f03f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:f040::,2a07:f040:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a07:f041::,2a07:f07f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a07:f001::,2a07:f07f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:f080::,2a07:f087:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a07:f088::,2a07:f0bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:f0c0::,2a07:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -75706,9 +76256,7 @@ 2a07:fec0::,2a07:fec7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a07:fec8::,2a07:feff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:ff00::,2a07:ff07:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a07:ff08::,2a07:ff3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a07:ff40::,2a07:ff47:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a07:ff48::,2a07:ff7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a07:ff08::,2a07:ff7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:ff80::,2a07:ff80:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a07:ff81::,2a07:ffbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a07:ffc0::,2a07:ffc7:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -75725,7 +76273,8 @@ 2a09:0:11::,2a09:0:11:ffff:ffff:ffff:ffff:ffff,GB 2a09:0:12::,2a09:0:12:ffff:ffff:ffff:ffff:ffff,NL 2a09:0:13::,2a09:0:14:ffff:ffff:ffff:ffff:ffff,DE -2a09:0:15::,2a09:0:1336:ffff:ffff:ffff:ffff:ffff,EU +2a09:0:15::,2a09:0:15:ffff:ffff:ffff:ffff:ffff,AU +2a09:0:16::,2a09:0:1336:ffff:ffff:ffff:ffff:ffff,EU 2a09:0:1337::,2a09:0:1337:ffff:ffff:ffff:ffff:ffff,DE 2a09:0:1338::,2a09:0:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:1::,2a09:1:0:ffff:ffff:ffff:ffff:ffff,DE @@ -76024,9 +76573,7 @@ 2a09:4c0:fc00::,2a09:4c0:fcff:ffff:ffff:ffff:ffff:ffff,ZA 2a09:4c0:fd00::,2a09:4c0:fdff:ffff:ffff:ffff:ffff:ffff,ZM 2a09:4c0:fe00::,2a09:4c0:feff:ffff:ffff:ffff:ffff:ffff,ZW -2a09:4c0:ff00::,2a09:4c2:26:ffff:ffff:ffff:ffff:ffff,EU -2a09:4c2:27::,2a09:4c2:27:ffff:ffff:ffff:ffff:ffff,PL -2a09:4c2:28::,2a09:4c2:2b:ffff:ffff:ffff:ffff:ffff,EU +2a09:4c0:ff00::,2a09:4c2:2b:ffff:ffff:ffff:ffff:ffff,EU 2a09:4c2:2c::,2a09:4c2:2c:ffff:ffff:ffff:ffff:ffff,TH 2a09:4c2:2d::,2a09:4c2:2e:ffff:ffff:ffff:ffff:ffff,EU 2a09:4c2:2f::,2a09:4c2:2f:ffff:ffff:ffff:ffff:ffff,CH @@ -76134,7 +76681,7 @@ 2a09:1008::,2a09:103f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:1040::,2a09:1047:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:1048::,2a09:107f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:1080::,2a09:1087:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a09:1080::,2a09:1087:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:1088::,2a09:10bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:10c0::,2a09:10c7:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a09:10c8::,2a09:10ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -76196,7 +76743,7 @@ 2a09:1748::,2a09:177f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:1780::,2a09:1787:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a09:1788::,2a09:17bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:17c0::,2a09:17c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a09:17c0::,2a09:17c7:ffff:ffff:ffff:ffff:ffff:ffff,US 2a09:17c8::,2a09:17ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:1800::,2a09:1807:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:1808::,2a09:183f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -76610,7 +77157,8 @@ 2a09:49c8::,2a09:49ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:4a00::,2a09:4a07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:4a08::,2a09:4a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:4a40::,2a09:4a47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a09:4a40::,2a09:4a46:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a09:4a47::,2a09:4a47:ffff:ffff:ffff:ffff:ffff:ffff,US 2a09:4a48::,2a09:4a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:4a80::,2a09:4a87:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:4a88::,2a09:4abf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -76638,9 +77186,11 @@ 2a09:4d08::,2a09:4d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:4d40::,2a09:4d40:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:4d41::,2a09:4d41:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a09:4d42::,2a09:4d47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a09:4d42::,2a09:4d45:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a09:4d46::,2a09:4d46:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a09:4d47::,2a09:4d47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:4d48::,2a09:4d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:4d80::,2a09:4d87:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a09:4d80::,2a09:4d87:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:4d88::,2a09:4dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:4dc0::,2a09:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a09:4dc1::,2a09:4dff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -76858,7 +77408,7 @@ 2a09:6708::,2a09:673f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:6740::,2a09:6747:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a09:6748::,2a09:677f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:6780::,2a09:6787:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a09:6780::,2a09:6787:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:6788::,2a09:67bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:67c0::,2a09:67c7:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a09:67c8::,2a09:67ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -77042,7 +77592,7 @@ 2a09:7bc8::,2a09:7bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:7c00::,2a09:7c07:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a09:7c08::,2a09:7c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:7c40::,2a09:7c40:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a09:7c40::,2a09:7c40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a09:7c41::,2a09:7c41:ffff:ffff:ffff:ffff:ffff:ffff,US 2a09:7c42::,2a09:7c42:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a09:7c43::,2a09:7c43:ffff:ffff:ffff:ffff:ffff:ffff,LV @@ -77063,7 +77613,7 @@ 2a09:7d88::,2a09:7dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:7dc0::,2a09:7dc7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a09:7dc8::,2a09:7dff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:7e00::,2a09:7e07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a09:7e00::,2a09:7e07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:7e08::,2a09:7e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:7e40::,2a09:7e47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a09:7e48::,2a09:7e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -77137,9 +77687,7 @@ 2a09:8688::,2a09:86bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:86c0::,2a09:86c7:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a09:86c8::,2a09:86ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:8700::,2a09:8700:0:ffff:ffff:ffff:ffff:ffff,DE -2a09:8700:1::,2a09:8700:2:ffff:ffff:ffff:ffff:ffff,EU -2a09:8700:3::,2a09:8707:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a09:8700::,2a09:8707:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a09:8708::,2a09:873f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:8740::,2a09:8747:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a09:8748::,2a09:877f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -77238,7 +77786,7 @@ 2a09:9288::,2a09:92bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:92c0::,2a09:92c7:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a09:92c8::,2a09:92ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:9300::,2a09:9307:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a09:9300::,2a09:9307:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:9308::,2a09:933f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:9340::,2a09:9347:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a09:9348::,2a09:937f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -77525,7 +78073,9 @@ 2a09:b280:ff80::,2a09:b280:ff80:ffff:ffff:ffff:ffff:ffff,DE 2a09:b280:ff81::,2a09:b280:ff81:ffff:ffff:ffff:ffff:ffff,HK 2a09:b280:ff82::,2a09:b280:ff8f:ffff:ffff:ffff:ffff:ffff,DE -2a09:b280:ff90::,2a09:b280:ffaf:ffff:ffff:ffff:ffff:ffff,GB +2a09:b280:ff90::,2a09:b280:ff90:ffff:ffff:ffff:ffff:ffff,US +2a09:b280:ff91::,2a09:b280:ff9f:ffff:ffff:ffff:ffff:ffff,CA +2a09:b280:ffa0::,2a09:b280:ffaf:ffff:ffff:ffff:ffff:ffff,GB 2a09:b280:ffb0::,2a09:b280:ffb2:ffff:ffff:ffff:ffff:ffff,JP 2a09:b280:ffb3::,2a09:b280:ffb8:ffff:ffff:ffff:ffff:ffff,GB 2a09:b280:ffb9::,2a09:b280:ffb9:ffff:ffff:ffff:ffff:ffff,NL @@ -77596,7 +78146,7 @@ 2a09:b9c8::,2a09:b9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:ba00::,2a09:ba07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a09:ba08::,2a09:ba3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:ba40::,2a09:ba47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a09:ba40::,2a09:ba47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:ba48::,2a09:ba7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:ba80::,2a09:ba87:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:ba88::,2a09:babf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -77876,7 +78426,7 @@ 2a09:d0c8::,2a09:d0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:d100::,2a09:d107:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a09:d108::,2a09:d13f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a09:d140::,2a09:d147:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a09:d140::,2a09:d147:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a09:d148::,2a09:d17f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a09:d180::,2a09:d187:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a09:d188::,2a09:d1bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -78539,8 +79089,8 @@ 2a0a:1f08::,2a0a:1f3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:1f40::,2a0a:1f41:ffff:ffff:ffff:ffff:ffff:ffff,CA 2a0a:1f42::,2a0a:1f42:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0a:1f43::,2a0a:1f45:ffff:ffff:ffff:ffff:ffff:ffff,CA -2a0a:1f46::,2a0a:1f47:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:1f43::,2a0a:1f46:ffff:ffff:ffff:ffff:ffff:ffff,CA +2a0a:1f47::,2a0a:1f47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:1f48::,2a0a:1f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:1f80::,2a0a:1f87:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:1f88::,2a0a:1fbf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -78930,7 +79480,8 @@ 2a0a:4c41::,2a0a:4c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:4c80::,2a0a:4c87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:4c88::,2a0a:4cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0a:4cc0::,2a0a:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:4cc0::,2a0a:4cc0:ff:ffff:ffff:ffff:ffff:ffff,AT +2a0a:4cc0:100::,2a0a:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:4cc1::,2a0a:4cff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:4d00::,2a0a:4d07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:4d08::,2a0a:4d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -79155,7 +79706,9 @@ 2a0a:6040:d0::,2a0a:6040:d0:ffff:ffff:ffff:ffff:ffff,AU 2a0a:6040:d1::,2a0a:6040:d1:ffff:ffff:ffff:ffff:ffff,NZ 2a0a:6040:d2::,2a0a:6040:d6:ffff:ffff:ffff:ffff:ffff,AU -2a0a:6040:d7::,2a0a:6040:ed:ffff:ffff:ffff:ffff:ffff,IM +2a0a:6040:d7::,2a0a:6040:df:ffff:ffff:ffff:ffff:ffff,IM +2a0a:6040:e0::,2a0a:6040:e9:ffff:ffff:ffff:ffff:ffff,AU +2a0a:6040:ea::,2a0a:6040:ed:ffff:ffff:ffff:ffff:ffff,IM 2a0a:6040:ee::,2a0a:6040:ee:ffff:ffff:ffff:ffff:ffff,AQ 2a0a:6040:ef::,2a0a:6040:ef:ffff:ffff:ffff:ffff:ffff,IM 2a0a:6040:f0::,2a0a:6040:f5:ffff:ffff:ffff:ffff:ffff,FR @@ -79516,7 +80069,9 @@ 2a0a:8100::,2a0a:8107:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:8108::,2a0a:813f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:8140::,2a0a:8140:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a0a:8141::,2a0a:81bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0a:8141::,2a0a:817f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0a:8180::,2a0a:8187:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0a:8188::,2a0a:81bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:81c0::,2a0a:81c7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0a:81c8::,2a0a:81ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:8200::,2a0a:8207:ffff:ffff:ffff:ffff:ffff:ffff,IL @@ -79713,7 +80268,9 @@ 2a0a:92c8::,2a0a:92ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:9300::,2a0a:9300:0:ffff:ffff:ffff:ffff:ffff,RU 2a0a:9300:1::,2a0a:9300:1:ffff:ffff:ffff:ffff:ffff,CZ -2a0a:9300:2::,2a0a:9302:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:9300:2::,2a0a:9300:aaa9:ffff:ffff:ffff:ffff:ffff,RU +2a0a:9300:aaaa::,2a0a:9300:aaaa:ffff:ffff:ffff:ffff:ffff,CZ +2a0a:9300:aaab::,2a0a:9302:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:9303::,2a0a:9307:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0a:9308::,2a0a:933f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:9340::,2a0a:9340:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -80513,8 +81070,7 @@ 2a0a:ea88::,2a0a:eabf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:eac0::,2a0a:eac7:ffff:ffff:ffff:ffff:ffff:ffff,BY 2a0a:eac8::,2a0a:eaff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0a:eb00::,2a0a:eb04:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:eb05::,2a0a:eb07:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0a:eb00::,2a0a:eb07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:eb08::,2a0a:eb3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:eb40::,2a0a:eb47:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0a:eb48::,2a0a:eb7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -80530,7 +81086,7 @@ 2a0a:ec02:ff00::,2a0a:ec02:ff00:ffff:ffff:ffff:ffff:ffff,GB 2a0a:ec02:ff01::,2a0a:ec07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:ec08::,2a0a:ec3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0a:ec40::,2a0a:ec40:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:ec40::,2a0a:ec40:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a0a:ec41::,2a0a:ec7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0a:ec80::,2a0a:ec87:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a0a:ec88::,2a0a:ecbf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -80829,8 +81385,8 @@ 2a0b:b87:ffb9::,2a0b:b87:ffb9:ffff:ffff:ffff:ffff:ffff,NL 2a0b:b87:ffba::,2a0b:b87:ffba:ffff:ffff:ffff:ffff:ffff,GB 2a0b:b87:ffbb::,2a0b:b87:ffbb:ffff:ffff:ffff:ffff:ffff,FR -2a0b:b87:ffbc::,2a0b:b87:ffbc:ffff:ffff:ffff:ffff:ffff,NL -2a0b:b87:ffbd::,2a0b:b87:ffbe:ffff:ffff:ffff:ffff:ffff,GB +2a0b:b87:ffbc::,2a0b:b87:ffbd:ffff:ffff:ffff:ffff:ffff,NL +2a0b:b87:ffbe::,2a0b:b87:ffbe:ffff:ffff:ffff:ffff:ffff,GB 2a0b:b87:ffbf::,2a0b:b87:ffbf:ffff:ffff:ffff:ffff:ffff,NL 2a0b:b87:ffc0::,2a0b:b87:ffcf:ffff:ffff:ffff:ffff:ffff,RU 2a0b:b87:ffd0::,2a0b:b87:ffd2:ffff:ffff:ffff:ffff:ffff,NL @@ -81303,7 +81859,9 @@ 2a0b:3bc1::,2a0b:3bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:3c00::,2a0b:3c07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:3c08::,2a0b:3c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0b:3c40::,2a0b:3c40:23:ffff:ffff:ffff:ffff:ffff,NL +2a0b:3c40::,2a0b:3c40:18:ffff:ffff:ffff:ffff:ffff,NL +2a0b:3c40:19::,2a0b:3c40:19:ffff:ffff:ffff:ffff:ffff,VN +2a0b:3c40:1a::,2a0b:3c40:23:ffff:ffff:ffff:ffff:ffff,NL 2a0b:3c40:24::,2a0b:3c40:24:ffff:ffff:ffff:ffff:ffff,IT 2a0b:3c40:25::,2a0b:3c47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:3c48::,2a0b:3c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -81401,7 +81959,7 @@ 2a0b:4340:9b::,2a0b:4340:9d:ffff:ffff:ffff:ffff:ffff,NL 2a0b:4340:9e::,2a0b:4340:9e:ffff:ffff:ffff:ffff:ffff,US 2a0b:4340:9f::,2a0b:4340:9f:ffff:ffff:ffff:ffff:ffff,NL -2a0b:4340:a0::,2a0b:4340:a0:ffff:ffff:ffff:ffff:ffff,US +2a0b:4340:a0::,2a0b:4340:a0:ffff:ffff:ffff:ffff:ffff,FR 2a0b:4340:a1::,2a0b:4340:a1:ffff:ffff:ffff:ffff:ffff,HK 2a0b:4340:a2::,2a0b:4340:af:ffff:ffff:ffff:ffff:ffff,FR 2a0b:4340:b0::,2a0b:4340:bf:ffff:ffff:ffff:ffff:ffff,TW @@ -81797,7 +82355,9 @@ 2a0b:66c0::,2a0b:66c0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:66c1::,2a0b:66ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:6700::,2a0b:6700:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a0b:6701::,2a0b:677f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0b:6701::,2a0b:673f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0b:6740::,2a0b:6747:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:6748::,2a0b:677f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:6780::,2a0b:6787:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:6788::,2a0b:67bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:67c0::,2a0b:67c7:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -82042,7 +82602,9 @@ 2a0b:7d88::,2a0b:7dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:7dc0::,2a0b:7dc7:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a0b:7dc8::,2a0b:7dff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0b:7e00::,2a0b:7e07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0b:7e00::,2a0b:7e00:fff:ffff:ffff:ffff:ffff:ffff,DK +2a0b:7e00:1000::,2a0b:7e00:1fff:ffff:ffff:ffff:ffff:ffff,HK +2a0b:7e00:2000::,2a0b:7e07:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0b:7e08::,2a0b:7e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:7e40::,2a0b:7e40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:7e41::,2a0b:7e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -82379,7 +82941,7 @@ 2a0b:a448::,2a0b:a47f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:a480::,2a0b:a487:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0b:a488::,2a0b:a4bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0b:a4c0::,2a0b:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:a4c0::,2a0b:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0b:a4c8::,2a0b:a4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:a500::,2a0b:a507:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:a508::,2a0b:a53f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -82809,7 +83371,7 @@ 2a0b:d988::,2a0b:d9bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:d9c0::,2a0b:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:d9c1::,2a0b:d9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0b:da00::,2a0b:da07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:da00::,2a0b:da07:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:da08::,2a0b:da3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0b:da40::,2a0b:da47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:da48::,2a0b:da7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -83360,9 +83922,7 @@ 2a0c:1b40::,2a0c:1b47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0c:1b48::,2a0c:1b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:1b80::,2a0c:1b87:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0c:1b88::,2a0c:1bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0c:1bc0::,2a0c:1bc7:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a0c:1bc8::,2a0c:1bff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0c:1b88::,2a0c:1bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:1c00::,2a0c:1c07:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a0c:1c08::,2a0c:1c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:1c40::,2a0c:1c47:ffff:ffff:ffff:ffff:ffff:ffff,LB @@ -83522,7 +84082,9 @@ 2a0c:2f07:f::,2a0c:2f07:f:ffff:ffff:ffff:ffff:ffff,US 2a0c:2f07:10::,2a0c:2f07:71:ffff:ffff:ffff:ffff:ffff,GB 2a0c:2f07:72::,2a0c:2f07:72:ffff:ffff:ffff:ffff:ffff,US -2a0c:2f07:73::,2a0c:2f07:eff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:2f07:73::,2a0c:2f07:ac0:ffff:ffff:ffff:ffff:ffff,GB +2a0c:2f07:ac1::,2a0c:2f07:ac1:ffff:ffff:ffff:ffff:ffff,EU +2a0c:2f07:ac2::,2a0c:2f07:eff:ffff:ffff:ffff:ffff:ffff,GB 2a0c:2f07:f00::,2a0c:2f07:fff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:2f07:1000::,2a0c:2f07:4224:ffff:ffff:ffff:ffff:ffff,GB 2a0c:2f07:4225::,2a0c:2f07:4225:ffff:ffff:ffff:ffff:ffff,PL @@ -84042,9 +84604,7 @@ 2a0c:6d00::,2a0c:6d00:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0c:6d01::,2a0c:6d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:6d40::,2a0c:6d47:ffff:ffff:ffff:ffff:ffff:ffff,TR -2a0c:6d48::,2a0c:6d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0c:6d80::,2a0c:6d87:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a0c:6d88::,2a0c:6dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0c:6d48::,2a0c:6dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:6dc0::,2a0c:6dc7:ffff:ffff:ffff:ffff:ffff:ffff,AM 2a0c:6dc8::,2a0c:6dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:6e00::,2a0c:6e07:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -84191,7 +84751,7 @@ 2a0c:7fc8::,2a0c:7fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:8000::,2a0c:8007:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0c:8008::,2a0c:803f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0c:8040::,2a0c:8047:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:8040::,2a0c:8047:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0c:8048::,2a0c:807f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:8080::,2a0c:8080:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0c:8081::,2a0c:80bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -84522,7 +85082,8 @@ 2a0c:9a40:2a00::,2a0c:9a40:2aff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:9a40:2b00::,2a0c:9a40:800f:ffff:ffff:ffff:ffff:ffff,CH 2a0c:9a40:8010::,2a0c:9a40:801f:ffff:ffff:ffff:ffff:ffff,GB -2a0c:9a40:8020::,2a0c:9a40:803f:ffff:ffff:ffff:ffff:ffff,CH +2a0c:9a40:8020::,2a0c:9a40:802f:ffff:ffff:ffff:ffff:ffff,IE +2a0c:9a40:8030::,2a0c:9a40:803f:ffff:ffff:ffff:ffff:ffff,CH 2a0c:9a40:8040::,2a0c:9a40:806f:ffff:ffff:ffff:ffff:ffff,DE 2a0c:9a40:8070::,2a0c:9a40:807f:ffff:ffff:ffff:ffff:ffff,AT 2a0c:9a40:8080::,2a0c:9a40:8083:ffff:ffff:ffff:ffff:ffff,FR @@ -84530,7 +85091,7 @@ 2a0c:9a40:8085::,2a0c:9a40:808d:ffff:ffff:ffff:ffff:ffff,FR 2a0c:9a40:808e::,2a0c:9a40:808e:ffff:ffff:ffff:ffff:ffff,NL 2a0c:9a40:808f::,2a0c:9a40:808f:ffff:ffff:ffff:ffff:ffff,FR -2a0c:9a40:8090::,2a0c:9a40:809f:ffff:ffff:ffff:ffff:ffff,CH +2a0c:9a40:8090::,2a0c:9a40:809f:ffff:ffff:ffff:ffff:ffff,IE 2a0c:9a40:80a0::,2a0c:9a40:80af:ffff:ffff:ffff:ffff:ffff,DE 2a0c:9a40:80b0::,2a0c:9a40:80b0:ffff:ffff:ffff:ffff:ffff,FR 2a0c:9a40:80b1::,2a0c:9a40:80bf:ffff:ffff:ffff:ffff:ffff,CH @@ -84635,7 +85196,8 @@ 2a0c:9d88::,2a0c:9dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:9dc0::,2a0c:9dc7:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0c:9dc8::,2a0c:9dff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0c:9e00::,2a0c:9e07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:9e00::,2a0c:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0c:9e01::,2a0c:9e07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:9e08::,2a0c:9e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:9e40::,2a0c:9e47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:9e48::,2a0c:9e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -84765,7 +85327,9 @@ 2a0c:ae00::,2a0c:ae07:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0c:ae08::,2a0c:ae3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:ae40::,2a0c:ae47:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0c:ae48::,2a0c:aebf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0c:ae48::,2a0c:ae7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0c:ae80::,2a0c:ae87:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0c:ae88::,2a0c:aebf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:aec0::,2a0c:aec7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:aec8::,2a0c:aeff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:af00::,2a0c:af07:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -84856,17 +85420,14 @@ 2a0c:b641:d4::,2a0c:b641:d4:ffff:ffff:ffff:ffff:ffff,AU 2a0c:b641:d5::,2a0c:b641:d5:ffff:ffff:ffff:ffff:ffff,BR 2a0c:b641:d6::,2a0c:b641:df:ffff:ffff:ffff:ffff:ffff,GB -2a0c:b641:e0::,2a0c:b641:ef:ffff:ffff:ffff:ffff:ffff,BE +2a0c:b641:e0::,2a0c:b641:ef:ffff:ffff:ffff:ffff:ffff,TR 2a0c:b641:f0::,2a0c:b641:ff:ffff:ffff:ffff:ffff:ffff,GB -2a0c:b641:100::,2a0c:b641:10f:ffff:ffff:ffff:ffff:ffff,BE -2a0c:b641:110::,2a0c:b641:11f:ffff:ffff:ffff:ffff:ffff,FR -2a0c:b641:120::,2a0c:b641:12f:ffff:ffff:ffff:ffff:ffff,DE +2a0c:b641:100::,2a0c:b641:10f:ffff:ffff:ffff:ffff:ffff,US +2a0c:b641:110::,2a0c:b641:12f:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b641:130::,2a0c:b641:13f:ffff:ffff:ffff:ffff:ffff,CN 2a0c:b641:140::,2a0c:b641:14f:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b641:150::,2a0c:b641:15f:ffff:ffff:ffff:ffff:ffff,GB -2a0c:b641:160::,2a0c:b641:169:ffff:ffff:ffff:ffff:ffff,RS -2a0c:b641:16a::,2a0c:b641:16a:ffff:ffff:ffff:ffff:ffff,DE -2a0c:b641:16b::,2a0c:b641:16f:ffff:ffff:ffff:ffff:ffff,RS +2a0c:b641:160::,2a0c:b641:16f:ffff:ffff:ffff:ffff:ffff,RS 2a0c:b641:170::,2a0c:b641:17f:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b641:180::,2a0c:b641:180:ffff:ffff:ffff:ffff:ffff,GB 2a0c:b641:181::,2a0c:b641:18f:ffff:ffff:ffff:ffff:ffff,CH @@ -84921,7 +85482,9 @@ 2a0c:b641:270::,2a0c:b641:27f:ffff:ffff:ffff:ffff:ffff,CH 2a0c:b641:280::,2a0c:b641:29f:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b641:2a0::,2a0c:b641:2af:ffff:ffff:ffff:ffff:ffff,RU -2a0c:b641:2b0::,2a0c:b641:2cf:ffff:ffff:ffff:ffff:ffff,FR +2a0c:b641:2b0::,2a0c:b641:2b0:ffff:ffff:ffff:ffff:ffff,FR +2a0c:b641:2b1::,2a0c:b641:2b2:ffff:ffff:ffff:ffff:ffff,EU +2a0c:b641:2b3::,2a0c:b641:2cf:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b641:2d0::,2a0c:b641:2db:ffff:ffff:ffff:ffff:ffff,BE 2a0c:b641:2dc::,2a0c:b641:2dc:ffff:ffff:ffff:ffff:ffff,RU 2a0c:b641:2dd::,2a0c:b641:2df:ffff:ffff:ffff:ffff:ffff,BE @@ -84961,7 +85524,7 @@ 2a0c:b641:56a::,2a0c:b641:56a:ffff:ffff:ffff:ffff:ffff,CA 2a0c:b641:56b::,2a0c:b641:56d:ffff:ffff:ffff:ffff:ffff,US 2a0c:b641:56e::,2a0c:b641:56e:ffff:ffff:ffff:ffff:ffff,LU -2a0c:b641:56f::,2a0c:b641:56f:ffff:ffff:ffff:ffff:ffff,NL +2a0c:b641:56f::,2a0c:b641:56f:ffff:ffff:ffff:ffff:ffff,EU 2a0c:b641:570::,2a0c:b641:570:ffff:ffff:ffff:ffff:ffff,GB 2a0c:b641:571::,2a0c:b641:571:ffff:ffff:ffff:ffff:ffff,JP 2a0c:b641:572::,2a0c:b641:57f:ffff:ffff:ffff:ffff:ffff,GB @@ -85016,7 +85579,8 @@ 2a0c:b641:701::,2a0c:b641:701:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b641:702::,2a0c:b641:70e:ffff:ffff:ffff:ffff:ffff,BE 2a0c:b641:70f::,2a0c:b641:70f:ffff:ffff:ffff:ffff:ffff,DE -2a0c:b641:710::,2a0c:b641:72f:ffff:ffff:ffff:ffff:ffff,FR +2a0c:b641:710::,2a0c:b641:71f:ffff:ffff:ffff:ffff:ffff,BE +2a0c:b641:720::,2a0c:b641:72f:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b641:730::,2a0c:b641:730:ffff:ffff:ffff:ffff:ffff,HK 2a0c:b641:731::,2a0c:b641:731:ffff:ffff:ffff:ffff:ffff,EU 2a0c:b641:732::,2a0c:b641:732:ffff:ffff:ffff:ffff:ffff,NL @@ -85059,7 +85623,8 @@ 2a0c:b641:7f0::,2a0c:b641:7f7:ffff:ffff:ffff:ffff:ffff,GB 2a0c:b641:7f8::,2a0c:b641:7f9:ffff:ffff:ffff:ffff:ffff,US 2a0c:b641:7fa::,2a0c:b641:7ff:ffff:ffff:ffff:ffff:ffff,GB -2a0c:b641:800::,2a0c:b641:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a0c:b641:800::,2a0c:b641:81f:ffff:ffff:ffff:ffff:ffff,FR +2a0c:b641:820::,2a0c:b641:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0c:b642::,2a0c:b642:1ff:ffff:ffff:ffff:ffff:ffff,PL 2a0c:b642:200::,2a0c:b642:300:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b642:301::,2a0c:b642:305:ffff:ffff:ffff:ffff:ffff,US @@ -85077,17 +85642,14 @@ 2a0c:b642:acf::,2a0c:b642:fbf:ffff:ffff:ffff:ffff:ffff,PL 2a0c:b642:fc0::,2a0c:b642:fdf:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b642:fe0::,2a0c:b642:ffe:ffff:ffff:ffff:ffff:ffff,PL -2a0c:b642:fff::,2a0c:b642:19ff:ffff:ffff:ffff:ffff:ffff,DE -2a0c:b642:1a00::,2a0c:b642:1a00:ffff:ffff:ffff:ffff:ffff,FR +2a0c:b642:fff::,2a0c:b642:1a00:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b642:1a01::,2a0c:b642:1a01:ffff:ffff:ffff:ffff:ffff,NL -2a0c:b642:1a02::,2a0c:b642:1a0f:ffff:ffff:ffff:ffff:ffff,FR -2a0c:b642:1a10::,2a0c:b642:1fff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:b642:1a02::,2a0c:b642:1fff:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b642:2000::,2a0c:b642:2ffe:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b642:2fff::,2a0c:b642:2fff:ffff:ffff:ffff:ffff:ffff,DE 2a0c:b642:3000::,2a0c:b642:4fff:ffff:ffff:ffff:ffff:ffff,BE -2a0c:b642:5000::,2a0c:b642:5000:ffff:ffff:ffff:ffff:ffff,FR -2a0c:b642:5001::,2a0c:b642:5001:ffff:ffff:ffff:ffff:ffff,DE -2a0c:b642:5002::,2a0c:b642:5fff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:b642:5000::,2a0c:b642:501f:ffff:ffff:ffff:ffff:ffff,DE +2a0c:b642:5020::,2a0c:b642:5fff:ffff:ffff:ffff:ffff:ffff,FR 2a0c:b642:6000::,2a0c:b647:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0c:b648::,2a0c:b67f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:b680::,2a0c:b687:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -85170,7 +85732,8 @@ 2a0c:bf80:1::,2a0c:bf80:19:ffff:ffff:ffff:ffff:ffff,EU 2a0c:bf80:1a::,2a0c:bf80:1a:ffff:ffff:ffff:ffff:ffff,NL 2a0c:bf80:1b::,2a0c:bf80:1b:ffff:ffff:ffff:ffff:ffff,BG -2a0c:bf80:1c::,2a0c:bf80:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0c:bf80:1c::,2a0c:bf80:1c:ffff:ffff:ffff:ffff:ffff,CH +2a0c:bf80:1d::,2a0c:bf80:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:bf81::,2a0c:bf81:0:ffff:ffff:ffff:ffff:ffff,CH 2a0c:bf81:1::,2a0c:bf87:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a0c:bf88::,2a0c:bfbf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -85569,7 +86132,8 @@ 2a0c:e642:30::,2a0c:e642:3f:ffff:ffff:ffff:ffff:ffff,EU 2a0c:e642:40::,2a0c:e642:4f:ffff:ffff:ffff:ffff:ffff,RU 2a0c:e642:50::,2a0c:e642:5f:ffff:ffff:ffff:ffff:ffff,TW -2a0c:e642:60::,2a0c:e643:babd:ffff:ffff:ffff:ffff:ffff,GB +2a0c:e642:60::,2a0c:e642:6f:ffff:ffff:ffff:ffff:ffff,DE +2a0c:e642:70::,2a0c:e643:babd:ffff:ffff:ffff:ffff:ffff,GB 2a0c:e643:babe::,2a0c:e643:babe:ffff:ffff:ffff:ffff:ffff,HK 2a0c:e643:babf::,2a0c:e643:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0c:e644::,2a0c:e644:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -85703,8 +86267,7 @@ 2a0c:f5c1::,2a0c:f5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:f600::,2a0c:f607:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a0c:f608::,2a0c:f63f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0c:f640::,2a0c:f643:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a0c:f644::,2a0c:f647:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:f640::,2a0c:f647:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0c:f648::,2a0c:f6bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0c:f6c0::,2a0c:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:f6c8::,2a0c:f6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -86008,7 +86571,9 @@ 2a0d:1a40:7888::,2a0d:1a40:7888:ffff:ffff:ffff:ffff:ffff,US 2a0d:1a40:7889::,2a0d:1a40:79fe:ffff:ffff:ffff:ffff:ffff,EU 2a0d:1a40:79ff::,2a0d:1a40:7a0f:ffff:ffff:ffff:ffff:ffff,GB -2a0d:1a40:7a10::,2a0d:1a40:cafd:ffff:ffff:ffff:ffff:ffff,EU +2a0d:1a40:7a10::,2a0d:1a40:7aff:ffff:ffff:ffff:ffff:ffff,EU +2a0d:1a40:7b00::,2a0d:1a40:7b00:ffff:ffff:ffff:ffff:ffff,GB +2a0d:1a40:7b01::,2a0d:1a40:cafd:ffff:ffff:ffff:ffff:ffff,EU 2a0d:1a40:cafe::,2a0d:1a40:cafe:ffff:ffff:ffff:ffff:ffff,AQ 2a0d:1a40:caff::,2a0d:1a41:babd:ffff:ffff:ffff:ffff:ffff,EU 2a0d:1a41:babe::,2a0d:1a41:babe:ffff:ffff:ffff:ffff:ffff,SE @@ -86029,7 +86594,9 @@ 2a0d:1a45:1337::,2a0d:1a45:1337:ffff:ffff:ffff:ffff:ffff,SE 2a0d:1a45:1338::,2a0d:1a45:133f:ffff:ffff:ffff:ffff:ffff,EU 2a0d:1a45:1340::,2a0d:1a45:1341:ffff:ffff:ffff:ffff:ffff,SE -2a0d:1a45:1342::,2a0d:1a45:3212:ffff:ffff:ffff:ffff:ffff,EU +2a0d:1a45:1342::,2a0d:1a45:2000:ffff:ffff:ffff:ffff:ffff,EU +2a0d:1a45:2001::,2a0d:1a45:2001:ffff:ffff:ffff:ffff:ffff,SE +2a0d:1a45:2002::,2a0d:1a45:3212:ffff:ffff:ffff:ffff:ffff,EU 2a0d:1a45:3213::,2a0d:1a45:3213:ffff:ffff:ffff:ffff:ffff,AQ 2a0d:1a45:3214::,2a0d:1a45:6662:ffff:ffff:ffff:ffff:ffff,EU 2a0d:1a45:6663::,2a0d:1a45:6663:ffff:ffff:ffff:ffff:ffff,SE @@ -86182,13 +86749,13 @@ 2a0d:2581:fffd::,2a0d:2581:fffd:ffff:ffff:ffff:ffff:ffff,HK 2a0d:2581:fffe::,2a0d:2581:fffe:ffff:ffff:ffff:ffff:ffff,US 2a0d:2581:ffff::,2a0d:2581:ffff:ffff:ffff:ffff:ffff:ffff,HK -2a0d:2582::,2a0d:2582:ff:ffff:ffff:ffff:ffff:ffff,CH -2a0d:2582:100::,2a0d:2582:11f:ffff:ffff:ffff:ffff:ffff,GB +2a0d:2582::,2a0d:2582:11f:ffff:ffff:ffff:ffff:ffff,GB 2a0d:2582:120::,2a0d:2582:13f:ffff:ffff:ffff:ffff:ffff,CH 2a0d:2582:140::,2a0d:2582:14f:ffff:ffff:ffff:ffff:ffff,GB 2a0d:2582:150::,2a0d:2582:15f:ffff:ffff:ffff:ffff:ffff,CH 2a0d:2582:160::,2a0d:2582:16f:ffff:ffff:ffff:ffff:ffff,EU -2a0d:2582:170::,2a0d:2582:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0d:2582:170::,2a0d:2582:17f:ffff:ffff:ffff:ffff:ffff,CH +2a0d:2582:180::,2a0d:2582:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0d:2583::,2a0d:2583:aaff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:2583:ab00::,2a0d:2583:ab00:ffff:ffff:ffff:ffff:ffff,US 2a0d:2583:ab01::,2a0d:2583:ab01:ffff:ffff:ffff:ffff:ffff,DE @@ -86196,7 +86763,7 @@ 2a0d:2583:ab03::,2a0d:2583:ab03:ffff:ffff:ffff:ffff:ffff,JP 2a0d:2583:ab04::,2a0d:2583:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:2584::,2a0d:2584:ffff:ffff:ffff:ffff:ffff:ffff,CN -2a0d:2585::,2a0d:2585:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:2585::,2a0d:2585:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0d:2586::,2a0d:2586:0:ffff:ffff:ffff:ffff:ffff,LU 2a0d:2586:1::,2a0d:2587:1fff:ffff:ffff:ffff:ffff:ffff,JP 2a0d:2587:2000::,2a0d:2587:3fff:ffff:ffff:ffff:ffff:ffff,US @@ -86206,7 +86773,8 @@ 2a0d:2587:8180::,2a0d:2587:81ff:ffff:ffff:ffff:ffff:ffff,US 2a0d:2587:8200::,2a0d:2587:8201:ffff:ffff:ffff:ffff:ffff,AQ 2a0d:2587:8202::,2a0d:2587:82ff:ffff:ffff:ffff:ffff:ffff,CH -2a0d:2587:8300::,2a0d:2587:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0d:2587:8300::,2a0d:2587:8300:ffff:ffff:ffff:ffff:ffff,TW +2a0d:2587:8301::,2a0d:2587:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0d:2588::,2a0d:25bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:25c0::,2a0d:25c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0d:25c8::,2a0d:25ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -86304,7 +86872,7 @@ 2a0d:2d48::,2a0d:2d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:2d80::,2a0d:2d87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0d:2d88::,2a0d:2dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0d:2dc0::,2a0d:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:2dc0::,2a0d:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0d:2dc8::,2a0d:2dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:2e00::,2a0d:2e07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0d:2e08::,2a0d:2e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -86324,7 +86892,7 @@ 2a0d:2fc8::,2a0d:2fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:3000::,2a0d:3007:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0d:3008::,2a0d:303f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0d:3040::,2a0d:3047:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:3040::,2a0d:3047:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:3048::,2a0d:307f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:3080::,2a0d:3087:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0d:3088::,2a0d:30bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -86399,7 +86967,7 @@ 2a0d:3888::,2a0d:38bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:38c0::,2a0d:38c7:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0d:38c8::,2a0d:38ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0d:3900::,2a0d:3907:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:3900::,2a0d:3907:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0d:3908::,2a0d:393f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:3940::,2a0d:3947:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:3948::,2a0d:397f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -86697,7 +87265,8 @@ 2a0d:5600:70::,2a0d:5600:70:ffff:ffff:ffff:ffff:ffff,BD 2a0d:5600:71::,2a0d:5600:71:ffff:ffff:ffff:ffff:ffff,ID 2a0d:5600:72::,2a0d:5600:73:ffff:ffff:ffff:ffff:ffff,US -2a0d:5600:74::,2a0d:5600:a31:ffff:ffff:ffff:ffff:ffff,AU +2a0d:5600:74::,2a0d:5600:74:ffff:ffff:ffff:ffff:ffff,PL +2a0d:5600:75::,2a0d:5600:a31:ffff:ffff:ffff:ffff:ffff,AU 2a0d:5600:a32::,2a0d:5600:a32:ffff:ffff:ffff:ffff:ffff,IT 2a0d:5600:a33::,2a0d:5607:ffff:ffff:ffff:ffff:ffff:ffff,AU 2a0d:5608::,2a0d:5641:19ff:ffff:ffff:ffff:ffff:ffff,EU @@ -87591,7 +88160,7 @@ 2a0d:bdc8::,2a0d:bdff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:be00::,2a0d:be07:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0d:be08::,2a0d:be3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0d:be40::,2a0d:be47:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:be40::,2a0d:be47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:be48::,2a0d:be7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:be80::,2a0d:be87:ffff:ffff:ffff:ffff:ffff:ffff,GI 2a0d:be88::,2a0d:bebf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -87903,7 +88472,7 @@ 2a0d:e3c8::,2a0d:e3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:e400::,2a0d:e400:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:e401::,2a0d:e43f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0d:e440::,2a0d:e447:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:e440::,2a0d:e447:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:e448::,2a0d:e47f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:e480::,2a0d:e487:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0d:e488::,2a0d:e4bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -88034,9 +88603,7 @@ 2a0d:f301:44::,2a0d:f307:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0d:f308::,2a0d:f33f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f340::,2a0d:f347:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a0d:f348::,2a0d:f37f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0d:f380::,2a0d:f387:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a0d:f388::,2a0d:f3bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0d:f348::,2a0d:f3bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f3c0::,2a0d:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0d:f3c8::,2a0d:f400:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f401::,2a0d:f406:ffff:ffff:ffff:ffff:ffff:ffff,RO @@ -88074,11 +88641,11 @@ 2a0d:f407:1021::,2a0d:f407:1021:ffff:ffff:ffff:ffff:ffff,PL 2a0d:f407:1022::,2a0d:f407:1022:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f407:1023::,2a0d:f407:1023:ffff:ffff:ffff:ffff:ffff,NL -2a0d:f407:1024::,2a0d:f407:1024:ffff:ffff:ffff:ffff:ffff,IL +2a0d:f407:1024::,2a0d:f407:1024:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f407:1025::,2a0d:f407:1025:ffff:ffff:ffff:ffff:ffff,ES 2a0d:f407:1026::,2a0d:f407:1026:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f407:1027::,2a0d:f407:1027:ffff:ffff:ffff:ffff:ffff,PL -2a0d:f407:1028::,2a0d:f407:1028:ffff:ffff:ffff:ffff:ffff,NL +2a0d:f407:1028::,2a0d:f407:1028:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f407:1029::,2a0d:f407:1029:ffff:ffff:ffff:ffff:ffff,IT 2a0d:f407:102a::,2a0d:f407:102f:ffff:ffff:ffff:ffff:ffff,EU 2a0d:f407:1030::,2a0d:f407:1030:ffff:ffff:ffff:ffff:ffff,DE @@ -88210,8 +88777,8 @@ 2a0e:800:ff80::,2a0e:800:ff80:ffff:ffff:ffff:ffff:ffff,CN 2a0e:800:ff81::,2a0e:800:ffef:ffff:ffff:ffff:ffff:ffff,EU 2a0e:800:fff0::,2a0e:800:fff0:ffff:ffff:ffff:ffff:ffff,FR -2a0e:800:fff1::,2a0e:800:fff1:ffff:ffff:ffff:ffff:ffff,US -2a0e:800:fff2::,2a0e:800:fffa:ffff:ffff:ffff:ffff:ffff,FR +2a0e:800:fff1::,2a0e:800:fff1:ffff:ffff:ffff:ffff:ffff,DE +2a0e:800:fff2::,2a0e:800:fffa:ffff:ffff:ffff:ffff:ffff,GB 2a0e:800:fffb::,2a0e:800:fffb:ffff:ffff:ffff:ffff:ffff,EU 2a0e:800:fffc::,2a0e:800:fffc:ffff:ffff:ffff:ffff:ffff,GB 2a0e:800:fffd::,2a0e:800:fffd:ffff:ffff:ffff:ffff:ffff,US @@ -88516,7 +89083,7 @@ 2a0e:23c8::,2a0e:23ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:2400::,2a0e:2407:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0e:2408::,2a0e:243f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:2440::,2a0e:2447:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0e:2440::,2a0e:2447:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:2448::,2a0e:247f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:2480::,2a0e:2487:ffff:ffff:ffff:ffff:ffff:ffff,KW 2a0e:2488::,2a0e:24bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -88750,7 +89317,9 @@ 2a0e:3fc8::,2a0e:3fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:4000::,2a0e:4005:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:4006::,2a0e:4006:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0e:4007::,2a0e:4007:fffc:ffff:ffff:ffff:ffff:ffff,RU +2a0e:4007::,2a0e:4007:fffa:ffff:ffff:ffff:ffff:ffff,RU +2a0e:4007:fffb::,2a0e:4007:fffb:ffff:ffff:ffff:ffff:ffff,IQ +2a0e:4007:fffc::,2a0e:4007:fffc:ffff:ffff:ffff:ffff:ffff,RU 2a0e:4007:fffd::,2a0e:4007:fffd:ffff:ffff:ffff:ffff:ffff,GB 2a0e:4007:fffe::,2a0e:4007:fffe:ffff:ffff:ffff:ffff:ffff,FR 2a0e:4007:ffff::,2a0e:4007:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -88834,10 +89403,11 @@ 2a0e:46c4:10b::,2a0e:46c4:10d:ffff:ffff:ffff:ffff:ffff,CA 2a0e:46c4:10e::,2a0e:46c4:10f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c4:110::,2a0e:46c4:110:ffff:ffff:ffff:ffff:ffff,DE -2a0e:46c4:111::,2a0e:46c4:fff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:46c4:111::,2a0e:46c4:111:ffff:ffff:ffff:ffff:ffff,NL +2a0e:46c4:112::,2a0e:46c4:fff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c4:1000::,2a0e:46c4:10ff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:46c4:1100::,2a0e:46c4:11ff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:46c4:1200::,2a0e:46c4:12ff:ffff:ffff:ffff:ffff:ffff,GB +2a0e:46c4:1200::,2a0e:46c4:12ff:ffff:ffff:ffff:ffff:ffff,AU 2a0e:46c4:1300::,2a0e:46c4:13ff:ffff:ffff:ffff:ffff:ffff,IN 2a0e:46c4:1400::,2a0e:46c4:1400:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c4:1401::,2a0e:46c4:1401:ffff:ffff:ffff:ffff:ffff,CH @@ -88849,8 +89419,10 @@ 2a0e:46c4:1447::,2a0e:46c4:1447:ffff:ffff:ffff:ffff:ffff,DE 2a0e:46c4:1448::,2a0e:46c4:14ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c4:1500::,2a0e:46c4:15ff:ffff:ffff:ffff:ffff:ffff,US -2a0e:46c4:1600::,2a0e:46c4:1fff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:46c4:2000::,2a0e:46c4:20ff:ffff:ffff:ffff:ffff:ffff,US +2a0e:46c4:1600::,2a0e:46c4:16ff:ffff:ffff:ffff:ffff:ffff,ES +2a0e:46c4:1700::,2a0e:46c4:17ff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:46c4:1800::,2a0e:46c4:180f:ffff:ffff:ffff:ffff:ffff,IN +2a0e:46c4:1810::,2a0e:46c4:20ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c4:2100::,2a0e:46c4:21ff:ffff:ffff:ffff:ffff:ffff,EG 2a0e:46c4:2200::,2a0e:46c4:229f:ffff:ffff:ffff:ffff:ffff,GB 2a0e:46c4:22a0::,2a0e:46c4:22a0:ffff:ffff:ffff:ffff:ffff,US @@ -88882,7 +89454,9 @@ 2a0e:46c4:2930::,2a0e:46c4:2930:ffff:ffff:ffff:ffff:ffff,SG 2a0e:46c4:2931::,2a0e:46c4:293f:ffff:ffff:ffff:ffff:ffff,HK 2a0e:46c4:2940::,2a0e:46c4:2940:ffff:ffff:ffff:ffff:ffff,NL -2a0e:46c4:2941::,2a0e:46c4:29bf:ffff:ffff:ffff:ffff:ffff,HK +2a0e:46c4:2941::,2a0e:46c4:294f:ffff:ffff:ffff:ffff:ffff,HK +2a0e:46c4:2950::,2a0e:46c4:2950:ffff:ffff:ffff:ffff:ffff,US +2a0e:46c4:2951::,2a0e:46c4:29bf:ffff:ffff:ffff:ffff:ffff,HK 2a0e:46c4:29c0::,2a0e:46c4:29c0:ffff:ffff:ffff:ffff:ffff,CN 2a0e:46c4:29c1::,2a0e:46c4:29ff:ffff:ffff:ffff:ffff:ffff,HK 2a0e:46c4:2a00::,2a0e:46c4:2aff:ffff:ffff:ffff:ffff:ffff,EU @@ -88900,7 +89474,8 @@ 2a0e:46c4:2c3d::,2a0e:46c4:2c3d:ffff:ffff:ffff:ffff:ffff,MX 2a0e:46c4:2c3e::,2a0e:46c4:2c3e:ffff:ffff:ffff:ffff:ffff,CA 2a0e:46c4:2c3f::,2a0e:46c4:2c3f:ffff:ffff:ffff:ffff:ffff,US -2a0e:46c4:2c40::,2a0e:46c4:2cff:ffff:ffff:ffff:ffff:ffff,AU +2a0e:46c4:2c40::,2a0e:46c4:2c4f:ffff:ffff:ffff:ffff:ffff,IN +2a0e:46c4:2c50::,2a0e:46c4:2cff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c4:2d00::,2a0e:46c4:2d09:ffff:ffff:ffff:ffff:ffff,IT 2a0e:46c4:2d0a::,2a0e:46c4:2d0a:ffff:ffff:ffff:ffff:ffff,NL 2a0e:46c4:2d0b::,2a0e:46c4:2d0c:ffff:ffff:ffff:ffff:ffff,IT @@ -88922,13 +89497,13 @@ 2a0e:46c6:161::,2a0e:46c6:1ff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:46c6:200::,2a0e:46c6:2ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c6:300::,2a0e:46c6:3ff:ffff:ffff:ffff:ffff:ffff,DE -2a0e:46c6:400::,2a0e:46c6:452:ffff:ffff:ffff:ffff:ffff,EU -2a0e:46c6:453::,2a0e:46c6:453:ffff:ffff:ffff:ffff:ffff,AQ -2a0e:46c6:454::,2a0e:46c6:4ff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:46c6:400::,2a0e:46c6:4ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:46c6:500::,2a0e:46c6:6ff:ffff:ffff:ffff:ffff:ffff,US 2a0e:46c6:700::,2a0e:46c6:8ff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:46c6:900::,2a0e:46c6:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:46c7::,2a0e:46c7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0e:46c7::,2a0e:46c7:1a0a:ffff:ffff:ffff:ffff:ffff,PL +2a0e:46c7:1a0b::,2a0e:46c7:1a0b:ffff:ffff:ffff:ffff:ffff,CZ +2a0e:46c7:1a0c::,2a0e:46c7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0e:46c8::,2a0e:46ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:4700::,2a0e:4707:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0e:4708::,2a0e:473f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -89109,7 +89684,9 @@ 2a0e:5dc0::,2a0e:5dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:5dc8::,2a0e:5dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:5e00::,2a0e:5e07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a0e:5e08::,2a0e:5e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:5e08::,2a0e:5e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:5e40::,2a0e:5e47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0e:5e48::,2a0e:5e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:5e80::,2a0e:5e83:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:5e84::,2a0e:5e84:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:5e85::,2a0e:5e87:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -89150,7 +89727,7 @@ 2a0e:6288::,2a0e:62bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:62c0::,2a0e:62c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:62c8::,2a0e:62ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:6300::,2a0e:6307:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0e:6300::,2a0e:6307:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0e:6308::,2a0e:633f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:6340::,2a0e:6347:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0e:6348::,2a0e:637f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -89210,16 +89787,16 @@ 2a0e:6906::,2a0e:6907:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:6908::,2a0e:693f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:6940::,2a0e:6947:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a0e:6948::,2a0e:69bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:6948::,2a0e:697f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:6980::,2a0e:6987:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0e:6988::,2a0e:69bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:69c0::,2a0e:69c7:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0e:69c8::,2a0e:69ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:6a00::,2a0e:6a07:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0e:6a08::,2a0e:6a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:6a40::,2a0e:6a47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:6a48::,2a0e:6a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:6a80::,2a0e:6a81:3:ffff:ffff:ffff:ffff:ffff,DE -2a0e:6a81:4::,2a0e:6a81:4:ffff:ffff:ffff:ffff:ffff,CH -2a0e:6a81:5::,2a0e:6a87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0e:6a80::,2a0e:6a87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:6a88::,2a0e:6abf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:6ac0::,2a0e:6ac7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:6ac8::,2a0e:6aff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -89345,7 +89922,9 @@ 2a0e:7980::,2a0e:7987:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:7988::,2a0e:79bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:79c0::,2a0e:79c7:ffff:ffff:ffff:ffff:ffff:ffff,TR -2a0e:79c8::,2a0e:7a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:79c8::,2a0e:79ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:7a00::,2a0e:7a07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0e:7a08::,2a0e:7a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:7a40::,2a0e:7a47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:7a48::,2a0e:7a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:7a80::,2a0e:7a87:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -89496,7 +90075,7 @@ 2a0e:8bc8::,2a0e:8bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:8c00::,2a0e:8c07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:8c08::,2a0e:8c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:8c40::,2a0e:8c47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0e:8c40::,2a0e:8c47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:8c48::,2a0e:8c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:8c80::,2a0e:8c87:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0e:8c88::,2a0e:8cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -89620,7 +90199,8 @@ 2a0e:8f02:f003::,2a0e:8f02:f004:ffff:ffff:ffff:ffff:ffff,DE 2a0e:8f02:f005::,2a0e:8f02:f005:ffff:ffff:ffff:ffff:ffff,FR 2a0e:8f02:f006::,2a0e:8f02:f006:ffff:ffff:ffff:ffff:ffff,CN -2a0e:8f02:f007::,2a0e:8f02:f008:ffff:ffff:ffff:ffff:ffff,FR +2a0e:8f02:f007::,2a0e:8f02:f007:ffff:ffff:ffff:ffff:ffff,EU +2a0e:8f02:f008::,2a0e:8f02:f008:ffff:ffff:ffff:ffff:ffff,FR 2a0e:8f02:f009::,2a0e:8f02:f009:ffff:ffff:ffff:ffff:ffff,TW 2a0e:8f02:f00a::,2a0e:8f02:f00b:ffff:ffff:ffff:ffff:ffff,EU 2a0e:8f02:f00c::,2a0e:8f02:f00c:ffff:ffff:ffff:ffff:ffff,FR @@ -89660,8 +90240,11 @@ 2a0e:8f02:f036::,2a0e:8f02:f036:ffff:ffff:ffff:ffff:ffff,IT 2a0e:8f02:f037::,2a0e:8f02:f038:ffff:ffff:ffff:ffff:ffff,EU 2a0e:8f02:f039::,2a0e:8f02:f039:ffff:ffff:ffff:ffff:ffff,IT -2a0e:8f02:f03a::,2a0e:8f02:f03b:ffff:ffff:ffff:ffff:ffff,TW -2a0e:8f02:f03c::,2a0e:8f03:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:8f02:f03a::,2a0e:8f02:f03d:ffff:ffff:ffff:ffff:ffff,TW +2a0e:8f02:f03e::,2a0e:8f02:f03e:ffff:ffff:ffff:ffff:ffff,KR +2a0e:8f02:f03f::,2a0e:8f02:f03f:ffff:ffff:ffff:ffff:ffff,TW +2a0e:8f02:f040::,2a0e:8f02:f040:ffff:ffff:ffff:ffff:ffff,EG +2a0e:8f02:f041::,2a0e:8f03:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:8f04::,2a0e:8f04:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:8f05::,2a0e:8f05:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:8f06::,2a0e:8f06:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -89728,31 +90311,29 @@ 2a0e:9640::,2a0e:9647:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:9648::,2a0e:967f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:9680::,2a0e:9687:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0e:9688::,2a0e:96ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:9688::,2a0e:96bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:96c0::,2a0e:96c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0e:96c8::,2a0e:96ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:9700::,2a0e:9707:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:9708::,2a0e:973f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:9740::,2a0e:9747:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a0e:9748::,2a0e:977f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:9780::,2a0e:9787:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a0e:9788::,2a0e:97c0:ff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:97c0:100::,2a0e:97c0:10f:ffff:ffff:ffff:ffff:ffff,RU -2a0e:97c0:110::,2a0e:97c0:11f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:9788::,2a0e:97c0:11f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:120::,2a0e:97c0:13f:ffff:ffff:ffff:ffff:ffff,DE -2a0e:97c0:140::,2a0e:97c0:14f:ffff:ffff:ffff:ffff:ffff,JP +2a0e:97c0:140::,2a0e:97c0:140:ffff:ffff:ffff:ffff:ffff,TW +2a0e:97c0:141::,2a0e:97c0:142:ffff:ffff:ffff:ffff:ffff,JP +2a0e:97c0:143::,2a0e:97c0:143:ffff:ffff:ffff:ffff:ffff,TW +2a0e:97c0:144::,2a0e:97c0:144:ffff:ffff:ffff:ffff:ffff,CA +2a0e:97c0:145::,2a0e:97c0:14f:ffff:ffff:ffff:ffff:ffff,TW 2a0e:97c0:150::,2a0e:97c0:16f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:170::,2a0e:97c0:17f:ffff:ffff:ffff:ffff:ffff,AT -2a0e:97c0:180::,2a0e:97c0:18f:ffff:ffff:ffff:ffff:ffff,DE -2a0e:97c0:190::,2a0e:97c0:1b1:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:180::,2a0e:97c0:1b1:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:1b2::,2a0e:97c0:1b2:ffff:ffff:ffff:ffff:ffff,US 2a0e:97c0:1b3::,2a0e:97c0:1bd:ffff:ffff:ffff:ffff:ffff,NL -2a0e:97c0:1be::,2a0e:97c0:1bf:ffff:ffff:ffff:ffff:ffff,EU -2a0e:97c0:1c0::,2a0e:97c0:1c7:ffff:ffff:ffff:ffff:ffff,LU -2a0e:97c0:1c8::,2a0e:97c0:1c8:ffff:ffff:ffff:ffff:ffff,DE -2a0e:97c0:1c9::,2a0e:97c0:1cf:ffff:ffff:ffff:ffff:ffff,GB +2a0e:97c0:1be::,2a0e:97c0:1cf:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:1d0::,2a0e:97c0:1df:ffff:ffff:ffff:ffff:ffff,DE -2a0e:97c0:1e0::,2a0e:97c0:20f:ffff:ffff:ffff:ffff:ffff,GB -2a0e:97c0:210::,2a0e:97c0:21f:ffff:ffff:ffff:ffff:ffff,IT -2a0e:97c0:220::,2a0e:97c0:231:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:1e0::,2a0e:97c0:231:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:232::,2a0e:97c0:234:ffff:ffff:ffff:ffff:ffff,DE 2a0e:97c0:235::,2a0e:97c0:23f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:240::,2a0e:97c0:24f:ffff:ffff:ffff:ffff:ffff,DE @@ -89775,8 +90356,7 @@ 2a0e:97c0:370::,2a0e:97c0:37f:ffff:ffff:ffff:ffff:ffff,ID 2a0e:97c0:380::,2a0e:97c0:380:ffff:ffff:ffff:ffff:ffff,NL 2a0e:97c0:381::,2a0e:97c0:381:ffff:ffff:ffff:ffff:ffff,CH -2a0e:97c0:382::,2a0e:97c0:382:ffff:ffff:ffff:ffff:ffff,HK -2a0e:97c0:383::,2a0e:97c0:383:ffff:ffff:ffff:ffff:ffff,CH +2a0e:97c0:382::,2a0e:97c0:383:ffff:ffff:ffff:ffff:ffff,HK 2a0e:97c0:384::,2a0e:97c0:38f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:390::,2a0e:97c0:39f:ffff:ffff:ffff:ffff:ffff,GB 2a0e:97c0:3a0::,2a0e:97c0:3af:ffff:ffff:ffff:ffff:ffff,EU @@ -89833,7 +90413,9 @@ 2a0e:97c0:691::,2a0e:97c0:6c1:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:6c2::,2a0e:97c0:6c2:ffff:ffff:ffff:ffff:ffff,US 2a0e:97c0:6c3::,2a0e:97c0:6c3:ffff:ffff:ffff:ffff:ffff,CN -2a0e:97c0:6c4::,2a0e:97c0:6ce:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:6c4::,2a0e:97c0:6cc:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:6cd::,2a0e:97c0:6cd:ffff:ffff:ffff:ffff:ffff,ES +2a0e:97c0:6ce::,2a0e:97c0:6ce:ffff:ffff:ffff:ffff:ffff,FR 2a0e:97c0:6cf::,2a0e:97c0:6cf:ffff:ffff:ffff:ffff:ffff,PT 2a0e:97c0:6d0::,2a0e:97c0:6df:ffff:ffff:ffff:ffff:ffff,JP 2a0e:97c0:6e0::,2a0e:97c0:6ef:ffff:ffff:ffff:ffff:ffff,MX @@ -89841,21 +90423,25 @@ 2a0e:97c0:700::,2a0e:97c0:70f:ffff:ffff:ffff:ffff:ffff,GB 2a0e:97c0:710::,2a0e:97c0:71f:ffff:ffff:ffff:ffff:ffff,FR 2a0e:97c0:720::,2a0e:97c0:72f:ffff:ffff:ffff:ffff:ffff,CH -2a0e:97c0:730::,2a0e:97c0:7ff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:730::,2a0e:97c0:75f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:760::,2a0e:97c0:76f:ffff:ffff:ffff:ffff:ffff,IE +2a0e:97c0:770::,2a0e:97c0:7df:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:7e0::,2a0e:97c0:7ef:ffff:ffff:ffff:ffff:ffff,CL +2a0e:97c0:7f0::,2a0e:97c0:7ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:800::,2a0e:97c0:9ff:ffff:ffff:ffff:ffff:ffff,FR -2a0e:97c0:a00::,2a0e:97c0:97bf:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:a00::,2a0e:97c0:a0f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c0:a10::,2a0e:97c0:a1f:ffff:ffff:ffff:ffff:ffff,GB +2a0e:97c0:a20::,2a0e:97c0:97bf:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c0:97c0::,2a0e:97c0:97c0:ffff:ffff:ffff:ffff:ffff,DE 2a0e:97c0:97c1::,2a0e:97c1:ff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:97c1:100::,2a0e:97c1:10f:ffff:ffff:ffff:ffff:ffff,DE -2a0e:97c1:110::,2a0e:97c2:ff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c1:100::,2a0e:97c1:100:ffff:ffff:ffff:ffff:ffff,DE +2a0e:97c1:101::,2a0e:97c2:ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c2:100::,2a0e:97c2:11f:ffff:ffff:ffff:ffff:ffff,GB 2a0e:97c2:120::,2a0e:97c7:12f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:97c7:130::,2a0e:97c7:13f:ffff:ffff:ffff:ffff:ffff,US 2a0e:97c7:140::,2a0e:97c7:15f:ffff:ffff:ffff:ffff:ffff,VC 2a0e:97c7:160::,2a0e:97c7:16e:ffff:ffff:ffff:ffff:ffff,RU -2a0e:97c7:16f::,2a0e:97c7:16f:ffff:ffff:ffff:ffff:ffff,EU -2a0e:97c7:170::,2a0e:97c7:18f:ffff:ffff:ffff:ffff:ffff,CZ -2a0e:97c7:190::,2a0e:97ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:97c7:16f::,2a0e:97ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:9800::,2a0e:9807:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:9808::,2a0e:983f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:9840::,2a0e:9845:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -90080,7 +90666,9 @@ 2a0e:aa07:e030::,2a0e:aa07:e030:ffff:ffff:ffff:ffff:ffff,JP 2a0e:aa07:e031::,2a0e:aa07:e031:ffff:ffff:ffff:ffff:ffff,GB 2a0e:aa07:e032::,2a0e:aa07:e032:ffff:ffff:ffff:ffff:ffff,DE -2a0e:aa07:e033::,2a0e:aa07:e0ff:ffff:ffff:ffff:ffff:ffff,US +2a0e:aa07:e033::,2a0e:aa07:e033:ffff:ffff:ffff:ffff:ffff,GB +2a0e:aa07:e034::,2a0e:aa07:e037:ffff:ffff:ffff:ffff:ffff,DE +2a0e:aa07:e038::,2a0e:aa07:e0ff:ffff:ffff:ffff:ffff:ffff,US 2a0e:aa07:e100::,2a0e:aa07:e10f:ffff:ffff:ffff:ffff:ffff,JP 2a0e:aa07:e110::,2a0e:aa07:e1ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:aa07:e200::,2a0e:aa07:e200:ffff:ffff:ffff:ffff:ffff,GB @@ -90116,8 +90704,7 @@ 2a0e:aa07:f091::,2a0e:aa07:f091:ffff:ffff:ffff:ffff:ffff,US 2a0e:aa07:f092::,2a0e:aa07:f092:ffff:ffff:ffff:ffff:ffff,GB 2a0e:aa07:f093::,2a0e:aa07:f093:ffff:ffff:ffff:ffff:ffff,NL -2a0e:aa07:f094::,2a0e:aa07:f094:ffff:ffff:ffff:ffff:ffff,US -2a0e:aa07:f095::,2a0e:aa07:f095:ffff:ffff:ffff:ffff:ffff,DE +2a0e:aa07:f094::,2a0e:aa07:f095:ffff:ffff:ffff:ffff:ffff,DE 2a0e:aa07:f096::,2a0e:aa07:f096:ffff:ffff:ffff:ffff:ffff,NZ 2a0e:aa07:f097::,2a0e:aa07:f097:ffff:ffff:ffff:ffff:ffff,DE 2a0e:aa07:f098::,2a0e:aa07:f098:ffff:ffff:ffff:ffff:ffff,HK @@ -90190,7 +90777,9 @@ 2a0e:b080::,2a0e:b087:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b088::,2a0e:b0bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:b0c0::,2a0e:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a0e:b0c8::,2a0e:b100:2fff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:b0c8::,2a0e:b100:ff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:b100:100::,2a0e:b100:13f:ffff:ffff:ffff:ffff:ffff,US +2a0e:b100:140::,2a0e:b100:2fff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:b100:3000::,2a0e:b100:30ff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b100:3100::,2a0e:b101:ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:b101:100::,2a0e:b101:1ff:ffff:ffff:ffff:ffff:ffff,CH @@ -90445,8 +91034,8 @@ 2a0e:b101:fe00::,2a0e:b101:feff:ffff:ffff:ffff:ffff:ffff,ZW 2a0e:b101:ff00::,2a0e:b102:ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:b102:100::,2a0e:b102:10f:ffff:ffff:ffff:ffff:ffff,DE -2a0e:b102:110::,2a0e:b102:11f:ffff:ffff:ffff:ffff:ffff,CZ -2a0e:b102:120::,2a0e:b102:12f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:b102:110::,2a0e:b102:11f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:b102:120::,2a0e:b102:12f:ffff:ffff:ffff:ffff:ffff,US 2a0e:b102:130::,2a0e:b102:130:ffff:ffff:ffff:ffff:ffff,JO 2a0e:b102:131::,2a0e:b102:131:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b102:132::,2a0e:b102:132:ffff:ffff:ffff:ffff:ffff,JO @@ -90454,14 +91043,15 @@ 2a0e:b102:134::,2a0e:b102:13f:ffff:ffff:ffff:ffff:ffff,JO 2a0e:b102:140::,2a0e:b102:15f:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b102:160::,2a0e:b102:16f:ffff:ffff:ffff:ffff:ffff,JO -2a0e:b102:170::,2a0e:b103:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:b102:170::,2a0e:b102:18f:ffff:ffff:ffff:ffff:ffff,CH +2a0e:b102:190::,2a0e:b103:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:b104::,2a0e:b104:ff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b104:100::,2a0e:b104:10f:ffff:ffff:ffff:ffff:ffff,IT 2a0e:b104:110::,2a0e:b104:1ff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b104:200::,2a0e:b104:2ff:ffff:ffff:ffff:ffff:ffff,IT 2a0e:b104:300::,2a0e:b105:ff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b105:100::,2a0e:b105:10f:ffff:ffff:ffff:ffff:ffff,US -2a0e:b105:110::,2a0e:b105:11f:ffff:ffff:ffff:ffff:ffff,CH +2a0e:b105:110::,2a0e:b105:11f:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b105:120::,2a0e:b105:12f:ffff:ffff:ffff:ffff:ffff,CA 2a0e:b105:130::,2a0e:b106:1f:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b106:20::,2a0e:b106:2f:ffff:ffff:ffff:ffff:ffff,SE @@ -90581,7 +91171,8 @@ 2a0e:b107:1a0::,2a0e:b107:1a5:ffff:ffff:ffff:ffff:ffff,US 2a0e:b107:1a6::,2a0e:b107:1af:ffff:ffff:ffff:ffff:ffff,EU 2a0e:b107:1b0::,2a0e:b107:1bf:ffff:ffff:ffff:ffff:ffff,CH -2a0e:b107:1c0::,2a0e:b107:1c1:ffff:ffff:ffff:ffff:ffff,JP +2a0e:b107:1c0::,2a0e:b107:1c0:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:1c1::,2a0e:b107:1c1:ffff:ffff:ffff:ffff:ffff,JP 2a0e:b107:1c2::,2a0e:b107:1ce:ffff:ffff:ffff:ffff:ffff,CH 2a0e:b107:1cf::,2a0e:b107:1d9:ffff:ffff:ffff:ffff:ffff,CN 2a0e:b107:1da::,2a0e:b107:1da:ffff:ffff:ffff:ffff:ffff,EU @@ -90677,15 +91268,7 @@ 2a0e:b107:3c4::,2a0e:b107:3c4:ffff:ffff:ffff:ffff:ffff,GB 2a0e:b107:3c5::,2a0e:b107:3c5:ffff:ffff:ffff:ffff:ffff,CA 2a0e:b107:3c6::,2a0e:b107:3c6:ffff:ffff:ffff:ffff:ffff,LU -2a0e:b107:3c7::,2a0e:b107:3c7:ffff:ffff:ffff:ffff:ffff,CA -2a0e:b107:3c8::,2a0e:b107:3c8:ffff:ffff:ffff:ffff:ffff,AQ -2a0e:b107:3c9::,2a0e:b107:3c9:ffff:ffff:ffff:ffff:ffff,CA -2a0e:b107:3ca::,2a0e:b107:3ca:ffff:ffff:ffff:ffff:ffff,GB -2a0e:b107:3cb::,2a0e:b107:3cb:ffff:ffff:ffff:ffff:ffff,VA -2a0e:b107:3cc::,2a0e:b107:3cc:ffff:ffff:ffff:ffff:ffff,GB -2a0e:b107:3cd::,2a0e:b107:3cd:ffff:ffff:ffff:ffff:ffff,US -2a0e:b107:3ce::,2a0e:b107:3ce:ffff:ffff:ffff:ffff:ffff,CH -2a0e:b107:3cf::,2a0e:b107:3cf:ffff:ffff:ffff:ffff:ffff,CA +2a0e:b107:3c7::,2a0e:b107:3cf:ffff:ffff:ffff:ffff:ffff,CA 2a0e:b107:3d0::,2a0e:b107:3d0:ffff:ffff:ffff:ffff:ffff,MT 2a0e:b107:3d1::,2a0e:b107:3d1:ffff:ffff:ffff:ffff:ffff,GB 2a0e:b107:3d2::,2a0e:b107:3d3:ffff:ffff:ffff:ffff:ffff,US @@ -90915,7 +91498,9 @@ 2a0e:b107:9f9::,2a0e:b107:9f9:ffff:ffff:ffff:ffff:ffff,ID 2a0e:b107:9fa::,2a0e:b107:9fc:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:9fd::,2a0e:b107:9fd:ffff:ffff:ffff:ffff:ffff,PL -2a0e:b107:9fe::,2a0e:b107:a0f:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:9fe::,2a0e:b107:9fe:ffff:ffff:ffff:ffff:ffff,US +2a0e:b107:9ff::,2a0e:b107:9ff:ffff:ffff:ffff:ffff:ffff,IN +2a0e:b107:a00::,2a0e:b107:a0f:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:a10::,2a0e:b107:a1f:ffff:ffff:ffff:ffff:ffff,FR 2a0e:b107:a20::,2a0e:b107:a2f:ffff:ffff:ffff:ffff:ffff,US 2a0e:b107:a30::,2a0e:b107:a3f:ffff:ffff:ffff:ffff:ffff,GB @@ -91162,12 +91747,14 @@ 2a0e:b107:1162::,2a0e:b107:1162:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:1163::,2a0e:b107:1163:ffff:ffff:ffff:ffff:ffff,KR 2a0e:b107:1164::,2a0e:b107:1164:ffff:ffff:ffff:ffff:ffff,US -2a0e:b107:1165::,2a0e:b107:1165:ffff:ffff:ffff:ffff:ffff,BE +2a0e:b107:1165::,2a0e:b107:1165:ffff:ffff:ffff:ffff:ffff,HU 2a0e:b107:1166::,2a0e:b107:1166:ffff:ffff:ffff:ffff:ffff,IT 2a0e:b107:1167::,2a0e:b107:1167:ffff:ffff:ffff:ffff:ffff,IN 2a0e:b107:1168::,2a0e:b107:116f:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:1170::,2a0e:b107:117f:ffff:ffff:ffff:ffff:ffff,HK -2a0e:b107:1180::,2a0e:b107:118f:ffff:ffff:ffff:ffff:ffff,UA +2a0e:b107:1180::,2a0e:b107:1181:ffff:ffff:ffff:ffff:ffff,UA +2a0e:b107:1182::,2a0e:b107:1182:ffff:ffff:ffff:ffff:ffff,FR +2a0e:b107:1183::,2a0e:b107:118f:ffff:ffff:ffff:ffff:ffff,UA 2a0e:b107:1190::,2a0e:b107:119f:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:11a0::,2a0e:b107:11aa:ffff:ffff:ffff:ffff:ffff,FR 2a0e:b107:11ab::,2a0e:b107:11af:ffff:ffff:ffff:ffff:ffff,NL @@ -91204,13 +91791,15 @@ 2a0e:b107:12d0::,2a0e:b107:12d0:ffff:ffff:ffff:ffff:ffff,IT 2a0e:b107:12d1::,2a0e:b107:12d4:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:12d5::,2a0e:b107:12d5:ffff:ffff:ffff:ffff:ffff,AQ -2a0e:b107:12d6::,2a0e:b107:12d6:ffff:ffff:ffff:ffff:ffff,CN +2a0e:b107:12d6::,2a0e:b107:12d6:ffff:ffff:ffff:ffff:ffff,AU 2a0e:b107:12d7::,2a0e:b107:12df:ffff:ffff:ffff:ffff:ffff,IT 2a0e:b107:12e0::,2a0e:b107:12ef:ffff:ffff:ffff:ffff:ffff,US 2a0e:b107:12f0::,2a0e:b107:12f0:ffff:ffff:ffff:ffff:ffff,CH 2a0e:b107:12f1::,2a0e:b107:12f1:ffff:ffff:ffff:ffff:ffff,NO 2a0e:b107:12f2::,2a0e:b107:12f3:ffff:ffff:ffff:ffff:ffff,NL -2a0e:b107:12f4::,2a0e:b107:12ff:ffff:ffff:ffff:ffff:ffff,FI +2a0e:b107:12f4::,2a0e:b107:12f4:ffff:ffff:ffff:ffff:ffff,FI +2a0e:b107:12f5::,2a0e:b107:12f5:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:12f6::,2a0e:b107:12ff:ffff:ffff:ffff:ffff:ffff,FI 2a0e:b107:1300::,2a0e:b107:130f:ffff:ffff:ffff:ffff:ffff,US 2a0e:b107:1310::,2a0e:b107:131f:ffff:ffff:ffff:ffff:ffff,RU 2a0e:b107:1320::,2a0e:b107:135f:ffff:ffff:ffff:ffff:ffff,TW @@ -91307,7 +91896,10 @@ 2a0e:b107:1786::,2a0e:b107:1786:ffff:ffff:ffff:ffff:ffff,NL 2a0e:b107:1787::,2a0e:b107:1787:ffff:ffff:ffff:ffff:ffff,US 2a0e:b107:1788::,2a0e:b107:1788:ffff:ffff:ffff:ffff:ffff,GB -2a0e:b107:1789::,2a0e:b107:178f:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:1789::,2a0e:b107:1789:ffff:ffff:ffff:ffff:ffff,US +2a0e:b107:178a::,2a0e:b107:178a:ffff:ffff:ffff:ffff:ffff,FR +2a0e:b107:178b::,2a0e:b107:178b:ffff:ffff:ffff:ffff:ffff,GB +2a0e:b107:178c::,2a0e:b107:178f:ffff:ffff:ffff:ffff:ffff,US 2a0e:b107:1790::,2a0e:b107:179f:ffff:ffff:ffff:ffff:ffff,ID 2a0e:b107:17a0::,2a0e:b107:17af:ffff:ffff:ffff:ffff:ffff,GB 2a0e:b107:17b0::,2a0e:b107:17bf:ffff:ffff:ffff:ffff:ffff,UA @@ -91316,7 +91908,11 @@ 2a0e:b107:17e0::,2a0e:b107:17ef:ffff:ffff:ffff:ffff:ffff,CN 2a0e:b107:17f0::,2a0e:b107:17f8:ffff:ffff:ffff:ffff:ffff,JP 2a0e:b107:17f9::,2a0e:b107:17f9:ffff:ffff:ffff:ffff:ffff,US -2a0e:b107:17fa::,2a0e:b107:17ff:ffff:ffff:ffff:ffff:ffff,JP +2a0e:b107:17fa::,2a0e:b107:17fa:ffff:ffff:ffff:ffff:ffff,CN +2a0e:b107:17fb::,2a0e:b107:17fb:ffff:ffff:ffff:ffff:ffff,US +2a0e:b107:17fc::,2a0e:b107:17fc:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:17fd::,2a0e:b107:17fd:ffff:ffff:ffff:ffff:ffff,JP +2a0e:b107:17fe::,2a0e:b107:17ff:ffff:ffff:ffff:ffff:ffff,AQ 2a0e:b107:1800::,2a0e:b107:1805:ffff:ffff:ffff:ffff:ffff,AU 2a0e:b107:1806::,2a0e:b107:1806:ffff:ffff:ffff:ffff:ffff,HK 2a0e:b107:1807::,2a0e:b107:180f:ffff:ffff:ffff:ffff:ffff,AU @@ -91329,11 +91925,25 @@ 2a0e:b107:1860::,2a0e:b107:186f:ffff:ffff:ffff:ffff:ffff,CN 2a0e:b107:1870::,2a0e:b107:187f:ffff:ffff:ffff:ffff:ffff,IN 2a0e:b107:1880::,2a0e:b107:18af:ffff:ffff:ffff:ffff:ffff,DE -2a0e:b107:18b0::,2a0e:b107:18bf:ffff:ffff:ffff:ffff:ffff,NO +2a0e:b107:18b0::,2a0e:b107:18b0:ffff:ffff:ffff:ffff:ffff,NO +2a0e:b107:18b1::,2a0e:b107:18b1:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:18b2::,2a0e:b107:18bf:ffff:ffff:ffff:ffff:ffff,NO 2a0e:b107:18c0::,2a0e:b107:18cf:ffff:ffff:ffff:ffff:ffff,GB 2a0e:b107:18d0::,2a0e:b107:18df:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:18e0::,2a0e:b107:18ef:ffff:ffff:ffff:ffff:ffff,US -2a0e:b107:18f0::,2a0e:b107:b106:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:18f0::,2a0e:b107:190f:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:1910::,2a0e:b107:191f:ffff:ffff:ffff:ffff:ffff,RS +2a0e:b107:1920::,2a0e:b107:192f:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:1930::,2a0e:b107:193f:ffff:ffff:ffff:ffff:ffff,MX +2a0e:b107:1940::,2a0e:b107:194f:ffff:ffff:ffff:ffff:ffff,BE +2a0e:b107:1950::,2a0e:b107:1950:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:1951::,2a0e:b107:1951:ffff:ffff:ffff:ffff:ffff,US +2a0e:b107:1952::,2a0e:b107:195f:ffff:ffff:ffff:ffff:ffff,TW +2a0e:b107:1960::,2a0e:b107:196f:ffff:ffff:ffff:ffff:ffff,DE +2a0e:b107:1970::,2a0e:b107:197f:ffff:ffff:ffff:ffff:ffff,AT +2a0e:b107:1980::,2a0e:b107:198f:ffff:ffff:ffff:ffff:ffff,TW +2a0e:b107:1990::,2a0e:b107:199f:ffff:ffff:ffff:ffff:ffff,HK +2a0e:b107:19a0::,2a0e:b107:b106:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b107:b107::,2a0e:b107:b107:ffff:ffff:ffff:ffff:ffff,NL 2a0e:b107:b108::,2a0e:b107:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:b108::,2a0e:b13f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -91530,9 +92140,9 @@ 2a0e:c6c8::,2a0e:c6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:c700::,2a0e:c707:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0e:c708::,2a0e:c73f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:c740::,2a0e:c747:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0e:c740::,2a0e:c747:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0e:c748::,2a0e:c77f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:c780::,2a0e:c787:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0e:c780::,2a0e:c787:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0e:c788::,2a0e:c7bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:c7c0::,2a0e:c7c0:ffa0:ffff:ffff:ffff:ffff:ffff,US 2a0e:c7c0:ffa1::,2a0e:c7c0:ffa1:ffff:ffff:ffff:ffff:ffff,NL @@ -91555,7 +92165,9 @@ 2a0e:ca00::,2a0e:ca07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:ca08::,2a0e:ca3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:ca40::,2a0e:ca47:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a0e:ca48::,2a0e:cabf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:ca48::,2a0e:ca7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:ca80::,2a0e:ca87:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0e:ca88::,2a0e:cabf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:cac0::,2a0e:cac7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:cac8::,2a0e:caff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:cb00::,2a0e:cb07:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -91610,8 +92222,7 @@ 2a0e:cf08::,2a0e:cf3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:cf40::,2a0e:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:cf48::,2a0e:cf7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:cf80::,2a0e:cf80:0:ffff:ffff:ffff:ffff:ffff,NL -2a0e:cf80:1::,2a0e:cf87:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0e:cf80::,2a0e:cf87:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0e:cf88::,2a0e:cfbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:cfc0::,2a0e:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:cfc8::,2a0e:d000:a30f:ffff:ffff:ffff:ffff:ffff,EU @@ -91674,7 +92285,11 @@ 2a0e:d604::,2a0e:d604:0:ffff:ffff:ffff:ffff:ffff,RU 2a0e:d604:1::,2a0e:d604:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0e:d605::,2a0e:d605:0:ffff:ffff:ffff:ffff:ffff,RU -2a0e:d605:1::,2a0e:d607:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0e:d605:1::,2a0e:d605:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0e:d606::,2a0e:d606:0:ffff:ffff:ffff:ffff:ffff,RU +2a0e:d606:1::,2a0e:d606:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0e:d607::,2a0e:d607:0:ffff:ffff:ffff:ffff:ffff,RU +2a0e:d607:1::,2a0e:d607:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0e:d608::,2a0e:d63f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:d640::,2a0e:d647:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:d648::,2a0e:d67f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -91712,9 +92327,7 @@ 2a0e:da40::,2a0e:da40:0:ffff:ffff:ffff:ffff:ffff,FI 2a0e:da40:1::,2a0e:da40:1:ffff:ffff:ffff:ffff:ffff,SG 2a0e:da40:2::,2a0e:da40:f:ffff:ffff:ffff:ffff:ffff,GB -2a0e:da40:10::,2a0e:da40:1b:ffff:ffff:ffff:ffff:ffff,SG -2a0e:da40:1c::,2a0e:da40:1f:ffff:ffff:ffff:ffff:ffff,US -2a0e:da40:20::,2a0e:da40:2f:ffff:ffff:ffff:ffff:ffff,SG +2a0e:da40:10::,2a0e:da40:2f:ffff:ffff:ffff:ffff:ffff,SG 2a0e:da40:30::,2a0e:da40:ff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:da40:100::,2a0e:da40:13f:ffff:ffff:ffff:ffff:ffff,US 2a0e:da40:140::,2a0e:da40:14f:ffff:ffff:ffff:ffff:ffff,HK @@ -91762,7 +92375,7 @@ 2a0e:dec8::,2a0e:deff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:df00::,2a0e:df07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0e:df08::,2a0e:df3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:df40::,2a0e:df47:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0e:df40::,2a0e:df47:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0e:df48::,2a0e:df7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:df80::,2a0e:df87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:df88::,2a0e:dfbf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -91844,7 +92457,7 @@ 2a0e:e908::,2a0e:e93f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:e940::,2a0e:e947:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0e:e948::,2a0e:e97f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:e980::,2a0e:e987:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0e:e980::,2a0e:e987:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:e988::,2a0e:e9bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:e9c0::,2a0e:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:e9c8::,2a0e:e9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92015,16 +92628,16 @@ 2a0e:fcc8::,2a0e:fcff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd00::,2a0e:fd07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0e:fd08::,2a0e:fd3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd40::,2a0e:fd44:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0e:fd40::,2a0e:fd40:be0f:ffff:ffff:ffff:ffff:ffff,NL +2a0e:fd40:be10::,2a0e:fd40:be10:ffff:ffff:ffff:ffff:ffff,MY +2a0e:fd40:be11::,2a0e:fd44:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45::,2a0e:fd45:1:ffff:ffff:ffff:ffff:ffff,GB 2a0e:fd45:2::,2a0e:fd45:5:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:6::,2a0e:fd45:6:ffff:ffff:ffff:ffff:ffff,AE 2a0e:fd45:7::,2a0e:fd45:9ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:a00::,2a0e:fd45:aff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45:b00::,2a0e:fd45:b00:ffff:ffff:ffff:ffff:ffff,DE -2a0e:fd45:b01::,2a0e:fd45:b0f:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd45:b10::,2a0e:fd45:b10:ffff:ffff:ffff:ffff:ffff,NL -2a0e:fd45:b11::,2a0e:fd45:b1f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:b01::,2a0e:fd45:b1f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:b20::,2a0e:fd45:b20:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45:b21::,2a0e:fd45:b2f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:b30::,2a0e:fd45:b3f:ffff:ffff:ffff:ffff:ffff,GB @@ -92037,7 +92650,7 @@ 2a0e:fd45:b91::,2a0e:fd45:b9f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:ba0::,2a0e:fd45:ba0:ffff:ffff:ffff:ffff:ffff,GB 2a0e:fd45:ba1::,2a0e:fd45:baf:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd45:bb0::,2a0e:fd45:bbf:ffff:ffff:ffff:ffff:ffff,US +2a0e:fd45:bb0::,2a0e:fd45:bbf:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45:bc0::,2a0e:fd45:bcf:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:bd0::,2a0e:fd45:bd0:ffff:ffff:ffff:ffff:ffff,BE 2a0e:fd45:bd1::,2a0e:fd45:bdf:ffff:ffff:ffff:ffff:ffff,EU @@ -92048,8 +92661,8 @@ 2a0e:fd45:bf0::,2a0e:fd45:bf0:ffff:ffff:ffff:ffff:ffff,GB 2a0e:fd45:bf1::,2a0e:fd45:bff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:c00::,2a0e:fd45:cff:ffff:ffff:ffff:ffff:ffff,GB -2a0e:fd45:d00::,2a0e:fd45:d10:ffff:ffff:ffff:ffff:ffff,NL -2a0e:fd45:d11::,2a0e:fd45:d1f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:d00::,2a0e:fd45:d0f:ffff:ffff:ffff:ffff:ffff,NL +2a0e:fd45:d10::,2a0e:fd45:d1f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:d20::,2a0e:fd45:d20:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45:d21::,2a0e:fd45:d2f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:d30::,2a0e:fd45:d33:ffff:ffff:ffff:ffff:ffff,NL @@ -92114,11 +92727,7 @@ 2a0e:fd45:f10::,2a0e:fd45:f10:ffff:ffff:ffff:ffff:ffff,AU 2a0e:fd45:f11::,2a0e:fd45:fff:ffff:ffff:ffff:ffff:ffff,GB 2a0e:fd45:1000::,2a0e:fd45:1000:ffff:ffff:ffff:ffff:ffff,NL -2a0e:fd45:1001::,2a0e:fd45:100f:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd45:1010::,2a0e:fd45:1010:ffff:ffff:ffff:ffff:ffff,GB -2a0e:fd45:1011::,2a0e:fd45:101f:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd45:1020::,2a0e:fd45:1020:ffff:ffff:ffff:ffff:ffff,GB -2a0e:fd45:1021::,2a0e:fd45:102f:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:1001::,2a0e:fd45:102f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:1030::,2a0e:fd45:1030:ffff:ffff:ffff:ffff:ffff,PT 2a0e:fd45:1031::,2a0e:fd45:103f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:1040::,2a0e:fd45:1040:ffff:ffff:ffff:ffff:ffff,NL @@ -92126,9 +92735,7 @@ 2a0e:fd45:1091::,2a0e:fd45:1091:ffff:ffff:ffff:ffff:ffff,PT 2a0e:fd45:1092::,2a0e:fd45:1336:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:1337::,2a0e:fd45:1337:ffff:ffff:ffff:ffff:ffff,EG -2a0e:fd45:1338::,2a0e:fd45:1703:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd45:1704::,2a0e:fd45:1704:ffff:ffff:ffff:ffff:ffff,NL -2a0e:fd45:1705::,2a0e:fd45:29ff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:1338::,2a0e:fd45:29ff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:2a00::,2a0e:fd45:2a1f:ffff:ffff:ffff:ffff:ffff,FR 2a0e:fd45:2a20::,2a0e:fd45:2a20:ffff:ffff:ffff:ffff:ffff,BE 2a0e:fd45:2a21::,2a0e:fd45:2aff:ffff:ffff:ffff:ffff:ffff,FR @@ -92157,7 +92764,16 @@ 2a0e:fd45:2b90::,2a0e:fd45:2b90:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45:2b91::,2a0e:fd45:2b9f:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:2ba0::,2a0e:fd45:2ba0:ffff:ffff:ffff:ffff:ffff,NL -2a0e:fd45:2ba1::,2a0e:fd45:3fff:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:2ba1::,2a0e:fd45:2baf:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:2bb0::,2a0e:fd45:2bb0:ffff:ffff:ffff:ffff:ffff,HR +2a0e:fd45:2bb1::,2a0e:fd45:2bbf:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:2bc0::,2a0e:fd45:2bcf:ffff:ffff:ffff:ffff:ffff,NL +2a0e:fd45:2bd0::,2a0e:fd45:2bd0:ffff:ffff:ffff:ffff:ffff,DE +2a0e:fd45:2bd1::,2a0e:fd45:2bdf:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:2be0::,2a0e:fd45:2be0:ffff:ffff:ffff:ffff:ffff,NL +2a0e:fd45:2be1::,2a0e:fd45:2bef:ffff:ffff:ffff:ffff:ffff,EU +2a0e:fd45:2bf0::,2a0e:fd45:2bf0:ffff:ffff:ffff:ffff:ffff,ES +2a0e:fd45:2bf1::,2a0e:fd45:3fff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fd45:4000::,2a0e:fd45:40f7:ffff:ffff:ffff:ffff:ffff,FR 2a0e:fd45:40f8::,2a0e:fd45:40f8:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd45:40f9::,2a0e:fd45:40ff:ffff:ffff:ffff:ffff:ffff,FR @@ -92169,7 +92785,9 @@ 2a0e:fd46::,2a0e:fd46:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fd47::,2a0e:fd47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0e:fd48::,2a0e:fd7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0e:fd80::,2a0e:fd87:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0e:fd80::,2a0e:fd80:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0e:fd81::,2a0e:fd86:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0e:fd87::,2a0e:fd87:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0e:fd88::,2a0e:fdbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0e:fdc0::,2a0e:fdc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0e:fdc8::,2a0e:fdff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92245,7 +92863,9 @@ 2a0f:607:1058::,2a0f:607:105d:ffff:ffff:ffff:ffff:ffff,TW 2a0f:607:105e::,2a0f:607:106f:ffff:ffff:ffff:ffff:ffff,JP 2a0f:607:1070::,2a0f:607:1070:ffff:ffff:ffff:ffff:ffff,US -2a0f:607:1071::,2a0f:607:11ff:ffff:ffff:ffff:ffff:ffff,JP +2a0f:607:1071::,2a0f:607:1071:ffff:ffff:ffff:ffff:ffff,JP +2a0f:607:1072::,2a0f:607:1072:ffff:ffff:ffff:ffff:ffff,TW +2a0f:607:1073::,2a0f:607:11ff:ffff:ffff:ffff:ffff:ffff,JP 2a0f:607:1200::,2a0f:607:120f:ffff:ffff:ffff:ffff:ffff,TW 2a0f:607:1210::,2a0f:607:13ff:ffff:ffff:ffff:ffff:ffff,JP 2a0f:607:1400::,2a0f:607:140f:ffff:ffff:ffff:ffff:ffff,TW @@ -92281,10 +92901,9 @@ 2a0f:988::,2a0f:9bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:9c0::,2a0f:9c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9c8::,2a0f:9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:a00::,2a0f:a00:ffff:ffff:ffff:ffff:ffff:ffff,US -2a0f:a01::,2a0f:a01:2:ffff:ffff:ffff:ffff:ffff,NL -2a0f:a01:3::,2a0f:a01:4:ffff:ffff:ffff:ffff:ffff,US -2a0f:a01:5::,2a0f:a07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0f:a00::,2a0f:a01:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0f:a02::,2a0f:a04:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0f:a05::,2a0f:a07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0f:a08::,2a0f:a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:a40::,2a0f:a47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:a48::,2a0f:a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92350,7 +92969,9 @@ 2a0f:11c8::,2a0f:11ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:1200::,2a0f:1200:4:ffff:ffff:ffff:ffff:ffff,NL 2a0f:1200:5::,2a0f:1200:ffff:ffff:ffff:ffff:ffff:ffff,SC -2a0f:1201::,2a0f:1203:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0f:1201::,2a0f:1201:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0f:1202::,2a0f:1202:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0f:1203::,2a0f:1203:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0f:1204::,2a0f:1205:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:1206::,2a0f:1207:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:1208::,2a0f:123f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92445,8 +93066,7 @@ 2a0f:1d88::,2a0f:1dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:1dc0::,2a0f:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0f:1dc8::,2a0f:1dff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:1e00::,2a0f:1e02:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0f:1e03::,2a0f:1e07:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0f:1e00::,2a0f:1e07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0f:1e08::,2a0f:1e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:1e40::,2a0f:1e40:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0f:1e41::,2a0f:1e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92477,7 +93097,7 @@ 2a0f:2100:6a::,2a0f:2100:110:ffff:ffff:ffff:ffff:ffff,SC 2a0f:2100:111::,2a0f:2100:111:ffff:ffff:ffff:ffff:ffff,IL 2a0f:2100:112::,2a0f:2100:170:ffff:ffff:ffff:ffff:ffff,SC -2a0f:2100:171::,2a0f:2100:171:ffff:ffff:ffff:ffff:ffff,NL +2a0f:2100:171::,2a0f:2100:171:ffff:ffff:ffff:ffff:ffff,IL 2a0f:2100:172::,2a0f:2107:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:2108::,2a0f:213f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:2140::,2a0f:2147:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -92693,7 +93313,8 @@ 2a0f:3ac8::,2a0f:3aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:3b00::,2a0f:3b03:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:3b04::,2a0f:3b04:ffff:ffff:ffff:ffff:ffff:ffff,US -2a0f:3b05::,2a0f:3b07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:3b05::,2a0f:3b05:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a0f:3b06::,2a0f:3b07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:3b08::,2a0f:3b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:3b40::,2a0f:3b47:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0f:3b48::,2a0f:3b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92828,7 +93449,8 @@ 2a0f:4b00::,2a0f:4b07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:4b08::,2a0f:4b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:4b40::,2a0f:4b40:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a0f:4b41::,2a0f:4b47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:4b41::,2a0f:4b41:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0f:4b42::,2a0f:4b47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:4b48::,2a0f:4b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:4b80::,2a0f:4b87:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0f:4b88::,2a0f:4bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92874,7 +93496,7 @@ 2a0f:50c8::,2a0f:50ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5100::,2a0f:5107:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:5108::,2a0f:513f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:5140::,2a0f:5147:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0f:5140::,2a0f:5147:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0f:5148::,2a0f:517f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5180::,2a0f:5187:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5188::,2a0f:51bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92886,9 +93508,10 @@ 2a0f:5241::,2a0f:527f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5280::,2a0f:5287:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:5288::,2a0f:52bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:52c0::,2a0f:52c0:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0f:52c0::,2a0f:52c0:0:ffff:ffff:ffff:ffff:ffff,GE +2a0f:52c0:1::,2a0f:52c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:52c1::,2a0f:52c1:0:ffff:ffff:ffff:ffff:ffff,LU -2a0f:52c1:1::,2a0f:52c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0f:52c1:1::,2a0f:52c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:52c8::,2a0f:52ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5300::,2a0f:5307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5308::,2a0f:533f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -92923,8 +93546,8 @@ 2a0f:56c0::,2a0f:56c7:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a0f:56c8::,2a0f:56ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5700::,2a0f:5701:30ff:ffff:ffff:ffff:ffff:ffff,DE -2a0f:5701:3100::,2a0f:5701:31ff:ffff:ffff:ffff:ffff:ffff,PL -2a0f:5701:3200::,2a0f:5701:34ff:ffff:ffff:ffff:ffff:ffff,DE +2a0f:5701:3100::,2a0f:5701:32ff:ffff:ffff:ffff:ffff:ffff,PL +2a0f:5701:3300::,2a0f:5701:34ff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5701:3500::,2a0f:5701:3501:ffff:ffff:ffff:ffff:ffff,PL 2a0f:5701:3502::,2a0f:5701:3506:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5701:3507::,2a0f:5701:3508:ffff:ffff:ffff:ffff:ffff,PL @@ -92941,23 +93564,20 @@ 2a0f:5707:20::,2a0f:5707:20:ffff:ffff:ffff:ffff:ffff,BA 2a0f:5707:21::,2a0f:5707:aadf:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5707:aae0::,2a0f:5707:aaef:ffff:ffff:ffff:ffff:ffff,NL -2a0f:5707:aaf0::,2a0f:5707:ab0f:ffff:ffff:ffff:ffff:ffff,DE -2a0f:5707:ab10::,2a0f:5707:ab1f:ffff:ffff:ffff:ffff:ffff,BA +2a0f:5707:aaf0::,2a0f:5707:ab1f:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5707:ab20::,2a0f:5707:ab2b:ffff:ffff:ffff:ffff:ffff,FR 2a0f:5707:ab2c::,2a0f:5707:ab2c:ffff:ffff:ffff:ffff:ffff,NL 2a0f:5707:ab2d::,2a0f:5707:ab2d:ffff:ffff:ffff:ffff:ffff,US 2a0f:5707:ab2e::,2a0f:5707:ab2f:ffff:ffff:ffff:ffff:ffff,FR -2a0f:5707:ab30::,2a0f:5707:ab90:ffff:ffff:ffff:ffff:ffff,DE -2a0f:5707:ab91::,2a0f:5707:ab91:ffff:ffff:ffff:ffff:ffff,US -2a0f:5707:ab92::,2a0f:5707:ab92:ffff:ffff:ffff:ffff:ffff,HK -2a0f:5707:ab93::,2a0f:5707:abb9:ffff:ffff:ffff:ffff:ffff,DE +2a0f:5707:ab30::,2a0f:5707:abb9:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5707:abba::,2a0f:5707:abba:ffff:ffff:ffff:ffff:ffff,US 2a0f:5707:abbb::,2a0f:5707:abff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5707:ac00::,2a0f:5707:ac00:ffff:ffff:ffff:ffff:ffff,IE 2a0f:5707:ac01::,2a0f:5707:ac01:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5707:ac02::,2a0f:5707:ac02:ffff:ffff:ffff:ffff:ffff,RO 2a0f:5707:ac03::,2a0f:5707:ac0f:ffff:ffff:ffff:ffff:ffff,EU -2a0f:5707:ac10::,2a0f:5707:ad01:ffff:ffff:ffff:ffff:ffff,DE +2a0f:5707:ac10::,2a0f:5707:ad00:ffff:ffff:ffff:ffff:ffff,DE +2a0f:5707:ad01::,2a0f:5707:ad01:ffff:ffff:ffff:ffff:ffff,TW 2a0f:5707:ad02::,2a0f:5707:ad02:ffff:ffff:ffff:ffff:ffff,HK 2a0f:5707:ad03::,2a0f:5707:adff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:5707:ae00::,2a0f:5707:ae0f:ffff:ffff:ffff:ffff:ffff,EU @@ -93024,10 +93644,9 @@ 2a0f:58c1::,2a0f:58ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5900::,2a0f:5907:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0f:5908::,2a0f:593f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:5940::,2a0f:5941:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0f:5942::,2a0f:5943:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0f:5940::,2a0f:5943:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0f:5944::,2a0f:5945:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0f:5946::,2a0f:5947:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0f:5946::,2a0f:5947:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0f:5948::,2a0f:597f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:5980::,2a0f:5987:ffff:ffff:ffff:ffff:ffff:ffff,KW 2a0f:5988::,2a0f:59bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -93108,7 +93727,7 @@ 2a0f:6348::,2a0f:637f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:6380::,2a0f:6387:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a0f:6388::,2a0f:63bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:63c0::,2a0f:63c7:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0f:63c0::,2a0f:63c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:63c8::,2a0f:63ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:6400::,2a0f:6407:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0f:6408::,2a0f:643f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -93321,7 +93940,7 @@ 2a0f:7c08::,2a0f:7c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:7c40::,2a0f:7c47:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0f:7c48::,2a0f:7c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:7c80::,2a0f:7c87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0f:7c80::,2a0f:7c87:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0f:7c88::,2a0f:7cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:7cc0::,2a0f:7cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:7cc8::,2a0f:7cff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -93423,7 +94042,14 @@ 2a0f:85c1:90::,2a0f:85c1:9f:ffff:ffff:ffff:ffff:ffff,AT 2a0f:85c1:a0::,2a0f:85c1:ff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:85c1:100::,2a0f:85c1:1ff:ffff:ffff:ffff:ffff:ffff,NL -2a0f:85c1:200::,2a0f:85c1:beee:ffff:ffff:ffff:ffff:ffff,GB +2a0f:85c1:200::,2a0f:85c1:20f:ffff:ffff:ffff:ffff:ffff,GB +2a0f:85c1:210::,2a0f:85c1:211:ffff:ffff:ffff:ffff:ffff,NL +2a0f:85c1:212::,2a0f:85c1:212:ffff:ffff:ffff:ffff:ffff,GB +2a0f:85c1:213::,2a0f:85c1:213:ffff:ffff:ffff:ffff:ffff,CZ +2a0f:85c1:214::,2a0f:85c1:214:ffff:ffff:ffff:ffff:ffff,NL +2a0f:85c1:215::,2a0f:85c1:22f:ffff:ffff:ffff:ffff:ffff,GB +2a0f:85c1:230::,2a0f:85c1:23f:ffff:ffff:ffff:ffff:ffff,NL +2a0f:85c1:240::,2a0f:85c1:beee:ffff:ffff:ffff:ffff:ffff,GB 2a0f:85c1:beef::,2a0f:85c1:beef:ffff:ffff:ffff:ffff:ffff,DE 2a0f:85c1:bef0::,2a0f:85c1:cafd:ffff:ffff:ffff:ffff:ffff,GB 2a0f:85c1:cafe::,2a0f:85c1:cafe:ffff:ffff:ffff:ffff:ffff,DE @@ -93461,7 +94087,7 @@ 2a0f:8948::,2a0f:897f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:8980::,2a0f:8980:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0f:8981::,2a0f:89bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:89c0::,2a0f:89c7:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0f:89c0::,2a0f:89c7:ffff:ffff:ffff:ffff:ffff:ffff,JP 2a0f:89c8::,2a0f:89ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:8a00::,2a0f:8a07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0f:8a08::,2a0f:8a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -93615,13 +94241,9 @@ 2a0f:93c0:1::,2a0f:93c0:1:ffff:ffff:ffff:ffff:ffff,DE 2a0f:93c0:2::,2a0f:93c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:93c1::,2a0f:93c1:0:ffff:ffff:ffff:ffff:ffff,DE -2a0f:93c1:1::,2a0f:93c1:1:ffff:ffff:ffff:ffff:ffff,NL -2a0f:93c1:2::,2a0f:93c1:2:ffff:ffff:ffff:ffff:ffff,GB -2a0f:93c1:3::,2a0f:93c1:3:ffff:ffff:ffff:ffff:ffff,NL +2a0f:93c1:1::,2a0f:93c1:3:ffff:ffff:ffff:ffff:ffff,NL 2a0f:93c1:4::,2a0f:93c1:4:ffff:ffff:ffff:ffff:ffff,DE -2a0f:93c1:5::,2a0f:93c1:5:ffff:ffff:ffff:ffff:ffff,NL -2a0f:93c1:6::,2a0f:93c1:6:ffff:ffff:ffff:ffff:ffff,GB -2a0f:93c1:7::,2a0f:93c1:7:ffff:ffff:ffff:ffff:ffff,NL +2a0f:93c1:5::,2a0f:93c1:7:ffff:ffff:ffff:ffff:ffff,NL 2a0f:93c1:8::,2a0f:93c1:9:ffff:ffff:ffff:ffff:ffff,GB 2a0f:93c1:a::,2a0f:93c1:a:ffff:ffff:ffff:ffff:ffff,NL 2a0f:93c1:b::,2a0f:93c1:c:ffff:ffff:ffff:ffff:ffff,GB @@ -93629,8 +94251,8 @@ 2a0f:93c1:22::,2a0f:93c1:22:ffff:ffff:ffff:ffff:ffff,GB 2a0f:93c1:23::,2a0f:93c1:23:ffff:ffff:ffff:ffff:ffff,NL 2a0f:93c1:24::,2a0f:93c1:25:ffff:ffff:ffff:ffff:ffff,GB -2a0f:93c1:26::,2a0f:93c1:26:ffff:ffff:ffff:ffff:ffff,NL -2a0f:93c1:27::,2a0f:93c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:93c1:26::,2a0f:93c1:27:ffff:ffff:ffff:ffff:ffff,NL +2a0f:93c1:28::,2a0f:93c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:93c8::,2a0f:93ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:9400::,2a0f:9400:5:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:6::,2a0f:9400:6:ffff:ffff:ffff:ffff:ffff,US @@ -93639,7 +94261,9 @@ 2a0f:9400:20::,2a0f:9400:f9f:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:fa0::,2a0f:9400:faf:ffff:ffff:ffff:ffff:ffff,NO 2a0f:9400:fb0::,2a0f:9400:fbf:ffff:ffff:ffff:ffff:ffff,NL -2a0f:9400:fc0::,2a0f:9400:70ff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:fc0::,2a0f:9400:5fff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:6000::,2a0f:9400:60ff:ffff:ffff:ffff:ffff:ffff,US +2a0f:9400:6100::,2a0f:9400:70ff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7100::,2a0f:9400:71ff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9400:7200::,2a0f:9400:72ff:ffff:ffff:ffff:ffff:ffff,KR 2a0f:9400:7300::,2a0f:9400:731f:ffff:ffff:ffff:ffff:ffff,GB @@ -93658,18 +94282,23 @@ 2a0f:9400:737f::,2a0f:9400:737f:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9400:7380::,2a0f:9400:7381:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7382::,2a0f:9400:7382:ffff:ffff:ffff:ffff:ffff,DE -2a0f:9400:7383::,2a0f:9400:7385:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:7383::,2a0f:9400:7384:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:7385::,2a0f:9400:7385:ffff:ffff:ffff:ffff:ffff,SG 2a0f:9400:7386::,2a0f:9400:7386:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9400:7387::,2a0f:9400:7388:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7389::,2a0f:9400:7389:ffff:ffff:ffff:ffff:ffff,ID -2a0f:9400:738a::,2a0f:9400:738f:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:738a::,2a0f:9400:738a:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:738b::,2a0f:9400:738b:ffff:ffff:ffff:ffff:ffff,ID +2a0f:9400:738c::,2a0f:9400:738f:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7390::,2a0f:9400:739f:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9400:73a0::,2a0f:9400:73ff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7400::,2a0f:9400:74ff:ffff:ffff:ffff:ffff:ffff,CN 2a0f:9400:7500::,2a0f:9400:7500:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7501::,2a0f:9400:7501:ffff:ffff:ffff:ffff:ffff,JP 2a0f:9400:7502::,2a0f:9400:75ff:ffff:ffff:ffff:ffff:ffff,KR -2a0f:9400:7600::,2a0f:9400:7707:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:7600::,2a0f:9400:7700:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:7701::,2a0f:9400:7701:ffff:ffff:ffff:ffff:ffff,ID +2a0f:9400:7702::,2a0f:9400:7707:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7708::,2a0f:9400:7708:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9400:7709::,2a0f:9400:7709:ffff:ffff:ffff:ffff:ffff,KR 2a0f:9400:770a::,2a0f:9400:770a:ffff:ffff:ffff:ffff:ffff,CN @@ -93682,15 +94311,15 @@ 2a0f:9400:771e::,2a0f:9400:771e:ffff:ffff:ffff:ffff:ffff,AU 2a0f:9400:771f::,2a0f:9400:771f:ffff:ffff:ffff:ffff:ffff,NO 2a0f:9400:7720::,2a0f:9400:7720:ffff:ffff:ffff:ffff:ffff,GB -2a0f:9400:7721::,2a0f:9400:7721:ffff:ffff:ffff:ffff:ffff,KR -2a0f:9400:7722::,2a0f:9400:7722:ffff:ffff:ffff:ffff:ffff,JP +2a0f:9400:7721::,2a0f:9400:7722:ffff:ffff:ffff:ffff:ffff,JP 2a0f:9400:7723::,2a0f:9400:7723:ffff:ffff:ffff:ffff:ffff,KR -2a0f:9400:7724::,2a0f:9400:7724:ffff:ffff:ffff:ffff:ffff,US -2a0f:9400:7725::,2a0f:9400:7726:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:7724::,2a0f:9400:7726:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7727::,2a0f:9400:7727:ffff:ffff:ffff:ffff:ffff,US 2a0f:9400:7728::,2a0f:9400:7729:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:772a::,2a0f:9400:772a:ffff:ffff:ffff:ffff:ffff,CA -2a0f:9400:772b::,2a0f:9400:772d:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:772b::,2a0f:9400:772b:ffff:ffff:ffff:ffff:ffff,IN +2a0f:9400:772c::,2a0f:9400:772c:ffff:ffff:ffff:ffff:ffff,GB +2a0f:9400:772d::,2a0f:9400:772d:ffff:ffff:ffff:ffff:ffff,HU 2a0f:9400:772e::,2a0f:9400:772e:ffff:ffff:ffff:ffff:ffff,SG 2a0f:9400:772f::,2a0f:9400:772f:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7730::,2a0f:9400:773f:ffff:ffff:ffff:ffff:ffff,NO @@ -93717,8 +94346,20 @@ 2a0f:9400:7822::,2a0f:9400:7823:ffff:ffff:ffff:ffff:ffff,NO 2a0f:9400:7824::,2a0f:9400:7825:ffff:ffff:ffff:ffff:ffff,SE 2a0f:9400:7826::,2a0f:9400:7827:ffff:ffff:ffff:ffff:ffff,JP -2a0f:9400:7828::,2a0f:9400:782f:ffff:ffff:ffff:ffff:ffff,HK -2a0f:9400:7830::,2a0f:9400:788e:ffff:ffff:ffff:ffff:ffff,SG +2a0f:9400:7828::,2a0f:9400:7829:ffff:ffff:ffff:ffff:ffff,AT +2a0f:9400:782a::,2a0f:9400:782f:ffff:ffff:ffff:ffff:ffff,HK +2a0f:9400:7830::,2a0f:9400:7831:ffff:ffff:ffff:ffff:ffff,IT +2a0f:9400:7832::,2a0f:9400:7833:ffff:ffff:ffff:ffff:ffff,HK +2a0f:9400:7834::,2a0f:9400:7835:ffff:ffff:ffff:ffff:ffff,TW +2a0f:9400:7836::,2a0f:9400:7837:ffff:ffff:ffff:ffff:ffff,SG +2a0f:9400:7838::,2a0f:9400:7839:ffff:ffff:ffff:ffff:ffff,AU +2a0f:9400:783a::,2a0f:9400:7843:ffff:ffff:ffff:ffff:ffff,SG +2a0f:9400:7844::,2a0f:9400:7845:ffff:ffff:ffff:ffff:ffff,TW +2a0f:9400:7846::,2a0f:9400:7847:ffff:ffff:ffff:ffff:ffff,ES +2a0f:9400:7848::,2a0f:9400:7849:ffff:ffff:ffff:ffff:ffff,PT +2a0f:9400:784a::,2a0f:9400:784f:ffff:ffff:ffff:ffff:ffff,SG +2a0f:9400:7850::,2a0f:9400:785f:ffff:ffff:ffff:ffff:ffff,HK +2a0f:9400:7860::,2a0f:9400:788e:ffff:ffff:ffff:ffff:ffff,SG 2a0f:9400:788f::,2a0f:9400:788f:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:7890::,2a0f:9400:78ab:ffff:ffff:ffff:ffff:ffff,SG 2a0f:9400:78ac::,2a0f:9400:78ac:ffff:ffff:ffff:ffff:ffff,US @@ -93758,7 +94399,12 @@ 2a0f:9400:7935::,2a0f:9400:7935:ffff:ffff:ffff:ffff:ffff,NL 2a0f:9400:7936::,2a0f:9400:7936:ffff:ffff:ffff:ffff:ffff,FI 2a0f:9400:7937::,2a0f:9400:7937:ffff:ffff:ffff:ffff:ffff,MD -2a0f:9400:7938::,2a0f:9400:79ff:ffff:ffff:ffff:ffff:ffff,RO +2a0f:9400:7938::,2a0f:9400:7939:ffff:ffff:ffff:ffff:ffff,BG +2a0f:9400:793a::,2a0f:9400:793f:ffff:ffff:ffff:ffff:ffff,RO +2a0f:9400:7940::,2a0f:9400:7940:ffff:ffff:ffff:ffff:ffff,BG +2a0f:9400:7941::,2a0f:9400:7950:ffff:ffff:ffff:ffff:ffff,RO +2a0f:9400:7951::,2a0f:9400:7951:ffff:ffff:ffff:ffff:ffff,FK +2a0f:9400:7952::,2a0f:9400:79ff:ffff:ffff:ffff:ffff:ffff,RO 2a0f:9400:7a00::,2a0f:9400:7a00:ffff:ffff:ffff:ffff:ffff,US 2a0f:9400:7a01::,2a0f:9400:7a0f:ffff:ffff:ffff:ffff:ffff,HK 2a0f:9400:7a10::,2a0f:9400:7a1f:ffff:ffff:ffff:ffff:ffff,AU @@ -93778,7 +94424,7 @@ 2a0f:9400:8009::,2a0f:9400:8009:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:800a::,2a0f:9400:800a:ffff:ffff:ffff:ffff:ffff,RU 2a0f:9400:800b::,2a0f:9400:800b:ffff:ffff:ffff:ffff:ffff,CN -2a0f:9400:800c::,2a0f:9400:800c:ffff:ffff:ffff:ffff:ffff,NL +2a0f:9400:800c::,2a0f:9400:800c:ffff:ffff:ffff:ffff:ffff,GB 2a0f:9400:800d::,2a0f:9400:800d:ffff:ffff:ffff:ffff:ffff,PL 2a0f:9400:800e::,2a0f:9400:800e:ffff:ffff:ffff:ffff:ffff,PH 2a0f:9400:800f::,2a0f:9400:800f:ffff:ffff:ffff:ffff:ffff,NO @@ -93816,8 +94462,12 @@ 2a0f:9441:6::,2a0f:9441:6:ffff:ffff:ffff:ffff:ffff,NL 2a0f:9441:7::,2a0f:9441:7:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9441:8::,2a0f:9441:8:ffff:ffff:ffff:ffff:ffff,NL -2a0f:9441:9::,2a0f:9441:12:ffff:ffff:ffff:ffff:ffff,DE -2a0f:9441:13::,2a0f:9441:40:ffff:ffff:ffff:ffff:ffff,NL +2a0f:9441:9::,2a0f:9441:b:ffff:ffff:ffff:ffff:ffff,DE +2a0f:9441:c::,2a0f:9441:d:ffff:ffff:ffff:ffff:ffff,NL +2a0f:9441:e::,2a0f:9441:12:ffff:ffff:ffff:ffff:ffff,DE +2a0f:9441:13::,2a0f:9441:13:ffff:ffff:ffff:ffff:ffff,NL +2a0f:9441:14::,2a0f:9441:15:ffff:ffff:ffff:ffff:ffff,DE +2a0f:9441:16::,2a0f:9441:40:ffff:ffff:ffff:ffff:ffff,NL 2a0f:9441:41::,2a0f:9441:43:ffff:ffff:ffff:ffff:ffff,DE 2a0f:9441:44::,2a0f:9441:44:ffff:ffff:ffff:ffff:ffff,NL 2a0f:9441:45::,2a0f:9441:46:ffff:ffff:ffff:ffff:ffff,DE @@ -93836,7 +94486,7 @@ 2a0f:95c0::,2a0f:95c0:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0f:95c1::,2a0f:95ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:9600::,2a0f:9600:e:ffff:ffff:ffff:ffff:ffff,SC -2a0f:9600:f::,2a0f:9600:f:ffff:ffff:ffff:ffff:ffff,NL +2a0f:9600:f::,2a0f:9600:f:ffff:ffff:ffff:ffff:ffff,IL 2a0f:9600:10::,2a0f:9607:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:9608::,2a0f:963f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:9640::,2a0f:9647:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -94000,7 +94650,7 @@ 2a0f:a848::,2a0f:a87f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:a880::,2a0f:a887:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a0f:a888::,2a0f:a8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:a8c0::,2a0f:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0f:a8c0::,2a0f:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0f:a8c8::,2a0f:a8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:a900::,2a0f:a907:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0f:a908::,2a0f:a93f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94026,7 +94676,7 @@ 2a0f:ab88::,2a0f:abbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:abc0::,2a0f:abc7:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0f:abc8::,2a0f:abff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:ac00::,2a0f:ac07:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0f:ac00::,2a0f:ac07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:ac08::,2a0f:ac3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:ac40::,2a0f:ac47:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0f:ac48::,2a0f:ac7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94233,7 +94883,8 @@ 2a0f:c3c0::,2a0f:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:c3c8::,2a0f:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:c400::,2a0f:c400:9:ffff:ffff:ffff:ffff:ffff,SC -2a0f:c400:a::,2a0f:c400:b:ffff:ffff:ffff:ffff:ffff,NL +2a0f:c400:a::,2a0f:c400:a:ffff:ffff:ffff:ffff:ffff,NL +2a0f:c400:b::,2a0f:c400:b:ffff:ffff:ffff:ffff:ffff,IL 2a0f:c400:c::,2a0f:c400:c9:ffff:ffff:ffff:ffff:ffff,SC 2a0f:c400:ca::,2a0f:c400:ca:ffff:ffff:ffff:ffff:ffff,NL 2a0f:c400:cb::,2a0f:c407:ffff:ffff:ffff:ffff:ffff:ffff,SC @@ -94272,7 +94923,7 @@ 2a0f:c7c8::,2a0f:c7ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:c800::,2a0f:c807:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0f:c808::,2a0f:c83f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:c840::,2a0f:c847:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0f:c840::,2a0f:c847:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0f:c848::,2a0f:c87f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:c880::,2a0f:c887:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0f:c888::,2a0f:c8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94375,11 +95026,7 @@ 2a0f:d180::,2a0f:d187:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0f:d188::,2a0f:d1bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:d1c0::,2a0f:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a0f:d1c1::,2a0f:d1ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:d200::,2a0f:d207:a0ff:ffff:ffff:ffff:ffff:ffff,FR -2a0f:d207:a100::,2a0f:d207:a100:ffff:ffff:ffff:ffff:ffff,US -2a0f:d207:a101::,2a0f:d207:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a0f:d208::,2a0f:d23f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0f:d1c1::,2a0f:d23f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:d240::,2a0f:d240:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0f:d241::,2a0f:d27f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:d280::,2a0f:d287:ffff:ffff:ffff:ffff:ffff:ffff,CY @@ -94484,13 +95131,13 @@ 2a0f:df00:dead::,2a0f:df00:dead:ffff:ffff:ffff:ffff:ffff,TH 2a0f:df00:deae::,2a0f:df07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0f:df08::,2a0f:df3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:df40::,2a0f:df47:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0f:df40::,2a0f:df47:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:df48::,2a0f:df7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:df80::,2a0f:df87:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0f:df88::,2a0f:dfbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:dfc0::,2a0f:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0f:dfc1::,2a0f:dfc3:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0f:dfc4::,2a0f:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0f:dfc1::,2a0f:dfc4:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0f:dfc5::,2a0f:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:dfc8::,2a0f:dfff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e000::,2a0f:e007:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0f:e008::,2a0f:e03f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94508,7 +95155,7 @@ 2a0f:e108::,2a0f:e13f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e140::,2a0f:e140:0:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e140:1::,2a0f:e142:ffff:ffff:ffff:ffff:ffff:ffff,SC -2a0f:e143::,2a0f:e143:ffff:ffff:ffff:ffff:ffff:ffff,RS +2a0f:e143::,2a0f:e143:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e144::,2a0f:e147:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:e148::,2a0f:e17f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e180::,2a0f:e187:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -94530,10 +95177,14 @@ 2a0f:e348::,2a0f:e37f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e380::,2a0f:e387:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e388::,2a0f:e3bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:e3c0::,2a0f:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0f:e3c8::,2a0f:e400:2fff:ffff:ffff:ffff:ffff:ffff,EU +2a0f:e3c0::,2a0f:e3c6:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:e3c7::,2a0f:e3c7:ff:ffff:ffff:ffff:ffff:ffff,SG +2a0f:e3c7:100::,2a0f:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0f:e3c8::,2a0f:e3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0f:e400::,2a0f:e400:2fff:ffff:ffff:ffff:ffff:ffff,LI 2a0f:e400:3000::,2a0f:e400:30ff:ffff:ffff:ffff:ffff:ffff,CH -2a0f:e400:3100::,2a0f:e401:10f:ffff:ffff:ffff:ffff:ffff,EU +2a0f:e400:3100::,2a0f:e400:ffff:ffff:ffff:ffff:ffff:ffff,LI +2a0f:e401::,2a0f:e401:10f:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e401:110::,2a0f:e401:110:ffff:ffff:ffff:ffff:ffff,KP 2a0f:e401:111::,2a0f:e401:111:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e401:112::,2a0f:e401:112:ffff:ffff:ffff:ffff:ffff,LK @@ -94550,11 +95201,11 @@ 2a0f:e401:11d::,2a0f:e401:11f:ffff:ffff:ffff:ffff:ffff,LK 2a0f:e401:120::,2a0f:e401:12f:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e401:130::,2a0f:e401:13f:ffff:ffff:ffff:ffff:ffff,US -2a0f:e401:140::,2a0f:e404:ff:ffff:ffff:ffff:ffff:ffff,EU +2a0f:e401:140::,2a0f:e401:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0f:e402::,2a0f:e402:ffff:ffff:ffff:ffff:ffff:ffff,LI +2a0f:e403::,2a0f:e404:ff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e404:100::,2a0f:e404:101:ffff:ffff:ffff:ffff:ffff,DE -2a0f:e404:102::,2a0f:e404:104:ffff:ffff:ffff:ffff:ffff,EU -2a0f:e404:105::,2a0f:e404:105:ffff:ffff:ffff:ffff:ffff,US -2a0f:e404:106::,2a0f:e43f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a0f:e404:102::,2a0f:e43f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e440::,2a0f:e447:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:e448::,2a0f:e47f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e480::,2a0f:e487:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -94570,20 +95221,20 @@ 2a0f:e5c0::,2a0f:e5c0:0:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e5c0:1::,2a0f:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:e5c8::,2a0f:e5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:e600::,2a0f:e600:0:ffff:ffff:ffff:ffff:ffff,NL -2a0f:e600:1::,2a0f:e600:1:ffff:ffff:ffff:ffff:ffff,IL +2a0f:e600::,2a0f:e600:1:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e600:2::,2a0f:e607:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:e608::,2a0f:e63f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e640::,2a0f:e647:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e648::,2a0f:e67f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e680::,2a0f:e687:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0f:e688::,2a0f:e6bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:e6c0::,2a0f:e6c0:9:ffff:ffff:ffff:ffff:ffff,SC +2a0f:e6c0::,2a0f:e6c0:9:ffff:ffff:ffff:ffff:ffff,GB 2a0f:e6c0:a::,2a0f:e6c0:a:ffff:ffff:ffff:ffff:ffff,NL -2a0f:e6c0:b::,2a0f:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0f:e6c0:b::,2a0f:e6c0:122:ffff:ffff:ffff:ffff:ffff,GB +2a0f:e6c0:123::,2a0f:e6c0:123:ffff:ffff:ffff:ffff:ffff,NL +2a0f:e6c0:124::,2a0f:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:e6c1::,2a0f:e6c1:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0f:e6c2::,2a0f:e6c2:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0f:e6c3::,2a0f:e6c7:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0f:e6c2::,2a0f:e6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0f:e6c8::,2a0f:e6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e700::,2a0f:e707:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:e708::,2a0f:e73f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94599,11 +95250,11 @@ 2a0f:e848::,2a0f:e87f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e880::,2a0f:e887:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0f:e888::,2a0f:e8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:e8c0::,2a0f:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0f:e8c0::,2a0f:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:e8c8::,2a0f:e8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e900::,2a0f:e907:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0f:e908::,2a0f:e93f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:e940::,2a0f:e947:ffff:ffff:ffff:ffff:ffff:ffff,SC +2a0f:e940::,2a0f:e947:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0f:e948::,2a0f:e97f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a0f:e980::,2a0f:e987:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a0f:e988::,2a0f:e9bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94612,8 +95263,7 @@ 2a0f:ea00::,2a0f:ea00:2:ffff:ffff:ffff:ffff:ffff,NL 2a0f:ea00:3::,2a0f:ea07:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:ea08::,2a0f:ea3f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a0f:ea40::,2a0f:ea40:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0f:ea41::,2a0f:ea41:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0f:ea40::,2a0f:ea41:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0f:ea42::,2a0f:ea42:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0f:ea43::,2a0f:ea47:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:ea48::,2a0f:ea7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94632,7 +95282,7 @@ 2a0f:ec00::,2a0f:ec00:1e:ffff:ffff:ffff:ffff:ffff,SC 2a0f:ec00:1f::,2a0f:ec00:1f:ffff:ffff:ffff:ffff:ffff,NL 2a0f:ec00:20::,2a0f:ec00:98:ffff:ffff:ffff:ffff:ffff,SC -2a0f:ec00:99::,2a0f:ec00:99:ffff:ffff:ffff:ffff:ffff,NL +2a0f:ec00:99::,2a0f:ec00:99:ffff:ffff:ffff:ffff:ffff,FR 2a0f:ec00:9a::,2a0f:ec00:ffff:ffff:ffff:ffff:ffff:ffff,SC 2a0f:ec01::,2a0f:ec01:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0f:ec02::,2a0f:ec02:0:ffff:ffff:ffff:ffff:ffff,SC @@ -94867,7 +95517,7 @@ 2a10:788::,2a10:7ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:800::,2a10:807:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a10:808::,2a10:83f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:840::,2a10:847:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a10:840::,2a10:847:ffff:ffff:ffff:ffff:ffff:ffff,US 2a10:848::,2a10:87f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:880::,2a10:887:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a10:888::,2a10:8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -94895,7 +95545,7 @@ 2a10:b48::,2a10:b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:b80::,2a10:b87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a10:b88::,2a10:bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:bc0::,2a10:bc7:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a10:bc0::,2a10:bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a10:bc8::,2a10:bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:c00::,2a10:c07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a10:c08::,2a10:c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -95030,7 +95680,7 @@ 2a10:1c08::,2a10:1c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:1c40::,2a10:1c40:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a10:1c41::,2a10:1c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:1c80::,2a10:1c87:ffff:ffff:ffff:ffff:ffff:ffff,JP +2a10:1c80::,2a10:1c87:ffff:ffff:ffff:ffff:ffff:ffff,IN 2a10:1c88::,2a10:1cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:1cc0::,2a10:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,HK 2a10:1cc8::,2a10:1cff:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -95058,7 +95708,8 @@ 2a10:1f88::,2a10:1fbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:1fc0::,2a10:1fc0:0:ffff:ffff:ffff:ffff:ffff,HK 2a10:1fc0:1::,2a10:1fc0:1:ffff:ffff:ffff:ffff:ffff,EE -2a10:1fc0:2::,2a10:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,HK +2a10:1fc0:2::,2a10:1fc0:2:ffff:ffff:ffff:ffff:ffff,IT +2a10:1fc0:3::,2a10:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,HK 2a10:1fc8::,2a10:1fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:2000::,2a10:2007:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a10:2008::,2a10:203f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -95100,7 +95751,7 @@ 2a10:2488::,2a10:24bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:24c0::,2a10:24c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a10:24c8::,2a10:24ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:2500::,2a10:2507:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a10:2500::,2a10:2507:ffff:ffff:ffff:ffff:ffff:ffff,IN 2a10:2508::,2a10:253f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:2540::,2a10:2547:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a10:2548::,2a10:257f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -95231,8 +95882,7 @@ 2a10:2f00:155::,2a10:2f00:155:ffff:ffff:ffff:ffff:ffff,CH 2a10:2f00:156::,2a10:2f00:156:ffff:ffff:ffff:ffff:ffff,DE 2a10:2f00:157::,2a10:2f00:157:ffff:ffff:ffff:ffff:ffff,TW -2a10:2f00:158::,2a10:2f00:158:ffff:ffff:ffff:ffff:ffff,CH -2a10:2f00:159::,2a10:2f00:159:ffff:ffff:ffff:ffff:ffff,EU +2a10:2f00:158::,2a10:2f00:159:ffff:ffff:ffff:ffff:ffff,EU 2a10:2f00:15a::,2a10:2f00:15a:ffff:ffff:ffff:ffff:ffff,CH 2a10:2f00:15b::,2a10:2f00:15b:ffff:ffff:ffff:ffff:ffff,EU 2a10:2f00:15c::,2a10:2f00:15c:ffff:ffff:ffff:ffff:ffff,CN @@ -95253,7 +95903,10 @@ 2a10:2f00:177::,2a10:2f00:177:ffff:ffff:ffff:ffff:ffff,DE 2a10:2f00:178::,2a10:2f00:17a:ffff:ffff:ffff:ffff:ffff,EU 2a10:2f00:17b::,2a10:2f00:17b:ffff:ffff:ffff:ffff:ffff,NL -2a10:2f00:17c::,2a10:2f01:1ff:ffff:ffff:ffff:ffff:ffff,EU +2a10:2f00:17c::,2a10:2f00:17c:ffff:ffff:ffff:ffff:ffff,EU +2a10:2f00:17d::,2a10:2f00:17d:ffff:ffff:ffff:ffff:ffff,DE +2a10:2f00:17e::,2a10:2f00:17e:ffff:ffff:ffff:ffff:ffff,CH +2a10:2f00:17f::,2a10:2f01:1ff:ffff:ffff:ffff:ffff:ffff,EU 2a10:2f01:200::,2a10:2f01:20f:ffff:ffff:ffff:ffff:ffff,HK 2a10:2f01:210::,2a10:2f01:21f:ffff:ffff:ffff:ffff:ffff,EU 2a10:2f01:220::,2a10:2f01:221:ffff:ffff:ffff:ffff:ffff,GB @@ -95515,7 +96168,10 @@ 2a10:4645::,2a10:4645:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a10:4646::,2a10:4646:15:ffff:ffff:ffff:ffff:ffff,FR 2a10:4646:16::,2a10:4646:16:ffff:ffff:ffff:ffff:ffff,CH -2a10:4646:17::,2a10:4647:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a10:4646:17::,2a10:4646:16f:ffff:ffff:ffff:ffff:ffff,FR +2a10:4646:170::,2a10:4646:17f:ffff:ffff:ffff:ffff:ffff,CA +2a10:4646:180::,2a10:4646:18f:ffff:ffff:ffff:ffff:ffff,DE +2a10:4646:190::,2a10:4647:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a10:4648::,2a10:467f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:4680::,2a10:4687:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a10:4688::,2a10:46bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -95525,7 +96181,9 @@ 2a10:4705::,2a10:4705:ffff:ffff:ffff:ffff:ffff:ffff,US 2a10:4706::,2a10:4707:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a10:4708::,2a10:473f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:4740::,2a10:4747:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a10:4740::,2a10:4741:22:ffff:ffff:ffff:ffff:ffff,GB +2a10:4741:23::,2a10:4741:23:ffff:ffff:ffff:ffff:ffff,US +2a10:4741:24::,2a10:4747:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a10:4748::,2a10:477f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:4780::,2a10:4780:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a10:4781::,2a10:47bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -95636,9 +96294,7 @@ 2a10:54c0::,2a10:54c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a10:54c8::,2a10:54ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:5500::,2a10:5507:ffff:ffff:ffff:ffff:ffff:ffff,MT -2a10:5508::,2a10:553f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:5540::,2a10:5547:ffff:ffff:ffff:ffff:ffff:ffff,PS -2a10:5548::,2a10:557f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a10:5508::,2a10:557f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:5580::,2a10:5587:ffff:ffff:ffff:ffff:ffff:ffff,US 2a10:5588::,2a10:55bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:55c0::,2a10:55c7:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -95945,7 +96601,7 @@ 2a10:7a48::,2a10:7a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:7a80::,2a10:7a87:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a10:7a88::,2a10:7abf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:7ac0::,2a10:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a10:7ac0::,2a10:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,US 2a10:7ac8::,2a10:7aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:7b00::,2a10:7b07:ffff:ffff:ffff:ffff:ffff:ffff,JP 2a10:7b08::,2a10:7b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -96356,7 +97012,7 @@ 2a10:a948::,2a10:a97f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:a980::,2a10:a987:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a10:a988::,2a10:a9bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:a9c0::,2a10:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,MX +2a10:a9c0::,2a10:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,US 2a10:a9c8::,2a10:a9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:aa00::,2a10:aa07:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a10:aa08::,2a10:aa3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -96633,7 +97289,9 @@ 2a10:cb48::,2a10:cb7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:cb80::,2a10:cb87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a10:cb88::,2a10:cbbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a10:cbc0::,2a10:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,IN +2a10:cbc0::,2a10:cbc3:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a10:cbc4::,2a10:cbc4:ffff:ffff:ffff:ffff:ffff:ffff,IN +2a10:cbc5::,2a10:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a10:cbc8::,2a10:cbff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a10:cc00::,2a10:cc07:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a10:cc08::,2a10:cc3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -96641,11 +97299,12 @@ 2a10:cc40:100::,2a10:cc40:11f:ffff:ffff:ffff:ffff:ffff,CA 2a10:cc40:120::,2a10:cc40:12f:ffff:ffff:ffff:ffff:ffff,DE 2a10:cc40:130::,2a10:cc40:13f:ffff:ffff:ffff:ffff:ffff,ES -2a10:cc40:140::,2a10:cc40:14f:ffff:ffff:ffff:ffff:ffff,CZ -2a10:cc40:150::,2a10:cc41:ff:ffff:ffff:ffff:ffff:ffff,CH +2a10:cc40:140::,2a10:cc40:14f:ffff:ffff:ffff:ffff:ffff,EU +2a10:cc40:150::,2a10:cc40:15e:ffff:ffff:ffff:ffff:ffff,GB +2a10:cc40:15f::,2a10:cc40:15f:ffff:ffff:ffff:ffff:ffff,EU +2a10:cc40:160::,2a10:cc41:ff:ffff:ffff:ffff:ffff:ffff,CH 2a10:cc41:100::,2a10:cc41:10f:ffff:ffff:ffff:ffff:ffff,IT -2a10:cc41:110::,2a10:cc42:ff:ffff:ffff:ffff:ffff:ffff,CH -2a10:cc42:100::,2a10:cc42:10f:ffff:ffff:ffff:ffff:ffff,DE +2a10:cc41:110::,2a10:cc42:10f:ffff:ffff:ffff:ffff:ffff,CH 2a10:cc42:110::,2a10:cc42:11f:ffff:ffff:ffff:ffff:ffff,GB 2a10:cc42:120::,2a10:cc42:13f:ffff:ffff:ffff:ffff:ffff,CN 2a10:cc42:140::,2a10:cc42:fff:ffff:ffff:ffff:ffff:ffff,CH @@ -96653,12 +97312,10 @@ 2a10:cc42:2000::,2a10:cc44:ff:ffff:ffff:ffff:ffff:ffff,CH 2a10:cc44:100::,2a10:cc44:10f:ffff:ffff:ffff:ffff:ffff,US 2a10:cc44:110::,2a10:cc44:11f:ffff:ffff:ffff:ffff:ffff,RO -2a10:cc44:120::,2a10:cc44:12f:ffff:ffff:ffff:ffff:ffff,CZ +2a10:cc44:120::,2a10:cc44:12f:ffff:ffff:ffff:ffff:ffff,EU 2a10:cc44:130::,2a10:cc44:1ff:ffff:ffff:ffff:ffff:ffff,CH 2a10:cc44:200::,2a10:cc44:2ff:ffff:ffff:ffff:ffff:ffff,IT -2a10:cc44:300::,2a10:cc45:3ff:ffff:ffff:ffff:ffff:ffff,CH -2a10:cc45:400::,2a10:cc45:7ff:ffff:ffff:ffff:ffff:ffff,TW -2a10:cc45:800::,2a10:cc46:ff:ffff:ffff:ffff:ffff:ffff,CH +2a10:cc44:300::,2a10:cc46:ff:ffff:ffff:ffff:ffff:ffff,CH 2a10:cc46:100::,2a10:cc46:10f:ffff:ffff:ffff:ffff:ffff,US 2a10:cc46:110::,2a10:cc46:11f:ffff:ffff:ffff:ffff:ffff,IT 2a10:cc46:120::,2a10:cc46:12f:ffff:ffff:ffff:ffff:ffff,GM @@ -97586,7 +98243,7 @@ 2a11:3b41::,2a11:3b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:3b80::,2a11:3b87:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a11:3b88::,2a11:3bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:3bc0::,2a11:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a11:3bc0::,2a11:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,US 2a11:3bc8::,2a11:3bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:3c00::,2a11:3c00:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a11:3c01::,2a11:3c01:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -98374,11 +99031,7 @@ 2a11:9b88::,2a11:9bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:9bc0::,2a11:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a11:9bc8::,2a11:9bff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:9c00::,2a11:9c00:ff:ffff:ffff:ffff:ffff:ffff,CZ -2a11:9c00:100::,2a11:9c00:1ff:ffff:ffff:ffff:ffff:ffff,SG -2a11:9c00:200::,2a11:9c00:9ff:ffff:ffff:ffff:ffff:ffff,CZ -2a11:9c00:a00::,2a11:9c00:aff:ffff:ffff:ffff:ffff:ffff,SG -2a11:9c00:b00::,2a11:9c07:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a11:9c00::,2a11:9c07:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a11:9c08::,2a11:9c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:9c40::,2a11:9c47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a11:9c48::,2a11:9c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -98849,7 +99502,9 @@ 2a11:d500::,2a11:d507:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a11:d508::,2a11:d53f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:d540::,2a11:d547:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a11:d548::,2a11:d5bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a11:d548::,2a11:d57f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a11:d580::,2a11:d587:ffff:ffff:ffff:ffff:ffff:ffff,SI +2a11:d588::,2a11:d5bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:d5c0::,2a11:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a11:d5c8::,2a11:d5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:d600::,2a11:d607:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -99049,7 +99704,7 @@ 2a11:ec88::,2a11:ecbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:ecc0::,2a11:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a11:ecc8::,2a11:ecff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:ed00::,2a11:ed07:ffff:ffff:ffff:ffff:ffff:ffff,JP +2a11:ed00::,2a11:ed07:ffff:ffff:ffff:ffff:ffff:ffff,IN 2a11:ed08::,2a11:ed3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:ed40::,2a11:ed47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a11:ed48::,2a11:ed7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99065,7 +99720,7 @@ 2a11:ee88::,2a11:eebf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:eec0::,2a11:eec7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a11:eec8::,2a11:eeff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:ef00::,2a11:ef07:ffff:ffff:ffff:ffff:ffff:ffff,JP +2a11:ef00::,2a11:ef07:ffff:ffff:ffff:ffff:ffff:ffff,KR 2a11:ef08::,2a11:ef3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:ef40::,2a11:ef47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a11:ef48::,2a11:ef7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99081,7 +99736,7 @@ 2a11:f088::,2a11:f0bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f0c0::,2a11:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a11:f0c8::,2a11:f0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:f100::,2a11:f107:ffff:ffff:ffff:ffff:ffff:ffff,JP +2a11:f100::,2a11:f107:ffff:ffff:ffff:ffff:ffff:ffff,KR 2a11:f108::,2a11:f13f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f140::,2a11:f147:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a11:f148::,2a11:f17f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99097,11 +99752,13 @@ 2a11:f288::,2a11:f2c0:0:ffff:ffff:ffff:ffff:ffff,EU 2a11:f2c0:1::,2a11:f2c0:ffe0:ffff:ffff:ffff:ffff:ffff,GB 2a11:f2c0:ffe1::,2a11:f2c0:ffe1:ffff:ffff:ffff:ffff:ffff,NL -2a11:f2c0:ffe2::,2a11:f2c0:fffe:ffff:ffff:ffff:ffff:ffff,GB +2a11:f2c0:ffe2::,2a11:f2c0:fffb:ffff:ffff:ffff:ffff:ffff,GB +2a11:f2c0:fffc::,2a11:f2c0:fffc:ffff:ffff:ffff:ffff:ffff,RO +2a11:f2c0:fffd::,2a11:f2c0:fffe:ffff:ffff:ffff:ffff:ffff,GB 2a11:f2c0:ffff::,2a11:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a11:f2c1::,2a11:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a11:f2c8::,2a11:f2ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:f300::,2a11:f307:ffff:ffff:ffff:ffff:ffff:ffff,JP +2a11:f300::,2a11:f307:ffff:ffff:ffff:ffff:ffff:ffff,KR 2a11:f308::,2a11:f33f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f340::,2a11:f347:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a11:f348::,2a11:f37f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99117,7 +99774,7 @@ 2a11:f488::,2a11:f4bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f4c0::,2a11:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a11:f4c8::,2a11:f4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:f500::,2a11:f507:ffff:ffff:ffff:ffff:ffff:ffff,JP +2a11:f500::,2a11:f507:ffff:ffff:ffff:ffff:ffff:ffff,IN 2a11:f508::,2a11:f53f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f540::,2a11:f547:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a11:f548::,2a11:f57f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99133,7 +99790,7 @@ 2a11:f688::,2a11:f6bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f6c0::,2a11:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a11:f6c8::,2a11:f6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:f700::,2a11:f707:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a11:f700::,2a11:f707:ffff:ffff:ffff:ffff:ffff:ffff,KR 2a11:f708::,2a11:f73f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f740::,2a11:f747:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a11:f748::,2a11:f77f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99151,7 +99808,7 @@ 2a11:f888::,2a11:f8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f8c0::,2a11:f8c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a11:f8c8::,2a11:f8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:f900::,2a11:f907:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a11:f900::,2a11:f907:ffff:ffff:ffff:ffff:ffff:ffff,ID 2a11:f908::,2a11:f93f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:f940::,2a11:f947:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a11:f948::,2a11:f97f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99167,9 +99824,9 @@ 2a11:fa80::,2a11:fa80:0:ffff:ffff:ffff:ffff:ffff,NL 2a11:fa80:1::,2a11:fa87:ffff:ffff:ffff:ffff:ffff:ffff,US 2a11:fa88::,2a11:fabf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:fac0::,2a11:fac0:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a11:fac1::,2a11:faff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:fb00::,2a11:fb07:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a11:fac0::,2a11:fac7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a11:fac8::,2a11:faff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a11:fb00::,2a11:fb07:ffff:ffff:ffff:ffff:ffff:ffff,ID 2a11:fb08::,2a11:fb3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:fb40::,2a11:fb47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a11:fb48::,2a11:fb7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99177,7 +99834,9 @@ 2a11:fb88::,2a11:fbbf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:fbc0::,2a11:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a11:fbc8::,2a11:fbff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a11:fc00::,2a11:fc07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a11:fc00::,2a11:fc00:fff:ffff:ffff:ffff:ffff:ffff,RU +2a11:fc00:1000::,2a11:fc00:1000:ffff:ffff:ffff:ffff:ffff,GB +2a11:fc00:1001::,2a11:fc07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a11:fc08::,2a11:fc3f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a11:fc40::,2a11:fc47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a11:fc48::,2a11:fc7f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99536,7 +100195,7 @@ 2a12:2748::,2a12:277f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:2780::,2a12:2787:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a12:2788::,2a12:27bf:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a12:27c0::,2a12:27c7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:27c0::,2a12:27c7:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a12:27c8::,2a12:27ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:2800::,2a12:2807:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a12:2808::,2a12:283f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99652,7 +100311,7 @@ 2a12:35c8::,2a12:35ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:3600::,2a12:3603:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a12:3604::,2a12:363f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a12:3640::,2a12:3647:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:3640::,2a12:3647:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a12:3648::,2a12:367f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:3680::,2a12:3680:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a12:3681::,2a12:36bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99798,7 +100457,7 @@ 2a12:47c8::,2a12:47ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:4800::,2a12:4807:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a12:4808::,2a12:483f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a12:4840::,2a12:4847:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:4840::,2a12:4847:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a12:4848::,2a12:487f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:4880::,2a12:4887:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a12:4888::,2a12:48bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99817,7 +100476,13 @@ 2a12:4946:1800::,2a12:4946:1800:ffff:ffff:ffff:ffff:ffff,BE 2a12:4946:1801::,2a12:4946:18ff:ffff:ffff:ffff:ffff:ffff,EU 2a12:4946:1900::,2a12:4946:1900:ffff:ffff:ffff:ffff:ffff,BE -2a12:4946:1901::,2a12:4946:695f:ffff:ffff:ffff:ffff:ffff,EU +2a12:4946:1901::,2a12:4946:3004:ffff:ffff:ffff:ffff:ffff,EU +2a12:4946:3005::,2a12:4946:3005:ffff:ffff:ffff:ffff:ffff,US +2a12:4946:3006::,2a12:4946:3fff:ffff:ffff:ffff:ffff:ffff,EU +2a12:4946:4000::,2a12:4946:4000:ffff:ffff:ffff:ffff:ffff,BE +2a12:4946:4001::,2a12:4946:4001:ffff:ffff:ffff:ffff:ffff,DE +2a12:4946:4002::,2a12:4946:400f:ffff:ffff:ffff:ffff:ffff,BE +2a12:4946:4010::,2a12:4946:695f:ffff:ffff:ffff:ffff:ffff,EU 2a12:4946:6960::,2a12:4946:696f:ffff:ffff:ffff:ffff:ffff,LT 2a12:4946:6970::,2a12:4946:98ff:ffff:ffff:ffff:ffff:ffff,EU 2a12:4946:9900::,2a12:4946:99ff:ffff:ffff:ffff:ffff:ffff,FI @@ -99828,7 +100493,8 @@ 2a12:4988::,2a12:49bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:49c0::,2a12:49c4:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a12:49c5::,2a12:49c5:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:49c6::,2a12:49c7:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a12:49c6::,2a12:49c6:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a12:49c7::,2a12:49c7:ffff:ffff:ffff:ffff:ffff:ffff,US 2a12:49c8::,2a12:49ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:4a00::,2a12:4a07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a12:4a08::,2a12:4a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -99949,7 +100615,9 @@ 2a12:5840:2111::,2a12:5840:2111:ffff:ffff:ffff:ffff:ffff,FR 2a12:5840:2112::,2a12:5840:b00a:ffff:ffff:ffff:ffff:ffff,BE 2a12:5840:b00b::,2a12:5840:b00b:ffff:ffff:ffff:ffff:ffff,US -2a12:5840:b00c::,2a12:5847:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a12:5840:b00c::,2a12:5844:110f:ffff:ffff:ffff:ffff:ffff,BE +2a12:5844:1110::,2a12:5844:111f:ffff:ffff:ffff:ffff:ffff,FR +2a12:5844:1120::,2a12:5847:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a12:5848::,2a12:587f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:5880::,2a12:5887:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a12:5888::,2a12:58bf:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -100067,7 +100735,8 @@ 2a12:6688::,2a12:66bf:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:66c0::,2a12:66c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a12:66c8::,2a12:66ff:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a12:6700::,2a12:6707:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:6700::,2a12:6700:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:6701::,2a12:6707:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a12:6708::,2a12:673f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6740::,2a12:6747:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a12:6748::,2a12:677f:ffff:ffff:ffff:ffff:ffff:ffff,EU @@ -100076,319 +100745,631 @@ 2a12:67c0::,2a12:67c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a12:67c8::,2a12:67ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6800::,2a12:6807:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:6808::,2a12:687f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6808::,2a12:683f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6840::,2a12:6847:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a12:6848::,2a12:687f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6880::,2a12:6887:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:6888::,2a12:68ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6888::,2a12:68bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:68c0::,2a12:68c7:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a12:68c8::,2a12:68ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6900::,2a12:6900:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:6901::,2a12:697f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6901::,2a12:693f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6940::,2a12:6947:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:6948::,2a12:697f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6980::,2a12:6987:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:6988::,2a12:69ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6988::,2a12:69bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:69c0::,2a12:69c7:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a12:69c8::,2a12:69ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6a00::,2a12:6a07:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a12:6a08::,2a12:6a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6a08::,2a12:6a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6a40::,2a12:6a47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:6a48::,2a12:6a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6a80::,2a12:6a87:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a12:6a88::,2a12:6aff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6a88::,2a12:6abf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6ac0::,2a12:6ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:6ac8::,2a12:6aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6b00::,2a12:6b07:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a12:6b08::,2a12:6b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6b08::,2a12:6b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6b40::,2a12:6b47:ffff:ffff:ffff:ffff:ffff:ffff,UZ +2a12:6b48::,2a12:6b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6b80::,2a12:6b87:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a12:6b88::,2a12:6bff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6b88::,2a12:6bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6bc0::,2a12:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a12:6bc8::,2a12:6bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6c00::,2a12:6c07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:6c08::,2a12:6c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6c08::,2a12:6c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6c40::,2a12:6c47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:6c48::,2a12:6c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6c80::,2a12:6c87:ffff:ffff:ffff:ffff:ffff:ffff,LT -2a12:6c88::,2a12:6cff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6c88::,2a12:6cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6cc0::,2a12:6cc7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a12:6cc8::,2a12:6cff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6d00::,2a12:6d07:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a12:6d08::,2a12:6d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6d08::,2a12:6d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6d40::,2a12:6d47:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a12:6d48::,2a12:6d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6d80::,2a12:6d87:ffff:ffff:ffff:ffff:ffff:ffff,LT -2a12:6d88::,2a12:6dff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6d88::,2a12:6dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6dc0::,2a12:6dc7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:6dc8::,2a12:6dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6e00::,2a12:6e07:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a12:6e08::,2a12:6e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6e08::,2a12:6e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6e40::,2a12:6e47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:6e48::,2a12:6e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6e80::,2a12:6e87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:6e88::,2a12:6eff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6e88::,2a12:6ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6ec0::,2a12:6ec7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:6ec8::,2a12:6eff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6f00::,2a12:6f07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:6f08::,2a12:6f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6f08::,2a12:6f3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6f40::,2a12:6f47:ffff:ffff:ffff:ffff:ffff:ffff,SG +2a12:6f48::,2a12:6f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:6f80::,2a12:6f87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:6f88::,2a12:6fff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6f88::,2a12:6fbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:6fc0::,2a12:6fc1:ffff:ffff:ffff:ffff:ffff:ffff,US +2a12:6fc2::,2a12:6fc7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:6fc8::,2a12:6fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7000::,2a12:7000:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a12:7001::,2a12:7001:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a12:7002::,2a12:7007:ffff:ffff:ffff:ffff:ffff:ffff,LU -2a12:7008::,2a12:707f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7008::,2a12:703f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7040::,2a12:7040:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:7041::,2a12:707f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7080::,2a12:7087:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7088::,2a12:70ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7088::,2a12:70bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:70c0::,2a12:70c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:70c8::,2a12:70ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7100::,2a12:7107:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a12:7108::,2a12:717f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7108::,2a12:713f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7140::,2a12:7147:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:7148::,2a12:717f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7180::,2a12:7187:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7188::,2a12:71ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7188::,2a12:71bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:71c0::,2a12:71c7:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a12:71c8::,2a12:71ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7200::,2a12:7207:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7208::,2a12:727f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7208::,2a12:723f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7240::,2a12:7247:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:7248::,2a12:727f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7280::,2a12:7287:ffff:ffff:ffff:ffff:ffff:ffff,EE -2a12:7288::,2a12:72ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7288::,2a12:72bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:72c0::,2a12:72c7:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a12:72c8::,2a12:72ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7300::,2a12:7307:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:7308::,2a12:737f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7308::,2a12:733f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7340::,2a12:7347:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:7348::,2a12:737f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7380::,2a12:7380:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:7381::,2a12:73ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7381::,2a12:73bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:73c0::,2a12:73c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:73c8::,2a12:73ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7400::,2a12:7407:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7408::,2a12:747f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7408::,2a12:743f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7440::,2a12:7447:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a12:7448::,2a12:747f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7480::,2a12:7487:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7488::,2a12:74ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7488::,2a12:74bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:74c0::,2a12:74c7:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a12:74c8::,2a12:74ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7500::,2a12:7507:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7508::,2a12:757f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7508::,2a12:753f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7540::,2a12:7547:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a12:7548::,2a12:757f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7580::,2a12:7587:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7588::,2a12:75ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7588::,2a12:75bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:75c0::,2a12:75c7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:75c8::,2a12:75ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7600::,2a12:7607:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7608::,2a12:767f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7608::,2a12:763f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7640::,2a12:7647:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:7648::,2a12:767f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7680::,2a12:7687:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7688::,2a12:76ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7688::,2a12:76bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:76c0::,2a12:76c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:76c8::,2a12:76ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7700::,2a12:7707:ffff:ffff:ffff:ffff:ffff:ffff,US -2a12:7708::,2a12:777f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7708::,2a12:773f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7740::,2a12:7747:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:7748::,2a12:777f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7780::,2a12:7787:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:7788::,2a12:77ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7788::,2a12:77bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:77c0::,2a12:77c7:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a12:77c8::,2a12:77ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7800::,2a12:7807:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a12:7808::,2a12:787f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7808::,2a12:783f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7840::,2a12:7847:ffff:ffff:ffff:ffff:ffff:ffff,IQ +2a12:7848::,2a12:787f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7880::,2a12:7887:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7888::,2a12:78ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7888::,2a12:78bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:78c0::,2a12:78c7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:78c8::,2a12:78ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7900::,2a12:7907:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7908::,2a12:797f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7908::,2a12:793f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7940::,2a12:7947:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a12:7948::,2a12:797f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7980::,2a12:7987:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:7988::,2a12:79ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7988::,2a12:79bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:79c0::,2a12:79c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:79c8::,2a12:79ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7a00::,2a12:7a07:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7a08::,2a12:7a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7a08::,2a12:7a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7a40::,2a12:7a47:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:7a48::,2a12:7a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7a80::,2a12:7a87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7a88::,2a12:7aff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7a88::,2a12:7abf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7ac0::,2a12:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a12:7ac8::,2a12:7aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7b00::,2a12:7b07:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7b08::,2a12:7b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7b08::,2a12:7b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7b40::,2a12:7b47:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a12:7b48::,2a12:7b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7b80::,2a12:7b87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7b88::,2a12:7bff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7b88::,2a12:7bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7bc0::,2a12:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:7bc1::,2a12:7bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7c00::,2a12:7c07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:7c08::,2a12:7c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7c08::,2a12:7c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7c40::,2a12:7c47:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a12:7c48::,2a12:7c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7c80::,2a12:7c87:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a12:7c88::,2a12:7cff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7c88::,2a12:7cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7cc0::,2a12:7cc7:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a12:7cc8::,2a12:7cff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7d00::,2a12:7d07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7d08::,2a12:7d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7d08::,2a12:7d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7d40::,2a12:7d40:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:7d41::,2a12:7d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7d80::,2a12:7d87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7d88::,2a12:7dff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7d88::,2a12:7dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7dc0::,2a12:7dc7:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a12:7dc8::,2a12:7dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7e00::,2a12:7e07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7e08::,2a12:7e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7e08::,2a12:7e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7e40::,2a12:7e40:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:7e41::,2a12:7e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7e80::,2a12:7e87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:7e88::,2a12:7eff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7e88::,2a12:7ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7ec0::,2a12:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:7ec8::,2a12:7eff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7f00::,2a12:7f07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:7f08::,2a12:7f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7f08::,2a12:7f3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7f40::,2a12:7f47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:7f48::,2a12:7f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:7f80::,2a12:7f87:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:7f88::,2a12:7fff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7f88::,2a12:7fbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:7fc0::,2a12:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:7fc1::,2a12:7fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8000::,2a12:8007:ffff:ffff:ffff:ffff:ffff:ffff,TR -2a12:8008::,2a12:807f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8008::,2a12:803f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8040::,2a12:8047:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:8048::,2a12:807f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8080::,2a12:8087:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:8088::,2a12:80ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8088::,2a12:80bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:80c0::,2a12:80c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:80c8::,2a12:80ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8100::,2a12:8107:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8108::,2a12:817f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8108::,2a12:813f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8140::,2a12:8143:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:8144::,2a12:817f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8180::,2a12:8187:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8188::,2a12:81ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8188::,2a12:81bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:81c0::,2a12:81c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:81c8::,2a12:81ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8200::,2a12:8207:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:8208::,2a12:827f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8208::,2a12:823f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8240::,2a12:8247:ffff:ffff:ffff:ffff:ffff:ffff,JE +2a12:8248::,2a12:827f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8280::,2a12:8287:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:8288::,2a12:82ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8288::,2a12:82bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:82c0::,2a12:82c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:82c8::,2a12:82ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8300::,2a12:8307:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:8308::,2a12:837f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8308::,2a12:833f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8340::,2a12:8347:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a12:8348::,2a12:837f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8380::,2a12:8387:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8388::,2a12:83ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8388::,2a12:83bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:83c0::,2a12:83c7:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a12:83c8::,2a12:83ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8400::,2a12:8400:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:8401::,2a12:847f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8401::,2a12:843f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8440::,2a12:8447:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a12:8448::,2a12:847f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8480::,2a12:8487:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8488::,2a12:84ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8488::,2a12:84bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:84c0::,2a12:84c0:1:ffff:ffff:ffff:ffff:ffff,NL +2a12:84c0:2::,2a12:84c0:2:ffff:ffff:ffff:ffff:ffff,US +2a12:84c0:3::,2a12:84c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:84c8::,2a12:84ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8500::,2a12:8507:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:8508::,2a12:857f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8508::,2a12:853f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8540::,2a12:8547:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:8548::,2a12:857f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8580::,2a12:8587:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8588::,2a12:85ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8588::,2a12:85bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:85c0::,2a12:85c7:ffff:ffff:ffff:ffff:ffff:ffff,KZ +2a12:85c8::,2a12:85ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8600::,2a12:8607:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8608::,2a12:867f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8608::,2a12:863f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8640::,2a12:8647:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:8648::,2a12:867f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8680::,2a12:8687:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8688::,2a12:86ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8688::,2a12:86bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:86c0::,2a12:86c7:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a12:86c8::,2a12:86ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8700::,2a12:8707:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8708::,2a12:877f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8708::,2a12:873f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8740::,2a12:8747:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:8748::,2a12:877f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8780::,2a12:8787:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8788::,2a12:87ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8788::,2a12:87bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:87c0::,2a12:87c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:87c8::,2a12:87ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8800::,2a12:8807:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8808::,2a12:887f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8808::,2a12:883f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8840::,2a12:8847:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a12:8848::,2a12:887f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8880::,2a12:8887:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8888::,2a12:88ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8888::,2a12:88bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:88c0::,2a12:88c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:88c8::,2a12:88ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8900::,2a12:8907:ffff:ffff:ffff:ffff:ffff:ffff,DK -2a12:8908::,2a12:897f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8908::,2a12:893f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8940::,2a12:8947:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:8948::,2a12:897f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8980::,2a12:8987:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:8988::,2a12:89ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8988::,2a12:89bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:89c0::,2a12:89c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:89c8::,2a12:89ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8a00::,2a12:8a07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8a08::,2a12:8a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8a08::,2a12:8a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8a40::,2a12:8a47:ffff:ffff:ffff:ffff:ffff:ffff,KZ +2a12:8a48::,2a12:8a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8a80::,2a12:8a87:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a12:8a88::,2a12:8aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8b00::,2a12:8b07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8b08::,2a12:8b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8b08::,2a12:8b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8b40::,2a12:8b47:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:8b48::,2a12:8b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8b80::,2a12:8b87:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:8b88::,2a12:8bff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8b88::,2a12:8bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8bc0::,2a12:8bc7:ffff:ffff:ffff:ffff:ffff:ffff,AZ +2a12:8bc8::,2a12:8bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8c00::,2a12:8c07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:8c08::,2a12:8c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8c08::,2a12:8c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8c40::,2a12:8c47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:8c48::,2a12:8c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8c80::,2a12:8c87:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8c88::,2a12:8cff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8c88::,2a12:8cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8cc0::,2a12:8cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:8cc8::,2a12:8cff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8d00::,2a12:8d07:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:8d08::,2a12:8d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8d08::,2a12:8d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8d40::,2a12:8d47:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:8d48::,2a12:8d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8d80::,2a12:8d87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:8d88::,2a12:8dff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8d88::,2a12:8dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8dc0::,2a12:8dc7:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a12:8dc8::,2a12:8dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8e00::,2a12:8e07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:8e08::,2a12:8e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8e08::,2a12:8e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8e40::,2a12:8e47:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a12:8e48::,2a12:8e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8e80::,2a12:8e87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:8e88::,2a12:8eff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8e88::,2a12:8ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8ec0::,2a12:8ec7:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a12:8ec8::,2a12:8eff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8f00::,2a12:8f07:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:8f08::,2a12:8f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8f08::,2a12:8f3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:8f40::,2a12:8f47:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a12:8f48::,2a12:8f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:8f80::,2a12:8f87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a12:8f88::,2a12:8fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9000::,2a12:9007:ffff:ffff:ffff:ffff:ffff:ffff,LV -2a12:9008::,2a12:907f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9008::,2a12:903f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9040::,2a12:9047:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:9048::,2a12:907f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9080::,2a12:9087:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9088::,2a12:90ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9088::,2a12:90bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:90c0::,2a12:90c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:90c8::,2a12:90ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9100::,2a12:9107:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9108::,2a12:917f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9108::,2a12:913f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9140::,2a12:9147:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:9148::,2a12:917f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9180::,2a12:9187:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9188::,2a12:91ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9188::,2a12:91bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:91c0::,2a12:91c7:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a12:91c8::,2a12:91ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9200::,2a12:9207:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9208::,2a12:927f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9208::,2a12:923f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9240::,2a12:9240:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:9241::,2a12:927f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9280::,2a12:9287:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9288::,2a12:92ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9288::,2a12:92bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:92c0::,2a12:92c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:92c8::,2a12:92ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9300::,2a12:9307:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9308::,2a12:937f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9308::,2a12:933f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9340::,2a12:9347:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a12:9348::,2a12:937f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9380::,2a12:9387:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9388::,2a12:93ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9388::,2a12:93bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:93c0::,2a12:93c7:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a12:93c8::,2a12:93ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9400::,2a12:9407:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9408::,2a12:947f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9408::,2a12:943f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9440::,2a12:9447:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:9448::,2a12:947f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9480::,2a12:9487:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:9488::,2a12:94ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9488::,2a12:94bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:94c0::,2a12:94c7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:94c8::,2a12:94ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9500::,2a12:9507:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9508::,2a12:957f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9508::,2a12:953f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9540::,2a12:9547:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:9548::,2a12:957f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9580::,2a12:9587:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a12:9588::,2a12:95ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9588::,2a12:95bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:95c0::,2a12:95c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:95c8::,2a12:95ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9600::,2a12:9607:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:9608::,2a12:967f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9608::,2a12:963f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9640::,2a12:9647:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:9648::,2a12:967f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9680::,2a12:9687:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a12:9688::,2a12:96ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9688::,2a12:96bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:96c0::,2a12:96c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a12:96c8::,2a12:96ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9700::,2a12:9707:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9708::,2a12:977f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9708::,2a12:973f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9740::,2a12:9747:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a12:9748::,2a12:977f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9780::,2a12:9787:ffff:ffff:ffff:ffff:ffff:ffff,LT -2a12:9788::,2a12:97ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9788::,2a12:97bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:97c0::,2a12:97c7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:97c8::,2a12:97ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9800::,2a12:9807:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:9808::,2a12:987f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9808::,2a12:983f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9840::,2a12:9847:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a12:9848::,2a12:987f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9880::,2a12:9887:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9888::,2a12:98ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9888::,2a12:98bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:98c0::,2a12:98c0:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a12:98c1::,2a12:98ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9900::,2a12:9907:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9908::,2a12:997f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9908::,2a12:993f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9940::,2a12:9947:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:9948::,2a12:997f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9980::,2a12:9987:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9988::,2a12:99ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9988::,2a12:99bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:99c0::,2a12:99c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:99c8::,2a12:99ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9a00::,2a12:9a07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9a08::,2a12:9a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9a08::,2a12:9a3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9a40::,2a12:9a47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:9a48::,2a12:9a7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9a80::,2a12:9a87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9a88::,2a12:9aff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9a88::,2a12:9abf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9ac0::,2a12:9ac7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:9ac8::,2a12:9aff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9b00::,2a12:9b07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:9b08::,2a12:9b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9b08::,2a12:9b3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9b40::,2a12:9b40:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:9b41::,2a12:9b7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9b80::,2a12:9b87:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:9b88::,2a12:9bff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9b88::,2a12:9bbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9bc0::,2a12:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:9bc8::,2a12:9bff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9c00::,2a12:9c07:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:9c08::,2a12:9c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9c08::,2a12:9c3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9c40::,2a12:9c47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:9c48::,2a12:9c7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9c80::,2a12:9c87:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a12:9c88::,2a12:9d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9c88::,2a12:9cbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9cc0::,2a12:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a12:9cc8::,2a12:9d3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9d40::,2a12:9d47:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a12:9d48::,2a12:9d7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9d80::,2a12:9d87:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:9d88::,2a12:9dff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9d88::,2a12:9dbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9dc0::,2a12:9dc7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:9dc8::,2a12:9dff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9e00::,2a12:9e07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:9e08::,2a12:9e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9e08::,2a12:9e3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9e40::,2a12:9e47:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a12:9e48::,2a12:9e7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9e80::,2a12:9e87:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a12:9e88::,2a12:9eff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9e88::,2a12:9ebf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9ec0::,2a12:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a12:9ec8::,2a12:9eff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9f00::,2a12:9f07:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a12:9f08::,2a12:9f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9f08::,2a12:9f3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9f40::,2a12:9f47:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:9f48::,2a12:9f7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:9f80::,2a12:9f87:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a12:9f88::,2a12:9fff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9f88::,2a12:9fbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:9fc0::,2a12:9fc7:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:9fc8::,2a12:9fff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a000::,2a12:a007:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:a008::,2a12:a07f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a008::,2a12:a03f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a040::,2a12:a047:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a12:a048::,2a12:a07f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a080::,2a12:a087:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a12:a088::,2a12:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a088::,2a12:a0bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a0c0::,2a12:a0c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:a0c8::,2a12:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a100::,2a12:a107:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:a108::,2a12:a17f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a108::,2a12:a13f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a140::,2a12:a147:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a148::,2a12:a17f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a180::,2a12:a187:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a12:a188::,2a12:a1ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a188::,2a12:a1bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a1c0::,2a12:a1c7:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a1c8::,2a12:a1ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a200::,2a12:a207:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:a208::,2a12:a27f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a208::,2a12:a23f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a240::,2a12:a247:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a248::,2a12:a27f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a280::,2a12:a280:ffff:ffff:ffff:ffff:ffff:ffff,IL -2a12:a281::,2a12:a2ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a281::,2a12:a2bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a2c0::,2a12:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a12:a2c8::,2a12:a2ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a300::,2a12:a307:ffff:ffff:ffff:ffff:ffff:ffff,JP -2a12:a308::,2a12:a37f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a308::,2a12:a33f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a340::,2a12:a347:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:a348::,2a12:a37f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a380::,2a12:a387:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:a388::,2a12:a3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a388::,2a12:a3bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a3c0::,2a12:a3c7:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a12:a3c8::,2a12:a3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a400::,2a12:a407:ffff:ffff:ffff:ffff:ffff:ffff,IE -2a12:a408::,2a12:a47f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a408::,2a12:a43f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a440::,2a12:a447:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:a448::,2a12:a47f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a480::,2a12:a487:ffff:ffff:ffff:ffff:ffff:ffff,LV -2a12:a488::,2a12:a4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a488::,2a12:a4bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a4c0::,2a12:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a12:a4c8::,2a12:a4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a500::,2a12:a507:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:a508::,2a12:a57f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a508::,2a12:a53f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a540::,2a12:a547:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a548::,2a12:a57f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a580::,2a12:a587:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a12:a588::,2a12:a5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a588::,2a12:a5bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a5c0::,2a12:a5c7:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a5c8::,2a12:a5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a600::,2a12:a607:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:a608::,2a12:a67f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a608::,2a12:a63f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a640::,2a12:a647:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a648::,2a12:a67f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a680::,2a12:a687:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:a688::,2a12:a6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a688::,2a12:a6bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a6c0::,2a12:a6c7:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a6c8::,2a12:a6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a700::,2a12:a707:ffff:ffff:ffff:ffff:ffff:ffff,BE -2a12:a708::,2a12:a77f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a708::,2a12:a73f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a740::,2a12:a747:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:a748::,2a12:a77f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a780::,2a12:a780:ffff:ffff:ffff:ffff:ffff:ffff,DK -2a12:a781::,2a12:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a781::,2a12:a7bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a7c0::,2a12:a7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:a7c8::,2a12:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a800::,2a12:a807:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:a808::,2a12:a87f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a808::,2a12:a83f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a840::,2a12:a847:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:a848::,2a12:a87f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a880::,2a12:a887:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:a888::,2a12:a8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a888::,2a12:a8bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a8c0::,2a12:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:a8c8::,2a12:a8ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a900::,2a12:a907:ffff:ffff:ffff:ffff:ffff:ffff,US -2a12:a908::,2a12:a97f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a908::,2a12:a93f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a940::,2a12:a947:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:a948::,2a12:a97f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:a980::,2a12:a987:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:a988::,2a12:a9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a988::,2a12:a9bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:a9c0::,2a12:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a12:a9c8::,2a12:a9ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:aa00::,2a12:aa07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:aa08::,2a12:aa7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:aa08::,2a12:aa3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:aa40::,2a12:aa40:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:aa41::,2a12:aa7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:aa80::,2a12:aa87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:aa88::,2a12:aaff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:aa88::,2a12:aabf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:aac0::,2a12:aac7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:aac8::,2a12:aaff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ab00::,2a12:ab07:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:ab08::,2a12:ab7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ab08::,2a12:ab3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ab40::,2a12:ab47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a12:ab48::,2a12:ab7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ab80::,2a12:ab87:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:ab88::,2a12:abff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ab88::,2a12:abbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:abc0::,2a12:abc7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a12:abc8::,2a12:abff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ac00::,2a12:ac07:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a12:ac08::,2a12:ac7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ac80::,2a12:ac87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:ac88::,2a12:acff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ac88::,2a12:acbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:acc0::,2a12:acc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:acc8::,2a12:acff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ad00::,2a12:ad07:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:ad08::,2a12:ad7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ad08::,2a12:ad3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ad40::,2a12:ad47:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a12:ad48::,2a12:ad7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ad80::,2a12:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:ad88::,2a12:adff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ad88::,2a12:adbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:adc0::,2a12:adc7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a12:adc8::,2a12:adff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ae00::,2a12:ae07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:ae08::,2a12:ae7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ae08::,2a12:ae3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ae40::,2a12:ae47:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a12:ae48::,2a12:ae7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ae80::,2a12:ae87:ffff:ffff:ffff:ffff:ffff:ffff,SK -2a12:ae88::,2a12:aeff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:ae88::,2a12:aebf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:aec0::,2a12:aec7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a12:aec8::,2a12:aeff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:af00::,2a12:af07:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:af08::,2a12:af7f:ffff:ffff:ffff:ffff:ffff:ffff,EU -2a12:af80::,2a12:af87:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:af88::,2a12:afff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:af08::,2a12:af3f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:af40::,2a12:af47:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a12:af48::,2a12:af7f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:af80::,2a12:af80:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a12:af81::,2a12:af87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:af88::,2a12:afbf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:afc0::,2a12:afc7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:afc8::,2a12:afff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b000::,2a12:b007:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:b008::,2a12:b07f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b008::,2a12:b03f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b040::,2a12:b047:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a12:b048::,2a12:b07f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b080::,2a12:b087:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a12:b088::,2a12:b0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b088::,2a12:b0bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b0c0::,2a12:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a12:b0c8::,2a12:b0ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b100::,2a12:b107:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:b108::,2a12:b17f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b108::,2a12:b13f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b140::,2a12:b147:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:b148::,2a12:b17f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b180::,2a12:b187:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a12:b188::,2a12:b1ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b188::,2a12:b1bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b1c0::,2a12:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a12:b1c8::,2a12:b1ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b200::,2a12:b207:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:b208::,2a12:b27f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b208::,2a12:b23f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b240::,2a12:b240:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a12:b241::,2a12:b27f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b280::,2a12:b287:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a12:b288::,2a12:b2ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b288::,2a12:b2bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b2c0::,2a12:b2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:b2c8::,2a12:b2ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b300::,2a12:b307:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a12:b308::,2a12:b37f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b308::,2a12:b33f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b340::,2a12:b347:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:b348::,2a12:b37f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b380::,2a12:b387:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a12:b388::,2a12:b3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b388::,2a12:b3bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b3c0::,2a12:b3c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a12:b3c8::,2a12:b3ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b400::,2a12:b407:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:b408::,2a12:b47f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b408::,2a12:b43f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b440::,2a12:b447:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a12:b448::,2a12:b47f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b480::,2a12:b487:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a12:b488::,2a12:b4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b488::,2a12:b4bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b4c0::,2a12:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a12:b4c8::,2a12:b4ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b500::,2a12:b507:ffff:ffff:ffff:ffff:ffff:ffff,GR -2a12:b508::,2a12:b57f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b508::,2a12:b53f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b540::,2a12:b547:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a12:b548::,2a12:b57f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b580::,2a12:b587:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a12:b588::,2a12:b5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b588::,2a12:b5bf:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b5c0::,2a12:b5c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a12:b5c8::,2a12:b5ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b600::,2a12:b607:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a12:b608::,2a12:b67f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b608::,2a12:b63f:ffff:ffff:ffff:ffff:ffff:ffff,EU +2a12:b640::,2a12:b647:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a12:b648::,2a12:b67f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b680::,2a12:b687:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a12:b688::,2a12:b6ff:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:b700::,2a12:b707:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -100686,6 +101667,7 @@ 2a12:ff08::,2a12:ff7f:ffff:ffff:ffff:ffff:ffff:ffff,EU 2a12:ff80::,2a12:ff87:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a12:ff88::,2a1f:ffff:ffff:ffff:ffff:ffff:ffff:ffff,EU +2b0d:6f84::,2b0d:6f87:ffff:ffff:ffff:ffff:ffff:ffff,?? 2b10:3c84::,2b10:3c87:ffff:ffff:ffff:ffff:ffff:ffff,?? 2c00::,2c0d:ffff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG @@ -100703,15 +101685,21 @@ 2c0f:80::,2c0f:80:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:81::,2c0f:1ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:200::,2c0f:200:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:201::,2c0f:2ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:201::,2c0f:27f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:280::,2c0f:280:ffff:ffff:ffff:ffff:ffff:ffff,TZ +2c0f:281::,2c0f:2ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:300::,2c0f:300:ffff:ffff:ffff:ffff:ffff:ffff,AO 2c0f:301::,2c0f:3ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:400::,2c0f:400:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:401::,2c0f:4ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:401::,2c0f:47f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:480::,2c0f:480:ffff:ffff:ffff:ffff:ffff:ffff,NG +2c0f:481::,2c0f:4ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:500::,2c0f:500:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:501::,2c0f:5ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:600::,2c0f:600:ffff:ffff:ffff:ffff:ffff:ffff,TZ -2c0f:601::,2c0f:6ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:601::,2c0f:67f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:680::,2c0f:680:ffff:ffff:ffff:ffff:ffff:ffff,SD +2c0f:681::,2c0f:6ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:700::,2c0f:700:ffff:ffff:ffff:ffff:ffff:ffff,TZ 2c0f:701::,2c0f:7ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:800::,2c0f:800:ffff:ffff:ffff:ffff:ffff:ffff,ZA @@ -100821,19 +101809,27 @@ 2c0f:3f00::,2c0f:3f00:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:3f01::,2c0f:3fff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4000::,2c0f:4000:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:4001::,2c0f:40ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4001::,2c0f:407f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4080::,2c0f:4080:ffff:ffff:ffff:ffff:ffff:ffff,TG +2c0f:4081::,2c0f:40ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4100::,2c0f:4100:ffff:ffff:ffff:ffff:ffff:ffff,MA 2c0f:4101::,2c0f:41ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4200::,2c0f:4200:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:4201::,2c0f:42ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4201::,2c0f:427f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4280::,2c0f:4280:ffff:ffff:ffff:ffff:ffff:ffff,TN +2c0f:4281::,2c0f:42ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4300::,2c0f:4300:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:4301::,2c0f:43ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4400::,2c0f:4400:ffff:ffff:ffff:ffff:ffff:ffff,CD -2c0f:4401::,2c0f:44ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4401::,2c0f:447f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4480::,2c0f:4480:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:4481::,2c0f:44ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4500::,2c0f:4500:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:4501::,2c0f:45ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4600::,2c0f:4600:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:4601::,2c0f:46ff:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4601::,2c0f:467f:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:4680::,2c0f:4680:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:4681::,2c0f:46ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4700::,2c0f:4700:ffff:ffff:ffff:ffff:ffff:ffff,SO 2c0f:4701::,2c0f:47ff:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:4800::,2c0f:4800:ffff:ffff:ffff:ffff:ffff:ffff,NG @@ -101536,9 +102532,7 @@ 2c0f:f180:3::,2c0f:f180:ffff:ffff:ffff:ffff:ffff:ffff,GN 2c0f:f181::,2c0f:f187:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f188::,2c0f:f188:ffff:ffff:ffff:ffff:ffff:ffff,BJ -2c0f:f189::,2c0f:f18f:ffff:ffff:ffff:ffff:ffff:ffff,MU -2c0f:f190::,2c0f:f190:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:f191::,2c0f:f197:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:f189::,2c0f:f197:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f198::,2c0f:f198:ffff:ffff:ffff:ffff:ffff:ffff,BI 2c0f:f199::,2c0f:f19f:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f1a0::,2c0f:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,ZA diff --git a/src/config/torrc.minimal.in-staging b/src/config/torrc.minimal.in-staging index 7f43cd324e..667ab294b4 100644 --- a/src/config/torrc.minimal.in-staging +++ b/src/config/torrc.minimal.in-staging @@ -224,4 +224,4 @@ ## mechanisms like https://bridges.torproject.org/. If you want to run ## a private bridge, for example because you'll give out your bridge ## address manually to your friends, uncomment this line: -#PublishServerDescriptor 0 +#BridgeDistribution none diff --git a/src/config/torrc.sample.in b/src/config/torrc.sample.in index 5d593871dd..edc30d043c 100644 --- a/src/config/torrc.sample.in +++ b/src/config/torrc.sample.in @@ -239,7 +239,7 @@ ## mechanisms like https://bridges.torproject.org/. If you want to run ## a private bridge, for example because you'll give out your bridge ## address manually to your friends, uncomment this line: -#PublishServerDescriptor 0 +#BridgeDistribution none ## Configuration options can be imported from files or folders using the %include ## option with the value being a path. This path can have wildcards. Wildcards are diff --git a/src/core/crypto/include.am b/src/core/crypto/include.am index 28b7e22905..2d53b3cb0b 100644 --- a/src/core/crypto/include.am +++ b/src/core/crypto/include.am @@ -5,6 +5,7 @@ LIBTOR_APP_A_SOURCES += \ src/core/crypto/onion_crypto.c \ src/core/crypto/onion_fast.c \ src/core/crypto/onion_ntor.c \ + src/core/crypto/onion_ntor_v3.c \ src/core/crypto/onion_tap.c \ src/core/crypto/relay_crypto.c @@ -14,5 +15,6 @@ noinst_HEADERS += \ src/core/crypto/onion_crypto.h \ src/core/crypto/onion_fast.h \ src/core/crypto/onion_ntor.h \ + src/core/crypto/onion_ntor_v3.h \ src/core/crypto/onion_tap.h \ src/core/crypto/relay_crypto.h diff --git a/src/core/crypto/onion_crypto.c b/src/core/crypto/onion_crypto.c index f85ee2c82b..81e4e1b078 100644 --- a/src/core/crypto/onion_crypto.c +++ b/src/core/crypto/onion_crypto.c @@ -35,14 +35,28 @@ #include "core/crypto/onion_crypto.h" #include "core/crypto/onion_fast.h" #include "core/crypto/onion_ntor.h" +#include "core/crypto/onion_ntor_v3.h" #include "core/crypto/onion_tap.h" #include "feature/relay/router.h" #include "lib/crypt_ops/crypto_dh.h" #include "lib/crypt_ops/crypto_util.h" +#include "feature/relay/routerkeys.h" +#include "core/or/congestion_control_common.h" + +#include "core/or/circuitbuild.h" #include "core/or/crypt_path_st.h" #include "core/or/extend_info_st.h" +#include "trunnel/congestion_control.h" +#include "trunnel/extension.h" + +static const uint8_t NTOR3_CIRC_VERIFICATION[] = "circuit extend"; +static const size_t NTOR3_CIRC_VERIFICATION_LEN = 14; + +#define NTOR3_VERIFICATION_ARGS \ + NTOR3_CIRC_VERIFICATION, NTOR3_CIRC_VERIFICATION_LEN + /** Return a new server_onion_keys_t object with all of the keys * and other info we might need to do onion handshakes. (We make a copy of * our keys for each cpuworker to avoid race conditions with the main thread, @@ -52,6 +66,7 @@ server_onion_keys_new(void) { server_onion_keys_t *keys = tor_malloc_zero(sizeof(server_onion_keys_t)); memcpy(keys->my_identity, router_get_my_id_digest(), DIGEST_LEN); + ed25519_pubkey_copy(&keys->my_ed_identity, get_master_identity_key()); dup_onion_keys(&keys->onion_key, &keys->last_onion_key); keys->curve25519_key_map = construct_ntor_key_map(); keys->junk_keypair = tor_malloc_zero(sizeof(curve25519_keypair_t)); @@ -91,6 +106,9 @@ onion_handshake_state_release(onion_handshake_state_t *state) ntor_handshake_state_free(state->u.ntor); state->u.ntor = NULL; break; + case ONION_HANDSHAKE_TYPE_NTOR_V3: + ntor3_handshake_state_free(state->u.ntor3); + break; default: /* LCOV_EXCL_START * This state should not even exist. */ @@ -103,19 +121,23 @@ onion_handshake_state_release(onion_handshake_state_t *state) /** Perform the first step of a circuit-creation handshake of type <b>type</b> * (one of ONION_HANDSHAKE_TYPE_*): generate the initial "onion skin" in - * <b>onion_skin_out</b>, and store any state information in <b>state_out</b>. + * <b>onion_skin_out</b> with length of up to <b>onion_skin_out_maxlen</b>, + * and store any state information in <b>state_out</b>. * Return -1 on failure, and the length of the onionskin on acceptance. */ int onion_skin_create(int type, const extend_info_t *node, onion_handshake_state_t *state_out, - uint8_t *onion_skin_out) + uint8_t *onion_skin_out, + size_t onion_skin_out_maxlen) { int r = -1; switch (type) { case ONION_HANDSHAKE_TYPE_TAP: + if (onion_skin_out_maxlen < TAP_ONIONSKIN_CHALLENGE_LEN) + return -1; if (!node->onion_key) return -1; @@ -133,7 +155,9 @@ onion_skin_create(int type, r = CREATE_FAST_LEN; break; case ONION_HANDSHAKE_TYPE_NTOR: - if (!extend_info_supports_ntor(node)) + if (onion_skin_out_maxlen < NTOR_ONIONSKIN_LEN) + return -1; + if (!extend_info_supports_ntor(node)) return -1; if (onion_skin_ntor_create((const uint8_t*)node->identity_digest, &node->curve25519_onion_key, @@ -143,6 +167,37 @@ onion_skin_create(int type, r = NTOR_ONIONSKIN_LEN; break; + case ONION_HANDSHAKE_TYPE_NTOR_V3: + if (!extend_info_supports_ntor_v3(node)) + return -1; + if (ed25519_public_key_is_zero(&node->ed_identity)) + return -1; + size_t msg_len = 0; + uint8_t *msg = NULL; + if (client_circ_negotiation_message(node, &msg, &msg_len) < 0) + return -1; + uint8_t *onion_skin = NULL; + size_t onion_skin_len = 0; + int status = onion_skin_ntor3_create( + &node->ed_identity, + &node->curve25519_onion_key, + NTOR3_VERIFICATION_ARGS, + msg, msg_len, /* client message */ + &state_out->u.ntor3, + &onion_skin, &onion_skin_len); + tor_free(msg); + if (status < 0) { + return -1; + } + if (onion_skin_len > onion_skin_out_maxlen) { + tor_free(onion_skin); + return -1; + } + memcpy(onion_skin_out, onion_skin, onion_skin_len); + tor_free(onion_skin); + r = (int) onion_skin_len; + break; + default: /* LCOV_EXCL_START * We should never try to create an impossible handshake type. */ @@ -158,6 +213,50 @@ onion_skin_create(int type, return r; } +/** + * Takes a param request message from the client, compares it to our + * consensus parameters, and creates a reply message and output + * parameters. + * + * This function runs in a worker thread, so it can only inspect + * arguments and local variables. + * + * Returns 0 if successful. + * Returns -1 on parsing, parameter failure, or reply creation failure. + */ +static int +negotiate_v3_ntor_server_circ_params(const uint8_t *param_request_msg, + size_t param_request_len, + const circuit_params_t *our_ns_params, + circuit_params_t *params_out, + uint8_t **resp_msg_out, + size_t *resp_msg_len_out) +{ + int ret; + + /* Parse request. */ + ret = congestion_control_parse_ext_request(param_request_msg, + param_request_len); + if (ret < 0) { + goto err; + } + params_out->cc_enabled = ret && our_ns_params->cc_enabled; + + /* Build the response. */ + ret = congestion_control_build_ext_response(our_ns_params, params_out, + resp_msg_out, resp_msg_len_out); + if (ret < 0) { + goto err; + } + params_out->sendme_inc_cells = our_ns_params->sendme_inc_cells; + + /* Success. */ + ret = 0; + + err: + return ret; +} + /* This is the maximum value for keys_out_len passed to * onion_skin_server_handshake, plus 16. We can make it bigger if needed: * It just defines how many bytes to stack-allocate. */ @@ -174,14 +273,20 @@ int onion_skin_server_handshake(int type, const uint8_t *onion_skin, size_t onionskin_len, const server_onion_keys_t *keys, + const circuit_params_t *our_ns_params, uint8_t *reply_out, + size_t reply_out_maxlen, uint8_t *keys_out, size_t keys_out_len, - uint8_t *rend_nonce_out) + uint8_t *rend_nonce_out, + circuit_params_t *params_out) { int r = -1; + memset(params_out, 0, sizeof(*params_out)); switch (type) { case ONION_HANDSHAKE_TYPE_TAP: + if (reply_out_maxlen < TAP_ONIONSKIN_REPLY_LEN) + return -1; if (onionskin_len != TAP_ONIONSKIN_CHALLENGE_LEN) return -1; if (onion_skin_TAP_server_handshake((const char*)onion_skin, @@ -193,6 +298,8 @@ onion_skin_server_handshake(int type, memcpy(rend_nonce_out, reply_out+DH1024_KEY_LEN, DIGEST_LEN); break; case ONION_HANDSHAKE_TYPE_FAST: + if (reply_out_maxlen < CREATED_FAST_LEN) + return -1; if (onionskin_len != CREATE_FAST_LEN) return -1; if (fast_server_handshake(onion_skin, reply_out, keys_out, keys_out_len)<0) @@ -201,6 +308,8 @@ onion_skin_server_handshake(int type, memcpy(rend_nonce_out, reply_out+DIGEST_LEN, DIGEST_LEN); break; case ONION_HANDSHAKE_TYPE_NTOR: + if (reply_out_maxlen < NTOR_REPLY_LEN) + return -1; if (onionskin_len < NTOR_ONIONSKIN_LEN) return -1; { @@ -223,6 +332,71 @@ onion_skin_server_handshake(int type, r = NTOR_REPLY_LEN; } break; + case ONION_HANDSHAKE_TYPE_NTOR_V3: { + size_t keys_tmp_len = keys_out_len + DIGEST_LEN; + tor_assert(keys_tmp_len <= MAX_KEYS_TMP_LEN); + uint8_t keys_tmp[MAX_KEYS_TMP_LEN]; + uint8_t *client_msg = NULL; + size_t client_msg_len = 0; + uint8_t *reply_msg = NULL; + size_t reply_msg_len = 0; + + ntor3_server_handshake_state_t *state = NULL; + + if (onion_skin_ntor3_server_handshake_part1( + keys->curve25519_key_map, + keys->junk_keypair, + &keys->my_ed_identity, + onion_skin, onionskin_len, + NTOR3_VERIFICATION_ARGS, + &client_msg, &client_msg_len, + &state) < 0) { + return -1; + } + + if (negotiate_v3_ntor_server_circ_params(client_msg, + client_msg_len, + our_ns_params, + params_out, + &reply_msg, + &reply_msg_len) < 0) { + ntor3_server_handshake_state_free(state); + tor_free(client_msg); + return -1; + } + tor_free(client_msg); + + uint8_t *server_handshake = NULL; + size_t server_handshake_len = 0; + if (onion_skin_ntor3_server_handshake_part2( + state, + NTOR3_VERIFICATION_ARGS, + reply_msg, reply_msg_len, + &server_handshake, &server_handshake_len, + keys_tmp, keys_tmp_len) < 0) { + tor_free(reply_msg); + ntor3_server_handshake_state_free(state); + return -1; + } + tor_free(reply_msg); + + if (server_handshake_len > reply_out_maxlen) { + tor_free(server_handshake); + ntor3_server_handshake_state_free(state); + return -1; + } + + memcpy(keys_out, keys_tmp, keys_out_len); + memcpy(rend_nonce_out, keys_tmp+keys_out_len, DIGEST_LEN); + memcpy(reply_out, server_handshake, server_handshake_len); + memwipe(keys_tmp, 0, keys_tmp_len); + memwipe(server_handshake, 0, server_handshake_len); + tor_free(server_handshake); + ntor3_server_handshake_state_free(state); + + r = (int) server_handshake_len; + } + break; default: /* LCOV_EXCL_START * We should have rejected this far before this point */ @@ -235,6 +409,44 @@ onion_skin_server_handshake(int type, return r; } +/** + * Takes a param response message from the exit, compares it to our + * consensus parameters for sanity, and creates output parameters + * if sane. + * + * Returns -1 on parsing or insane params, 0 if success. + */ +static int +negotiate_v3_ntor_client_circ_params(const uint8_t *param_response_msg, + size_t param_response_len, + circuit_params_t *params_out) +{ + int ret = congestion_control_parse_ext_response(param_response_msg, + param_response_len, + params_out); + if (ret < 0) { + return -1; + } + + /* If congestion control came back enabled, but we didn't ask for it + * because the consensus said no, close the circuit. + * + * This is a fatal error condition for the circuit, because it either + * means that congestion control was disabled by the consensus + * during the handshake, or the exit decided to send us an unsolicited + * congestion control response. + * + * In either case, we cannot proceed on this circuit, and must try a + * new one. + */ + if (ret && !congestion_control_enabled()) { + return -1; + } + params_out->cc_enabled = ret; + + return 0; +} + /** Perform the final (client-side) step of a circuit-creation handshake of * type <b>type</b>, using our state in <b>handshake_state</b> and the * server's response in <b>reply</b>. On success, generate <b>keys_out_len</b> @@ -249,11 +461,14 @@ onion_skin_client_handshake(int type, const uint8_t *reply, size_t reply_len, uint8_t *keys_out, size_t keys_out_len, uint8_t *rend_authenticator_out, + circuit_params_t *params_out, const char **msg_out) { if (handshake_state->tag != type) return -1; + memset(params_out, 0, sizeof(*params_out)); + switch (type) { case ONION_HANDSHAKE_TYPE_TAP: if (reply_len != TAP_ONIONSKIN_REPLY_LEN) { @@ -303,6 +518,39 @@ onion_skin_client_handshake(int type, tor_free(keys_tmp); } return 0; + case ONION_HANDSHAKE_TYPE_NTOR_V3: { + size_t keys_tmp_len = keys_out_len + DIGEST_LEN; + uint8_t *keys_tmp = tor_malloc(keys_tmp_len); + uint8_t *server_msg = NULL; + size_t server_msg_len = 0; + int r = onion_ntor3_client_handshake( + handshake_state->u.ntor3, + reply, reply_len, + NTOR3_VERIFICATION_ARGS, + keys_tmp, keys_tmp_len, + &server_msg, &server_msg_len); + if (r < 0) { + tor_free(keys_tmp); + tor_free(server_msg); + return -1; + } + + if (negotiate_v3_ntor_client_circ_params(server_msg, + server_msg_len, + params_out) < 0) { + tor_free(keys_tmp); + tor_free(server_msg); + return -1; + } + tor_free(server_msg); + + memcpy(keys_out, keys_tmp, keys_out_len); + memcpy(rend_authenticator_out, keys_tmp + keys_out_len, DIGEST_LEN); + memwipe(keys_tmp, 0, keys_tmp_len); + tor_free(keys_tmp); + + return 0; + } default: log_warn(LD_BUG, "called with unknown handshake state type %d", type); tor_fragile_assert(); diff --git a/src/core/crypto/onion_crypto.h b/src/core/crypto/onion_crypto.h index 68cd465cf7..cb0188ff54 100644 --- a/src/core/crypto/onion_crypto.h +++ b/src/core/crypto/onion_crypto.h @@ -12,8 +12,11 @@ #ifndef TOR_ONION_CRYPTO_H #define TOR_ONION_CRYPTO_H +#include "lib/crypt_ops/crypto_ed25519.h" + typedef struct server_onion_keys_t { uint8_t my_identity[DIGEST_LEN]; + ed25519_public_key_t my_ed_identity; crypto_pk_t *onion_key; crypto_pk_t *last_onion_key; struct di_digest256_map_t *curve25519_key_map; @@ -22,21 +25,37 @@ typedef struct server_onion_keys_t { void onion_handshake_state_release(onion_handshake_state_t *state); +/** + * Parameters negotiated as part of a circuit handshake. + */ +typedef struct circuit_params_t { + /** Is true if congestion control is enabled in consensus or param, + * as per congestion_control_enabled() result. */ + bool cc_enabled; + /** The number of cells in a sendme increment. Only used if cc_enabled=1. */ + uint8_t sendme_inc_cells; +} circuit_params_t; + int onion_skin_create(int type, const extend_info_t *node, onion_handshake_state_t *state_out, - uint8_t *onion_skin_out); + uint8_t *onion_skin_out, + size_t onion_skin_out_maxlen); int onion_skin_server_handshake(int type, const uint8_t *onion_skin, size_t onionskin_len, const server_onion_keys_t *keys, + const circuit_params_t *ns_params, uint8_t *reply_out, + size_t reply_out_maxlen, uint8_t *keys_out, size_t key_out_len, - uint8_t *rend_nonce_out); + uint8_t *rend_nonce_out, + circuit_params_t *negotiated_params_out); int onion_skin_client_handshake(int type, const onion_handshake_state_t *handshake_state, const uint8_t *reply, size_t reply_len, uint8_t *keys_out, size_t key_out_len, uint8_t *rend_authenticator_out, + circuit_params_t *negotiated_params_out, const char **msg_out); server_onion_keys_t *server_onion_keys_new(void); diff --git a/src/core/crypto/onion_ntor_v3.c b/src/core/crypto/onion_ntor_v3.c new file mode 100644 index 0000000000..491c69cf8d --- /dev/null +++ b/src/core/crypto/onion_ntor_v3.c @@ -0,0 +1,760 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * @file onion_ntor_v3.c + * @brief Implements the version 3 ntor handshake as first specified in + * proposal 332. + * + * The v3 ntor handshake differs from the earlier versions (ntor and hs-ntor) + * primarily in that it allows the client to send an authenticated encrypted + * message as part of its onion skin, and allows the relay to send and + * encrypted authenticated reply as part of its response. + * + * It also takes a "verification string" -- the handshake cannot succeed + * unless both parties use the same value for their verification stream. + **/ + +#define ONION_NTOR_V3_PRIVATE + +#include "orconfig.h" +#include "core/crypto/onion_ntor_v3.h" + +#include "lib/arch/bytes.h" +#include "lib/crypt_ops/crypto_digest.h" +#include "lib/crypt_ops/crypto_rand.h" +#include "lib/crypt_ops/crypto_util.h" +#include "lib/ctime/di_ops.h" +#include "lib/log/util_bug.h" + +#include <string.h> + +/* Parameters used to keep the outputs of this handshake from colliding with + * others. These are defined in the specification. */ +#define PROTOID "ntor3-curve25519-sha3_256-1" +#define TWEAK(A) (PROTOID ":" A) + +#define T_MSGKDF TWEAK("kdf_phase1") +#define T_MSGMAC TWEAK("msg_mac") +#define T_KEY_SEED TWEAK("key_seed") +#define T_VERIFY TWEAK("verify") +#define T_FINAL TWEAK("kdf_final") +#define T_AUTH TWEAK("auth_final") + +/** + * Add @a len bytes of @a data as input to the provided @a xof. + * + * (This is provided just for abbreviation). + **/ +#define xof_add(xof, data, len) crypto_xof_add_bytes((xof), (data), (len)) +/** + * Add @a len bytes of @a data as input to the provided @a xof, + * prefixed with an encoding of the length. + * + * This is equivalent to ENCAP(data) in the spec. + **/ +static void +xof_add_encap(crypto_xof_t *xof, const uint8_t *data, size_t len) +{ + uint64_t len64 = tor_htonll(len); + xof_add(xof, (uint8_t *)(&len64), 8); + xof_add(xof, data, len); +} +/** + * Add an encapsulated tweak to the provided xof. + **/ +#define xof_add_tweak(d, s) xof_add_encap((d), (const uint8_t *)(s), strlen(s)) + +/** + * Add @a len bytes of @a data to the provided @a digest. + * + * This is provided as an abbreviation, and to get the types right. + **/ +static void +d_add(crypto_digest_t *digest, const uint8_t *data, size_t len) +{ + crypto_digest_add_bytes(digest, (const char *)data, len); +} +/** + * Add @a len bytes of @a data to the provided @a digest, prefixed + * with the encoded length. + * + * This is equivalent to ENCAP(data) from the spec. + **/ +static void +d_add_encap(crypto_digest_t *digest, const uint8_t *data, size_t len) +{ + uint64_t len64 = tor_htonll(len); + d_add(digest, (const uint8_t *)(&len64), 8); + d_add(digest, data, len); +} +/** + * Add an encapsulated tweak to the provided digest. + **/ +#define d_add_tweak(d, s) d_add_encap((d), (const uint8_t *)(s), strlen(s)) + +/** + * Helper: copy @a len bytes of @a data onto *@a ptr, and advance @a ptr + * forward by @a len bytes. + * + * Asserts that @a ptr will not be advanced beyond @a endptr. + **/ +static void +push(uint8_t **ptr, const uint8_t *endptr, const uint8_t *data, size_t len) +{ + size_t remaining = endptr - *ptr; + tor_assert(len <= remaining); + memcpy(*ptr, data, len); + *ptr += len; +} + +/** + * Helper: Drop storage held by @a state, after wiping it. + **/ +void +ntor3_handshake_state_free_(ntor3_handshake_state_t *state) +{ + if (!state) + return; + + memwipe(state, 0, sizeof(*state)); + tor_free(state); +} + +/** + * Perform a client-side v3 ntor handshake with a given relay. + * + * As inputs this function takes the relay's Ed25519 identity (@a relay_id), + * the relay's current ntor onion key (@a relay_key), a verification string + * (@a verification_len bytes at @a verification), and a message to send + * as part of the handshake (@a message_len bytes at @a message). + * + * The message will be encrypted and authenticated to the relay, but will not + * receive the same forward secrecy as the rest of the handshake. We should + * not put any super-confidential data in it. + * + * The handshake will only succeed if the relay uses the same verification + * string as we are using. + * + * As outputs, this function returns 0 on success and -1 on failure. On + * success, it sets @a onion_skin_out and @a onion_skin_len_out to a newly + * allocated handshake message that the client can send as part of its CREATE2 + * or EXTEND2 cell. It also sets it sets @a handshake_state_out to a newly + * allocated handshake state object; the client needs to use this object to + * process the relay's eventual reply. + **/ +int +onion_skin_ntor3_create(const ed25519_public_key_t *relay_id, + const curve25519_public_key_t *relay_key, + const uint8_t *verification, + const size_t verification_len, + const uint8_t *message, + const size_t message_len, + ntor3_handshake_state_t **handshake_state_out, + uint8_t **onion_skin_out, + size_t *onion_skin_len_out) +{ + curve25519_keypair_t client_keypair; + if (curve25519_keypair_generate(&client_keypair, 0) < 0) { + return -1; + } + int r = onion_skin_ntor3_create_nokeygen( + &client_keypair, + relay_id, + relay_key, + verification, + verification_len, + message, + message_len, + handshake_state_out, + onion_skin_out, + onion_skin_len_out); + memwipe(&client_keypair, 0, sizeof(client_keypair)); + return r; +} + +/** + * Like onion_skin_ntor3_create, but do not generate a new ephemeral keypair. + * Instead, take the ephemeral keypair (x,X) from @a client_keypair. + * + * (Having a separate function for this lets us test the code for correct + * behavior.) + **/ +STATIC int +onion_skin_ntor3_create_nokeygen( + const curve25519_keypair_t *client_keypair, + const ed25519_public_key_t *relay_id, + const curve25519_public_key_t *relay_key, + const uint8_t *verification, + const size_t verification_len, + const uint8_t *message, + const size_t message_len, + ntor3_handshake_state_t **handshake_state_out, + uint8_t **onion_skin_out, + size_t *onion_skin_len_out) +{ + *handshake_state_out = NULL; + *onion_skin_out = NULL; + *onion_skin_len_out = 0; + + // Set up the handshake state object. + *handshake_state_out = tor_malloc_zero(sizeof(ntor3_handshake_state_t)); + memcpy(&(*handshake_state_out)->client_keypair, client_keypair, + sizeof(*client_keypair)); + memcpy(&(*handshake_state_out)->relay_id, relay_id, sizeof(*relay_id)); + memcpy(&(*handshake_state_out)->relay_key, relay_key, sizeof(*relay_key)); + + // Perform the first DH handshake. + curve25519_handshake((*handshake_state_out)->bx, + &client_keypair->seckey, relay_key); + if (safe_mem_is_zero((*handshake_state_out)->bx, CURVE25519_OUTPUT_LEN)) { + // Okay to return early here, since our behavior here doesn't + // cause a visible timing sidechannel. + return -1; + } + + // Compute phase1_keys. + uint8_t enc_key[CIPHER256_KEY_LEN]; + uint8_t mac_key[DIGEST256_LEN]; + { + crypto_xof_t *xof = crypto_xof_new(); + // secret_input_phase1 = Bx | ID | X | B | PROTOID | ENCAP(VER) + xof_add_tweak(xof, T_MSGKDF); + xof_add(xof, (*handshake_state_out)->bx, CURVE25519_OUTPUT_LEN); + xof_add(xof, relay_id->pubkey, ED25519_PUBKEY_LEN); + xof_add(xof, client_keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN); + xof_add(xof, relay_key->public_key, CURVE25519_PUBKEY_LEN); + xof_add(xof, (const uint8_t *)PROTOID, strlen(PROTOID)); + xof_add_encap(xof, verification, verification_len); + crypto_xof_squeeze_bytes(xof, enc_key, sizeof(enc_key)); + crypto_xof_squeeze_bytes(xof, mac_key, sizeof(mac_key)); + crypto_xof_free(xof); + } + + // Compute encrypted message. + uint8_t *encrypted_message = tor_memdup(message, message_len); + { + crypto_cipher_t *c = + crypto_cipher_new_with_bits((const char *)enc_key, 256); + crypto_cipher_crypt_inplace(c, (char *)encrypted_message, message_len); + crypto_cipher_free(c); + } + + // Compute the MAC value. + { + crypto_digest_t *m = crypto_digest256_new(DIGEST_SHA3_256); + d_add_tweak(m, T_MSGMAC); + d_add_encap(m, mac_key, sizeof(mac_key)); + d_add(m, relay_id->pubkey, ED25519_PUBKEY_LEN); + d_add(m, relay_key->public_key, CURVE25519_PUBKEY_LEN); + d_add(m, client_keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN); + d_add(m, encrypted_message, message_len); + crypto_digest_get_digest(m, + (char *)(*handshake_state_out)->msg_mac, + DIGEST256_LEN); + crypto_digest_free(m); + } + + // Build the onionskin. + *onion_skin_len_out = (ED25519_PUBKEY_LEN + CURVE25519_PUBKEY_LEN*2 + + DIGEST256_LEN + message_len); + *onion_skin_out = tor_malloc(*onion_skin_len_out); + { + uint8_t *ptr = *onion_skin_out, *end = ptr + *onion_skin_len_out; + + push(&ptr, end, relay_id->pubkey, ED25519_PUBKEY_LEN); + push(&ptr, end, relay_key->public_key, CURVE25519_PUBKEY_LEN); + push(&ptr, end, client_keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN); + push(&ptr, end, encrypted_message, message_len); + push(&ptr, end, (*handshake_state_out)->msg_mac, DIGEST256_LEN); + tor_assert(ptr == end); + } + + memwipe(&enc_key, 0, sizeof(enc_key)); + memwipe(&mac_key, 0, sizeof(mac_key)); + memwipe(encrypted_message, 0, message_len); + tor_free(encrypted_message); + + return 0; +} + +/** + * Complete a client-side v3 ntor handshake. + * + * Takes a @a handshake_state returned earlier by `onion_skin_ntor3_create()`, + * and the relay's reply to that handshake (@a reply_len bytes at @a + * handshake_reply). Also takes a verification string (@a verification_len + * bytes at @a verification). + * + * Returns 0 on success and -1 on failure. On success, generates @a key_len + * bytes of key material into the provided @a keys_out buffer, and sets @a + * message_out to the message that the relay sent in reply to our message (and + * sets @a message_out_len to that message's length). + **/ +int +onion_ntor3_client_handshake(const ntor3_handshake_state_t *handshake_state, + const uint8_t *handshake_reply, + size_t reply_len, + const uint8_t *verification, + size_t verification_len, + uint8_t *keys_out, + size_t keys_out_len, + uint8_t **message_out, + size_t *message_len_out) +{ + *message_out = NULL; + *message_len_out = 0; + + int problems = 0; + + // Parse the relay's message. + curve25519_public_key_t relay_Y; + uint8_t relay_auth[DIGEST256_LEN]; + size_t encrypted_msg_len; + const uint8_t *encrypted_msg; + { + if (reply_len < CURVE25519_PUBKEY_LEN + DIGEST256_LEN) { + // Okay to return early here, since the message is completely + // ill-formed, so we can't leak anything. + ++problems; + goto done; + } + encrypted_msg_len = reply_len - (CURVE25519_PUBKEY_LEN + DIGEST256_LEN); + + memcpy(&relay_Y.public_key, handshake_reply, CURVE25519_PUBKEY_LEN); + handshake_reply += CURVE25519_PUBKEY_LEN; + memcpy(&relay_auth, handshake_reply, DIGEST256_LEN); + handshake_reply += DIGEST256_LEN; + encrypted_msg = handshake_reply; + } + + // Finish the second diffie hellman handshake. + uint8_t yx[CURVE25519_OUTPUT_LEN]; + curve25519_handshake(yx, &handshake_state->client_keypair.seckey, &relay_Y); + problems |= safe_mem_is_zero(yx, sizeof(yx)); + + // Compute two tweaked hashes of secret_input. + uint8_t key_seed[DIGEST256_LEN], verify[DIGEST256_LEN]; + { + crypto_digest_t *ks = crypto_digest256_new(DIGEST_SHA3_256); + crypto_digest_t *v = crypto_digest256_new(DIGEST_SHA3_256); + d_add_tweak(ks, T_KEY_SEED); + d_add_tweak(v, T_VERIFY); +#define ADD2(s,len) STMT_BEGIN { \ + d_add(ks, (s),(len)); d_add(v, (s), (len)); \ + } STMT_END +#define ADD2_ENCAP(s,len) STMT_BEGIN { \ + d_add_encap(ks, (s),(len)); d_add_encap(v, (s), (len)); \ + } STMT_END + + ADD2(yx, sizeof(yx)); + ADD2(handshake_state->bx, sizeof(handshake_state->bx)); + ADD2(handshake_state->relay_id.pubkey, ED25519_PUBKEY_LEN); + ADD2(handshake_state->relay_key.public_key, CURVE25519_PUBKEY_LEN); + ADD2(handshake_state->client_keypair.pubkey.public_key, + CURVE25519_PUBKEY_LEN); + ADD2(relay_Y.public_key, CURVE25519_PUBKEY_LEN); + ADD2((const uint8_t *)PROTOID, strlen(PROTOID)); + ADD2_ENCAP(verification, verification_len); + + crypto_digest_get_digest(ks, (char*) key_seed, DIGEST256_LEN); + crypto_digest_get_digest(v, (char*) verify, DIGEST256_LEN); + crypto_digest_free(ks); + crypto_digest_free(v); + } + + // compute expected auth value. + uint8_t auth_computed[DIGEST256_LEN]; + { + crypto_digest_t *d = crypto_digest256_new(DIGEST_SHA3_256); + d_add_tweak(d, T_AUTH); + d_add(d, verify, sizeof(verify)); + d_add(d, handshake_state->relay_id.pubkey, ED25519_PUBKEY_LEN); + d_add(d, handshake_state->relay_key.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, relay_Y.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, handshake_state->client_keypair.pubkey.public_key, + CURVE25519_PUBKEY_LEN); + d_add(d, handshake_state->msg_mac, DIGEST256_LEN); + d_add_encap(d, encrypted_msg, encrypted_msg_len); + d_add(d, (const uint8_t*)PROTOID, strlen(PROTOID)); + d_add(d, (const uint8_t*)"Server", strlen("Server")); + crypto_digest_get_digest(d, (char *)auth_computed, DIGEST256_LEN); + crypto_digest_free(d); + } + + // Check authentication value. + problems |= tor_memneq(auth_computed, relay_auth, DIGEST256_LEN); + + // Compute keystream, decrypt message, and return. + *message_out = tor_malloc(encrypted_msg_len); + *message_len_out = encrypted_msg_len; + uint8_t enc_key[CIPHER256_KEY_LEN]; + { + crypto_xof_t *xof = crypto_xof_new(); + xof_add_tweak(xof, T_FINAL); + xof_add(xof, key_seed, sizeof(key_seed)); + crypto_xof_squeeze_bytes(xof, enc_key, sizeof(enc_key)); + crypto_xof_squeeze_bytes(xof, (uint8_t *)keys_out, keys_out_len); + crypto_xof_free(xof); + + crypto_cipher_t *c = + crypto_cipher_new_with_bits((const char *)enc_key, 256); + crypto_cipher_decrypt(c, (char *)*message_out, + (const char *)encrypted_msg, encrypted_msg_len); + crypto_cipher_free(c); + } + + done: + memwipe(&relay_Y, 0, sizeof(relay_Y)); + memwipe(&relay_auth, 0, sizeof(relay_auth)); + memwipe(&yx, 0, sizeof(yx)); + memwipe(key_seed, 0, sizeof(key_seed)); + memwipe(verify, 0, sizeof(verify)); + memwipe(enc_key, 0, sizeof(enc_key)); + if (problems) { + if (*message_out) { + memwipe(*message_out, 0, *message_len_out); + tor_free(*message_out); // Sets it to NULL. + } + *message_len_out = 0; + crypto_rand((char*)keys_out, keys_out_len); // In case bad code uses it. + return -1; + } + + return 0; +} + +/** + * Wipe a server handshake state, and release the storage it holds. + **/ +void +ntor3_server_handshake_state_free_(ntor3_server_handshake_state_t *state) +{ + if (state == NULL) + return; + + memwipe(state, 0, sizeof(ntor3_server_handshake_state_t)); + tor_free(state); +} + +/** + * As a relay, start handling a client's v3 ntor handshake. + * + * This function performs the _first half_ of the handshake, up to the point + * where the client's message is decoded. After calling it, the relay should + * decide how and whether to reply to the client's message, compose its reply, + * and call `onion_skin_ntor3_server_handshake_part2`. + * + * It takes as input a map of the relay's known onion keys in @a private_keys, + * along with a fake @a junk_key to use if there is a complete mismatch. It + * takes the relay's ed25519 identity in @a my_id, along with the client's + * handshake message (@a client_handshake_len bytes in @a client_handshake), + * and a verification string (@a verification_len bytes in @a verification). + * + * Return 0 on success, and -1 on failure. On success, sets @a + * client_message_out to a newly allocated string holding the plaintext of the + * message that the client sent as part of its handshake, and @a + * client_message_out_len to its length. Also sets @a state_out to a newly + * allocated state object holding the intermediate computation for this + * handshake. + **/ +int +onion_skin_ntor3_server_handshake_part1( + const di_digest256_map_t *private_keys, + const curve25519_keypair_t *junk_key, + const ed25519_public_key_t *my_id, + const uint8_t *client_handshake, + size_t client_handshake_len, + const uint8_t *verification, + size_t verification_len, + uint8_t **client_message_out, + size_t *client_message_len_out, + ntor3_server_handshake_state_t **state_out) +{ + *client_message_out = NULL; + *client_message_len_out = 0; + *state_out = NULL; + + int problems = 0; + + // Initialize state. + (*state_out) = tor_malloc_zero(sizeof(ntor3_server_handshake_state_t)); + memcpy(&(*state_out)->my_id, my_id, sizeof(*my_id)); + + const uint8_t *wanted_id; // [ED25519_PUBKEY_LEN] + const uint8_t *wanted_key; // [CURVE25519_PUBKEY_LEN] + const uint8_t *encrypted_message; + size_t encrypted_message_len; + // Unpack the client handshake. + { + const uint8_t *ptr = client_handshake; + const uint8_t *end = ptr + client_handshake_len; + + if (client_handshake_len < + ED25519_PUBKEY_LEN + CURVE25519_PUBKEY_LEN * 2 + DIGEST256_LEN) { + // Okay to end early; the client knows this is unparseable already. + ++problems; + goto done; + } + wanted_id = ptr; + ptr += ED25519_PUBKEY_LEN; + wanted_key = ptr; + ptr += CURVE25519_PUBKEY_LEN; + memcpy((*state_out)->client_key.public_key, ptr, CURVE25519_PUBKEY_LEN); + ptr += CURVE25519_PUBKEY_LEN; + size_t remaining = (end-ptr); + if (BUG(remaining < DIGEST256_LEN)) { + // Okay to end early; this is a bug. + ++problems; + goto done; + } + encrypted_message = ptr; + encrypted_message_len = remaining - DIGEST256_LEN; + ptr += encrypted_message_len; + remaining = (end-ptr); + tor_assert(remaining == DIGEST256_LEN); + memcpy((*state_out)->msg_mac, ptr, DIGEST256_LEN); + } + + // Check the identity. + problems |= tor_memneq(my_id->pubkey, wanted_id, ED25519_PUBKEY_LEN); + + // Find the correct keypair. + const curve25519_keypair_t *keypair = + dimap_search(private_keys, wanted_key, (void *)junk_key); + tor_assert(keypair); + memcpy(&(*state_out)->my_key, &keypair->pubkey, + sizeof(curve25519_public_key_t)); + + // Do the first diffie hellman handshake. + curve25519_handshake((*state_out)->xb, + &keypair->seckey, &(*state_out)->client_key); + problems |= safe_mem_is_zero((*state_out)->xb, CURVE25519_OUTPUT_LEN); + + // Derive the encryption and mac keys + uint8_t enc_key[CIPHER256_KEY_LEN], mac_key[DIGEST256_LEN]; + { + crypto_xof_t *xof = crypto_xof_new(); + xof_add_tweak(xof, T_MSGKDF); + xof_add(xof, (*state_out)->xb, CURVE25519_OUTPUT_LEN); + xof_add(xof, wanted_id, ED25519_PUBKEY_LEN); + xof_add(xof, (*state_out)->client_key.public_key, CURVE25519_PUBKEY_LEN); + xof_add(xof, keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN); + xof_add(xof, (const uint8_t *)PROTOID, strlen(PROTOID)); + xof_add_encap(xof, verification, verification_len); + crypto_xof_squeeze_bytes(xof, enc_key, sizeof(enc_key)); + crypto_xof_squeeze_bytes(xof, mac_key, sizeof(mac_key)); + crypto_xof_free(xof); + } + + // Check the MAC. + uint8_t computed_mac[DIGEST256_LEN]; + { + crypto_digest_t *d = crypto_digest256_new(DIGEST_SHA3_256); + d_add_tweak(d, T_MSGMAC); + d_add_encap(d, mac_key, sizeof(mac_key)); + d_add(d, my_id->pubkey, ED25519_PUBKEY_LEN); + d_add(d, keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, (*state_out)->client_key.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, encrypted_message, encrypted_message_len); + crypto_digest_get_digest(d, (char *)computed_mac, DIGEST256_LEN); + crypto_digest_free(d); + } + + problems |= tor_memneq((*state_out)->msg_mac, computed_mac, DIGEST256_LEN); + + // Decrypt the message. + *client_message_out = tor_malloc(encrypted_message_len); + *client_message_len_out = encrypted_message_len; + { + crypto_cipher_t *c = + crypto_cipher_new_with_bits((const char *)enc_key, 256); + crypto_cipher_decrypt(c, (char *)*client_message_out, + (const char *)encrypted_message, + encrypted_message_len); + crypto_cipher_free(c); + } + + done: + memwipe(enc_key, 0, sizeof(enc_key)); + memwipe(mac_key, 0, sizeof(mac_key)); + memwipe(computed_mac, 0, sizeof(computed_mac)); + if (problems) { + if (*client_message_out) { + memwipe(*client_message_out, 0, *client_message_len_out); + tor_free(*client_message_out); // Sets it to NULL. + } + *client_message_len_out = 0; + ntor3_server_handshake_state_free(*state_out); + return -1; + } + + return 0; +} + +/** + * Finish the relay side of an ntor v3 handshake. + * + * The relay calls this function after it has decided to respond to the + * client's original encrypted message. This function receives the relay's + * message in @a server_message and its length in @a server_message_len, and + * completes the handshake. + * + * Returns 0 on success and -1 on failure. On success, stores the newly + * allocated handshake for the relay to send in @a handshake_out, and its + * length in @a handshake_len_out. Stores @a keys_out_len bytes of generated + * keys in the provided buffer at @a keys_out. + **/ +int +onion_skin_ntor3_server_handshake_part2( + const ntor3_server_handshake_state_t *state, + const uint8_t *verification, + size_t verification_len, + const uint8_t *server_message, + size_t server_message_len, + uint8_t **handshake_out, + size_t *handshake_len_out, + uint8_t *keys_out, + size_t keys_out_len) +{ + curve25519_keypair_t relay_keypair; + if (curve25519_keypair_generate(&relay_keypair, 0) < 0) { + return -1; + } + int r = onion_skin_ntor3_server_handshake_part2_nokeygen( + &relay_keypair, + state, + verification, + verification_len, + server_message, + server_message_len, + handshake_out, + handshake_len_out, + keys_out, + keys_out_len); + memwipe(&relay_keypair, 0, sizeof(relay_keypair)); + return r; +} + +/** + * Like `onion_skin_ntor3_server_handshake_part2`, but do not generate + * an ephemeral (y,Y) keypair. + * + * Instead, this function takes that keypair as @a relay_keypair_y. + * + * (Having a separate function for this lets us test the code for correct + * behavior.) + **/ +STATIC int +onion_skin_ntor3_server_handshake_part2_nokeygen( + const curve25519_keypair_t *relay_keypair_y, + const ntor3_server_handshake_state_t *state, + const uint8_t *verification, + size_t verification_len, + const uint8_t *server_message, + size_t server_message_len, + uint8_t **handshake_out, + size_t *handshake_len_out, + uint8_t *keys_out, + size_t keys_out_len) +{ + *handshake_out = NULL; + *handshake_len_out = 0; + + int problems = 0; + + // Second diffie-hellman handshake. + uint8_t xy[CURVE25519_OUTPUT_LEN]; + curve25519_handshake(xy, &relay_keypair_y->seckey, &state->client_key); + problems |= safe_mem_is_zero(xy, sizeof(xy)); + + // Compute two tweaked hashes of secret_input. + uint8_t key_seed[DIGEST256_LEN], verify[DIGEST256_LEN]; + { + crypto_digest_t *ks = crypto_digest256_new(DIGEST_SHA3_256); + crypto_digest_t *v = crypto_digest256_new(DIGEST_SHA3_256); + d_add_tweak(ks, T_KEY_SEED); + d_add_tweak(v, T_VERIFY); + ADD2(xy, sizeof(xy)); + ADD2(state->xb, sizeof(state->xb)); + ADD2(state->my_id.pubkey, ED25519_PUBKEY_LEN); + ADD2(state->my_key.public_key, CURVE25519_PUBKEY_LEN); + ADD2(state->client_key.public_key, CURVE25519_PUBKEY_LEN); + ADD2(relay_keypair_y->pubkey.public_key, CURVE25519_PUBKEY_LEN); + ADD2((const uint8_t *)PROTOID, strlen(PROTOID)); + ADD2_ENCAP(verification, verification_len); + crypto_digest_get_digest(ks, (char*) key_seed, DIGEST256_LEN); + crypto_digest_get_digest(v, (char*) verify, DIGEST256_LEN); + crypto_digest_free(ks); + crypto_digest_free(v); + } + + // Compute enc_key and keystream. + uint8_t enc_key[CIPHER256_KEY_LEN]; + { + crypto_xof_t *xof = crypto_xof_new(); + xof_add_tweak(xof, T_FINAL); + xof_add(xof, key_seed, sizeof(key_seed)); + crypto_xof_squeeze_bytes(xof, enc_key, sizeof(enc_key)); + crypto_xof_squeeze_bytes(xof, keys_out, keys_out_len); + crypto_xof_free(xof); + } + + // Encrypt message. + uint8_t *encrypted_message = tor_memdup(server_message, server_message_len); + { + crypto_cipher_t *c = + crypto_cipher_new_with_bits((const char *)enc_key, 256); + crypto_cipher_crypt_inplace( + c, (char *)encrypted_message, server_message_len); + crypto_cipher_free(c); + } + + // Compute AUTH digest. + uint8_t auth[DIGEST256_LEN]; + { + crypto_digest_t *d = crypto_digest256_new(DIGEST_SHA3_256); + d_add_tweak(d, T_AUTH); + d_add(d, verify, sizeof(verify)); + d_add(d, state->my_id.pubkey, ED25519_PUBKEY_LEN); + d_add(d, state->my_key.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, relay_keypair_y->pubkey.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, state->client_key.public_key, CURVE25519_PUBKEY_LEN); + d_add(d, state->msg_mac, DIGEST256_LEN); + d_add_encap(d, encrypted_message, server_message_len); + d_add(d, (const uint8_t*)PROTOID, strlen(PROTOID)); + d_add(d, (const uint8_t*)"Server", strlen("Server")); + crypto_digest_get_digest(d, (char *)auth, DIGEST256_LEN); + crypto_digest_free(d); + } + + // Compose the reply. + *handshake_len_out = CURVE25519_PUBKEY_LEN + DIGEST256_LEN + + server_message_len; + *handshake_out = tor_malloc(*handshake_len_out); + uint8_t *ptr = *handshake_out, *end = ptr + *handshake_len_out; + push(&ptr, end, relay_keypair_y->pubkey.public_key, CURVE25519_PUBKEY_LEN); + push(&ptr, end, auth, sizeof(auth)); + push(&ptr, end, encrypted_message, server_message_len); + tor_assert(ptr == end); + + // Clean up and return. + memwipe(xy, 0, sizeof(xy)); + memwipe(key_seed, 0, sizeof(key_seed)); + memwipe(verify, 0, sizeof(verify)); + memwipe(enc_key, 0, sizeof(enc_key)); + memwipe(encrypted_message, 0, server_message_len); + tor_free(encrypted_message); + + if (problems) { + memwipe(*handshake_out, 0, *handshake_len_out); + tor_free(*handshake_out); // Sets it to NULL. + *handshake_len_out = 0; + crypto_rand((char*)keys_out, keys_out_len); // In case bad code uses it. + return -1; + } + return 0; +} diff --git a/src/core/crypto/onion_ntor_v3.h b/src/core/crypto/onion_ntor_v3.h new file mode 100644 index 0000000000..4449eb237d --- /dev/null +++ b/src/core/crypto/onion_ntor_v3.h @@ -0,0 +1,140 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * @file onion_ntor_v3.h + * @brief Header for core/crypto/onion_ntor_v3.c + **/ + +#ifndef TOR_CORE_CRYPTO_ONION_NTOR_V3_H +#define TOR_CORE_CRYPTO_ONION_NTOR_V3_H + +#include "lib/cc/torint.h" +#include "lib/testsupport/testsupport.h" +#include "lib/crypt_ops/crypto_cipher.h" +#include "lib/crypt_ops/crypto_curve25519.h" +#include "lib/crypt_ops/crypto_ed25519.h" +#include "lib/malloc/malloc.h" + +/** + * Client-side state held while an ntor v3 handshake is in progress. + **/ +typedef struct ntor3_handshake_state_t ntor3_handshake_state_t; + +/** + * Server-side state held while the relay is handling a client's + * encapsulated message, before replying to the v3 handshake. + **/ +typedef struct ntor3_server_handshake_state_t ntor3_server_handshake_state_t; + +void ntor3_handshake_state_free_(ntor3_handshake_state_t *st); +#define ntor3_handshake_state_free(ptr) \ + FREE_AND_NULL(ntor3_handshake_state_t, ntor3_handshake_state_free_, (ptr)) +void ntor3_server_handshake_state_free_(ntor3_server_handshake_state_t *st); +#define ntor3_server_handshake_state_free(ptr) \ + FREE_AND_NULL(ntor3_server_handshake_state_t, \ + ntor3_server_handshake_state_free_, (ptr)) + +int onion_skin_ntor3_create(const ed25519_public_key_t *relay_id, + const curve25519_public_key_t *relay_key, + const uint8_t *verification, + const size_t verification_len, + const uint8_t *message, + const size_t message_len, + ntor3_handshake_state_t **handshake_state_out, + uint8_t **onion_skin_out, + size_t *onion_skin_len_out); + +int onion_ntor3_client_handshake( + const ntor3_handshake_state_t *handshake_state, + const uint8_t *handshake_reply, + size_t reply_len, + const uint8_t *verification, + size_t verification_len, + uint8_t *keys_out, + size_t keys_out_len, + uint8_t **message_out, + size_t *message_len_out); + +struct di_digest256_map_t; +int onion_skin_ntor3_server_handshake_part1( + const struct di_digest256_map_t *private_keys, + const curve25519_keypair_t *junk_key, + const ed25519_public_key_t *my_id, + const uint8_t *client_handshake, + size_t client_handshake_len, + const uint8_t *verification, + size_t verification_len, + uint8_t **client_message_out, + size_t *client_message_len_out, + ntor3_server_handshake_state_t **state_out); + +int onion_skin_ntor3_server_handshake_part2( + const ntor3_server_handshake_state_t *state, + const uint8_t *verification, + size_t verification_len, + const uint8_t *server_message, + size_t server_message_len, + uint8_t **handshake_out, + size_t *handshake_len_out, + uint8_t *keys_out, + size_t keys_out_len); + +#ifdef ONION_NTOR_V3_PRIVATE +struct ntor3_handshake_state_t { + /** Ephemeral (x,X) keypair. */ + curve25519_keypair_t client_keypair; + /** Relay's ed25519 identity key (ID) */ + ed25519_public_key_t relay_id; + /** Relay's public key (B) */ + curve25519_public_key_t relay_key; + /** Shared secret (Bx). */ + uint8_t bx[CURVE25519_OUTPUT_LEN]; + /** MAC of the client's encrypted message data (MAC) */ + uint8_t msg_mac[DIGEST256_LEN]; +}; + +struct ntor3_server_handshake_state_t { + /** Relay's ed25519 identity key (ID) */ + ed25519_public_key_t my_id; + /** Relay's public key (B) */ + curve25519_public_key_t my_key; + /** Client's public ephemeral key (X). */ + curve25519_public_key_t client_key; + + /** Shared secret (Xb) */ + uint8_t xb[CURVE25519_OUTPUT_LEN]; + /** MAC of the client's encrypted message data */ + uint8_t msg_mac[DIGEST256_LEN]; +}; + +STATIC int onion_skin_ntor3_create_nokeygen( + const curve25519_keypair_t *client_keypair, + const ed25519_public_key_t *relay_id, + const curve25519_public_key_t *relay_key, + const uint8_t *verification, + const size_t verification_len, + const uint8_t *message, + const size_t message_len, + ntor3_handshake_state_t **handshake_state_out, + uint8_t **onion_skin_out, + size_t *onion_skin_len_out); + +STATIC int onion_skin_ntor3_server_handshake_part2_nokeygen( + const curve25519_keypair_t *relay_keypair_y, + const ntor3_server_handshake_state_t *state, + const uint8_t *verification, + size_t verification_len, + const uint8_t *server_message, + size_t server_message_len, + uint8_t **handshake_out, + size_t *handshake_len_out, + uint8_t *keys_out, + size_t keys_out_len); + +#endif + +#endif /* !defined(TOR_CORE_CRYPTO_ONION_NTOR_V3_H) */ diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c index b17d7bf2bd..9271a70914 100644 --- a/src/core/mainloop/connection.c +++ b/src/core/mainloop/connection.c @@ -117,6 +117,7 @@ #include "lib/cc/ctassert.h" #include "lib/sandbox/sandbox.h" #include "lib/net/buffers_net.h" +#include "lib/net/address.h" #include "lib/tls/tortls.h" #include "lib/evloop/compat_libevent.h" #include "lib/compress/compress.h" @@ -146,6 +147,8 @@ #include "feature/nodelist/routerinfo_st.h" #include "core/or/socks_request_st.h" +#include "core/or/congestion_control_flow.h" + /** * On Windows and Linux we cannot reliably bind() a socket to an * address and port if: 1) There's already a socket bound to wildcard @@ -250,13 +253,13 @@ CONST_TO_LISTENER_CONN(const connection_t *c) } size_t -connection_get_inbuf_len(connection_t *conn) +connection_get_inbuf_len(const connection_t *conn) { return conn->inbuf ? buf_datalen(conn->inbuf) : 0; } size_t -connection_get_outbuf_len(connection_t *conn) +connection_get_outbuf_len(const connection_t *conn) { return conn->outbuf ? buf_datalen(conn->outbuf) : 0; } @@ -612,6 +615,11 @@ entry_connection_new(int type, int socket_family) entry_conn->entry_cfg.ipv4_traffic = 1; else if (socket_family == AF_INET6) entry_conn->entry_cfg.ipv6_traffic = 1; + + /* Initialize the read token bucket to the maximum value which is the same as + * no rate limiting. */ + token_bucket_rw_init(&ENTRY_TO_EDGE_CONN(entry_conn)->bucket, INT32_MAX, + INT32_MAX, monotime_coarse_get_stamp()); return entry_conn; } @@ -623,6 +631,10 @@ edge_connection_new(int type, int socket_family) edge_connection_t *edge_conn = tor_malloc_zero(sizeof(edge_connection_t)); tor_assert(type == CONN_TYPE_EXIT); connection_init(time(NULL), TO_CONN(edge_conn), type, socket_family); + /* Initialize the read token bucket to the maximum value which is the same as + * no rate limiting. */ + token_bucket_rw_init(&edge_conn->bucket, INT32_MAX, INT32_MAX, + monotime_coarse_get_stamp()); return edge_conn; } @@ -1261,7 +1273,7 @@ socket_failed_from_resource_exhaustion(void) */ if (get_max_sockets() > 65535) { /* TCP port exhaustion */ - rep_hist_note_overload(OVERLOAD_GENERAL); + rep_hist_note_tcp_exhaustion(); } else { /* File descriptor exhaustion */ rep_hist_note_overload(OVERLOAD_FD_EXHAUSTED); @@ -3457,6 +3469,19 @@ connection_bucket_read_limit(connection_t *conn, time_t now) base = get_cell_network_size(or_conn->wide_circ_ids); } + /* Edge connection have their own read bucket due to flow control being able + * to set a rate limit for them. However, for exit connections, we still need + * to honor the global bucket as well. */ + if (CONN_IS_EDGE(conn)) { + const edge_connection_t *edge_conn = CONST_TO_EDGE_CONN(conn); + conn_bucket = token_bucket_rw_get_read(&edge_conn->bucket); + if (conn->type == CONN_TYPE_EXIT) { + /* Decide between our limit and the global one. */ + goto end; + } + return conn_bucket; + } + if (!connection_is_rate_limited(conn)) { /* be willing to read on local conns even if our buckets are empty */ return conn_bucket>=0 ? conn_bucket : 1<<14; @@ -3467,6 +3492,7 @@ connection_bucket_read_limit(connection_t *conn, time_t now) global_bucket_val = MIN(global_bucket_val, relayed); } + end: return connection_bucket_get_share(base, priority, global_bucket_val, conn_bucket); } @@ -3644,6 +3670,13 @@ connection_buckets_decrement(connection_t *conn, time_t now, record_num_bytes_transferred_impl(conn, now, num_read, num_written); + /* Edge connection need to decrement the read side of the bucket used by our + * congestion control. */ + if (CONN_IS_EDGE(conn) && num_read > 0) { + edge_connection_t *edge_conn = TO_EDGE_CONN(conn); + token_bucket_rw_dec(&edge_conn->bucket, num_read, 0); + } + if (!connection_is_rate_limited(conn)) return; /* local IPs are free */ @@ -3697,14 +3730,16 @@ connection_write_bw_exhausted(connection_t *conn, bool is_global_bw) void connection_consider_empty_read_buckets(connection_t *conn) { + int is_global = 1; const char *reason; - if (!connection_is_rate_limited(conn)) + if (CONN_IS_EDGE(conn) && + token_bucket_rw_get_read(&TO_EDGE_CONN(conn)->bucket) <= 0) { + reason = "edge connection read bucket exhausted. Pausing."; + is_global = false; + } else if (!connection_is_rate_limited(conn)) { return; /* Always okay. */ - - int is_global = 1; - - if (token_bucket_rw_get_read(&global_bucket) <= 0) { + } else if (token_bucket_rw_get_read(&global_bucket) <= 0) { reason = "global read bucket exhausted. Pausing."; } else if (connection_counts_as_relayed_traffic(conn, approx_time()) && token_bucket_rw_get_read(&global_relayed_bucket) <= 0) { @@ -3714,8 +3749,9 @@ connection_consider_empty_read_buckets(connection_t *conn) token_bucket_rw_get_read(&TO_OR_CONN(conn)->bucket) <= 0) { reason = "connection read bucket exhausted. Pausing."; is_global = false; - } else + } else { return; /* all good, no need to stop it */ + } LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "%s", reason)); connection_read_bw_exhausted(conn, is_global); @@ -3819,6 +3855,10 @@ connection_bucket_refill_single(connection_t *conn, uint32_t now_ts) or_connection_t *or_conn = TO_OR_CONN(conn); token_bucket_rw_refill(&or_conn->bucket, now_ts); } + + if (CONN_IS_EDGE(conn)) { + token_bucket_rw_refill(&TO_EDGE_CONN(conn)->bucket, now_ts); + } } /** @@ -4556,9 +4596,9 @@ connection_handle_write_impl(connection_t *conn, int force) !dont_stop_writing) { /* it's done flushing */ if (connection_finished_flushing(conn) < 0) { /* already marked */ - return -1; + goto err; } - return 0; + goto done; } /* Call even if result is 0, since the global write bucket may @@ -4568,7 +4608,17 @@ connection_handle_write_impl(connection_t *conn, int force) if (n_read > 0 && connection_is_reading(conn)) connection_consider_empty_read_buckets(conn); + done: + /* If this is an edge connection with congestion control, check to see + * if it is time to send an xon */ + if (conn_uses_flow_control(conn)) { + flow_control_decide_xon(TO_EDGE_CONN(conn), n_written); + } + return 0; + + err: + return -1; } /* DOCDOC connection_handle_write */ diff --git a/src/core/mainloop/connection.h b/src/core/mainloop/connection.h index 36c94d6570..8b378b15a4 100644 --- a/src/core/mainloop/connection.h +++ b/src/core/mainloop/connection.h @@ -274,8 +274,8 @@ void connection_buf_add_compress(const char *string, size_t len, struct dir_connection_t *conn, int done); void connection_buf_add_buf(struct connection_t *conn, struct buf_t *buf); -size_t connection_get_inbuf_len(struct connection_t *conn); -size_t connection_get_outbuf_len(struct connection_t *conn); +size_t connection_get_inbuf_len(const struct connection_t *conn); +size_t connection_get_outbuf_len(const struct connection_t *conn); struct connection_t *connection_get_by_global_id(uint64_t id); struct connection_t *connection_get_by_type(int type); diff --git a/src/core/mainloop/cpuworker.c b/src/core/mainloop/cpuworker.c index 17855b8567..ab970259b5 100644 --- a/src/core/mainloop/cpuworker.c +++ b/src/core/mainloop/cpuworker.c @@ -21,6 +21,8 @@ #include "core/or/channel.h" #include "core/or/circuitlist.h" #include "core/or/connection_or.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_flow.h" #include "app/config/config.h" #include "core/mainloop/cpuworker.h" #include "lib/crypt_ops/crypto_rand.h" @@ -126,6 +128,11 @@ typedef struct cpuworker_request_t { /** A create cell for the cpuworker to process. */ create_cell_t create_cell; + /** + * A copy of this relay's consensus params that are relevant to + * the circuit, for use in negotiation. */ + circuit_params_t circ_ns_params; + /* Turn the above into a tagged union if needed. */ } cpuworker_request_t; @@ -158,6 +165,8 @@ typedef struct cpuworker_reply_t { uint8_t keys[CPATH_KEY_MATERIAL_LEN]; /** Input to use for authenticating introduce1 cells. */ uint8_t rend_auth_material[DIGEST_LEN]; + /** Negotiated circuit parameters. */ + circuit_params_t circ_params; } cpuworker_reply_t; typedef struct cpuworker_job_u_t { @@ -379,6 +388,18 @@ cpuworker_onion_handshake_replyfn(void *work_) goto done_processing; } + /* If the client asked for congestion control, if our consensus parameter + * allowed it to negotiate as enabled, allocate a congestion control obj. */ + if (rpl.circ_params.cc_enabled) { + if (get_options()->SbwsExit) { + TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&rpl.circ_params, + CC_PATH_SBWS); + } else { + TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&rpl.circ_params, + CC_PATH_EXIT); + } + } + if (onionskin_answer(circ, &rpl.created_cell, (const char*)rpl.keys, sizeof(rpl.keys), @@ -387,6 +408,7 @@ cpuworker_onion_handshake_replyfn(void *work_) circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); goto done_processing; } + log_debug(LD_OR,"onionskin_answer succeeded. Yay."); done_processing: @@ -425,9 +447,12 @@ cpuworker_onion_handshake_threadfn(void *state_, void *work_) n = onion_skin_server_handshake(cc->handshake_type, cc->onionskin, cc->handshake_len, onion_keys, + &req.circ_ns_params, cell_out->reply, + sizeof(cell_out->reply), rpl.keys, CPATH_KEY_MATERIAL_LEN, - rpl.rend_auth_material); + rpl.rend_auth_material, + &rpl.circ_params); if (n < 0) { /* failure */ log_debug(LD_OR,"onion_skin_server_handshake failed."); @@ -450,6 +475,7 @@ cpuworker_onion_handshake_threadfn(void *state_, void *work_) } rpl.success = 1; } + rpl.magic = CPUWORKER_REPLY_MAGIC; if (req.timed) { struct timeval tv_diff; @@ -550,6 +576,11 @@ assign_onionskin_to_cpuworker(or_circuit_t *circ, if (should_time) tor_gettimeofday(&req.started_at); + /* Copy the current cached consensus params relevant to + * circuit negotiation into the CPU worker context */ + req.circ_ns_params.cc_enabled = congestion_control_enabled(); + req.circ_ns_params.sendme_inc_cells = congestion_control_sendme_inc(); + job = tor_malloc_zero(sizeof(cpuworker_job_t)); job->circ = circ; memcpy(&job->u.request, &req, sizeof(req)); diff --git a/src/core/mainloop/mainloop.c b/src/core/mainloop/mainloop.c index 69606c0d53..cd57dea3d4 100644 --- a/src/core/mainloop/mainloop.c +++ b/src/core/mainloop/mainloop.c @@ -641,6 +641,13 @@ connection_start_reading,(connection_t *conn)) if (connection_should_read_from_linked_conn(conn)) connection_start_reading_from_linked_conn(conn); } else { + if (CONN_IS_EDGE(conn) && TO_EDGE_CONN(conn)->xoff_received) { + /* We should not get called here if we're waiting for an XON, but + * belt-and-suspenders */ + log_notice(LD_NET, + "Request to start reading on an edgeconn blocked with XOFF"); + return; + } if (event_add(conn->read_event, NULL)) log_warn(LD_NET, "Error from libevent setting read event state for %d " "to watched: %s", @@ -1293,6 +1300,7 @@ signewnym_impl(time_t now) circuit_mark_all_dirty_circs_as_unusable(); addressmap_clear_transient(); hs_client_purge_state(); + purge_vanguards_lite(); time_of_last_signewnym = now; signewnym_is_pending = 0; @@ -1370,6 +1378,7 @@ CALLBACK(save_state); CALLBACK(write_stats_file); CALLBACK(control_per_second_events); CALLBACK(second_elapsed); +CALLBACK(manage_vglite); #undef CALLBACK @@ -1392,6 +1401,9 @@ STATIC periodic_event_item_t mainloop_periodic_events[] = { CALLBACK(second_elapsed, NET_PARTICIPANT, FL(RUN_ON_DISABLE)), + /* Update vanguards-lite once per hour, if we have networking */ + CALLBACK(manage_vglite, NET_PARTICIPANT, FL(NEED_NET)), + /* XXXX Do we have a reason to do this on a callback? Does it do any good at * all? For now, if we're dormant, we can let our listeners decay. */ CALLBACK(retry_listeners, NET_PARTICIPANT, FL(NEED_NET)), @@ -1662,6 +1674,21 @@ mainloop_schedule_shutdown(int delay_sec) mainloop_event_schedule(scheduled_shutdown_ev, &delay_tv); } +/** + * Update vanguards-lite layer2 nodes, once every 15 minutes + */ +static int +manage_vglite_callback(time_t now, const or_options_t *options) +{ + (void)now; + (void)options; +#define VANGUARDS_LITE_INTERVAL (15*60) + + maintain_layer2_guards(); + + return VANGUARDS_LITE_INTERVAL; +} + /** Perform regular maintenance tasks. This function gets run once per * second. */ diff --git a/src/core/or/channel.c b/src/core/or/channel.c index c4f3e76fc8..c46fa93e58 100644 --- a/src/core/or/channel.c +++ b/src/core/or/channel.c @@ -2629,24 +2629,42 @@ channel_dump_statistics, (channel_t *chan, int severity)) circuitmux_num_circuits(chan->cmux) : 0); /* Describe timestamps */ - tor_log(severity, LD_GENERAL, - " * Channel %"PRIu64 " was last used by a " - "client at %"PRIu64 " (%"PRIu64 " seconds ago)", - (chan->global_identifier), - (uint64_t)(chan->timestamp_client), - (uint64_t)(now - chan->timestamp_client)); - tor_log(severity, LD_GENERAL, - " * Channel %"PRIu64 " last received a cell " - "at %"PRIu64 " (%"PRIu64 " seconds ago)", - (chan->global_identifier), - (uint64_t)(chan->timestamp_recv), - (uint64_t)(now - chan->timestamp_recv)); - tor_log(severity, LD_GENERAL, - " * Channel %"PRIu64 " last transmitted a cell " - "at %"PRIu64 " (%"PRIu64 " seconds ago)", - (chan->global_identifier), - (uint64_t)(chan->timestamp_xmit), - (uint64_t)(now - chan->timestamp_xmit)); + if (chan->timestamp_client == 0) { + tor_log(severity, LD_GENERAL, + " * Channel %"PRIu64 " was never used by a " + "client", (chan->global_identifier)); + } else { + tor_log(severity, LD_GENERAL, + " * Channel %"PRIu64 " was last used by a " + "client at %"PRIu64 " (%"PRIu64 " seconds ago)", + (chan->global_identifier), + (uint64_t)(chan->timestamp_client), + (uint64_t)(now - chan->timestamp_client)); + } + if (chan->timestamp_recv == 0) { + tor_log(severity, LD_GENERAL, + " * Channel %"PRIu64 " never received a cell", + (chan->global_identifier)); + } else { + tor_log(severity, LD_GENERAL, + " * Channel %"PRIu64 " last received a cell " + "at %"PRIu64 " (%"PRIu64 " seconds ago)", + (chan->global_identifier), + (uint64_t)(chan->timestamp_recv), + (uint64_t)(now - chan->timestamp_recv)); + } + if (chan->timestamp_xmit == 0) { + tor_log(severity, LD_GENERAL, + " * Channel %"PRIu64 " never transmitted a cell", + (chan->global_identifier)); + } else { + tor_log(severity, LD_GENERAL, + " * Channel %"PRIu64 " last transmitted a cell " + "at %"PRIu64 " (%"PRIu64 " seconds ago)", + (chan->global_identifier), + (uint64_t)(chan->timestamp_xmit), + (uint64_t)(now - chan->timestamp_xmit)); + } /* Describe counters and rates */ tor_log(severity, LD_GENERAL, diff --git a/src/core/or/channeltls.c b/src/core/or/channeltls.c index 481dafef91..9db8e2392d 100644 --- a/src/core/or/channeltls.c +++ b/src/core/or/channeltls.c @@ -64,6 +64,7 @@ #include "trunnel/netinfo.h" #include "core/or/channelpadding.h" #include "core/or/extendinfo.h" +#include "core/or/congestion_control_common.h" #include "core/or/cell_st.h" #include "core/or/cell_queue_st.h" @@ -793,7 +794,7 @@ channel_tls_num_cells_writeable_method(channel_t *chan) cell_network_size = get_cell_network_size(tlschan->conn->wide_circ_ids); outbuf_len = connection_get_outbuf_len(TO_CONN(tlschan->conn)); /* Get the number of cells */ - n = CEIL_DIV(OR_CONN_HIGHWATER - outbuf_len, cell_network_size); + n = CEIL_DIV(or_conn_highwatermark() - outbuf_len, cell_network_size); if (n < 0) n = 0; #if SIZEOF_SIZE_T > SIZEOF_INT if (n > INT_MAX) n = INT_MAX; diff --git a/src/core/or/circuit_st.h b/src/core/or/circuit_st.h index 870bcbf7cf..be6429438a 100644 --- a/src/core/or/circuit_st.h +++ b/src/core/or/circuit_st.h @@ -22,6 +22,7 @@ struct hs_token_t; struct circpad_machine_spec_t; struct circpad_machine_runtime_t; +struct congestion_control_t; /** Number of padding state machines on a circuit. */ #define CIRCPAD_MAX_MACHINES (2) @@ -244,6 +245,9 @@ struct circuit_t { * that STOP commands actually correspond to the current machine, * and not a previous one. */ uint32_t padding_machine_ctr; + + /** Congestion control fields */ + struct congestion_control_t *ccontrol; }; #endif /* !defined(CIRCUIT_ST_H) */ diff --git a/src/core/or/circuitbuild.c b/src/core/or/circuitbuild.c index 2bcc642a97..f62a1d93f5 100644 --- a/src/core/or/circuitbuild.c +++ b/src/core/or/circuitbuild.c @@ -72,6 +72,7 @@ #include "feature/stats/predict_ports.h" #include "lib/crypt_ops/crypto_rand.h" #include "lib/trace/events.h" +#include "core/or/congestion_control_common.h" #include "core/or/cell_st.h" #include "core/or/cpath_build_state_st.h" @@ -81,6 +82,9 @@ #include "core/or/or_circuit_st.h" #include "core/or/origin_circuit_st.h" +#include "trunnel/extension.h" +#include "trunnel/congestion_control.h" + static int circuit_send_first_onion_skin(origin_circuit_t *circ); static int circuit_build_no_more_hops(origin_circuit_t *circ); static int circuit_send_intermediate_onion_skin(origin_circuit_t *circ, @@ -841,7 +845,13 @@ circuit_pick_create_handshake(uint8_t *cell_type_out, * using the TAP handshake, and CREATE2 otherwise. */ if (extend_info_supports_ntor(ei)) { *cell_type_out = CELL_CREATE2; - *handshake_type_out = ONION_HANDSHAKE_TYPE_NTOR; + /* Only use ntor v3 with exits that support congestion control, + * and only when it is enabled. */ + if (ei->exit_supports_congestion_control && + congestion_control_enabled()) + *handshake_type_out = ONION_HANDSHAKE_TYPE_NTOR_V3; + else + *handshake_type_out = ONION_HANDSHAKE_TYPE_NTOR; } else { /* XXXX030 Remove support for deciding to use TAP and EXTEND. */ *cell_type_out = CELL_CREATE; @@ -995,7 +1005,8 @@ circuit_send_first_onion_skin(origin_circuit_t *circ) len = onion_skin_create(cc.handshake_type, circ->cpath->extend_info, &circ->cpath->handshake_state, - cc.onionskin); + cc.onionskin, + sizeof(cc.onionskin)); if (len < 0) { log_warn(LD_CIRC,"onion_skin_create (first hop) failed."); return - END_CIRC_REASON_INTERNAL; @@ -1142,7 +1153,8 @@ circuit_send_intermediate_onion_skin(origin_circuit_t *circ, len = onion_skin_create(ec.create_cell.handshake_type, hop->extend_info, &hop->handshake_state, - ec.create_cell.onionskin); + ec.create_cell.onionskin, + sizeof(ec.create_cell.onionskin)); if (len < 0) { log_warn(LD_CIRC,"onion_skin_create failed."); return - END_CIRC_REASON_INTERNAL; @@ -1240,6 +1252,7 @@ circuit_finish_handshake(origin_circuit_t *circ, } tor_assert(hop->state == CPATH_STATE_AWAITING_KEYS); + circuit_params_t params; { const char *msg = NULL; if (onion_skin_client_handshake(hop->handshake_state.tag, @@ -1247,6 +1260,7 @@ circuit_finish_handshake(origin_circuit_t *circ, reply->reply, reply->handshake_len, (uint8_t*)keys, sizeof(keys), (uint8_t*)hop->rend_circ_nonce, + ¶ms, &msg) < 0) { if (msg) log_warn(LD_CIRC,"onion_skin_client_handshake failed: %s", msg); @@ -1260,6 +1274,24 @@ circuit_finish_handshake(origin_circuit_t *circ, return -END_CIRC_REASON_TORPROTOCOL; } + if (params.cc_enabled) { + int circ_len = circuit_get_cpath_len(circ); + + if (circ_len == DEFAULT_ROUTE_LEN && + circuit_get_cpath_hop(circ, DEFAULT_ROUTE_LEN) == hop) { + hop->ccontrol = congestion_control_new(¶ms, CC_PATH_EXIT); + } else if (circ_len == SBWS_ROUTE_LEN && + circuit_get_cpath_hop(circ, SBWS_ROUTE_LEN) == hop) { + hop->ccontrol = congestion_control_new(¶ms, CC_PATH_SBWS); + } else { + static ratelim_t cc_path_limit = RATELIM_INIT(600); + log_fn_ratelim(&cc_path_limit, LOG_WARN, LD_CIRC, + "Unexpected path length %d for circuit", + circ_len); + hop->ccontrol = congestion_control_new(¶ms, CC_PATH_EXIT); + } + } + hop->state = CPATH_STATE_OPEN; log_info(LD_CIRC,"Finished building circuit hop:"); circuit_log_path(LOG_INFO,LD_CIRC,circ); @@ -1359,7 +1391,9 @@ route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei) int routelen = DEFAULT_ROUTE_LEN; int known_purpose = 0; - if (circuit_should_use_vanguards(purpose)) { + /* If we're using L3 vanguards, we need longer paths for onion services */ + if (circuit_purpose_is_hidden_service(purpose) && + get_options()->HSLayer3Nodes) { /* Clients want an extra hop for rends to avoid linkability. * Services want it for intro points to avoid publishing their * layer3 guards. They want it for hsdir posts to use @@ -1374,14 +1408,6 @@ route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei) purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) return routelen+1; - /* If we only have Layer2 vanguards, then we do not need - * the extra hop for linkabilty reasons (see below). - * This means all hops can be of the form: - * S/C - G - L2 - M - R/HSDir/I - */ - if (get_options()->HSLayer2Nodes && !get_options()->HSLayer3Nodes) - return routelen+1; - /* For connections to hsdirs, clients want two extra hops * when using layer3 guards, to avoid linkability. * Same goes for intro points. Note that the route len @@ -1400,16 +1426,14 @@ route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei) return routelen; switch (purpose) { - /* These two purposes connect to a router that we chose, so - * DEFAULT_ROUTE_LEN is safe. */ - case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO: - /* hidden service connecting to introduction point */ + /* These purposes connect to a router that we chose, so DEFAULT_ROUTE_LEN + * is safe: */ case CIRCUIT_PURPOSE_TESTING: /* router reachability testing */ known_purpose = 1; break; - /* These three purposes connect to a router that someone else + /* These purposes connect to a router that someone else * might have chosen, so add an extra hop to protect anonymity. */ case CIRCUIT_PURPOSE_C_GENERAL: case CIRCUIT_PURPOSE_C_HSDIR_GET: @@ -1419,6 +1443,9 @@ route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei) /* client connecting to introduction point */ case CIRCUIT_PURPOSE_S_CONNECT_REND: /* hidden service connecting to rendezvous point */ + case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO: + /* hidden service connecting to intro point. In this case we want an extra + hop to avoid linkability attacks by the introduction point. */ known_purpose = 1; routelen++; break; @@ -2019,7 +2046,7 @@ cpath_build_state_to_crn_ipv6_extend_flag(const cpath_build_state_t *state, } /** Decide a suitable length for circ's cpath, and pick an exit - * router (or use <b>exit</b> if provided). Store these in the + * router (or use <b>exit_ei</b> if provided). Store these in the * cpath. * * If <b>is_hs_v3_rp_circuit</b> is set, then this exit should be suitable to @@ -2064,7 +2091,10 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit_ei, log_warn(LD_CIRC,"Failed to choose an exit server"); return -1; } - exit_ei = extend_info_from_node(node, state->onehop_tunnel); + exit_ei = extend_info_from_node(node, state->onehop_tunnel, + /* for_exit_use */ + !state->is_internal && TO_CIRCUIT(circ)->purpose == + CIRCUIT_PURPOSE_C_GENERAL); if (BUG(exit_ei == NULL)) return -1; } @@ -2072,7 +2102,7 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit_ei, return 0; } -/** Give <b>circ</b> a new exit destination to <b>exit</b>, and add a +/** Give <b>circ</b> a new exit destination to <b>exit_ei</b>, and add a * hop to the cpath reflecting this. Don't send the next extend cell -- * the caller will do this if it wants to. */ @@ -2114,8 +2144,6 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit_ei) return -1; } - // XXX: Should cannibalized circuits be dirty or not? Not easy to say.. - return 0; } @@ -2261,8 +2289,14 @@ middle_node_must_be_vanguard(const or_options_t *options, return 0; } - /* If we have sticky L2 nodes, and this is an L2 pick, use vanguards */ - if (options->HSLayer2Nodes && cur_len == 1) { + /* Don't even bother if the feature is disabled */ + if (!vanguards_lite_is_enabled()) { + return 0; + } + + /* If we are a hidden service circuit, always use either vanguards-lite + * or HSLayer2Nodes for 2nd hop. */ + if (cur_len == 1) { return 1; } @@ -2286,7 +2320,8 @@ pick_vanguard_middle_node(const or_options_t *options, /* Pick the right routerset based on the current hop */ if (cur_len == 1) { - vanguard_routerset = options->HSLayer2Nodes; + vanguard_routerset = options->HSLayer2Nodes ? + options->HSLayer2Nodes : get_layer2_guards(); } else if (cur_len == 2) { vanguard_routerset = options->HSLayer3Nodes; } else { @@ -2295,6 +2330,10 @@ pick_vanguard_middle_node(const or_options_t *options, return NULL; } + if (BUG(!vanguard_routerset)) { + return NULL; + } + node = pick_restricted_middle_node(flags, vanguard_routerset, options->ExcludeNodes, excluded, cur_len+1); @@ -2451,7 +2490,7 @@ onion_extend_cpath(origin_circuit_t *circ) primary address, for potentially connecting to an IPv6 OR port. Servers always want the primary (IPv4) address. */ int client = (server_mode(get_options()) == 0); - info = extend_info_from_node(r, client); + info = extend_info_from_node(r, client, false); /* Clients can fail to find an allowed address */ tor_assert_nonfatal(info || client); } @@ -2459,7 +2498,7 @@ onion_extend_cpath(origin_circuit_t *circ) const node_t *r = choose_good_middle_server(purpose, state, circ->cpath, cur_len); if (r) { - info = extend_info_from_node(r, 0); + info = extend_info_from_node(r, 0, false); } } @@ -2569,3 +2608,25 @@ circuit_upgrade_circuits_from_guard_wait(void) smartlist_free(to_upgrade); } + +/** + * Try to generate a circuit-negotiation message for communication with a + * given relay. Assumes we are using ntor v3, or some later version that + * supports parameter negotiatoin. + * + * On success, return 0 and pass back a message in the `out` parameters. + * Otherwise, return -1. + **/ +int +client_circ_negotiation_message(const extend_info_t *ei, + uint8_t **msg_out, + size_t *msg_len_out) +{ + tor_assert(ei && msg_out && msg_len_out); + + if (!ei->exit_supports_congestion_control) { + return -1; + } + + return congestion_control_build_ext_request(msg_out, msg_len_out); +} diff --git a/src/core/or/circuitbuild.h b/src/core/or/circuitbuild.h index 278cdfae1c..a66c611132 100644 --- a/src/core/or/circuitbuild.h +++ b/src/core/or/circuitbuild.h @@ -64,6 +64,10 @@ circuit_deliver_create_cell,(circuit_t *circ, const struct create_cell_t *create_cell, int relayed)); +int client_circ_negotiation_message(const extend_info_t *ei, + uint8_t **msg_out, + size_t *msg_len_out); + #ifdef CIRCUITBUILD_PRIVATE STATIC circid_t get_unique_circ_id_by_chan(channel_t *chan); STATIC int new_route_len(uint8_t purpose, extend_info_t *exit_ei, diff --git a/src/core/or/circuitlist.c b/src/core/or/circuitlist.c index 4f62284e29..4dbf4d4549 100644 --- a/src/core/or/circuitlist.c +++ b/src/core/or/circuitlist.c @@ -64,6 +64,7 @@ #include "core/or/circuitpadding.h" #include "core/or/crypt_path.h" #include "core/or/extendinfo.h" +#include "core/or/status.h" #include "core/or/trace_probes_circuit.h" #include "core/mainloop/connection.h" #include "app/config/config.h" @@ -100,6 +101,7 @@ #include "lib/compress/compress_zlib.h" #include "lib/compress/compress_zstd.h" #include "lib/buf/buffers.h" +#include "core/or/congestion_control_common.h" #include "core/or/ocirc_event.h" @@ -1143,6 +1145,8 @@ circuit_free_(circuit_t *circ) * hs identifier is freed. */ hs_circ_cleanup_on_free(circ); + congestion_control_free(circ->ccontrol); + if (CIRCUIT_IS_ORIGIN(circ)) { origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); mem = ocirc; @@ -2343,6 +2347,12 @@ circuit_about_to_free(circuit_t *circ) circuitmux_detach_circuit(or_circ->p_chan->cmux, circ); circuit_set_p_circid_chan(or_circ, 0, NULL); } + + if (or_circ->n_cells_discarded_at_end) { + time_t age = approx_time() - circ->timestamp_created.tv_sec; + note_circ_closed_for_unrecognized_cells( + age, or_circ->n_cells_discarded_at_end); + } } else { origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); edge_connection_t *conn; @@ -2586,8 +2596,10 @@ conns_compare_by_buffer_age_(const void **a_, const void **b_) /** We're out of memory for cells, having allocated <b>current_allocation</b> * bytes' worth. Kill the 'worst' circuits until we're under - * FRACTION_OF_DATA_TO_RETAIN_ON_OOM of our maximum usage. */ -void + * FRACTION_OF_DATA_TO_RETAIN_ON_OOM of our maximum usage. + * + * Return the number of bytes removed. */ +size_t circuits_handle_oom(size_t current_allocation) { smartlist_t *circlist; @@ -2597,6 +2609,7 @@ circuits_handle_oom(size_t current_allocation) size_t mem_recovered=0; int n_circuits_killed=0; int n_dirconns_killed=0; + int n_edgeconns_killed = 0; uint32_t now_ts; log_notice(LD_GENERAL, "We're low on memory (cell queues total alloc:" " %"TOR_PRIuSZ" buffer total alloc: %" TOR_PRIuSZ "," @@ -2613,12 +2626,11 @@ circuits_handle_oom(size_t current_allocation) tor_zstd_get_total_allocation(), tor_lzma_get_total_allocation(), hs_cache_get_total_allocation()); - { size_t mem_target = (size_t)(get_options()->MaxMemInQueues * FRACTION_OF_DATA_TO_RETAIN_ON_OOM); if (current_allocation <= mem_target) - return; + return 0; mem_to_recover = current_allocation - mem_target; } @@ -2664,12 +2676,19 @@ circuits_handle_oom(size_t current_allocation) if (conn_age < circ->age_tmp) { break; } - if (conn->type == CONN_TYPE_DIR && conn->linked_conn == NULL) { + /* Also consider edge connections so we don't accumulate bytes on the + * outbuf due to a malicious destination holding off the read on us. */ + if ((conn->type == CONN_TYPE_DIR && conn->linked_conn == NULL) || + CONN_IS_EDGE(conn)) { if (!conn->marked_for_close) connection_mark_for_close(conn); mem_recovered += single_conn_free_bytes(conn); - ++n_dirconns_killed; + if (conn->type == CONN_TYPE_DIR) { + ++n_dirconns_killed; + } else { + ++n_edgeconns_killed; + } if (mem_recovered >= mem_to_recover) goto done_recovering_mem; @@ -2697,14 +2716,16 @@ circuits_handle_oom(size_t current_allocation) } SMARTLIST_FOREACH_END(circ); done_recovering_mem: - log_notice(LD_GENERAL, "Removed %"TOR_PRIuSZ" bytes by killing %d circuits; " "%d circuits remain alive. Also killed %d non-linked directory " - "connections.", + "connections. Killed %d edge connections", mem_recovered, n_circuits_killed, smartlist_len(circlist) - n_circuits_killed, - n_dirconns_killed); + n_dirconns_killed, + n_edgeconns_killed); + + return mem_recovered; } /** Verify that circuit <b>c</b> has all of its invariants diff --git a/src/core/or/circuitlist.h b/src/core/or/circuitlist.h index f5791d7c12..147e2cb2f8 100644 --- a/src/core/or/circuitlist.h +++ b/src/core/or/circuitlist.h @@ -232,7 +232,7 @@ int circuit_count_pending_on_channel(channel_t *chan); MOCK_DECL(void, assert_circuit_ok,(const circuit_t *c)); void circuit_free_all(void); -void circuits_handle_oom(size_t current_allocation); +size_t circuits_handle_oom(size_t current_allocation); void circuit_clear_testing_cell_stats(circuit_t *circ); diff --git a/src/core/or/circuitmux_ewma.c b/src/core/or/circuitmux_ewma.c index 0382e62f75..adf256ab05 100644 --- a/src/core/or/circuitmux_ewma.c +++ b/src/core/or/circuitmux_ewma.c @@ -45,7 +45,10 @@ /*** EWMA parameter #defines ***/ /** How long does a tick last (seconds)? */ -#define EWMA_TICK_LEN 10 +#define EWMA_TICK_LEN_DEFAULT 10 +#define EWMA_TICK_LEN_MIN 1 +#define EWMA_TICK_LEN_MAX 600 +static int ewma_tick_len = EWMA_TICK_LEN_DEFAULT; /** The default per-tick scale factor, if it hasn't been overridden by a * consensus or a configuration setting. zero means "disabled". */ @@ -148,7 +151,7 @@ cell_ewma_get_tick(void) monotime_coarse_get(&now); int32_t msec_diff = monotime_coarse_diff_msec32(&start_of_current_tick, &now); - return current_tick_num + msec_diff / (1000*EWMA_TICK_LEN); + return current_tick_num + msec_diff / (1000*ewma_tick_len); } /** @@ -527,15 +530,15 @@ cell_ewma_get_current_tick_and_fraction(double *remainder_out) monotime_coarse_get(&now); int32_t msec_diff = monotime_coarse_diff_msec32(&start_of_current_tick, &now); - if (msec_diff > (1000*EWMA_TICK_LEN)) { - unsigned ticks_difference = msec_diff / (1000*EWMA_TICK_LEN); + if (msec_diff > (1000*ewma_tick_len)) { + unsigned ticks_difference = msec_diff / (1000*ewma_tick_len); monotime_coarse_add_msec(&start_of_current_tick, &start_of_current_tick, - ticks_difference * 1000 * EWMA_TICK_LEN); + ticks_difference * 1000 * ewma_tick_len); current_tick_num += ticks_difference; - msec_diff %= 1000*EWMA_TICK_LEN; + msec_diff %= 1000*ewma_tick_len; } - *remainder_out = ((double)msec_diff) / (1.0e3 * EWMA_TICK_LEN); + *remainder_out = ((double)msec_diff) / (1.0e3 * ewma_tick_len); return current_tick_num; } @@ -605,15 +608,20 @@ cmux_ewma_set_options(const or_options_t *options, /* Both options and consensus can be NULL. This assures us to either get a * valid configured value or the default one. */ halflife = get_circuit_priority_halflife(options, consensus, &source); + ewma_tick_len = networkstatus_get_param(consensus, + "CircuitPriorityTickSecs", + EWMA_TICK_LEN_DEFAULT, + EWMA_TICK_LEN_MIN, + EWMA_TICK_LEN_MAX); /* convert halflife into halflife-per-tick. */ - halflife /= EWMA_TICK_LEN; + halflife /= ewma_tick_len; /* compute per-tick scale factor. */ ewma_scale_factor = exp(LOG_ONEHALF / halflife); log_info(LD_OR, "Enabled cell_ewma algorithm because of value in %s; " "scale factor is %f per %d seconds", - source, ewma_scale_factor, EWMA_TICK_LEN); + source, ewma_scale_factor, ewma_tick_len); } /** Return the multiplier necessary to convert the value of a cell sent in diff --git a/src/core/or/circuitpadding.c b/src/core/or/circuitpadding.c index 6dfe94de01..99dc5f9d83 100644 --- a/src/core/or/circuitpadding.c +++ b/src/core/or/circuitpadding.c @@ -2967,6 +2967,8 @@ signed_error_t circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell) { int retval = 0; + /* Should we send back a STOP cell? */ + bool respond_with_stop = true; circpad_negotiate_t *negotiate; if (CIRCUIT_IS_ORIGIN(circ)) { @@ -2992,6 +2994,12 @@ circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell) negotiate->machine_type, negotiate->machine_ctr); goto done; } + + /* If we reached this point we received a STOP command from an old or + unknown machine. Don't reply with our own STOP since there is no one to + handle it on the other end */ + respond_with_stop = false; + if (negotiate->machine_ctr <= circ->padding_machine_ctr) { log_info(LD_CIRC, "Received STOP command for old machine %u, ctr %u", negotiate->machine_type, negotiate->machine_ctr); @@ -3023,10 +3031,13 @@ circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell) retval = -1; done: - circpad_padding_negotiated(circ, negotiate->machine_type, - negotiate->command, - (retval == 0) ? CIRCPAD_RESPONSE_OK : CIRCPAD_RESPONSE_ERR, - negotiate->machine_ctr); + if (respond_with_stop) { + circpad_padding_negotiated(circ, negotiate->machine_type, + negotiate->command, + (retval == 0) ? CIRCPAD_RESPONSE_OK : CIRCPAD_RESPONSE_ERR, + negotiate->machine_ctr); + } + circpad_negotiate_free(negotiate); return retval; diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c index 044b30b8b3..a259957d37 100644 --- a/src/core/or/circuituse.c +++ b/src/core/or/circuituse.c @@ -1204,25 +1204,6 @@ needs_circuits_for_build(int num) return 0; } -/** - * Launch the appropriate type of predicted circuit for hidden - * services, depending on our options. - */ -static void -circuit_launch_predicted_hs_circ(int flags) -{ - /* K.I.S.S. implementation of bug #23101: If we are using - * vanguards or pinned middles, pre-build a specific purpose - * for HS circs. */ - if (circuit_should_use_vanguards(CIRCUIT_PURPOSE_HS_VANGUARDS)) { - circuit_launch(CIRCUIT_PURPOSE_HS_VANGUARDS, flags); - } else { - /* If no vanguards, then no HS-specific prebuilt circuits are needed. - * Normal GENERAL circs are fine */ - circuit_launch(CIRCUIT_PURPOSE_C_GENERAL, flags); - } -} - /** Determine how many circuits we have open that are clean, * Make sure it's enough for all the upcoming behaviors we predict we'll have. * But put an upper bound on the total number of circuits. @@ -1276,7 +1257,7 @@ circuit_predict_and_launch_new(void) "Have %d clean circs (%d internal), need another internal " "circ for my hidden service.", num, num_internal); - circuit_launch_predicted_hs_circ(flags); + circuit_launch(CIRCUIT_PURPOSE_HS_VANGUARDS, flags); return; } @@ -1295,7 +1276,10 @@ circuit_predict_and_launch_new(void) " another hidden service circ.", num, num_uptime_internal, num_internal); - circuit_launch_predicted_hs_circ(flags); + /* Always launch vanguards purpose circuits for HS clients, + * for vanguards-lite. This prevents us from cannibalizing + * to build these circuits (and thus not use vanguards). */ + circuit_launch(CIRCUIT_PURPOSE_HS_VANGUARDS, flags); return; } @@ -2022,16 +2006,12 @@ circuit_is_hs_v3(const circuit_t *circ) int circuit_should_use_vanguards(uint8_t purpose) { - const or_options_t *options = get_options(); - - /* Only hidden service circuits use vanguards */ - if (!circuit_purpose_is_hidden_service(purpose)) - return 0; - - /* Pinned middles are effectively vanguards */ - if (options->HSLayer2Nodes || options->HSLayer3Nodes) + /* All hidden service circuits use either vanguards or + * vanguards-lite. */ + if (circuit_purpose_is_hidden_service(purpose)) return 1; + /* Everything else is a normal circuit */ return 0; } @@ -2069,13 +2049,11 @@ circuit_should_cannibalize_to_build(uint8_t purpose_to_build, return 0; } - /* For vanguards, the server-side intro circ is not cannibalized - * because we pre-build 4 hop HS circuits, and it only needs a 3 hop - * circuit. It is also long-lived, so it is more important that - * it have lower latency than get built fast. + /* The server-side intro circ is not cannibalized because it only + * needs a 3 hop circuit. It is also long-lived, so it is more + * important that it have lower latency than get built fast. */ - if (circuit_should_use_vanguards(purpose_to_build) && - purpose_to_build == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) { + if (purpose_to_build == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) { return 0; } @@ -2449,7 +2427,8 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn, /* We might want to connect to an IPv6 bridge for loading descriptors so we use the preferred address rather than the primary. */ - extend_info = extend_info_from_node(r, conn->want_onehop ? 1 : 0); + extend_info = extend_info_from_node(r, conn->want_onehop ? 1 : 0, + desired_circuit_purpose == CIRCUIT_PURPOSE_C_GENERAL); if (!extend_info) { log_warn(LD_CIRC,"Could not make a one-hop connection to %s. " "Discarding this circuit.", conn->chosen_exit_name); @@ -2484,7 +2463,9 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn, digest, NULL, /* Ed25519 ID */ NULL, NULL, /* onion keys */ - &addr, conn->socks_request->port); + &addr, conn->socks_request->port, + NULL, + false); } else { /* ! (want_onehop && conn->chosen_exit_name[0] == '$') */ /* We will need an onion key for the router, and we * don't have one. Refuse or relax requirements. */ diff --git a/src/core/or/command.c b/src/core/or/command.c index 622217a78e..ffdd1f19d9 100644 --- a/src/core/or/command.c +++ b/src/core/or/command.c @@ -360,15 +360,19 @@ command_process_create_cell(cell_t *cell, channel_t *chan) uint8_t rend_circ_nonce[DIGEST_LEN]; int len; created_cell_t created_cell; + circuit_params_t params; memset(&created_cell, 0, sizeof(created_cell)); len = onion_skin_server_handshake(ONION_HANDSHAKE_TYPE_FAST, create_cell->onionskin, create_cell->handshake_len, NULL, + NULL, created_cell.reply, + sizeof(created_cell.reply), keys, CPATH_KEY_MATERIAL_LEN, - rend_circ_nonce); + rend_circ_nonce, + ¶ms); tor_free(create_cell); if (len < 0) { log_warn(LD_OR,"Failed to generate key material. Closing."); @@ -563,7 +567,7 @@ command_process_relay_cell(cell_t *cell, channel_t *chan) } if ((reason = circuit_receive_relay_cell(cell, circ, direction)) < 0) { - log_fn(LOG_PROTOCOL_WARN,LD_PROTOCOL,"circuit_receive_relay_cell " + log_fn(LOG_DEBUG,LD_PROTOCOL,"circuit_receive_relay_cell " "(%s) failed. Closing.", direction==CELL_DIRECTION_OUT?"forward":"backward"); /* Always emit a bandwidth event for closed circs */ diff --git a/src/core/or/congestion_control_common.c b/src/core/or/congestion_control_common.c new file mode 100644 index 0000000000..54de48b39d --- /dev/null +++ b/src/core/or/congestion_control_common.c @@ -0,0 +1,1486 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_common.c + * \brief Common code used by all congestion control algorithms. + */ + +#define TOR_CONGESTION_CONTROL_COMMON_PRIVATE + +#include "core/or/or.h" + +#include "core/crypto/onion_crypto.h" +#include "core/or/circuitlist.h" +#include "core/or/crypt_path.h" +#include "core/or/or_circuit_st.h" +#include "core/or/origin_circuit_st.h" +#include "core/or/channel.h" +#include "core/mainloop/connection.h" +#include "core/or/sendme.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_vegas.h" +#include "core/or/congestion_control_nola.h" +#include "core/or/congestion_control_westwood.h" +#include "core/or/congestion_control_st.h" +#include "core/or/trace_probes_cc.h" +#include "lib/time/compat_time.h" +#include "feature/nodelist/networkstatus.h" +#include "app/config/config.h" + +#include "trunnel/congestion_control.h" +#include "trunnel/extension.h" + +/* Consensus parameter defaults. + * + * More details for each of the parameters can be found in proposal 324, + * section 6.5 including tuning notes. */ +#define SENDME_INC_DFLT (TLS_RECORD_MAX_CELLS) +#define CIRCWINDOW_INIT (4*SENDME_INC_DFLT) + +#define CC_ALG_DFLT (CC_ALG_SENDME) +#define CC_ALG_DFLT_ALWAYS (CC_ALG_VEGAS) + +#define CWND_INC_DFLT (TLS_RECORD_MAX_CELLS) +#define CWND_INC_PCT_SS_DFLT (50) +#define CWND_INC_RATE_DFLT (1) + +#define CWND_MIN_DFLT (SENDME_INC_DFLT) +#define CWND_MAX_DFLT (INT32_MAX) + +#define BWE_SENDME_MIN_DFLT (5) + +#define N_EWMA_CWND_PCT_DFLT (50) +#define N_EWMA_MAX_DFLT (10) + +/* BDP algorithms for each congestion control algorithms use the piecewise + * estimattor. See section 3.1.4 of proposal 324. */ +#define WESTWOOD_BDP_ALG BDP_ALG_PIECEWISE +#define VEGAS_BDP_MIX_ALG BDP_ALG_PIECEWISE +#define NOLA_BDP_ALG BDP_ALG_PIECEWISE + +/* Indicate OR connection buffer limitations used to stop or start accepting + * cells in its outbuf. + * + * These watermarks are historical to tor in a sense that they've been used + * almost from the genesis point. And were likely defined to fit the bounds of + * TLS records of 16KB which would be around 32 cells. + * + * These are defaults of the consensus parameter "orconn_high" and "orconn_low" + * values. */ +#define OR_CONN_HIGHWATER_DFLT (32*1024) +#define OR_CONN_LOWWATER_DFLT (16*1024) + +/* Low and high values of circuit cell queue sizes. They are used to tell when + * to start or stop reading on the streams attached on the circuit. + * + * These are defaults of the consensus parameters "cellq_high" and "cellq_low". + */ +#define CELL_QUEUE_LOW_DFLT (10) +#define CELL_QUEUE_HIGH_DFLT (256) + +static uint64_t congestion_control_update_circuit_rtt(congestion_control_t *, + uint64_t); +static bool congestion_control_update_circuit_bdp(congestion_control_t *, + const circuit_t *, + const crypt_path_t *, + uint64_t, uint64_t); +/* For unit tests */ +void congestion_control_set_cc_enabled(void); + +/* Consensus parameters cached. The non static ones are extern. */ +static uint32_t cwnd_max = CWND_MAX_DFLT; +int32_t cell_queue_high = CELL_QUEUE_HIGH_DFLT; +int32_t cell_queue_low = CELL_QUEUE_LOW_DFLT; +uint32_t or_conn_highwater = OR_CONN_HIGHWATER_DFLT; +uint32_t or_conn_lowwater = OR_CONN_LOWWATER_DFLT; +uint8_t cc_sendme_inc = SENDME_INC_DFLT; +static cc_alg_t cc_alg = CC_ALG_DFLT; + +/** + * Number of cwnd worth of sendme acks to smooth RTT and BDP with, + * using N_EWMA */ +static uint8_t n_ewma_cwnd_pct; + +/** + * Maximum number N for the N-count EWMA averaging of RTT and BDP. + */ +static uint8_t n_ewma_max; + +/** + * Minimum number of sendmes before we begin BDP estimates + */ +static uint8_t bwe_sendme_min; + +/** + * Update global congestion control related consensus parameter values, + * every consensus update. + */ +void +congestion_control_new_consensus_params(const networkstatus_t *ns) +{ +#define CELL_QUEUE_HIGH_MIN (1) +#define CELL_QUEUE_HIGH_MAX (1000) + cell_queue_high = networkstatus_get_param(ns, "cellq_high", + CELL_QUEUE_HIGH_DFLT, + CELL_QUEUE_HIGH_MIN, + CELL_QUEUE_HIGH_MAX); + +#define CELL_QUEUE_LOW_MIN (1) +#define CELL_QUEUE_LOW_MAX (1000) + cell_queue_low = networkstatus_get_param(ns, "cellq_low", + CELL_QUEUE_LOW_DFLT, + CELL_QUEUE_LOW_MIN, + CELL_QUEUE_LOW_MAX); + +#define OR_CONN_HIGHWATER_MIN (CELL_PAYLOAD_SIZE) +#define OR_CONN_HIGHWATER_MAX (INT32_MAX) + or_conn_highwater = + networkstatus_get_param(ns, "orconn_high", + OR_CONN_HIGHWATER_DFLT, + OR_CONN_HIGHWATER_MIN, + OR_CONN_HIGHWATER_MAX); + +#define OR_CONN_LOWWATER_MIN (CELL_PAYLOAD_SIZE) +#define OR_CONN_LOWWATER_MAX (INT32_MAX) + or_conn_lowwater = + networkstatus_get_param(ns, "orconn_low", + OR_CONN_LOWWATER_DFLT, + OR_CONN_LOWWATER_MIN, + OR_CONN_LOWWATER_MAX); + +#define CWND_MAX_MIN 500 +#define CWND_MAX_MAX (INT32_MAX) + cwnd_max = + networkstatus_get_param(NULL, "cc_cwnd_max", + CWND_MAX_DFLT, + CWND_MAX_MIN, + CWND_MAX_MAX); + +#define SENDME_INC_MIN 1 +#define SENDME_INC_MAX (255) + cc_sendme_inc = + networkstatus_get_param(NULL, "cc_sendme_inc", + SENDME_INC_DFLT, + SENDME_INC_MIN, + SENDME_INC_MAX); + +#define CC_ALG_MIN 0 +#define CC_ALG_MAX (NUM_CC_ALGS-1) + cc_alg = + networkstatus_get_param(NULL, "cc_alg", + CC_ALG_DFLT, + CC_ALG_MIN, + CC_ALG_MAX); + +#define BWE_SENDME_MIN_MIN 2 +#define BWE_SENDME_MIN_MAX (20) + bwe_sendme_min = + networkstatus_get_param(NULL, "cc_bwe_min", + BWE_SENDME_MIN_DFLT, + BWE_SENDME_MIN_MIN, + BWE_SENDME_MIN_MAX); + +#define N_EWMA_CWND_PCT_MIN 1 +#define N_EWMA_CWND_PCT_MAX (255) + n_ewma_cwnd_pct = + networkstatus_get_param(NULL, "cc_ewma_cwnd_pct", + N_EWMA_CWND_PCT_DFLT, + N_EWMA_CWND_PCT_MIN, + N_EWMA_CWND_PCT_MAX); + +#define N_EWMA_MAX_MIN 2 +#define N_EWMA_MAX_MAX (INT32_MAX) + n_ewma_max = + networkstatus_get_param(NULL, "cc_ewma_max", + N_EWMA_MAX_DFLT, + N_EWMA_MAX_MIN, + N_EWMA_MAX_MAX); +} + +/** + * Set congestion control parameters on a circuit's congestion + * control object based on values from the consensus. + * + * cc_alg is the negotiated congestion control algorithm. + * + * sendme_inc is the number of packaged cells that a sendme cell + * acks. This parameter will come from circuit negotiation. + */ +static void +congestion_control_init_params(congestion_control_t *cc, + const circuit_params_t *params, + cc_path_t path) +{ + const or_options_t *opts = get_options(); + cc->sendme_inc = params->sendme_inc_cells; + +#define CWND_INIT_MIN SENDME_INC_DFLT +#define CWND_INIT_MAX (10000) + cc->cwnd = + networkstatus_get_param(NULL, "cc_cwnd_init", + CIRCWINDOW_INIT, + CWND_INIT_MIN, + CWND_INIT_MAX); + +#define CWND_INC_PCT_SS_MIN 1 +#define CWND_INC_PCT_SS_MAX (500) + cc->cwnd_inc_pct_ss = + networkstatus_get_param(NULL, "cc_cwnd_inc_pct_ss", + CWND_INC_PCT_SS_DFLT, + CWND_INC_PCT_SS_MIN, + CWND_INC_PCT_SS_MAX); + +#define CWND_INC_MIN 1 +#define CWND_INC_MAX (1000) + cc->cwnd_inc = + networkstatus_get_param(NULL, "cc_cwnd_inc", + CWND_INC_DFLT, + CWND_INC_MIN, + CWND_INC_MAX); + +#define CWND_INC_RATE_MIN 1 +#define CWND_INC_RATE_MAX (250) + cc->cwnd_inc_rate = + networkstatus_get_param(NULL, "cc_cwnd_inc_rate", + CWND_INC_RATE_DFLT, + CWND_INC_RATE_MIN, + CWND_INC_RATE_MAX); + +#define CWND_MIN_MIN SENDME_INC_DFLT +#define CWND_MIN_MAX (1000) + cc->cwnd_min = + networkstatus_get_param(NULL, "cc_cwnd_min", + CWND_MIN_DFLT, + CWND_MIN_MIN, + CWND_MIN_MAX); + + /* If the consensus says to use OG sendme, but torrc has + * always-enabled, use the default "always" alg (vegas), + * else use cached conensus alg. */ + if (cc_alg == CC_ALG_SENDME && opts->AlwaysCongestionControl) { + cc->cc_alg = CC_ALG_DFLT_ALWAYS; + } else { + cc->cc_alg = cc_alg; + } + + bdp_alg_t default_bdp_alg = 0; + + switch (cc->cc_alg) { + case CC_ALG_WESTWOOD: + default_bdp_alg = WESTWOOD_BDP_ALG; + break; + case CC_ALG_VEGAS: + default_bdp_alg = VEGAS_BDP_MIX_ALG; + break; + case CC_ALG_NOLA: + default_bdp_alg = NOLA_BDP_ALG; + break; + case CC_ALG_SENDME: + default: + tor_fragile_assert(); + return; // No alg-specific params + } + + cc->bdp_alg = + networkstatus_get_param(NULL, "cc_bdp_alg", + default_bdp_alg, + 0, + NUM_BDP_ALGS-1); + + /* Algorithm-specific parameters */ + if (cc->cc_alg == CC_ALG_WESTWOOD) { + congestion_control_westwood_set_params(cc); + } else if (cc->cc_alg == CC_ALG_VEGAS) { + congestion_control_vegas_set_params(cc, path); + } else if (cc->cc_alg == CC_ALG_NOLA) { + congestion_control_nola_set_params(cc); + } +} + +/** Returns true if congestion control is enabled in the most recent + * consensus, or if __AlwaysCongestionControl is set to true. + * + * Note that this function (and many many other functions) should not + * be called from the CPU worker threads when handling congestion + * control negotiation. Relevant values are marshaled into the + * `circuit_params_t` struct, in order to be used in worker threads + * without touching global state. Use those values in CPU worker + * threads, instead of calling this function. + * + * The danger is still present, in your time, as it was in ours. + */ +bool +congestion_control_enabled(void) +{ + const or_options_t *opts = NULL; + + tor_assert_nonfatal_once(in_main_thread()); + + opts = get_options(); + + /* If the user has set "__AlwaysCongesttionControl", + * then always try to negotiate congestion control, regardless + * of consensus param. This is to be used for testing and sbws. + * + * Note that we do *not* allow disabling congestion control + * if the consensus says to use it, as this is bad for queueing + * and fairness. */ + if (opts->AlwaysCongestionControl) + return 1; + + return cc_alg != CC_ALG_SENDME; +} + +/** + * For unit tests only: set the cached consensus cc alg to + * specified value. + */ +void +congestion_control_set_cc_enabled(void) +{ + cc_alg = CC_ALG_VEGAS; +} + +/** + * Allocate and initialize fields in congestion control object. + * + * cc_alg is the negotiated congestion control algorithm. + * + * sendme_inc is the number of packaged cells that a sendme cell + * acks. This parameter will come from circuit negotiation. + */ +static void +congestion_control_init(congestion_control_t *cc, + const circuit_params_t *params, + cc_path_t path) +{ + cc->sendme_pending_timestamps = smartlist_new(); + cc->sendme_arrival_timestamps = smartlist_new(); + + cc->in_slow_start = 1; + congestion_control_init_params(cc, params, path); + + cc->next_cc_event = CWND_UPDATE_RATE(cc); +} + +/** Allocate and initialize a new congestion control object */ +congestion_control_t * +congestion_control_new(const circuit_params_t *params, cc_path_t path) +{ + congestion_control_t *cc = tor_malloc_zero(sizeof(congestion_control_t)); + + congestion_control_init(cc, params, path); + + return cc; +} + +/** + * Free a congestion control object and its associated state. + */ +void +congestion_control_free_(congestion_control_t *cc) +{ + if (!cc) + return; + + SMARTLIST_FOREACH(cc->sendme_pending_timestamps, uint64_t *, t, tor_free(t)); + SMARTLIST_FOREACH(cc->sendme_arrival_timestamps, uint64_t *, t, tor_free(t)); + smartlist_free(cc->sendme_pending_timestamps); + smartlist_free(cc->sendme_arrival_timestamps); + + tor_free(cc); +} + +/** + * Enqueue a u64 timestamp to the end of a queue of timestamps. + */ +static inline void +enqueue_timestamp(smartlist_t *timestamps_u64, uint64_t timestamp_usec) +{ + uint64_t *timestamp_ptr = tor_malloc(sizeof(uint64_t)); + *timestamp_ptr = timestamp_usec; + + smartlist_add(timestamps_u64, timestamp_ptr); +} + +/** + * Peek at the head of a smartlist queue of u64 timestamps. + */ +static inline uint64_t +peek_timestamp(const smartlist_t *timestamps_u64_usecs) +{ + uint64_t *timestamp_ptr = smartlist_get(timestamps_u64_usecs, 0); + + if (BUG(!timestamp_ptr)) { + log_err(LD_CIRC, "Congestion control timestamp list became empty!"); + return 0; + } + + return *timestamp_ptr; +} + +/** + * Dequeue a u64 monotime usec timestamp from the front of a + * smartlist of pointers to 64. + */ +static inline uint64_t +dequeue_timestamp(smartlist_t *timestamps_u64_usecs) +{ + uint64_t *timestamp_ptr = smartlist_get(timestamps_u64_usecs, 0); + uint64_t timestamp_u64; + + if (BUG(!timestamp_ptr)) { + log_err(LD_CIRC, "Congestion control timestamp list became empty!"); + return 0; + } + + timestamp_u64 = *timestamp_ptr; + smartlist_del_keeporder(timestamps_u64_usecs, 0); + tor_free(timestamp_ptr); + + return timestamp_u64; +} + +/** + * Returns the number N of N-count EWMA, for averaging RTT and BDP over + * N SENDME acks. + * + * This N is bracketed between a divisor of the number of acks in a CWND + * and a max value. It is always at least 2. + */ +static inline uint64_t +n_ewma_count(const congestion_control_t *cc) +{ + uint64_t ewma_cnt = MIN(CWND_UPDATE_RATE(cc)*n_ewma_cwnd_pct/100, + n_ewma_max); + ewma_cnt = MAX(ewma_cnt, 2); + return ewma_cnt; +} + +/** + * Get a package window from either old sendme logic, or congestion control. + * + * A package window is how many cells you can still send. + */ +int +congestion_control_get_package_window(const circuit_t *circ, + const crypt_path_t *cpath) +{ + int package_window; + congestion_control_t *cc; + + tor_assert(circ); + + if (cpath) { + package_window = cpath->package_window; + cc = cpath->ccontrol; + } else { + package_window = circ->package_window; + cc = circ->ccontrol; + } + + if (!cc) { + return package_window; + } else { + /* Inflight can be above cwnd if cwnd was just reduced */ + if (cc->inflight > cc->cwnd) + return 0; + /* In the extremely unlikely event that cwnd-inflight is larger than + * INT32_MAX, just return that cap, so old code doesn't explode. */ + else if (cc->cwnd - cc->inflight > INT32_MAX) + return INT32_MAX; + else + return (int)(cc->cwnd - cc->inflight); + } +} + +/** + * Returns the number of cells that are acked by every sendme. + */ +int +sendme_get_inc_count(const circuit_t *circ, const crypt_path_t *layer_hint) +{ + int sendme_inc = CIRCWINDOW_INCREMENT; + congestion_control_t *cc = NULL; + + if (layer_hint) { + cc = layer_hint->ccontrol; + } else { + cc = circ->ccontrol; + } + + if (cc) { + sendme_inc = cc->sendme_inc; + } + + return sendme_inc; +} + +/** Return true iff the next cell we send will result in the other endpoint + * sending a SENDME. + * + * We are able to know that because the package or inflight window value minus + * one cell (the possible SENDME cell) should be a multiple of the + * cells-per-sendme increment value (set via consensus parameter, negotiated + * for the circuit, and passed in as sendme_inc). + * + * This function is used when recording a cell digest and this is done quite + * low in the stack when decrypting or encrypting a cell. The window is only + * updated once the cell is actually put in the outbuf. + */ +bool +circuit_sent_cell_for_sendme(const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + congestion_control_t *cc; + int window; + + tor_assert(circ); + + if (layer_hint) { + window = layer_hint->package_window; + cc = layer_hint->ccontrol; + } else { + window = circ->package_window; + cc = circ->ccontrol; + } + + /* If we are using congestion control and the alg is not + * old-school 'fixed', then use cc->inflight to determine + * when sendmes will be sent */ + if (cc) { + if (!cc->inflight) + return false; + + /* This check must be +1 because this function is called *before* + * inflight is incremented for the sent cell */ + if ((cc->inflight+1) % cc->sendme_inc != 0) + return false; + + return true; + } + + /* At the start of the window, no SENDME will be expected. */ + if (window == CIRCWINDOW_START) { + return false; + } + + /* Are we at the limit of the increment and if not, we don't expect next + * cell is a SENDME. + * + * We test against the window minus 1 because when we are looking if the + * next cell is a SENDME, the window (either package or deliver) hasn't been + * decremented just yet so when this is called, we are currently processing + * the "window - 1" cell. + */ + if (((window - 1) % CIRCWINDOW_INCREMENT) != 0) { + return false; + } + + /* Next cell is expected to be a SENDME. */ + return true; +} + +/** + * Call-in to tell congestion control code that this circuit sent a cell. + * + * This updates the 'inflight' counter, and if this is a cell that will + * cause the other end to send a SENDME, record the current time in a list + * of pending timestamps, so that we can later compute the circuit RTT when + * the SENDME comes back. */ +void +congestion_control_note_cell_sent(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *cpath) +{ + tor_assert(circ); + tor_assert(cc); + + /* Is this the last cell before a SENDME? The idea is that if the + * package_window reaches a multiple of the increment, after this cell, we + * should expect a SENDME. Note that this function must be called *before* + * we account for the sent cell. */ + if (!circuit_sent_cell_for_sendme(circ, cpath)) { + cc->inflight++; + return; + } + + cc->inflight++; + + /* Record this cell time for RTT computation when SENDME arrives */ + enqueue_timestamp(cc->sendme_pending_timestamps, + monotime_absolute_usec()); +} + +/** + * Returns true if any edge connections are active. + * + * We need to know this so that we can stop computing BDP if the + * edges are not sending on the circuit. + */ +static int +circuit_has_active_streams(const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + const edge_connection_t *streams; + + if (CIRCUIT_IS_ORIGIN(circ)) { + streams = CONST_TO_ORIGIN_CIRCUIT(circ)->p_streams; + } else { + streams = CONST_TO_OR_CIRCUIT(circ)->n_streams; + } + + /* Check linked list of streams */ + for (const edge_connection_t *conn = streams; conn != NULL; + conn = conn->next_stream) { + if (conn->base_.marked_for_close) + continue; + + if (!layer_hint || conn->cpath_layer == layer_hint) { + if (connection_get_inbuf_len(TO_CONN(conn)) > 0) { + log_info(LD_CIRC, "CC: More in edge inbuf..."); + return 1; + } + + /* If we did not reach EOF on this read, there's more */ + if (!TO_CONN(conn)->inbuf_reached_eof) { + log_info(LD_CIRC, "CC: More on edge conn..."); + return 1; + } + + if (TO_CONN(conn)->linked_conn) { + if (connection_get_inbuf_len(TO_CONN(conn)->linked_conn) > 0) { + log_info(LD_CIRC, "CC: More in linked inbuf..."); + return 1; + } + + /* If there is a linked conn, and *it* did not each EOF, + * there's more */ + if (!TO_CONN(conn)->linked_conn->inbuf_reached_eof) { + log_info(LD_CIRC, "CC: More on linked conn..."); + return 1; + } + } + } + } + + return 0; +} + +/** + * Upon receipt of a SENDME, pop the oldest timestamp off the timestamp + * list, and use this to update RTT. + * + * Returns true if circuit estimates were successfully updated, false + * otherwise. + */ +bool +congestion_control_update_circuit_estimates(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + uint64_t now_usec = monotime_absolute_usec(); + + /* Update RTT first, then BDP. BDP needs fresh RTT */ + uint64_t curr_rtt_usec = congestion_control_update_circuit_rtt(cc, now_usec); + return congestion_control_update_circuit_bdp(cc, circ, layer_hint, now_usec, + curr_rtt_usec); +} + +/** + * Returns true if we have enough time data to use heuristics + * to compare RTT to a baseline. + */ +static bool +time_delta_should_use_heuristics(const congestion_control_t *cc) +{ + + /* If we have exited slow start, we should have processed at least + * a cwnd worth of RTTs */ + if (!cc->in_slow_start) { + return true; + } + + /* If we managed to get enough acks to estimate a SENDME BDP, then + * we have enough to estimate clock jumps relative to a baseline, + * too. (This is at least 'cc_bwe_min' acks). */ + if (cc->bdp[BDP_ALG_SENDME_RATE]) { + return true; + } + + /* Not enough data to estimate clock jumps */ + return false; +} + +static bool is_monotime_clock_broken = false; + +/** + * Returns true if the monotime delta is 0, or is significantly + * different than the previous delta. Either case indicates + * that the monotime time source stalled or jumped. + * + * Also caches the clock state in the is_monotime_clock_broken flag, + * so we can also provide a is_monotime_clock_reliable() function, + * used by flow control rate timing. + */ +static bool +time_delta_stalled_or_jumped(const congestion_control_t *cc, + uint64_t old_delta, uint64_t new_delta) +{ +#define DELTA_DISCREPENCY_RATIO_MAX 5000 + /* If we have a 0 new_delta, that is definitely a monotime stall */ + if (new_delta == 0) { + static ratelim_t stall_info_limit = RATELIM_INIT(60); + log_fn_ratelim(&stall_info_limit, LOG_INFO, LD_CIRC, + "Congestion control cannot measure RTT due to monotime stall."); + + /* If delta is every 0, the monotime clock has stalled, and we should + * not use it anywhere. */ + is_monotime_clock_broken = true; + + return is_monotime_clock_broken; + } + + /* If the old_delta is 0, we have no previous values on this circuit. + * + * So, return the global monotime status from other circuits, and + * do not update. + */ + if (old_delta == 0) { + return is_monotime_clock_broken; + } + + /* + * For the heuristic cases, we need at least a few timestamps, + * to average out any previous partial stalls or jumps. So until + * than point, let's just use the cached status from other circuits. + */ + if (!time_delta_should_use_heuristics(cc)) { + return is_monotime_clock_broken; + } + + /* If old_delta is significantly larger than new_delta, then + * this means that the monotime clock recently stopped moving + * forward. */ + if (old_delta > new_delta * DELTA_DISCREPENCY_RATIO_MAX) { + static ratelim_t dec_notice_limit = RATELIM_INIT(300); + log_fn_ratelim(&dec_notice_limit, LOG_NOTICE, LD_CIRC, + "Sudden decrease in circuit RTT (%"PRIu64" vs %"PRIu64 + "), likely due to clock jump.", + new_delta/1000, old_delta/1000); + + is_monotime_clock_broken = true; + + return is_monotime_clock_broken; + } + + /* If new_delta is significantly larger than old_delta, then + * this means that the monotime clock suddenly jumped forward. */ + if (new_delta > old_delta * DELTA_DISCREPENCY_RATIO_MAX) { + static ratelim_t dec_notice_limit = RATELIM_INIT(300); + log_fn_ratelim(&dec_notice_limit, LOG_NOTICE, LD_CIRC, + "Sudden increase in circuit RTT (%"PRIu64" vs %"PRIu64 + "), likely due to clock jump.", + new_delta/1000, old_delta/1000); + + is_monotime_clock_broken = true; + + return is_monotime_clock_broken; + } + + /* All good! Update cached status, too */ + is_monotime_clock_broken = false; + + return is_monotime_clock_broken; +} + +/** + * Is the monotime clock stalled according to any circuits? + */ +bool +is_monotime_clock_reliable(void) +{ + return !is_monotime_clock_broken; +} + +/** + * Called when we get a SENDME. Updates circuit RTT by pulling off a + * timestamp of when we sent the CIRCWINDOW_INCREMENT-th cell from + * the queue of such timestamps, and comparing that to current time. + * + * Also updates min, max, and EWMA of RTT. + * + * Returns the current circuit RTT in usecs, or 0 if it could not be + * measured (due to clock jump, stall, etc). + */ +static uint64_t +congestion_control_update_circuit_rtt(congestion_control_t *cc, + uint64_t now_usec) +{ + uint64_t rtt, ewma_cnt; + uint64_t sent_at_timestamp; + + tor_assert(cc); + + /* Get the time that we sent the cell that resulted in the other + * end sending this sendme. Use this to calculate RTT */ + sent_at_timestamp = dequeue_timestamp(cc->sendme_pending_timestamps); + + rtt = now_usec - sent_at_timestamp; + + /* Do not update RTT at all if it looks fishy */ + if (time_delta_stalled_or_jumped(cc, cc->ewma_rtt_usec, rtt)) { + return 0; + } + + ewma_cnt = n_ewma_count(cc); + + cc->ewma_rtt_usec = n_count_ewma(rtt, cc->ewma_rtt_usec, ewma_cnt); + + if (rtt > cc->max_rtt_usec) { + cc->max_rtt_usec = rtt; + } + + if (cc->min_rtt_usec == 0 || rtt < cc->min_rtt_usec) { + cc->min_rtt_usec = rtt; + } + + return rtt; +} + +/** + * Called when we get a SENDME. Updates the bandwidth-delay-product (BDP) + * estimates of a circuit. Several methods of computing BDP are used, + * depending on scenario. While some congestion control algorithms only + * use one of these methods, we update them all because it's quick and easy. + * + * - now_usec is the current monotime in usecs. + * - curr_rtt_usec is the current circuit RTT in usecs. It may be 0 if no + * RTT could bemeasured. + * + * Returns true if we were able to update BDP, false otherwise. + */ +static bool +congestion_control_update_circuit_bdp(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint, + uint64_t now_usec, + uint64_t curr_rtt_usec) +{ + int chan_q = 0; + unsigned int blocked_on_chan = 0; + uint64_t timestamp_usec; + uint64_t sendme_rate_bdp = 0; + + tor_assert(cc); + + if (CIRCUIT_IS_ORIGIN(circ)) { + /* origin circs use n_chan */ + chan_q = circ->n_chan_cells.n; + blocked_on_chan = circ->streams_blocked_on_n_chan; + } else { + /* Both onion services and exits use or_circuit and p_chan */ + chan_q = CONST_TO_OR_CIRCUIT(circ)->p_chan_cells.n; + blocked_on_chan = circ->streams_blocked_on_p_chan; + } + + /* If we have no EWMA RTT, it is because monotime has been stalled + * or messed up the entire time so far. Set our BDP estimates directly + * to current cwnd */ + if (!cc->ewma_rtt_usec) { + uint64_t cwnd = cc->cwnd; + + /* If the channel is blocked, keep subtracting off the chan_q + * until we hit the min cwnd. */ + if (blocked_on_chan) { + cwnd = MAX(cwnd - chan_q, cc->cwnd_min); + cc->blocked_chan = 1; + } else { + cc->blocked_chan = 0; + } + + cc->bdp[BDP_ALG_CWND_RTT] = cwnd; + cc->bdp[BDP_ALG_INFLIGHT_RTT] = cwnd; + cc->bdp[BDP_ALG_SENDME_RATE] = cwnd; + cc->bdp[BDP_ALG_PIECEWISE] = cwnd; + + static ratelim_t dec_notice_limit = RATELIM_INIT(300); + log_fn_ratelim(&dec_notice_limit, LOG_NOTICE, LD_CIRC, + "Our clock has been stalled for the entire lifetime of a circuit. " + "Performance may be sub-optimal."); + + return blocked_on_chan; + } + + /* Congestion window based BDP will respond to changes in RTT only, and is + * relative to cwnd growth. It is useful for correcting for BDP + * overestimation, but if BDP is higher than the current cwnd, it will + * underestimate it. + * + * We multiply here first to avoid precision issues from min_RTT being + * close to ewma RTT. Since all fields are u64, there is plenty of + * room here to multiply first. + */ + cc->bdp[BDP_ALG_CWND_RTT] = cc->cwnd*cc->min_rtt_usec/cc->ewma_rtt_usec; + + /* + * If we have no pending streams, we do not have enough data to fill + * the BDP, so preserve our old estimates but do not make any more. + */ + if (!blocked_on_chan && !circuit_has_active_streams(circ, layer_hint)) { + log_info(LD_CIRC, + "CC: Streams drained. Spare package window: %"PRIu64 + ", no BDP update", cc->cwnd - cc->inflight); + + /* Clear SENDME timestamps; they will be wrong with intermittent data */ + SMARTLIST_FOREACH(cc->sendme_arrival_timestamps, uint64_t *, t, + tor_free(t)); + smartlist_clear(cc->sendme_arrival_timestamps); + } else if (curr_rtt_usec && is_monotime_clock_reliable()) { + /* Sendme-based BDP will quickly measure BDP in much less than + * a cwnd worth of data when in use (in 2-10 SENDMEs). + * + * But if the link goes idle, it will be vastly lower than true BDP. Hence + * we only compute it if we have either pending stream data, or streams + * are still blocked on the channel queued data. + * + * We also do not compute it if we do not have a current RTT passed in, + * because that means that monotime is currently stalled or just jumped. + */ + enqueue_timestamp(cc->sendme_arrival_timestamps, now_usec); + + if (smartlist_len(cc->sendme_arrival_timestamps) >= bwe_sendme_min) { + /* If we have more sendmes than fit in a cwnd, trim the list. + * Those are not acurrately measuring throughput, if cwnd is + * currently smaller than BDP */ + while (smartlist_len(cc->sendme_arrival_timestamps) > + bwe_sendme_min && + (uint64_t)smartlist_len(cc->sendme_arrival_timestamps) > + n_ewma_count(cc)) { + (void)dequeue_timestamp(cc->sendme_arrival_timestamps); + } + int sendme_cnt = smartlist_len(cc->sendme_arrival_timestamps); + + /* Calculate SENDME_BWE_COUNT pure average */ + timestamp_usec = peek_timestamp(cc->sendme_arrival_timestamps); + uint64_t delta = now_usec - timestamp_usec; + + /* In Shadow, the time delta between acks can be 0 if there is no + * network activity between them. Only update BDP if the delta is + * non-zero. */ + if (delta > 0) { + /* The acked data is in sendme_cnt-1 chunks, because we are counting + * the data that is processed by the other endpoint *between* all of + * these sendmes. There's one less gap between the sendmes than the + * number of sendmes. */ + uint64_t cells = (sendme_cnt-1)*cc->sendme_inc; + + /* The bandwidth estimate is cells/delta, which when multiplied + * by min RTT obtains the BDP. However, we multiply first to + * avoid precision issues with the RTT being close to delta in size. */ + sendme_rate_bdp = cells*cc->min_rtt_usec/delta; + + /* Calculate BDP_EWMA_COUNT N-EWMA */ + cc->bdp[BDP_ALG_SENDME_RATE] = + n_count_ewma(sendme_rate_bdp, cc->bdp[BDP_ALG_SENDME_RATE], + n_ewma_count(cc)); + } + } + + /* In-flight BDP will cause the cwnd to drift down when underutilized. + * It is most useful when the local OR conn is blocked, so we only + * compute it if we're utilized. */ + cc->bdp[BDP_ALG_INFLIGHT_RTT] = + (cc->inflight - chan_q)*cc->min_rtt_usec/ + MAX(cc->ewma_rtt_usec, curr_rtt_usec); + } else { + /* We can still update inflight with just an EWMA RTT, but only + * if there is data flowing */ + cc->bdp[BDP_ALG_INFLIGHT_RTT] = + (cc->inflight - chan_q)*cc->min_rtt_usec/cc->ewma_rtt_usec; + } + + /* The orconn is blocked; use smaller of inflight vs SENDME */ + if (blocked_on_chan) { + log_info(LD_CIRC, "CC: Streams blocked on circ channel. Chanq: %d", + chan_q); + + /* A blocked channel is an immediate congestion signal, but it still + * happens only once per cwnd */ + if (!cc->blocked_chan) { + cc->next_cc_event = 0; + cc->blocked_chan = 1; + } + + if (cc->bdp[BDP_ALG_SENDME_RATE]) { + cc->bdp[BDP_ALG_PIECEWISE] = MIN(cc->bdp[BDP_ALG_INFLIGHT_RTT], + cc->bdp[BDP_ALG_SENDME_RATE]); + } else { + cc->bdp[BDP_ALG_PIECEWISE] = cc->bdp[BDP_ALG_INFLIGHT_RTT]; + } + } else { + /* If we were previously blocked, emit a new congestion event + * now that we are unblocked, to re-evaluate cwnd */ + if (cc->blocked_chan) { + cc->blocked_chan = 0; + cc->next_cc_event = 0; + log_info(LD_CIRC, "CC: Streams un-blocked on circ channel. Chanq: %d", + chan_q); + } + + cc->bdp[BDP_ALG_PIECEWISE] = MAX(cc->bdp[BDP_ALG_SENDME_RATE], + cc->bdp[BDP_ALG_CWND_RTT]); + } + + /* We can end up with no piecewise value if we didn't have either + * a SENDME estimate or enough data for an inflight estimate. + * It also happens on the very first sendme, since we need two + * to get a BDP. In these cases, use the cwnd method. */ + if (!cc->bdp[BDP_ALG_PIECEWISE]) { + cc->bdp[BDP_ALG_PIECEWISE] = cc->bdp[BDP_ALG_CWND_RTT]; + log_info(LD_CIRC, "CC: No piecewise BDP. Using %"PRIu64, + cc->bdp[BDP_ALG_PIECEWISE]); + } + + if (cc->next_cc_event == 0) { + if (CIRCUIT_IS_ORIGIN(circ)) { + log_info(LD_CIRC, + "CC: Circuit %d " + "SENDME RTT: %"PRIu64", %"PRIu64", %"PRIu64", %"PRIu64", " + "BDP estimates: " + "%"PRIu64", " + "%"PRIu64", " + "%"PRIu64", " + "%"PRIu64", " + "%"PRIu64". ", + CONST_TO_ORIGIN_CIRCUIT(circ)->global_identifier, + cc->min_rtt_usec/1000, + curr_rtt_usec/1000, + cc->ewma_rtt_usec/1000, + cc->max_rtt_usec/1000, + cc->bdp[BDP_ALG_INFLIGHT_RTT], + cc->bdp[BDP_ALG_CWND_RTT], + sendme_rate_bdp, + cc->bdp[BDP_ALG_SENDME_RATE], + cc->bdp[BDP_ALG_PIECEWISE] + ); + } else { + log_info(LD_CIRC, + "CC: Circuit %"PRIu64":%d " + "SENDME RTT: %"PRIu64", %"PRIu64", %"PRIu64", %"PRIu64", " + "%"PRIu64", " + "%"PRIu64", " + "%"PRIu64", " + "%"PRIu64", " + "%"PRIu64". ", + CONST_TO_OR_CIRCUIT(circ)->p_chan->global_identifier, + CONST_TO_OR_CIRCUIT(circ)->p_circ_id, + cc->min_rtt_usec/1000, + curr_rtt_usec/1000, + cc->ewma_rtt_usec/1000, + cc->max_rtt_usec/1000, + cc->bdp[BDP_ALG_INFLIGHT_RTT], + cc->bdp[BDP_ALG_CWND_RTT], + sendme_rate_bdp, + cc->bdp[BDP_ALG_SENDME_RATE], + cc->bdp[BDP_ALG_PIECEWISE] + ); + } + } + + /* We updated BDP this round if either we had a blocked channel, or + * the curr_rtt_usec was not 0. */ + bool ret = (blocked_on_chan || curr_rtt_usec != 0); + if (ret) { + tor_trace(TR_SUBSYS(cc), TR_EV(bdp_update), circ, cc, curr_rtt_usec, + sendme_rate_bdp); + } + return ret; +} + +/** + * Dispatch the sendme to the appropriate congestion control algorithm. + */ +int +congestion_control_dispatch_cc_alg(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + int ret = -END_CIRC_REASON_INTERNAL; + switch (cc->cc_alg) { + case CC_ALG_WESTWOOD: + ret = congestion_control_westwood_process_sendme(cc, circ, layer_hint); + break; + + case CC_ALG_VEGAS: + ret = congestion_control_vegas_process_sendme(cc, circ, layer_hint); + break; + + case CC_ALG_NOLA: + ret = congestion_control_nola_process_sendme(cc, circ, layer_hint); + break; + + case CC_ALG_SENDME: + default: + tor_assert(0); + } + + if (cc->cwnd > cwnd_max) { + static ratelim_t cwnd_limit = RATELIM_INIT(60); + log_fn_ratelim(&cwnd_limit, LOG_NOTICE, LD_CIRC, + "Congestion control cwnd %"PRIu64" exceeds max %d, clamping.", + cc->cwnd, cwnd_max); + cc->cwnd = cwnd_max; + } + + return ret; +} + +/** + * Build an extension field request to negotiate congestion control. + * + * If congestion control is enabled, field TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST + * is created in msg_out. It is a single 0-length field that signifies that we + * want to use congestion control. The length of msg_out is provided via + * msg_len_out. + * + * If congestion control is not enabled, a payload with 0 extensions is created + * and returned. + * + * If there is a failure building the request, -1 is returned, else 0. + * + * *msg_out must be freed if the return value is 0. + */ +int +congestion_control_build_ext_request(uint8_t **msg_out, size_t *msg_len_out) +{ + uint8_t *request = NULL; + trn_extension_t *ext = NULL; + trn_extension_field_t *field = NULL; + + ext = trn_extension_new(); + + /* With congestion control enabled, add the request, else it is an empty + * request in the payload. */ + + if (congestion_control_enabled()) { + /* Build the extension field that will hold the CC field. */ + field = trn_extension_field_new(); + trn_extension_field_set_field_type(field, + TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST); + + /* No payload indicating a request to use congestion control. */ + trn_extension_field_set_field_len(field, 0); + + /* Build final extension. */ + trn_extension_add_fields(ext, field); + trn_extension_set_num(ext, 1); + } + + /* Encode extension. */ + ssize_t ret = trn_extension_encoded_len(ext); + if (BUG(ret < 0)) { + goto err; + } + size_t request_len = ret; + request = tor_malloc_zero(request_len); + ret = trn_extension_encode(request, request_len, ext); + if (BUG(ret < 0)) { + tor_free(request); + goto err; + } + *msg_out = request; + *msg_len_out = request_len; + + /* Free everything, we've encoded the request now. */ + ret = 0; + + err: + trn_extension_free(ext); + return (int)ret; +} + +/** + * Parse a congestion control ntorv3 request payload for extensions. + * + * On parsing failure, -1 is returned. + * + * If congestion control request is present, return 1. If it is not present, + * return 0. + * + * WARNING: Called from CPU worker! Must not access any global state. + */ +int +congestion_control_parse_ext_request(const uint8_t *msg, const size_t msg_len) +{ + ssize_t ret = 0; + trn_extension_t *ext = NULL; + size_t num_fields = 0; + + /* Parse extension from payload. */ + ret = trn_extension_parse(&ext, msg, msg_len); + if (ret < 0) { + goto end; + } + + /* No extension implies no support for congestion control. In this case, we + * simply return 0 to indicate CC is disabled. */ + if ((num_fields = trn_extension_get_num(ext)) == 0) { + ret = 0; + goto end; + } + + /* Go over all fields. If any field is TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST, + * then congestion control is enabled. Ignore unknown fields. */ + for (size_t f = 0; f < num_fields; f++) { + const trn_extension_field_t *field = trn_extension_get_fields(ext, f); + if (field == NULL) { + ret = -1; + goto end; + } + + /* For congestion control to be enabled, we only need the field type. */ + if (trn_extension_field_get_field_type(field) == + TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST) { + ret = 1; + break; + } + } + + end: + trn_extension_free(ext); + return (int)ret; +} + +/** + * Given our observed parameters for circuits and congestion control, + * as well as the parameters for the resulting circuit, build a response + * payload using extension fields into *msg_out, with length specified in + * *msg_out_len. + * + * If congestion control will be enabled, the extension field for + * TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE will contain the sendme_inc value. + * + * If congestion control won't be enabled, an extension payload with 0 + * fields will be created. + * + * Return 0 if an extension payload was created in *msg_out, and -1 on + * error. + * + * *msg_out must be freed if the return value is 0. + * + * WARNING: Called from CPU worker! Must not access any global state. + */ +int +congestion_control_build_ext_response(const circuit_params_t *our_params, + const circuit_params_t *circ_params, + uint8_t **msg_out, size_t *msg_len_out) +{ + ssize_t ret; + uint8_t *request = NULL; + trn_extension_t *ext = NULL; + trn_extension_field_t *field = NULL; + trn_extension_field_cc_t *cc_field = NULL; + + tor_assert(our_params); + tor_assert(circ_params); + tor_assert(msg_out); + tor_assert(msg_len_out); + + ext = trn_extension_new(); + + if (circ_params->cc_enabled) { + /* Build the extension field that will hold the CC field. */ + field = trn_extension_field_new(); + trn_extension_field_set_field_type(field, + TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE); + + /* Build the congestion control field response. */ + cc_field = trn_extension_field_cc_new(); + trn_extension_field_cc_set_sendme_inc(cc_field, + our_params->sendme_inc_cells); + + ret = trn_extension_field_cc_encoded_len(cc_field); + if (BUG(ret <= 0)) { + trn_extension_field_free(field); + goto err; + } + size_t field_len = ret; + trn_extension_field_set_field_len(field, field_len); + trn_extension_field_setlen_field(field, field_len); + + uint8_t *field_array = trn_extension_field_getarray_field(field); + ret = trn_extension_field_cc_encode(field_array, + trn_extension_field_getlen_field(field), cc_field); + if (BUG(ret <= 0)) { + trn_extension_field_free(field); + goto err; + } + + /* Build final extension. */ + trn_extension_add_fields(ext, field); + trn_extension_set_num(ext, 1); + } + + /* Encode extension. */ + ret = trn_extension_encoded_len(ext); + if (BUG(ret < 0)) { + goto err; + } + size_t request_len = ret; + request = tor_malloc_zero(request_len); + ret = trn_extension_encode(request, request_len, ext); + if (BUG(ret < 0)) { + tor_free(request); + goto err; + } + *msg_out = request; + *msg_len_out = request_len; + + /* We've just encoded the extension, clean everything. */ + ret = 0; + + err: + trn_extension_free(ext); + trn_extension_field_cc_free(cc_field); + return (int)ret; +} + +/** Return true iff the given sendme increment is within the acceptable + * margins. */ +bool +congestion_control_validate_sendme_increment(uint8_t sendme_inc) +{ + /* We will only accept this response (and this circuit) if sendme_inc + * is within a factor of 2 of our consensus value. We should not need + * to change cc_sendme_inc much, and if we do, we can spread out those + * changes over smaller increments once every 4 hours. Exits that + * violate this range should just not be used. */ +#define MAX_SENDME_INC_NEGOTIATE_FACTOR 2 + + if (sendme_inc == 0) + return false; + + if (sendme_inc > + MAX_SENDME_INC_NEGOTIATE_FACTOR * congestion_control_sendme_inc() || + sendme_inc < + congestion_control_sendme_inc() / MAX_SENDME_INC_NEGOTIATE_FACTOR) { + return false; + } + return true; +} + +/** Return 1 if CC is enabled which also will set the SENDME increment into our + * params_out. Return 0 if CC is disabled. Else, return -1 on error. */ +int +congestion_control_parse_ext_response(const uint8_t *msg, + const size_t msg_len, + circuit_params_t *params_out) +{ + ssize_t ret = 0; + size_t num_fields = 0; + trn_extension_t *ext = NULL; + trn_extension_field_cc_t *cc_field = NULL; + + /* We will only accept this response (and this circuit) if sendme_inc + * is within a factor of 2 of our consensus value. We should not need + * to change cc_sendme_inc much, and if we do, we can spread out those + * changes over smaller increments once every 4 hours. Exits that + * violate this range should just not be used. */ +#define MAX_SENDME_INC_NEGOTIATE_FACTOR 2 + + /* Parse extension from payload. */ + ret = trn_extension_parse(&ext, msg, msg_len); + if (ret < 0) { + goto end; + } + + if ((num_fields = trn_extension_get_num(ext)) == 0) { + ret = 0; + goto end; + } + + /* Go over all fields. If any field is TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE, + * then congestion control is enabled. Ignore unknown fields. */ + for (size_t f = 0; f < num_fields; f++) { + const trn_extension_field_t *field = trn_extension_get_fields(ext, f); + if (field == NULL) { + ret = -1; + goto end; + } + + /* Only examine TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE; ignore other fields */ + if (trn_extension_field_get_field_type(field) == + TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE) { + + /* Parse the field into the congestion control field. */ + ret = trn_extension_field_cc_parse(&cc_field, + trn_extension_field_getconstarray_field(field), + trn_extension_field_getlen_field(field)); + if (ret < 0) { + goto end; + } + + uint8_t sendme_inc_cells = + trn_extension_field_cc_get_sendme_inc(cc_field); + if (!congestion_control_validate_sendme_increment(sendme_inc_cells)) { + ret = -1; + goto end; + } + + /* All good. Get value and break */ + params_out->sendme_inc_cells = sendme_inc_cells; + ret = 1; + break; + } + } + + end: + trn_extension_free(ext); + trn_extension_field_cc_free(cc_field); + + return (int)ret; +} + +/** + * Returns a formatted string of fields containing congestion + * control information, for the CIRC_BW control port event. + * + * An origin circuit can have a ccontrol object directly on it, + * if it is an onion service, or onion client. Exit-bound clients + * will have the ccontrol on the cpath associated with their exit + * (the last one in the cpath list). + * + * WARNING: This function does not support leaky-pipe topology. It + * is to be used for control port information only. + */ +char * +congestion_control_get_control_port_fields(const origin_circuit_t *circ) +{ + const congestion_control_t *ccontrol = NULL; + char *ret = NULL; + int len; + + if (TO_CIRCUIT(circ)->ccontrol) { + ccontrol = TO_CIRCUIT(circ)->ccontrol; + } else if (circ->cpath && circ->cpath->prev->ccontrol) { + /* Get ccontrol for last hop (exit) if it exists */ + ccontrol = circ->cpath->prev->ccontrol; + } + + if (!ccontrol) + return NULL; + + len = tor_asprintf(&ret, + " SS=%d CWND=%"PRIu64" RTT=%"PRIu64" MIN_RTT=%"PRIu64, + ccontrol->in_slow_start, ccontrol->cwnd, + ccontrol->ewma_rtt_usec/1000, + ccontrol->min_rtt_usec/1000); + if (len < 0) { + log_warn(LD_BUG, "Unable to format event for controller."); + return NULL; + } + + return ret; +} diff --git a/src/core/or/congestion_control_common.h b/src/core/or/congestion_control_common.h new file mode 100644 index 0000000000..71e984f914 --- /dev/null +++ b/src/core/or/congestion_control_common.h @@ -0,0 +1,162 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_common.h + * \brief Public APIs for congestion control + **/ + +#ifndef TOR_CONGESTION_CONTROL_COMMON_H +#define TOR_CONGESTION_CONTROL_COMMON_H + +#include "core/crypto/onion_crypto.h" +#include "core/or/crypt_path_st.h" +#include "core/or/circuit_st.h" + +/* The maximum whole number of cells that can fit in a + * full TLS record. This is 31. */ +#define TLS_RECORD_MAX_CELLS ((16 * 1024) / CELL_MAX_NETWORK_SIZE) + +typedef struct congestion_control_t congestion_control_t; + +/** + * Specifies the path type to help choose congestion control + * parameters. Since these paths are different lengths, they + * will need different queue parameters. */ +typedef enum { + CC_PATH_EXIT = 0, + CC_PATH_ONION = 1, + CC_PATH_ONION_SOS = 2, + CC_PATH_ONION_VG = 3, + CC_PATH_SBWS = 4, +} cc_path_t; + +/** The length of a path for sbws measurement */ +#define SBWS_ROUTE_LEN 2 + +/** Wrapper for the free function, set the CC pointer to NULL after free */ +#define congestion_control_free(cc) \ + FREE_AND_NULL(congestion_control_t, congestion_control_free_, cc) + +void congestion_control_free_(congestion_control_t *cc); + +struct circuit_params_t; +congestion_control_t *congestion_control_new( + const struct circuit_params_t *params, + cc_path_t path); + +int congestion_control_dispatch_cc_alg(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint); + +void congestion_control_note_cell_sent(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *cpath); + +bool congestion_control_update_circuit_estimates(congestion_control_t *, + const circuit_t *, + const crypt_path_t *); + +int congestion_control_get_package_window(const circuit_t *, + const crypt_path_t *); + +int sendme_get_inc_count(const circuit_t *, const crypt_path_t *); +bool circuit_sent_cell_for_sendme(const circuit_t *, const crypt_path_t *); +bool is_monotime_clock_reliable(void); + +void congestion_control_new_consensus_params(const networkstatus_t *ns); + +bool congestion_control_enabled(void); + +int congestion_control_build_ext_request(uint8_t **msg_out, + size_t *msg_len_out); +int congestion_control_parse_ext_request(const uint8_t *msg, + const size_t msg_len); +int congestion_control_build_ext_response(const circuit_params_t *our_params, + const circuit_params_t *circ_params, + uint8_t **msg_out, + size_t *msg_len_out); +int congestion_control_parse_ext_response(const uint8_t *msg, + const size_t msg_len, + circuit_params_t *params_out); +bool congestion_control_validate_sendme_increment(uint8_t sendme_inc); +char *congestion_control_get_control_port_fields(const origin_circuit_t *); + +/* Ugh, C.. these are private. Use the getter instead, when + * external to the congestion control code. */ +extern uint32_t or_conn_highwater; +extern uint32_t or_conn_lowwater; +extern int32_t cell_queue_high; +extern int32_t cell_queue_low; +extern uint8_t cc_sendme_inc; + +/** Stop writing on an orconn when its outbuf is this large */ +static inline uint32_t +or_conn_highwatermark(void) +{ + return or_conn_highwater; +} + +/** Resume writing on an orconn when its outbuf is less than this */ +static inline uint32_t +or_conn_lowwatermark(void) +{ + return or_conn_lowwater; +} + +/** Stop reading on edge connections when we have this many cells + * waiting on the appropriate queue. */ +static inline int32_t +cell_queue_highwatermark(void) +{ + return cell_queue_high; +} + +/** Start reading from edge connections again when we get down to this many + * cells. */ +static inline int32_t +cell_queue_lowwatermark(void) +{ + return cell_queue_low; +} + +/** Returns the sendme inc rate cached from the most recent consensus */ +static inline uint8_t +congestion_control_sendme_inc(void) +{ + return cc_sendme_inc; +} + +/** + * Compute an N-count EWMA, aka N-EWMA. N-EWMA is defined as: + * EWMA = alpha*value + (1-alpha)*EWMA_prev + * with alpha = 2/(N+1). + * + * This works out to: + * EWMA = value*2/(N+1) + EMA_prev*(N-1)/(N+1) + * = (value*2 + EWMA_prev*(N-1))/(N+1) + */ +static inline uint64_t +n_count_ewma(uint64_t curr, uint64_t prev, uint64_t N) +{ + if (prev == 0) + return curr; + else + return (2*curr + (N-1)*prev)/(N+1); +} + +/* Private section starts. */ +#ifdef TOR_CONGESTION_CONTROL_PRIVATE + +/* + * Unit tests declaractions. + */ +#ifdef TOR_UNIT_TESTS + +void congestion_control_set_cc_enabled(void); + +#endif /* defined(TOR_UNIT_TESTS) */ + +#endif /* defined(TOR_CONGESTION_CONTROL_PRIVATE) */ + +#endif /* !defined(TOR_CONGESTION_CONTROL_COMMON_H) */ diff --git a/src/core/or/congestion_control_flow.c b/src/core/or/congestion_control_flow.c new file mode 100644 index 0000000000..ea2c0df42c --- /dev/null +++ b/src/core/or/congestion_control_flow.c @@ -0,0 +1,732 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_flow.c + * \brief Code that implements flow control for congestion controlled + * circuits. + */ + +#define TOR_CONGESTION_CONTROL_FLOW_PRIVATE + +#include "core/or/or.h" + +#include "core/or/relay.h" +#include "core/mainloop/connection.h" +#include "core/or/connection_edge.h" +#include "core/mainloop/mainloop.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_flow.h" +#include "core/or/congestion_control_st.h" +#include "core/or/circuitlist.h" +#include "core/or/trace_probes_cc.h" +#include "feature/nodelist/networkstatus.h" +#include "trunnel/flow_control_cells.h" +#include "feature/control/control_events.h" + +#include "core/or/connection_st.h" +#include "core/or/cell_st.h" +#include "app/config/config.h" + +/** Cache consensus parameters */ +static uint32_t xoff_client; +static uint32_t xoff_exit; + +static uint32_t xon_change_pct; +static uint32_t xon_ewma_cnt; +static uint32_t xon_rate_bytes; + +/* In normal operation, we can get a burst of up to 32 cells before returning + * to libevent to flush the outbuf. This is a heuristic from hardcoded values + * and strange logic in connection_bucket_get_share(). */ +#define MAX_EXPECTED_CELL_BURST 32 + +/* The following three are for dropmark rate limiting. They define when we + * scale down our XON, XOFF, and xmit byte counts. Early scaling is beneficial + * because it limits the ability of spurious XON/XOFF to be sent after large + * amounts of data without XON/XOFF. At these limits, after 10MB of data (or + * more), an adversary can only inject (log2(10MB)-log2(200*500))*100 ~= 1000 + * cells of fake XOFF/XON before the xmit byte count will be halved enough to + * triggering a limit. */ +#define XON_COUNT_SCALE_AT 200 +#define XOFF_COUNT_SCALE_AT 200 +#define ONE_MEGABYTE (UINT64_C(1) << 20) +#define TOTAL_XMIT_SCALE_AT (10 * ONE_MEGABYTE) + +/** + * Return the congestion control object of the given edge connection. + * + * Returns NULL if the edge connection doesn't have a cpath_layer or not + * attached to a circuit. But also if the cpath_layer or circuit doesn't have a + * congestion control object. + */ +static inline const congestion_control_t * +edge_get_ccontrol(const edge_connection_t *edge) +{ + congestion_control_t *ccontrol = NULL; + + if (edge->on_circuit && edge->on_circuit->ccontrol) { + ccontrol = edge->on_circuit->ccontrol; + } else if (edge->cpath_layer && edge->cpath_layer->ccontrol) { + ccontrol = edge->cpath_layer->ccontrol; + } + + return ccontrol; +} + +/** + * Update global congestion control related consensus parameter values, every + * consensus update. + * + * More details for each of the parameters can be found in proposal 324, + * section 6.5 including tuning notes. + */ +void +flow_control_new_consensus_params(const networkstatus_t *ns) +{ +#define CC_XOFF_CLIENT_DFLT 500 +#define CC_XOFF_CLIENT_MIN 1 +#define CC_XOFF_CLIENT_MAX 10000 + xoff_client = networkstatus_get_param(ns, "cc_xoff_client", + CC_XOFF_CLIENT_DFLT, + CC_XOFF_CLIENT_MIN, + CC_XOFF_CLIENT_MAX)*RELAY_PAYLOAD_SIZE; + +#define CC_XOFF_EXIT_DFLT 500 +#define CC_XOFF_EXIT_MIN 1 +#define CC_XOFF_EXIT_MAX 10000 + xoff_exit = networkstatus_get_param(ns, "cc_xoff_exit", + CC_XOFF_EXIT_DFLT, + CC_XOFF_EXIT_MIN, + CC_XOFF_EXIT_MAX)*RELAY_PAYLOAD_SIZE; + +#define CC_XON_CHANGE_PCT_DFLT 25 +#define CC_XON_CHANGE_PCT_MIN 1 +#define CC_XON_CHANGE_PCT_MAX 99 + xon_change_pct = networkstatus_get_param(ns, "cc_xon_change_pct", + CC_XON_CHANGE_PCT_DFLT, + CC_XON_CHANGE_PCT_MIN, + CC_XON_CHANGE_PCT_MAX); + +#define CC_XON_RATE_BYTES_DFLT (500) +#define CC_XON_RATE_BYTES_MIN (1) +#define CC_XON_RATE_BYTES_MAX (5000) + xon_rate_bytes = networkstatus_get_param(ns, "cc_xon_rate", + CC_XON_RATE_BYTES_DFLT, + CC_XON_RATE_BYTES_MIN, + CC_XON_RATE_BYTES_MAX)*RELAY_PAYLOAD_SIZE; + +#define CC_XON_EWMA_CNT_DFLT (2) +#define CC_XON_EWMA_CNT_MIN (2) +#define CC_XON_EWMA_CNT_MAX (100) + xon_ewma_cnt = networkstatus_get_param(ns, "cc_xon_ewma_cnt", + CC_XON_EWMA_CNT_DFLT, + CC_XON_EWMA_CNT_MIN, + CC_XON_EWMA_CNT_MAX); +} + +/** + * Send an XOFF for this stream, and note that we sent one + */ +static void +circuit_send_stream_xoff(edge_connection_t *stream) +{ + xoff_cell_t xoff; + uint8_t payload[CELL_PAYLOAD_SIZE]; + ssize_t xoff_size; + + memset(&xoff, 0, sizeof(xoff)); + memset(payload, 0, sizeof(payload)); + + xoff_cell_set_version(&xoff, 0); + + if ((xoff_size = xoff_cell_encode(payload, CELL_PAYLOAD_SIZE, &xoff)) < 0) { + log_warn(LD_BUG, "Failed to encode xon cell"); + return; + } + + if (connection_edge_send_command(stream, RELAY_COMMAND_XOFF, + (char*)payload, (size_t)xoff_size) == 0) { + stream->xoff_sent = true; + + /* If this is an entry conn, notify control port */ + if (TO_CONN(stream)->type == CONN_TYPE_AP) { + control_event_stream_status(TO_ENTRY_CONN(TO_CONN(stream)), + STREAM_EVENT_XOFF_SENT, + 0); + } + } +} + +/** + * Compute the recent drain rate (write rate) for this edge + * connection and return it, in KB/sec (1000 bytes/sec). + * + * Returns 0 if the monotime clock is busted. + */ +static inline uint32_t +compute_drain_rate(const edge_connection_t *stream) +{ + if (BUG(!is_monotime_clock_reliable())) { + log_warn(LD_BUG, "Computing drain rate with stalled monotime clock"); + return 0; + } + + uint64_t delta = monotime_absolute_usec() - stream->drain_start_usec; + + if (delta == 0) { + log_warn(LD_BUG, "Computing stream drain rate with zero time delta"); + return 0; + } + + /* Overflow checks */ + if (stream->prev_drained_bytes > INT32_MAX/1000 || /* Intermediate */ + stream->prev_drained_bytes/delta > INT32_MAX/1000) { /* full value */ + return INT32_MAX; + } + + /* kb/sec = bytes/usec * 1000 usec/msec * 1000 msec/sec * kb/1000bytes */ + return MAX(1, (uint32_t)(stream->prev_drained_bytes * 1000)/delta); +} + +/** + * Send an XON for this stream, with appropriate advisory rate information. + * + * Reverts the xoff sent status, and stores the rate information we sent, + * in case it changes. + */ +static void +circuit_send_stream_xon(edge_connection_t *stream) +{ + xon_cell_t xon; + uint8_t payload[CELL_PAYLOAD_SIZE]; + ssize_t xon_size; + + memset(&xon, 0, sizeof(xon)); + memset(payload, 0, sizeof(payload)); + + xon_cell_set_version(&xon, 0); + xon_cell_set_kbps_ewma(&xon, stream->ewma_drain_rate); + + if ((xon_size = xon_cell_encode(payload, CELL_PAYLOAD_SIZE, &xon)) < 0) { + log_warn(LD_BUG, "Failed to encode xon cell"); + return; + } + + /* Store the advisory rate information, to send advisory updates if + * it changes */ + stream->ewma_rate_last_sent = stream->ewma_drain_rate; + + if (connection_edge_send_command(stream, RELAY_COMMAND_XON, (char*)payload, + (size_t)xon_size) == 0) { + /* Revert the xoff sent status, so we can send another one if need be */ + stream->xoff_sent = false; + + /* If it's an entry conn, notify control port */ + if (TO_CONN(stream)->type == CONN_TYPE_AP) { + control_event_stream_status(TO_ENTRY_CONN(TO_CONN(stream)), + STREAM_EVENT_XON_SENT, + 0); + } + } +} + +/** + * Process a stream XOFF, parsing it, and then stopping reading on + * the edge connection. + * + * Record that we have received an xoff, so we know not to resume + * reading on this edge conn until we get an XON. + * + * Returns false if the XOFF did not validate; true if it does. + */ +bool +circuit_process_stream_xoff(edge_connection_t *conn, + const crypt_path_t *layer_hint, + const cell_t *cell) +{ + (void)cell; + bool retval = true; + + if (BUG(!conn)) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got XOFF on invalid stream?"); + return false; + } + + /* Make sure this XOFF came from the right hop */ + if (layer_hint && layer_hint != conn->cpath_layer) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got XOFF from wrong hop."); + return false; + } + + if (edge_get_ccontrol(conn) == NULL) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got XOFF for non-congestion control circuit"); + return false; + } + + if (conn->xoff_received) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got multiple XOFF on connection"); + return false; + } + + /* If we are near the max, scale everything down */ + if (conn->num_xoff_recv == XOFF_COUNT_SCALE_AT) { + log_info(LD_EDGE, "Scaling down for XOFF count: %d %d %d", + conn->total_bytes_xmit, + conn->num_xoff_recv, + conn->num_xon_recv); + conn->total_bytes_xmit /= 2; + conn->num_xoff_recv /= 2; + conn->num_xon_recv /= 2; + } + + conn->num_xoff_recv++; + + /* Client-side check to make sure that XOFF is not sent too early, + * for dropmark attacks. The main sidechannel risk is early cells, + * but we also check to make sure that we have not received more XOFFs + * than could have been generated by the bytes we sent. + */ + if (TO_CONN(conn)->type == CONN_TYPE_AP || conn->hs_ident != NULL) { + uint32_t limit = 0; + if (conn->hs_ident) + limit = xoff_client; + else + limit = xoff_exit; + + if (conn->total_bytes_xmit < limit*conn->num_xoff_recv) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got extra XOFF for bytes sent. Got %d, expected max %d", + conn->num_xoff_recv, conn->total_bytes_xmit/limit); + /* We still process this, because the only dropmark defenses + * in C tor are via the vanguards addon's use of the read valid + * cells. So just signal that we think this is not valid protocol + * data and proceed. */ + retval = false; + } + } + + log_info(LD_EDGE, "Got XOFF!"); + connection_stop_reading(TO_CONN(conn)); + conn->xoff_received = true; + + /* If this is an entry conn, notify control port */ + if (TO_CONN(conn)->type == CONN_TYPE_AP) { + control_event_stream_status(TO_ENTRY_CONN(TO_CONN(conn)), + STREAM_EVENT_XOFF_RECV, + 0); + } + + return retval; +} + +/** + * Process a stream XON, and if it validates, clear the xoff + * flag and resume reading on this edge connection. + * + * Also, use provided rate information to rate limit + * reading on this edge (or packagaing from it onto + * the circuit), to avoid XON/XOFF chatter. + * + * Returns true if the XON validates, false otherwise. + */ +bool +circuit_process_stream_xon(edge_connection_t *conn, + const crypt_path_t *layer_hint, + const cell_t *cell) +{ + xon_cell_t *xon; + bool retval = true; + + if (BUG(!conn)) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got XON on invalid stream?"); + return false; + } + + /* Make sure this XON came from the right hop */ + if (layer_hint && layer_hint != conn->cpath_layer) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got XON from wrong hop."); + return false; + } + + if (edge_get_ccontrol(conn) == NULL) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got XON for non-congestion control circuit"); + return false; + } + + if (xon_cell_parse(&xon, cell->payload+RELAY_HEADER_SIZE, + CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE) < 0) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Received malformed XON cell."); + return false; + } + + /* If we are near the max, scale everything down */ + if (conn->num_xon_recv == XON_COUNT_SCALE_AT) { + log_info(LD_EDGE, "Scaling down for XON count: %d %d %d", + conn->total_bytes_xmit, + conn->num_xoff_recv, + conn->num_xon_recv); + conn->total_bytes_xmit /= 2; + conn->num_xoff_recv /= 2; + conn->num_xon_recv /= 2; + } + + conn->num_xon_recv++; + + /* Client-side check to make sure that XON is not sent too early, + * for dropmark attacks. The main sidechannel risk is early cells, + * but we also check to see that we did not get more XONs than make + * sense for the number of bytes we sent. + */ + if (TO_CONN(conn)->type == CONN_TYPE_AP || conn->hs_ident != NULL) { + uint32_t limit = 0; + + if (conn->hs_ident) + limit = MIN(xoff_client, xon_rate_bytes); + else + limit = MIN(xoff_exit, xon_rate_bytes); + + if (conn->total_bytes_xmit < limit*conn->num_xon_recv) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Got extra XON for bytes sent. Got %d, expected max %d", + conn->num_xon_recv, conn->total_bytes_xmit/limit); + + /* We still process this, because the only dropmark defenses + * in C tor are via the vanguards addon's use of the read valid + * cells. So just signal that we think this is not valid protocol + * data and proceed. */ + retval = false; + } + } + + log_info(LD_EDGE, "Got XON: %d", xon->kbps_ewma); + + /* Adjust the token bucket of this edge connection with the drain rate in + * the XON. Rate is in bytes from kilobit (kpbs). */ + uint64_t rate = ((uint64_t) xon_cell_get_kbps_ewma(xon) * 1000); + if (rate == 0 || INT32_MAX < rate) { + /* No rate. */ + rate = INT32_MAX; + } + token_bucket_rw_adjust(&conn->bucket, (uint32_t) rate, (uint32_t) rate); + + if (conn->xoff_received) { + /* Clear the fact that we got an XOFF, so that this edge can + * start and stop reading normally */ + conn->xoff_received = false; + connection_start_reading(TO_CONN(conn)); + } + + /* If this is an entry conn, notify control port */ + if (TO_CONN(conn)->type == CONN_TYPE_AP) { + control_event_stream_status(TO_ENTRY_CONN(TO_CONN(conn)), + STREAM_EVENT_XON_RECV, + 0); + } + + xon_cell_free(xon); + + return retval; +} + +/** + * Called from sendme_stream_data_received(), when data arrives + * from a circuit to our edge's outbuf, to decide if we need to send + * an XOFF. + * + * Returns the amount of cells remaining until the buffer is full, at + * which point it sends an XOFF, and returns 0. + * + * Returns less than 0 if we have queued more than a congestion window + * worth of data and need to close the circuit. + */ +int +flow_control_decide_xoff(edge_connection_t *stream) +{ + size_t total_buffered = connection_get_outbuf_len(TO_CONN(stream)); + uint32_t buffer_limit_xoff = 0; + + if (BUG(edge_get_ccontrol(stream) == NULL)) { + log_err(LD_BUG, "Flow control called for non-congestion control circuit"); + return -1; + } + + /* Onion services and clients are typically localhost edges, so they + * need different buffering limits than exits do */ + if (TO_CONN(stream)->type == CONN_TYPE_AP || stream->hs_ident != NULL) { + buffer_limit_xoff = xoff_client; + } else { + buffer_limit_xoff = xoff_exit; + } + + if (total_buffered > buffer_limit_xoff) { + if (!stream->xoff_sent) { + log_info(LD_EDGE, "Sending XOFF: %"TOR_PRIuSZ" %d", + total_buffered, buffer_limit_xoff); + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xoff_sending), stream); + + circuit_send_stream_xoff(stream); + + /* Clear the drain rate. It is considered wrong if we + * got all the way to XOFF */ + stream->ewma_drain_rate = 0; + } + } + + /* If the outbuf has accumulated more than the expected burst limit of + * cells, then assume it is not draining, and call decide_xon. We must + * do this because writes only happen when the socket unblocks, so + * may not otherwise notice accumulation of data in the outbuf for + * advisory XONs. */ + if (total_buffered > MAX_EXPECTED_CELL_BURST*RELAY_PAYLOAD_SIZE) { + flow_control_decide_xon(stream, 0); + } + + /* Flow control always takes more data; we rely on the oomkiller to + * handle misbehavior. */ + return 0; +} + +/** + * Returns true if the stream's drain rate has changed significantly. + * + * Returns false if the monotime clock is stalled, or if we have + * no previous drain rate information. + */ +static bool +stream_drain_rate_changed(const edge_connection_t *stream) +{ + if (!is_monotime_clock_reliable()) { + return false; + } + + if (!stream->ewma_rate_last_sent) { + return false; + } + + if (stream->ewma_drain_rate > + (100+(uint64_t)xon_change_pct)*stream->ewma_rate_last_sent/100) { + return true; + } + + if (stream->ewma_drain_rate < + (100-(uint64_t)xon_change_pct)*stream->ewma_rate_last_sent/100) { + return true; + } + + return false; +} + +/** + * Called whenever we drain an edge connection outbuf by writing on + * its socket, to decide if it is time to send an xon. + * + * The n_written parameter tells us how many bytes we have written + * this time, which is used to compute the advisory drain rate fields. + */ +void +flow_control_decide_xon(edge_connection_t *stream, size_t n_written) +{ + size_t total_buffered = connection_get_outbuf_len(TO_CONN(stream)); + + /* Bounds check the number of drained bytes, and scale */ + if (stream->drained_bytes >= UINT32_MAX - n_written) { + /* Cut the bytes in half, and move the start time up halfway to now + * (if we have one). */ + stream->drained_bytes /= 2; + + if (stream->drain_start_usec) { + uint64_t now = monotime_absolute_usec(); + + stream->drain_start_usec = now - (now-stream->drain_start_usec)/2; + } + } + + /* Accumulate drained bytes since last rate computation */ + stream->drained_bytes += n_written; + + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xon), stream, n_written); + + /* Check for bad monotime clock and bytecount wrap */ + if (!is_monotime_clock_reliable()) { + /* If the monotime clock ever goes wrong, the safest thing to do + * is just clear our short-term rate info and wait for the clock to + * become reliable again.. */ + stream->drain_start_usec = 0; + stream->drained_bytes = 0; + } else { + /* If we have no drain start timestamp, and we still have + * remaining buffer, start the buffering counter */ + if (!stream->drain_start_usec && total_buffered > 0) { + log_debug(LD_EDGE, "Began edge buffering: %d %d %"TOR_PRIuSZ, + stream->ewma_rate_last_sent, + stream->ewma_drain_rate, + total_buffered); + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xon_drain_start), + stream); + stream->drain_start_usec = monotime_absolute_usec(); + stream->drained_bytes = 0; + } + } + + if (stream->drain_start_usec) { + /* If we have spent enough time in a queued state, update our drain + * rate. */ + if (stream->drained_bytes > xon_rate_bytes) { + /* No previous drained bytes means it is the first time we are computing + * it so use the value we just drained onto the socket as a baseline. It + * won't be accurate but it will be a start towards the right value. + * + * We have to do this in order to have a drain rate else we could be + * sending a drain rate of 0 in an XON which would be undesirable and + * basically like sending an XOFF. */ + if (stream->prev_drained_bytes == 0) { + stream->prev_drained_bytes = stream->drained_bytes; + } + uint32_t drain_rate = compute_drain_rate(stream); + /* Once the drain rate has been computed, note how many bytes we just + * drained so it can be used at the next calculation. We do this here + * because it gets reset once the rate is changed. */ + stream->prev_drained_bytes = stream->drained_bytes; + + if (drain_rate) { + stream->ewma_drain_rate = + (uint32_t)n_count_ewma(drain_rate, + stream->ewma_drain_rate, + xon_ewma_cnt); + log_debug(LD_EDGE, "Updating drain rate: %d %d %"TOR_PRIuSZ, + drain_rate, + stream->ewma_drain_rate, + total_buffered); + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xon_drain_update), + stream, drain_rate); + /* Reset recent byte counts. This prevents us from sending advisory + * XONs more frequent than every xon_rate_bytes. */ + stream->drained_bytes = 0; + stream->drain_start_usec = 0; + } + } + } + + /* If we don't have an XOFF outstanding, consider updating an + * old rate */ + if (!stream->xoff_sent) { + if (stream_drain_rate_changed(stream)) { + /* If we are still buffering and the rate changed, update + * advisory XON */ + log_info(LD_EDGE, "Sending rate-change XON: %d %d %"TOR_PRIuSZ, + stream->ewma_rate_last_sent, + stream->ewma_drain_rate, + total_buffered); + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xon_rate_change), stream); + circuit_send_stream_xon(stream); + } + } else if (total_buffered == 0) { + log_info(LD_EDGE, "Sending XON: %d %d %"TOR_PRIuSZ, + stream->ewma_rate_last_sent, + stream->ewma_drain_rate, + total_buffered); + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xon_partial_drain), stream); + circuit_send_stream_xon(stream); + } + + /* If the buffer has fully emptied, clear the drain timestamp, + * so we can total only bytes drained while outbuf is 0. */ + if (total_buffered == 0) { + stream->drain_start_usec = 0; + + /* After we've spent 'xon_rate_bytes' with the queue fully drained, + * double any rate we sent. */ + if (stream->drained_bytes >= xon_rate_bytes && + stream->ewma_rate_last_sent) { + stream->ewma_drain_rate = MIN(INT32_MAX, 2*stream->ewma_drain_rate); + + log_debug(LD_EDGE, + "Queue empty for xon_rate_limit bytes: %d %d", + stream->ewma_rate_last_sent, + stream->ewma_drain_rate); + tor_trace(TR_SUBSYS(cc), TR_EV(flow_decide_xon_drain_doubled), stream); + /* Resetting the drained bytes count. We need to keep its value as a + * previous so the drain rate calculation takes into account what was + * actually drain the last time. */ + stream->prev_drained_bytes = stream->drained_bytes; + stream->drained_bytes = 0; + } + } + + return; +} + +/** + * Note that we packaged some data on this stream. Used to enforce + * client-side dropmark limits + */ +void +flow_control_note_sent_data(edge_connection_t *stream, size_t len) +{ + /* If we are near the max, scale everything down */ + if (stream->total_bytes_xmit >= TOTAL_XMIT_SCALE_AT-len) { + log_info(LD_EDGE, "Scaling down for flow control xmit bytes:: %d %d %d", + stream->total_bytes_xmit, + stream->num_xoff_recv, + stream->num_xon_recv); + + stream->total_bytes_xmit /= 2; + stream->num_xoff_recv /= 2; + stream->num_xon_recv /= 2; + } + + stream->total_bytes_xmit += len; +} + +/** Returns true if an edge connection uses flow control */ +bool +edge_uses_flow_control(const edge_connection_t *stream) +{ + bool ret = (stream->on_circuit && stream->on_circuit->ccontrol) || + (stream->cpath_layer && stream->cpath_layer->ccontrol); + + /* All circuits with congestion control use flow control */ + return ret; +} + +/** + * Returns the max RTT for the circuit that carries this stream, + * as observed by congestion control. + */ +uint64_t +edge_get_max_rtt(const edge_connection_t *stream) +{ + if (stream->on_circuit && stream->on_circuit->ccontrol) + return stream->on_circuit->ccontrol->max_rtt_usec; + else if (stream->cpath_layer && stream->cpath_layer->ccontrol) + return stream->cpath_layer->ccontrol->max_rtt_usec; + + return 0; +} + +/** Returns true if a connection is an edge conn that uses flow control */ +bool +conn_uses_flow_control(connection_t *conn) +{ + bool ret = false; + + if (CONN_IS_EDGE(conn)) { + edge_connection_t *edge = TO_EDGE_CONN(conn); + + if (edge_uses_flow_control(edge)) { + ret = true; + } + } + + return ret; +} + diff --git a/src/core/or/congestion_control_flow.h b/src/core/or/congestion_control_flow.h new file mode 100644 index 0000000000..6c318027ea --- /dev/null +++ b/src/core/or/congestion_control_flow.h @@ -0,0 +1,48 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_flow.h + * \brief APIs for stream flow control on congestion controlled circuits. + **/ + +#ifndef TOR_CONGESTION_CONTROL_FLOW_H +#define TOR_CONGESTION_CONTROL_FLOW_H + +#include "core/or/crypt_path_st.h" +#include "core/or/circuit_st.h" +#include "core/or/edge_connection_st.h" + +void flow_control_new_consensus_params(const struct networkstatus_t *); + +bool circuit_process_stream_xoff(edge_connection_t *conn, + const crypt_path_t *layer_hint, + const cell_t *cell); +bool circuit_process_stream_xon(edge_connection_t *conn, + const crypt_path_t *layer_hint, + const cell_t *cell); + +int flow_control_decide_xoff(edge_connection_t *stream); +void flow_control_decide_xon(edge_connection_t *stream, size_t n_written); + +void flow_control_note_sent_data(edge_connection_t *stream, size_t len); + +bool edge_uses_flow_control(const edge_connection_t *stream); + +bool conn_uses_flow_control(connection_t *stream); + +uint64_t edge_get_max_rtt(const edge_connection_t *); + +/* Private section starts. */ +#ifdef TOR_CONGESTION_CONTROL_FLOW_PRIVATE + +/* + * Unit tests declaractions. + */ +#ifdef TOR_UNIT_TESTS + +#endif /* defined(TOR_UNIT_TESTS) */ + +#endif /* defined(TOR_CONGESTION_CONTROL_FLOW_PRIVATE) */ + +#endif /* !defined(TOR_CONGESTION_CONTROL_FLOW_H) */ diff --git a/src/core/or/congestion_control_nola.c b/src/core/or/congestion_control_nola.c new file mode 100644 index 0000000000..53bbf9e7b4 --- /dev/null +++ b/src/core/or/congestion_control_nola.c @@ -0,0 +1,139 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_nola.c + * \brief Code that implements the TOR_NOLA congestion control algorithm + * from Proposal #324. + */ + +#define TOR_CONGESTION_CONTROL_NOLA_PRIVATE + +#include "core/or/or.h" + +#include "core/or/crypt_path.h" +#include "core/or/or_circuit_st.h" +#include "core/or/sendme.h" +#include "core/or/congestion_control_st.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_nola.h" +#include "core/or/circuituse.h" +#include "core/or/circuitlist.h" +#include "core/or/origin_circuit_st.h" +#include "core/or/channel.h" +#include "feature/nodelist/networkstatus.h" +#include "feature/control/control_events.h" + +#define NOLA_BDP_OVERSHOOT 100 + +/** + * Cache NOLA consensus parameters. + */ +void +congestion_control_nola_set_params(congestion_control_t *cc) +{ + tor_assert(cc->cc_alg == CC_ALG_NOLA); + + cc->nola_params.bdp_overshoot = + networkstatus_get_param(NULL, "cc_nola_overshoot", + NOLA_BDP_OVERSHOOT, + 0, + 1000); +} + +/** +* Process a SENDME and update the congestion window according to the +* rules specified in TOR_NOLA of Proposal #324. +* +* TOR_NOLA updates the congestion window to match the current +* BDP estimate, every sendme. Because this can result in downward +* drift, a fixed overhead is added to the BDP estimate. This will +* cause some queuing, but ensures that the algorithm always uses +* the full BDP. +* +* To handle the case where the local orconn blocks, TOR_NOLA uses +* the 'piecewise' BDP estimate, which uses more a conservative BDP +* estimate method when blocking occurs, but a more aggressive BDP +* estimate when there is no local blocking. This minimizes local +* client queues. +*/ +int +congestion_control_nola_process_sendme(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + tor_assert(cc && cc->cc_alg == CC_ALG_NOLA); + tor_assert(circ); + + if (cc->next_cc_event) + cc->next_cc_event--; + + /* If we get a congestion event, the only thing NOLA + * does is note this as if we exited slow-start + * (which for NOLA just means we finished our ICW). */ + if (cc->next_cc_event == 0) { + if (cc->in_slow_start) { + cc->in_slow_start = 0; + + /* We need to report that slow start has exited ASAP, + * for sbws bandwidth measurement. */ + if (CIRCUIT_IS_ORIGIN(circ)) { + /* We must discard const here because the event modifies fields :/ */ + control_event_circ_bandwidth_used_for_circ( + TO_ORIGIN_CIRCUIT((circuit_t*)circ)); + } + } + } + + /* If we did not successfully update BDP, we must return. Otherwise, + * NOLA can drift downwards */ + if (!congestion_control_update_circuit_estimates(cc, circ, layer_hint)) { + cc->inflight = cc->inflight - cc->sendme_inc; + return 0; + } + + /* We overshoot the BDP by the cwnd_inc param amount, because BDP + * may otherwise drift down. This helps us probe for more capacity. + * But there is no sense to do it if the local channel is blocked. */ + if (cc->blocked_chan) + cc->cwnd = cc->bdp[cc->bdp_alg]; + else + cc->cwnd = cc->bdp[cc->bdp_alg] + cc->nola_params.bdp_overshoot; + + /* cwnd can never fall below 1 increment */ + cc->cwnd = MAX(cc->cwnd, cc->cwnd_min); + + if (CIRCUIT_IS_ORIGIN(circ)) { + log_info(LD_CIRC, + "CC TOR_NOLA: Circuit %d " + "CWND: %"PRIu64", " + "INFL: %"PRIu64", " + "NCCE: %"PRIu64", " + "SS: %d", + CONST_TO_ORIGIN_CIRCUIT(circ)->global_identifier, + cc->cwnd, + cc->inflight, + cc->next_cc_event, + cc->in_slow_start + ); + } else { + log_info(LD_CIRC, + "CC TOR_NOLA: Circuit %"PRIu64":%d " + "CWND: %"PRIu64", " + "INFL: %"PRIu64", " + "NCCE: %"PRIu64", " + "SS: %d", + CONST_TO_OR_CIRCUIT(circ)->p_chan->global_identifier, + CONST_TO_OR_CIRCUIT(circ)->p_circ_id, + cc->cwnd, + cc->inflight, + cc->next_cc_event, + cc->in_slow_start + ); + } + + /* Update inflight with ack */ + cc->inflight = cc->inflight - cc->sendme_inc; + + return 0; +} diff --git a/src/core/or/congestion_control_nola.h b/src/core/or/congestion_control_nola.h new file mode 100644 index 0000000000..9c7d6e0635 --- /dev/null +++ b/src/core/or/congestion_control_nola.h @@ -0,0 +1,33 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_nola.h + * \brief Private-ish APIs for the TOR_NOLA congestion control algorithm + **/ + +#ifndef TOR_CONGESTION_CONTROL_NOLA_H +#define TOR_CONGESTION_CONTROL_NOLA_H + +#include "core/or/crypt_path_st.h" +#include "core/or/circuit_st.h" + +/* Processing SENDME cell. */ +int congestion_control_nola_process_sendme(struct congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint); +void congestion_control_nola_set_params(struct congestion_control_t *cc); + +/* Private section starts. */ +#ifdef TOR_CONGESTION_CONTROL_NOLA_PRIVATE + +/* + * Unit tests declaractions. + */ +#ifdef TOR_UNIT_TESTS + +#endif /* defined(TOR_UNIT_TESTS) */ + +#endif /* defined(TOR_CONGESTION_CONTROL_NOLA_PRIVATE) */ + +#endif /* !defined(TOR_CONGESTION_CONTROL_NOLA_H) */ diff --git a/src/core/or/congestion_control_st.h b/src/core/or/congestion_control_st.h new file mode 100644 index 0000000000..bc547b59d9 --- /dev/null +++ b/src/core/or/congestion_control_st.h @@ -0,0 +1,255 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_st.h + * \brief Structure definitions for congestion control. + **/ + +#ifndef CONGESTION_CONTROL_ST_H +#define CONGESTION_CONTROL_ST_H + +#include "core/or/crypt_path_st.h" +#include "core/or/circuit_st.h" + +/** Signifies which sendme algorithm to use */ +typedef enum { + /** OG Tor fixed-sized circ and stream windows. It sucks, but it is important + * to make sure that the new algs can compete with the old garbage. */ + CC_ALG_SENDME = 0, + + /** + * Prop#324 TOR_WESTWOOD - Deliberately aggressive. Westwood may not even + * converge to fairness in some cases because max RTT will also increase + * on congestion, which boosts the Westwood RTT congestion threshold. So it + * can cause runaway queue bloat, which may or may not lead to a robot + * uprising... Ok that's Westworld, not Westwood. Still, we need to test + * Vegas and NOLA against something more aggressive to ensure they do not + * starve in the presence of cheaters. We also need to make sure cheaters + * trigger the oomkiller in those cases. + */ + CC_ALG_WESTWOOD = 1, + + /** + * Prop#324 TOR_VEGAS - TCP Vegas-style BDP tracker. Because Vegas backs off + * whenever it detects queue delay, it can be beaten out by more aggressive + * algs. However, in live network testing, it seems to do just fine against + * current SENDMEs. It outperforms Westwood and does not stall. */ + CC_ALG_VEGAS = 2, + + /** + * Prop#324: TOR_NOLA - NOLA looks the BDP right in the eye and uses it + * immediately as CWND. No slow start, no other congestion signals, no delay, + * no bullshit. Like TOR_VEGAS, it also uses aggressive BDP estimates, to + * avoid out-competition. It seems a bit better throughput than Vegas, + * but its agressive BDP and rapid updates may lead to more queue latency. */ + CC_ALG_NOLA = 3, +} cc_alg_t; + +/* Total number of CC algs in cc_alg_t enum */ +#define NUM_CC_ALGS (CC_ALG_NOLA+1) + +/** Signifies how we estimate circuit BDP */ +typedef enum { + /* CWND-based BDP will respond to changes in RTT only, and is relative + * to cwnd growth. So in slow-start, this will under-estimate BDP */ + BDP_ALG_CWND_RTT = 0, + + /* Sendme-based BDP will quickly measure BDP in less than + * a cwnd worth of data when in use. So it should be good for slow-start. + * But if the link goes idle, it will be vastly lower than true BDP. Thus, + * this estimate gets reset when the cwnd is not fully utilized. */ + BDP_ALG_SENDME_RATE = 1, + + /* Inflight BDP is similar to the cwnd estimator, except it uses + * packets inflight minus local circuit queues instead of current cwnd. + * Because it is strictly less than or equal to the cwnd, it will cause + * the cwnd to drift downward. It is only used if the local OR connection + * is blocked. */ + BDP_ALG_INFLIGHT_RTT = 2, + + /* The Piecewise BDP estimator uses the CWND estimator before there + * are sufficient SENDMEs to calculate the SENDME estimator. At that + * point, it uses the SENDME estimator, unless the local OR connection + * becomes blocked. In that case, it switches to the inflight estimator. */ + BDP_ALG_PIECEWISE = 3, + +} bdp_alg_t; + +/** Total number of BDP algs in bdp_alg_t enum */ +#define NUM_BDP_ALGS (BDP_ALG_PIECEWISE+1) + +/** Westwood algorithm parameters */ +struct westwood_params_t { + /** Cwnd backoff multiplier upon congestion (as percent) */ + uint8_t cwnd_backoff_m; + /** Max RTT backoff multiplier upon congestion (as percent) */ + uint8_t rtt_backoff_m; + + /** Threshold between min and max RTT, to signal congestion (percent) */ + uint8_t rtt_thresh; + + /** + * If true, use minimum of BDP and backoff multiplication in backoff. + * If false, use maximum of BDP and backoff multiplication in backoff. */ + bool min_backoff; +}; + +/** Vegas algorithm parameters. */ +struct vegas_params_t { + /** The queue use allowed before we exit slow start */ + uint16_t gamma; + /** The queue use below which we increment cwnd */ + uint16_t alpha; + /** The queue use above which we decrement cwnd */ + uint16_t beta; + /** The queue use at which we cap cwnd in steady state */ + uint16_t delta; + /** Weighted average (percent) between cwnd estimator and + * piecewise estimator. */ + uint8_t bdp_mix_pct; +}; + +/** NOLA consensus params */ +struct nola_params_t { + /** How many cells to add to BDP estimate to obtain cwnd */ + uint16_t bdp_overshoot; +}; + +/** Fields common to all congestion control algorithms */ +struct congestion_control_t { + /** + * Smartlist of uint64_t monotime usec timestamps of when we sent a data + * cell that is pending a sendme. FIFO queue that is managed similar to + * sendme_last_digests. */ + smartlist_t *sendme_pending_timestamps; + + /** + * Smartlist of uint64_t monotime timestamp of when sendme's arrived. + * FIFO queue that is managed similar to sendme_last_digests. + * Used to estimate circuitbandwidth and BDP. */ + smartlist_t *sendme_arrival_timestamps; + + /** RTT time data for congestion control. */ + uint64_t ewma_rtt_usec; + uint64_t min_rtt_usec; + uint64_t max_rtt_usec; + + /* BDP estimates by algorithm */ + uint64_t bdp[NUM_BDP_ALGS]; + + /** Congestion window */ + uint64_t cwnd; + + /** Number of cells in-flight (sent but awaiting SENDME ack). */ + uint64_t inflight; + + /** + * For steady-state: the number of sendme acks until we will acknowledge + * a congestion event again. It starts out as the number of sendme acks + * in a congestion window and is decremented each ack. When this reaches + * 0, it means we should examine our congestion algorithm conditions. + * In this way, we only react to one congestion event per congestion window. + * + * It is also reset to 0 immediately whenever the circuit's orconn is + * blocked, and when a previously blocked orconn is unblocked. + */ + uint64_t next_cc_event; + + /** Are we in slow start? */ + bool in_slow_start; + + /** Is the local channel blocked on us? That's a congestion signal */ + bool blocked_chan; + + /* The following parameters are cached from consensus values upon + * circuit setup. */ + + /** Percent of cwnd to increment by during slow start */ + uint16_t cwnd_inc_pct_ss; + + /** Number of cells to increment cwnd by during steady state */ + uint16_t cwnd_inc; + + /** Minimum congestion window (must be at least sendme_inc) */ + uint16_t cwnd_min; + + /** + * Number of times per congestion window to update based on congestion + * signals */ + uint8_t cwnd_inc_rate; + + /** + * Number of cells to ack with every sendme. Taken from consensus parameter + * and negotiation during circuit setup. */ + uint8_t sendme_inc; + + /** Which congestion control algorithm to use. Taken from + * consensus parameter and negotiation during circuit setup. */ + cc_alg_t cc_alg; + + /** Which algorithm to estimate circuit bandwidth with. Taken from + * consensus parameter during circuit setup. */ + bdp_alg_t bdp_alg; + + /** Algorithm-specific parameters. The specific struct that is used + * depends upon the algorithm selected by the cc_alg parameter. + * These should not be accessed anywhere other than the algorithm-specific + * files. */ + union { + struct westwood_params_t westwood_params; + struct vegas_params_t vegas_params; + struct nola_params_t nola_params; + }; +}; + +/** + * Returns the number of sendme acks we will receive before we update cwnd. + * + * Congestion control literature recommends only one update of cwnd per + * cwnd worth of acks. However, we can also tune this to be more frequent + * by increasing the 'cc_cwnd_inc_rate' consensus parameter. This tuning + * only applies after slow start. + * + * If this returns 0 due to high cwnd_inc_rate, the calling code will + * update every sendme ack. + */ +static inline uint64_t CWND_UPDATE_RATE(const struct congestion_control_t *cc) +{ + /* We add cwnd_inc_rate*sendme_inc/2 to round to nearest integer number + * of acks */ + + if (cc->in_slow_start) { + return ((cc->cwnd + cc->sendme_inc/2)/cc->sendme_inc); + } else { + return ((cc->cwnd + cc->cwnd_inc_rate*cc->sendme_inc/2) + / (cc->cwnd_inc_rate*cc->sendme_inc)); + } +} + +/** + * Returns the amount to increment the congestion window each update, + * during slow start. + * + * Congestion control literature recommends either doubling the cwnd + * every cwnd during slow start, or some similar exponential growth + * (such as 50% more every cwnd, for Vegas). + * + * This is controlled by a consensus parameter 'cwnd_inc_pct_ss', which + * allows us to specify the percent of the current consensus window + * to update by. + */ +static inline uint64_t CWND_INC_SS(const struct congestion_control_t *cc) +{ + return (cc->cwnd_inc_pct_ss*cc->cwnd/100); +} + +/** + * Returns the amount to increment (and for Vegas, also decrement) the + * congestion window by, every update period. + * + * This is controlled by the cc_cwnd_inc consensus parameter. + */ +#define CWND_INC(cc) ((cc)->cwnd_inc) + +#endif /* !defined(CONGESTION_CONTROL_ST_H) */ diff --git a/src/core/or/congestion_control_vegas.c b/src/core/or/congestion_control_vegas.c new file mode 100644 index 0000000000..5451d7849c --- /dev/null +++ b/src/core/or/congestion_control_vegas.c @@ -0,0 +1,307 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_vegas.c + * \brief Code that implements the TOR_VEGAS congestion control algorithm + * from Proposal #324. + */ + +#define TOR_CONGESTION_CONTROL_VEGAS_PRIVATE + +#include "core/or/or.h" + +#include "core/or/crypt_path.h" +#include "core/or/or_circuit_st.h" +#include "core/or/sendme.h" +#include "core/or/congestion_control_st.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_vegas.h" +#include "core/or/circuitlist.h" +#include "core/or/circuituse.h" +#include "core/or/origin_circuit_st.h" +#include "core/or/channel.h" +#include "feature/nodelist/networkstatus.h" +#include "feature/control/control_events.h" + +#define OUTBUF_CELLS (2*TLS_RECORD_MAX_CELLS) + +/* sbws circs are two hops, so params are based on 2 outbufs of cells */ +#define VEGAS_ALPHA_SBWS_DFLT (2*OUTBUF_CELLS-TLS_RECORD_MAX_CELLS) +#define VEGAS_BETA_SBWS_DFLT (2*OUTBUF_CELLS) +#define VEGAS_GAMMA_SBWS_DFLT (2*OUTBUF_CELLS) +#define VEGAS_DELTA_SBWS_DFLT (4*OUTBUF_CELLS) + +/* Exits are three hops, so params are based on 3 outbufs of cells */ +#define VEGAS_ALPHA_EXIT_DFLT (3*OUTBUF_CELLS-TLS_RECORD_MAX_CELLS) +#define VEGAS_BETA_EXIT_DFLT (3*OUTBUF_CELLS) +#define VEGAS_GAMMA_EXIT_DFLT (3*OUTBUF_CELLS) +#define VEGAS_DELTA_EXIT_DFLT (5*OUTBUF_CELLS) + +/* Onion rends are six hops, so params are based on 6 outbufs of cells */ +#define VEGAS_ALPHA_ONION_DFLT (6*OUTBUF_CELLS-TLS_RECORD_MAX_CELLS) +#define VEGAS_BETA_ONION_DFLT (6*OUTBUF_CELLS) +#define VEGAS_GAMMA_ONION_DFLT (6*OUTBUF_CELLS) +#define VEGAS_DELTA_ONION_DFLT (8*OUTBUF_CELLS) + +/* Single Onions are three hops, so params are based on 3 outbufs of cells */ +#define VEGAS_ALPHA_SOS_DFLT (3*OUTBUF_CELLS-TLS_RECORD_MAX_CELLS) +#define VEGAS_BETA_SOS_DFLT (3*OUTBUF_CELLS) +#define VEGAS_GAMMA_SOS_DFLT (3*OUTBUF_CELLS) +#define VEGAS_DELTA_SOS_DFLT (5*OUTBUF_CELLS) + +/* Vanguard Onions are 7 hops (or 8 if both sides use vanguards, but that + * should be rare), so params are based on 7 outbufs of cells */ +#define VEGAS_ALPHA_VG_DFLT (7*OUTBUF_CELLS-TLS_RECORD_MAX_CELLS) +#define VEGAS_BETA_VG_DFLT (7*OUTBUF_CELLS) +#define VEGAS_GAMMA_VG_DFLT (7*OUTBUF_CELLS) +#define VEGAS_DELTA_VG_DFLT (9*OUTBUF_CELLS) + +#define VEGAS_BDP_MIX_PCT 100 + +/** + * The original TCP Vegas used only a congestion window BDP estimator. We + * believe that the piecewise estimator is likely to perform better, but + * for purposes of experimentation, we might as well have a way to blend + * them. It also lets us set Vegas to its original estimator while other + * algorithms on the same network use piecewise (by setting the + * 'vegas_bdp_mix_pct' consensus parameter to 100, while leaving the + * 'cc_bdp_alg' parameter set to piecewise). + * + * Returns a percentage weighted average between the CWND estimator and + * the specified consensus BDP estimator. + */ +static inline uint64_t +vegas_bdp_mix(const congestion_control_t *cc) +{ + return cc->vegas_params.bdp_mix_pct*cc->bdp[BDP_ALG_CWND_RTT]/100 + + (100-cc->vegas_params.bdp_mix_pct)*cc->bdp[cc->bdp_alg]/100; +} + +/** + * Cache Vegas consensus parameters. + */ +void +congestion_control_vegas_set_params(congestion_control_t *cc, + cc_path_t path) +{ + tor_assert(cc->cc_alg == CC_ALG_VEGAS); + const char *alpha_str = NULL, *beta_str = NULL, *gamma_str = NULL; + const char *delta_str = NULL; + int alpha, beta, gamma, delta; + + switch (path) { + case CC_PATH_SBWS: + alpha_str = "cc_vegas_alpha_sbws"; + beta_str = "cc_vegas_beta_sbws"; + gamma_str = "cc_vegas_gamma_sbws"; + delta_str = "cc_vegas_delta_sbws"; + alpha = VEGAS_ALPHA_SBWS_DFLT; + beta = VEGAS_BETA_SBWS_DFLT; + gamma = VEGAS_GAMMA_SBWS_DFLT; + delta = VEGAS_DELTA_SBWS_DFLT; + break; + case CC_PATH_EXIT: + alpha_str = "cc_vegas_alpha_exit"; + beta_str = "cc_vegas_beta_exit"; + gamma_str = "cc_vegas_gamma_exit"; + delta_str = "cc_vegas_delta_exit"; + alpha = VEGAS_ALPHA_EXIT_DFLT; + beta = VEGAS_BETA_EXIT_DFLT; + gamma = VEGAS_GAMMA_EXIT_DFLT; + delta = VEGAS_DELTA_EXIT_DFLT; + break; + case CC_PATH_ONION: + alpha_str = "cc_vegas_alpha_onion"; + beta_str = "cc_vegas_beta_onion"; + gamma_str = "cc_vegas_gamma_onion"; + delta_str = "cc_vegas_delta_onion"; + alpha = VEGAS_ALPHA_ONION_DFLT; + beta = VEGAS_BETA_ONION_DFLT; + gamma = VEGAS_GAMMA_ONION_DFLT; + delta = VEGAS_DELTA_ONION_DFLT; + break; + case CC_PATH_ONION_SOS: + alpha_str = "cc_vegas_alpha_sos"; + beta_str = "cc_vegas_beta_sos"; + gamma_str = "cc_vegas_gamma_sos"; + delta_str = "cc_vegas_delta_sos"; + alpha = VEGAS_ALPHA_SOS_DFLT; + beta = VEGAS_BETA_SOS_DFLT; + gamma = VEGAS_GAMMA_SOS_DFLT; + delta = VEGAS_DELTA_SOS_DFLT; + break; + case CC_PATH_ONION_VG: + alpha_str = "cc_vegas_alpha_vg"; + beta_str = "cc_vegas_beta_vg"; + gamma_str = "cc_vegas_gamma_vg"; + delta_str = "cc_vegas_delta_vg"; + alpha = VEGAS_ALPHA_VG_DFLT; + beta = VEGAS_BETA_VG_DFLT; + gamma = VEGAS_GAMMA_VG_DFLT; + delta = VEGAS_DELTA_VG_DFLT; + break; + default: + tor_assert(0); + break; + } + + cc->vegas_params.alpha = + networkstatus_get_param(NULL, alpha_str, + alpha, + 0, + 1000); + + cc->vegas_params.beta = + networkstatus_get_param(NULL, beta_str, + beta, + 0, + 1000); + + cc->vegas_params.gamma = + networkstatus_get_param(NULL, gamma_str, + gamma, + 0, + 1000); + + cc->vegas_params.delta = + networkstatus_get_param(NULL, delta_str, + delta, + 0, + INT32_MAX); + + cc->vegas_params.bdp_mix_pct = + networkstatus_get_param(NULL, "cc_vegas_bdp_mix", + VEGAS_BDP_MIX_PCT, + 0, + 100); +} + +/** + * Process a SENDME and update the congestion window according to the + * rules specified in TOR_VEGAS of Proposal #324. + * + * Essentially, this algorithm attempts to measure queue lengths on + * the circuit by subtracting the bandwidth-delay-product estimate + * from the current congestion window. + * + * If the congestion window is larger than the bandwidth-delay-product, + * then data is assumed to be queuing. We reduce the congestion window + * in that case. + * + * If the congestion window is smaller than the bandwidth-delay-product, + * then there is spare bandwidth capacity on the circuit. We increase the + * congestion window in that case. + * + * The congestion window is updated only once every congestion window worth of + * packets, even if the signal persists. It is also updated whenever the + * upstream orcon blocks, or unblocks. This minimizes local client queues. + */ +int +congestion_control_vegas_process_sendme(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + uint64_t queue_use; + + tor_assert(cc && cc->cc_alg == CC_ALG_VEGAS); + tor_assert(circ); + + /* Update ack counter until next congestion signal event is allowed */ + if (cc->next_cc_event) + cc->next_cc_event--; + + /* Compute BDP and RTT. If we did not update, don't run the alg */ + if (!congestion_control_update_circuit_estimates(cc, circ, layer_hint)) { + cc->inflight = cc->inflight - cc->sendme_inc; + return 0; + } + + /* We only update anything once per window */ + if (cc->next_cc_event == 0) { + /* The queue use is the amount in which our cwnd is above BDP; + * if it is below, then 0 queue use. */ + if (vegas_bdp_mix(cc) > cc->cwnd) + queue_use = 0; + else + queue_use = cc->cwnd - vegas_bdp_mix(cc); + + if (cc->in_slow_start) { + if (queue_use < cc->vegas_params.gamma && !cc->blocked_chan) { + /* Grow to BDP immediately, then exponential growth until + * congestion signal. Increment by at least 2 sendme's worth. */ + cc->cwnd = MAX(cc->cwnd + MAX(CWND_INC_SS(cc), 2*cc->sendme_inc), + vegas_bdp_mix(cc)); + } else { + /* Congestion signal: Set cwnd to gamma threshhold */ + cc->cwnd = vegas_bdp_mix(cc) + cc->vegas_params.gamma; + cc->in_slow_start = 0; + log_info(LD_CIRC, "CC: TOR_VEGAS exiting slow start"); + + /* We need to report that slow start has exited ASAP, + * for sbws bandwidth measurement. */ + if (CIRCUIT_IS_ORIGIN(circ)) { + /* We must discard const here because the event modifies fields :/ */ + control_event_circ_bandwidth_used_for_circ( + TO_ORIGIN_CIRCUIT((circuit_t*)circ)); + } + } + } else { + if (queue_use > cc->vegas_params.delta) { + cc->cwnd = vegas_bdp_mix(cc) + cc->vegas_params.delta - CWND_INC(cc); + } else if (queue_use > cc->vegas_params.beta || cc->blocked_chan) { + cc->cwnd -= CWND_INC(cc); + } else if (queue_use < cc->vegas_params.alpha) { + cc->cwnd += CWND_INC(cc); + } + } + + /* cwnd can never fall below 1 increment */ + cc->cwnd = MAX(cc->cwnd, cc->cwnd_min); + + /* Schedule next update */ + cc->next_cc_event = CWND_UPDATE_RATE(cc); + + if (CIRCUIT_IS_ORIGIN(circ)) { + log_info(LD_CIRC, + "CC: TOR_VEGAS Circuit %d " + "CWND: %"PRIu64", " + "INFL: %"PRIu64", " + "VBDP: %"PRIu64", " + "QUSE: %"PRIu64", " + "NCCE: %"PRIu64", " + "SS: %d", + CONST_TO_ORIGIN_CIRCUIT(circ)->global_identifier, + cc->cwnd, + cc->inflight, + vegas_bdp_mix(cc), + queue_use, + cc->next_cc_event, + cc->in_slow_start + ); + } else { + log_info(LD_CIRC, + "CC: TOR_VEGAS Circuit %"PRIu64":%d " + "CWND: %"PRIu64", " + "INFL: %"PRIu64", " + "VBDP: %"PRIu64", " + "QUSE: %"PRIu64", " + "NCCE: %"PRIu64", " + "SS: %d", + CONST_TO_OR_CIRCUIT(circ)->p_chan->global_identifier, + CONST_TO_OR_CIRCUIT(circ)->p_circ_id, + cc->cwnd, + cc->inflight, + vegas_bdp_mix(cc), + queue_use, + cc->next_cc_event, + cc->in_slow_start + ); + } + } + + /* Update inflight with ack */ + cc->inflight = cc->inflight - cc->sendme_inc; + + return 0; +} diff --git a/src/core/or/congestion_control_vegas.h b/src/core/or/congestion_control_vegas.h new file mode 100644 index 0000000000..95fcea5722 --- /dev/null +++ b/src/core/or/congestion_control_vegas.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_vegas.h + * \brief Private-ish APIs for the TOR_VEGAS congestion control algorithm + **/ + +#ifndef TOR_CONGESTION_CONTROL_VEGAS_H +#define TOR_CONGESTION_CONTROL_VEGAS_H + +#include "core/or/crypt_path_st.h" +#include "core/or/circuit_st.h" + +/* Processing SENDME cell. */ +int congestion_control_vegas_process_sendme(struct congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint); +void congestion_control_vegas_set_params(struct congestion_control_t *cc, + cc_path_t path); + +/* Private section starts. */ +#ifdef TOR_CONGESTION_CONTROL_VEGAS_PRIVATE + +/* + * Unit tests declaractions. + */ +#ifdef TOR_UNIT_TESTS + +#endif /* defined(TOR_UNIT_TESTS) */ + +#endif /* defined(TOR_CONGESTION_CONTROL_VEGAS_PRIVATE) */ + +#endif /* !defined(TOR_CONGESTION_CONTROL_VEGAS_H) */ diff --git a/src/core/or/congestion_control_westwood.c b/src/core/or/congestion_control_westwood.c new file mode 100644 index 0000000000..e57a661b85 --- /dev/null +++ b/src/core/or/congestion_control_westwood.c @@ -0,0 +1,241 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_westwood.c + * \brief Code that implements the TOR_WESTWOOD congestion control algorithm + * from Proposal #324. + */ + +#define TOR_CONGESTION_CONTROL_WESTWOOD_PRIVATE + +#include "core/or/or.h" + +#include "core/or/crypt_path.h" +#include "core/or/or_circuit_st.h" +#include "core/or/sendme.h" +#include "core/or/congestion_control_st.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_westwood.h" +#include "core/or/circuitlist.h" +#include "core/or/circuituse.h" +#include "core/or/origin_circuit_st.h" +#include "core/or/channel.h" +#include "feature/nodelist/networkstatus.h" +#include "feature/control/control_events.h" + +#define USEC_ONE_MS (1000) + +#define WESTWOOD_CWND_BACKOFF_M 75 +#define WESTWOOD_RTT_BACKOFF_M 100 +#define WESTWOOD_RTT_THRESH 33 +#define WESTWOOD_MIN_BACKOFF 0 + +/** + * Cache westwood consensus parameters. + */ +void +congestion_control_westwood_set_params(congestion_control_t *cc) +{ + tor_assert(cc->cc_alg == CC_ALG_WESTWOOD); + + cc->westwood_params.cwnd_backoff_m = + networkstatus_get_param(NULL, "cc_westwood_cwnd_m", + WESTWOOD_CWND_BACKOFF_M, + 0, + 100); + + cc->westwood_params.rtt_backoff_m = + networkstatus_get_param(NULL, "cc_westwood_rtt_m", + WESTWOOD_RTT_BACKOFF_M, + 50, + 100); + + cc->westwood_params.rtt_thresh = + networkstatus_get_param(NULL, "cc_westwood_rtt_thresh", + WESTWOOD_RTT_THRESH, + 0, + 100); + + cc->westwood_params.min_backoff = + networkstatus_get_param(NULL, "cc_westwood_min_backoff", + WESTWOOD_MIN_BACKOFF, + 0, + 1); +} + +/** + * Return the RTT threshold that signals congestion. + * + * Computed from the threshold parameter that specifies a + * percent between the min and max RTT observed so far. + */ +static inline uint64_t +westwood_rtt_signal(const congestion_control_t *cc) +{ + return ((100 - cc->westwood_params.rtt_thresh)*cc->min_rtt_usec + + cc->westwood_params.rtt_thresh*(cc)->max_rtt_usec)/100; +} + +/** + * Compute a backoff to reduce the max RTT. + * + * This may be necessary to ensure that westwood does not have + * a runaway condition where congestion inflates the max RTT, which + * inflates the congestion threshold. That cannot happen with one + * Westwood instance, but it may happen in aggregate. Hence, this is + * a safety parameter, in case we need it. + */ +static inline uint64_t +westwood_rtt_max_backoff(const congestion_control_t *cc) +{ + return cc->min_rtt_usec + + (cc->westwood_params.rtt_backoff_m * + (cc->max_rtt_usec - cc->min_rtt_usec))/100; +} + +/** + * Returns true if the circuit is experiencing congestion, as per + * TOR_WESTWOOD rules. + */ +static inline bool +westwood_is_congested(const congestion_control_t *cc) +{ + /* If the local channel is blocked, that is always congestion */ + if (cc->blocked_chan) + return true; + + /* If the min RTT is within 1ms of the signal, then there is not enough + * range in RTTs to signify congestion. Treat that as not congested. */ + if (westwood_rtt_signal(cc) < cc->min_rtt_usec || + westwood_rtt_signal(cc) - cc->min_rtt_usec < USEC_ONE_MS) + return false; + + /* If the EWMA-smoothed RTT exceeds the westwood RTT threshold, + * then it is congestion. */ + if (cc->ewma_rtt_usec > westwood_rtt_signal(cc)) + return true; + + return false; +} + +/** + * Process a SENDME and update the congestion window according to the + * rules specified in TOR_WESTWOOD of Proposal #324. + * + * Essentially, this algorithm uses a threshold of 'rtt_thresh', which + * is a midpoint between the min and max RTT. If the RTT exceeds this + * threshold, then queue delay due to congestion is assumed to be present, + * and the algorithm reduces the congestion window. If the RTT is below the + * threshold, the circuit is not congested (ie: queue delay is low), and we + * increase the congestion window. + * + * The congestion window is updated only once every congestion window worth of + * packets, even if the signal persists. It is also updated whenever the + * upstream orcon blocks, or unblocks. This minimizes local client queues. + */ +int +congestion_control_westwood_process_sendme(congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint) +{ + tor_assert(cc && cc->cc_alg == CC_ALG_WESTWOOD); + tor_assert(circ); + + /* Update ack counter until next congestion signal event is allowed */ + if (cc->next_cc_event) + cc->next_cc_event--; + + /* If we were unable to update our circuit estimates, Westwood must + * *not* update its cwnd, otherwise it could run to infinity, or to 0. + * Just update inflight from the sendme and return. */ + if (!congestion_control_update_circuit_estimates(cc, circ, layer_hint)) { + cc->inflight = cc->inflight - cc->sendme_inc; + return 0; + } + + /* We only update anything once per window */ + if (cc->next_cc_event == 0) { + if (!westwood_is_congested(cc)) { + if (cc->in_slow_start) { + cc->cwnd = MAX(cc->cwnd + CWND_INC_SS(cc), + cc->bdp[cc->bdp_alg]); + } else { + cc->cwnd = cc->cwnd + CWND_INC(cc); + } + } else { + if (cc->westwood_params.min_backoff) + cc->cwnd = MIN(cc->cwnd*cc->westwood_params.cwnd_backoff_m/100, + cc->bdp[cc->bdp_alg]); + else + cc->cwnd = MAX(cc->cwnd*cc->westwood_params.cwnd_backoff_m/100, + cc->bdp[cc->bdp_alg]); + + cc->in_slow_start = 0; + + // Because Westwood's congestion can runaway and boost max rtt, + // which increases its congestion signal, we backoff the max rtt + // too. + cc->max_rtt_usec = westwood_rtt_max_backoff(cc); + + log_info(LD_CIRC, "CC: TOR_WESTWOOD congestion. New max RTT: %"PRIu64, + cc->max_rtt_usec/1000); + + /* We need to report that slow start has exited ASAP, + * for sbws bandwidth measurement. */ + if (CIRCUIT_IS_ORIGIN(circ)) { + /* We must discard const here because the event modifies fields :/ */ + control_event_circ_bandwidth_used_for_circ( + TO_ORIGIN_CIRCUIT((circuit_t*)circ)); + } + } + + /* cwnd can never fall below 1 increment */ + cc->cwnd = MAX(cc->cwnd, cc->cwnd_min); + + /* Schedule next update */ + cc->next_cc_event = CWND_UPDATE_RATE(cc); + + if (CIRCUIT_IS_ORIGIN(circ)) { + log_info(LD_CIRC, + "CC: TOR_WESTWOOD Circuit %d " + "CWND: %"PRIu64", " + "INFL: %"PRIu64", " + "NCCE: %"PRIu64", " + "WRTT: %"PRIu64", " + "WSIG: %"PRIu64", " + "SS: %d", + CONST_TO_ORIGIN_CIRCUIT(circ)->global_identifier, + cc->cwnd, + cc->inflight, + cc->next_cc_event, + cc->ewma_rtt_usec/1000, + westwood_rtt_signal(cc)/1000, + cc->in_slow_start + ); + } else { + log_info(LD_CIRC, + "CC: TOR_WESTWOOD Circuit %"PRIu64":%d " + "CWND: %"PRIu64", " + "INFL: %"PRIu64", " + "NCCE: %"PRIu64", " + "WRTT: %"PRIu64", " + "WSIG: %"PRIu64", " + "SS: %d", + CONST_TO_OR_CIRCUIT(circ)->p_chan->global_identifier, + CONST_TO_OR_CIRCUIT(circ)->p_circ_id, + cc->cwnd, + cc->inflight, + cc->next_cc_event, + cc->ewma_rtt_usec/1000, + westwood_rtt_signal(cc)/1000, + cc->in_slow_start + ); + } + } + + /* Update inflight with ack */ + cc->inflight = cc->inflight - cc->sendme_inc; + + return 0; +} diff --git a/src/core/or/congestion_control_westwood.h b/src/core/or/congestion_control_westwood.h new file mode 100644 index 0000000000..c6fd596df4 --- /dev/null +++ b/src/core/or/congestion_control_westwood.h @@ -0,0 +1,33 @@ +/* Copyright (c) 2019-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file congestion_control_westwood.h + * \brief Private-ish APIs for the TOR_WESTWOOD congestion control algorithm + **/ + +#ifndef TOR_CONGESTION_CONTROL_WESTWOOD_H +#define TOR_CONGESTION_CONTROL_WESTWOOD_H + +#include "core/or/crypt_path_st.h" +#include "core/or/circuit_st.h" + +/* Processing SENDME cell. */ +int congestion_control_westwood_process_sendme(struct congestion_control_t *cc, + const circuit_t *circ, + const crypt_path_t *layer_hint); +void congestion_control_westwood_set_params(struct congestion_control_t *cc); + +/* Private section starts. */ +#ifdef TOR_CONGESTION_CONTROL_WESTWOOD_PRIVATE + +/* + * Unit tests declaractions. + */ +#ifdef TOR_UNIT_TESTS + +#endif /* defined(TOR_UNIT_TESTS) */ + +#endif /* defined(TOR_CONGESTION_CONTROL_WESTWOOD_PRIVATE) */ + +#endif /* !defined(TOR_CONGESTION_CONTROL_WESTWOOD_H) */ diff --git a/src/core/or/connection_edge.c b/src/core/or/connection_edge.c index d3979b3a7e..ea4bf00735 100644 --- a/src/core/or/connection_edge.c +++ b/src/core/or/connection_edge.c @@ -69,6 +69,8 @@ #include "core/or/circuituse.h" #include "core/or/circuitpadding.h" #include "core/or/connection_edge.h" +#include "core/or/congestion_control_flow.h" +#include "core/or/circuitstats.h" #include "core/or/connection_or.h" #include "core/or/extendinfo.h" #include "core/or/policies.h" @@ -614,20 +616,39 @@ connection_half_edge_add(const edge_connection_t *conn, half_conn->stream_id = conn->stream_id; - // How many sendme's should I expect? - half_conn->sendmes_pending = - (STREAMWINDOW_START-conn->package_window)/STREAMWINDOW_INCREMENT; - // Is there a connected cell pending? half_conn->connected_pending = conn->base_.state == AP_CONN_STATE_CONNECT_WAIT; - /* Data should only arrive if we're not waiting on a resolved cell. - * It can arrive after waiting on connected, because of optimistic - * data. */ - if (conn->base_.state != AP_CONN_STATE_RESOLVE_WAIT) { - // How many more data cells can arrive on this id? - half_conn->data_pending = conn->deliver_window; + if (edge_uses_flow_control(conn)) { + /* If the edge uses the new congestion control flow control, we must use + * time-based limits on half-edge activity. */ + uint64_t timeout_usec = (uint64_t)(get_circuit_build_timeout_ms()*1000); + half_conn->used_ccontrol = 1; + + /* If this is an onion service circuit, double the CBT as an approximate + * value for the other half of the circuit */ + if (conn->hs_ident) { + timeout_usec *= 2; + } + + /* The stream should stop seeing any use after the larger of the circuit + * RTT and the overall circuit build timeout */ + half_conn->end_ack_expected_usec = MAX(timeout_usec, + edge_get_max_rtt(conn)) + + monotime_absolute_usec(); + } else { + // How many sendme's should I expect? + half_conn->sendmes_pending = + (STREAMWINDOW_START-conn->package_window)/STREAMWINDOW_INCREMENT; + + /* Data should only arrive if we're not waiting on a resolved cell. + * It can arrive after waiting on connected, because of optimistic + * data. */ + if (conn->base_.state != AP_CONN_STATE_RESOLVE_WAIT) { + // How many more data cells can arrive on this id? + half_conn->data_pending = conn->deliver_window; + } } insert_at = smartlist_bsearch_idx(circ->half_streams, &half_conn->stream_id, @@ -688,6 +709,12 @@ connection_half_edge_is_valid_data(const smartlist_t *half_conns, if (!half) return 0; + if (half->used_ccontrol) { + if (monotime_absolute_usec() > half->end_ack_expected_usec) + return 0; + return 1; + } + if (half->data_pending > 0) { half->data_pending--; return 1; @@ -740,6 +767,10 @@ connection_half_edge_is_valid_sendme(const smartlist_t *half_conns, if (!half) return 0; + /* congestion control edges don't use sendmes */ + if (half->used_ccontrol) + return 0; + if (half->sendmes_pending > 0) { half->sendmes_pending--; return 1; @@ -1269,15 +1300,6 @@ connection_ap_rescan_and_attach_pending(void) connection_ap_attach_pending(1); } -#ifdef DEBUGGING_17659 -#define UNMARK() do { \ - entry_conn->marked_pending_circ_line = 0; \ - entry_conn->marked_pending_circ_file = 0; \ - } while (0) -#else /* !defined(DEBUGGING_17659) */ -#define UNMARK() do { } while (0) -#endif /* defined(DEBUGGING_17659) */ - /** Tell any AP streams that are listed as waiting for a new circuit to try * again. If there is an available circuit for a stream, attach it. Otherwise, * launch a new circuit. @@ -1306,21 +1328,18 @@ connection_ap_attach_pending(int retry) connection_t *conn = ENTRY_TO_CONN(entry_conn); tor_assert(conn && entry_conn); if (conn->marked_for_close) { - UNMARK(); continue; } if (conn->magic != ENTRY_CONNECTION_MAGIC) { log_warn(LD_BUG, "%p has impossible magic value %u.", entry_conn, (unsigned)conn->magic); - UNMARK(); continue; } if (conn->state != AP_CONN_STATE_CIRCUIT_WAIT) { - log_warn(LD_BUG, "%p is no longer in circuit_wait. Its current state " - "is %s. Why is it on pending_entry_connections?", - entry_conn, - conn_state_to_string(conn->type, conn->state)); - UNMARK(); + /* The connection_ap_handshake_attach_circuit() call, for onion service, + * can lead to more than one connections in the "pending" list to change + * state and so it is OK to get here. Ignore it because this connection + * won't be in pending_entry_connections list after this point. */ continue; } @@ -1345,7 +1364,6 @@ connection_ap_attach_pending(int retry) /* If we got here, then we either closed the connection, or * we attached it. */ - UNMARK(); } SMARTLIST_FOREACH_END(entry_conn); smartlist_free(pending); @@ -1416,7 +1434,6 @@ connection_ap_mark_as_non_pending_circuit(entry_connection_t *entry_conn) { if (PREDICT_UNLIKELY(NULL == pending_entry_connections)) return; - UNMARK(); smartlist_remove(pending_entry_connections, entry_conn); } @@ -1612,23 +1629,6 @@ consider_plaintext_ports(entry_connection_t *conn, uint16_t port) return 0; } -/** Return true iff <b>query</b> is a syntactically valid service ID (as - * generated by rend_get_service_id). */ -static int -rend_valid_v2_service_id(const char *query) -{ - /** Length of 'y' portion of 'y.onion' URL. */ -#define REND_SERVICE_ID_LEN_BASE32 16 - - if (strlen(query) != REND_SERVICE_ID_LEN_BASE32) - return 0; - - if (strspn(query, BASE32_CHARS) != REND_SERVICE_ID_LEN_BASE32) - return 0; - - return 1; -} - /** Parse the given hostname in address. Returns true if the parsing was * successful and type_out contains the type of the hostname. Else, false is * returned which means it was not recognized and type_out is set to @@ -1692,14 +1692,6 @@ parse_extended_hostname(char *address, hostname_type_t *type_out) if (q != address) { memmove(address, q, strlen(q) + 1 /* also get \0 */); } - /* v2 onion address check. */ - if (strlen(query) == REND_SERVICE_ID_LEN_BASE32) { - *type_out = ONION_V2_HOSTNAME; - if (rend_valid_v2_service_id(query)) { - goto success; - } - goto failed; - } /* v3 onion address check. */ if (strlen(query) == HS_SERVICE_ADDR_LEN_BASE32) { @@ -1719,8 +1711,7 @@ parse_extended_hostname(char *address, hostname_type_t *type_out) failed: /* otherwise, return to previous state and return 0 */ *s = '.'; - const bool is_onion = (*type_out == ONION_V2_HOSTNAME) || - (*type_out == ONION_V3_HOSTNAME); + const bool is_onion = (*type_out == ONION_V3_HOSTNAME); log_warn(LD_APP, "Invalid %shostname %s; rejecting", is_onion ? "onion " : "", safe_str_client(address)); @@ -2242,7 +2233,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn, } /* Now, we handle everything that isn't a .onion address. */ - if (addresstype != ONION_V3_HOSTNAME && addresstype != ONION_V2_HOSTNAME) { + if (addresstype != ONION_V3_HOSTNAME) { /* Not a hidden-service request. It's either a hostname or an IP, * possibly with a .exit that we stripped off. We're going to check * if we're allowed to connect/resolve there, and then launch the @@ -2527,28 +2518,6 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn, return 0; } else { /* If we get here, it's a request for a .onion address! */ - - /* We don't support v2 onions anymore. Log a warning and bail. */ - if (addresstype == ONION_V2_HOSTNAME) { - static bool log_once = false; - if (!log_once) { - log_warn(LD_PROTOCOL, "Tried to connect to a v2 onion address, but " - "this version of Tor no longer supports them. Please " - "encourage the site operator to upgrade. For more " - "information see " - "https://blog.torproject.org/v2-deprecation-timeline."); - log_once = true; - } - control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s", - escaped(socks->address)); - /* Send back the 0xF6 extended code indicating a bad hostname. This is - * mostly so Tor Browser can make a proper UX with regards to v2 - * addresses. */ - conn->socks_request->socks_extended_error_code = SOCKS5_HS_BAD_ADDRESS; - connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); - return -1; - } - tor_assert(addresstype == ONION_V3_HOSTNAME); tor_assert(!automap); return connection_ap_handle_onion(conn, socks, circ); diff --git a/src/core/or/connection_edge.h b/src/core/or/connection_edge.h index 72869f348b..966a9391d8 100644 --- a/src/core/or/connection_edge.h +++ b/src/core/or/connection_edge.h @@ -80,7 +80,6 @@ typedef enum hostname_type_t { BAD_HOSTNAME, EXIT_HOSTNAME, NORMAL_HOSTNAME, - ONION_V2_HOSTNAME, ONION_V3_HOSTNAME, } hostname_type_t; diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c index dd31638eb3..0018b1dfd8 100644 --- a/src/core/or/connection_or.c +++ b/src/core/or/connection_or.c @@ -65,6 +65,7 @@ #include "core/or/scheduler.h" #include "feature/nodelist/torcert.h" #include "core/or/channelpadding.h" +#include "core/or/congestion_control_common.h" #include "feature/dirauth/authmode.h" #include "feature/hs/hs_service.h" @@ -636,7 +637,7 @@ connection_or_flushed_some(or_connection_t *conn) /* If we're under the low water mark, add cells until we're just over the * high water mark. */ datalen = connection_get_outbuf_len(TO_CONN(conn)); - if (datalen < OR_CONN_LOWWATER) { + if (datalen < or_conn_lowwatermark()) { /* Let the scheduler know */ scheduler_channel_wants_writes(TLS_CHAN_TO_BASE(conn->chan)); } @@ -660,9 +661,9 @@ connection_or_num_cells_writeable(or_connection_t *conn) * used to trigger when to start writing after we've stopped. */ datalen = connection_get_outbuf_len(TO_CONN(conn)); - if (datalen < OR_CONN_HIGHWATER) { + if (datalen < or_conn_highwatermark()) { cell_network_size = get_cell_network_size(conn->wide_circ_ids); - n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, cell_network_size); + n = CEIL_DIV(or_conn_highwatermark() - datalen, cell_network_size); } return n; @@ -1315,6 +1316,13 @@ note_or_connect_failed(const or_connection_t *or_conn) tor_assert(or_conn); + if (or_conn->potentially_used_for_bootstrapping) { + /* Don't cache connection failures for connections we initiated ourself. + * If these direct connections fail, we're supposed to recognize that + * the destination is down and stop trying. See ticket 40499. */ + return; + } + ocf = or_connect_failure_find(or_conn); if (ocf == NULL) { ocf = or_connect_failure_new(or_conn); diff --git a/src/core/or/crypt_path.c b/src/core/or/crypt_path.c index 29356d7c2a..7673bc306f 100644 --- a/src/core/or/crypt_path.c +++ b/src/core/or/crypt_path.c @@ -27,6 +27,7 @@ #include "core/or/circuitbuild.h" #include "core/or/circuitlist.h" #include "core/or/extendinfo.h" +#include "core/or/congestion_control_common.h" #include "lib/crypt_ops/crypto_dh.h" #include "lib/crypt_ops/crypto_util.h" @@ -165,6 +166,7 @@ cpath_free(crypt_path_t *victim) onion_handshake_state_release(&victim->handshake_state); crypto_dh_free(victim->rend_dh_handshake_state); extend_info_free(victim->extend_info); + congestion_control_free(victim->ccontrol); memwipe(victim, 0xBB, sizeof(crypt_path_t)); /* poison memory */ tor_free(victim); diff --git a/src/core/or/crypt_path_st.h b/src/core/or/crypt_path_st.h index 2529b6ee41..fdc6b6fbb2 100644 --- a/src/core/or/crypt_path_st.h +++ b/src/core/or/crypt_path_st.h @@ -21,14 +21,19 @@ struct fast_handshake_state_t; struct ntor_handshake_state_t; struct crypto_dh_t; struct onion_handshake_state_t { + /** One of `ONION_HANDSHAKE_TYPE_*`. Determines which member of the union + * is accessible. */ uint16_t tag; union { struct fast_handshake_state_t *fast; struct crypto_dh_t *tap; struct ntor_handshake_state_t *ntor; + struct ntor3_handshake_state_t *ntor3; } u; }; +struct congestion_control_t; + /** Macro to encapsulate private members of a struct. * * Renames 'x' to 'x_crypt_path_private_field'. @@ -80,6 +85,9 @@ struct crypt_path_t { int deliver_window; /**< How many cells are we willing to deliver originating * at this step? */ + /** Congestion control info */ + struct congestion_control_t *ccontrol; + /*********************** Private members ****************************/ /** Private member: Cryptographic state used for encrypting and diff --git a/src/core/or/dos.c b/src/core/or/dos.c index e8652c901e..2eb5782481 100644 --- a/src/core/or/dos.c +++ b/src/core/or/dos.c @@ -513,7 +513,7 @@ conn_update_on_connect(conn_client_stats_t *stats, const tor_addr_t *addr) /* Assess connect counter. Mark it if counter is down to 0 and we haven't * marked it before or it was reset. This is to avoid to re-mark it over and - * over again extending continously the blocked time. */ + * over again extending continuously the blocked time. */ if (token_bucket_ctr_get(&stats->connect_count) == 0 && stats->marked_until_ts == 0) { conn_mark_client(stats); diff --git a/src/core/or/edge_connection_st.h b/src/core/or/edge_connection_st.h index 0120c3df25..942991f139 100644 --- a/src/core/or/edge_connection_st.h +++ b/src/core/or/edge_connection_st.h @@ -15,6 +15,7 @@ #include "core/or/or.h" #include "core/or/connection_st.h" +#include "lib/evloop/token_bucket.h" /** Subtype of connection_t for an "edge connection" -- that is, an entry (ap) * connection, or an exit. */ @@ -73,6 +74,60 @@ struct edge_connection_t { * that's going away and being used on channels instead. We still tag * edge connections with dirreq_id from circuits, so it's copied here. */ uint64_t dirreq_id; + + /* The following are flow control fields */ + + /** Used for rate limiting the read side of this edge connection when + * congestion control is enabled on its circuit. The XON cell ewma_drain_rate + * parameter is used to set the bucket limits. */ + token_bucket_rw_t bucket; + + /** + * Monotime timestamp of the last time we sent a flow control message + * for this edge, used to compute advisory rates */ + uint64_t drain_start_usec; + + /** + * Number of bytes written since we either emptied our buffers, + * or sent an advisory drate rate. Can wrap, buf if so, + * we must reset the usec timestamp above. (Or make this u64, idk). + */ + uint32_t drained_bytes; + uint32_t prev_drained_bytes; + + /** + * N_EWMA of the drain rate of writes on this edge conn + * while buffers were present. + */ + uint32_t ewma_drain_rate; + + /** + * The ewma drain rate the last time we sent an xon. + */ + uint32_t ewma_rate_last_sent; + + /** + * The following fields are used to count the total bytes sent on this + * stream, and compare them to the number of XON and XOFFs received, so + * that clients can check rate limits of XOFF/XON to prevent dropmark + * attacks. */ + uint32_t total_bytes_xmit; + + /** Number of XOFFs received */ + uint8_t num_xoff_recv; + + /** Number of XONs received */ + uint8_t num_xon_recv; + + /** + * Flag that tells us if an XOFF has been sent; cleared when we send an XON. + * Used to avoid sending multiple */ + uint8_t xoff_sent : 1; + + /** Flag that tells us if an XOFF has been received; cleared when we get + * an XON. Used to ensure that this edge keeps reads on its edge socket + * disabled. */ + uint8_t xoff_received : 1; }; #endif /* !defined(EDGE_CONNECTION_ST_H) */ diff --git a/src/core/or/extend_info_st.h b/src/core/or/extend_info_st.h index 868417f392..2ab0beb7e6 100644 --- a/src/core/or/extend_info_st.h +++ b/src/core/or/extend_info_st.h @@ -38,6 +38,10 @@ struct extend_info_t { crypto_pk_t *onion_key; /** Ntor onion key for this hop. */ curve25519_public_key_t curve25519_onion_key; + /** True if this hop is to be used as an _exit_, + * and it also supports supports NtorV3 _and_ negotiation + * of congestion control parameters */ + bool exit_supports_congestion_control; }; #endif /* !defined(EXTEND_INFO_ST_H) */ diff --git a/src/core/or/extendinfo.c b/src/core/or/extendinfo.c index 6bcef181be..ca623f09ce 100644 --- a/src/core/or/extendinfo.c +++ b/src/core/or/extendinfo.c @@ -35,7 +35,9 @@ extend_info_new(const char *nickname, const ed25519_public_key_t *ed_id, crypto_pk_t *onion_key, const curve25519_public_key_t *ntor_key, - const tor_addr_t *addr, uint16_t port) + const tor_addr_t *addr, uint16_t port, + const protover_summary_flags_t *pv, + bool for_exit_use) { extend_info_t *info = tor_malloc_zero(sizeof(extend_info_t)); if (rsa_id_digest) @@ -56,6 +58,12 @@ extend_info_new(const char *nickname, if (addr) { extend_info_add_orport(info, addr, port); } + + if (pv && for_exit_use) { + info->exit_supports_congestion_control = + pv->supports_congestion_control; + } + return info; } @@ -89,7 +97,8 @@ extend_info_add_orport(extend_info_t *ei, * and IP version config. **/ extend_info_t * -extend_info_from_node(const node_t *node, int for_direct_connect) +extend_info_from_node(const node_t *node, int for_direct_connect, + bool for_exit) { crypto_pk_t *rsa_pubkey = NULL; extend_info_t *info = NULL; @@ -149,7 +158,9 @@ extend_info_from_node(const node_t *node, int for_direct_connect) rsa_pubkey, curve_pubkey, &ap.addr, - ap.port); + ap.port, + &node->ri->pv, + for_exit); } else if (valid_addr && node->rs && node->md) { info = extend_info_new(node->rs->nickname, node->identity, @@ -157,7 +168,9 @@ extend_info_from_node(const node_t *node, int for_direct_connect) rsa_pubkey, curve_pubkey, &ap.addr, - ap.port); + ap.port, + &node->rs->pv, + for_exit); } crypto_pk_free(rsa_pubkey); @@ -210,6 +223,15 @@ extend_info_supports_ntor(const extend_info_t* ei) CURVE25519_PUBKEY_LEN); } +/** Return true if we can use the Ntor v3 handshake with `ei` */ +int +extend_info_supports_ntor_v3(const extend_info_t *ei) +{ + tor_assert(ei); + return extend_info_supports_ntor(ei) && + ei->exit_supports_congestion_control; +} + /* Does ei have an onion key which it would prefer to use? * Currently, we prefer ntor keys*/ int diff --git a/src/core/or/extendinfo.h b/src/core/or/extendinfo.h index 9c07205709..6d1f20597b 100644 --- a/src/core/or/extendinfo.h +++ b/src/core/or/extendinfo.h @@ -17,8 +17,11 @@ extend_info_t *extend_info_new(const char *nickname, const struct ed25519_public_key_t *ed_id, crypto_pk_t *onion_key, const struct curve25519_public_key_t *ntor_key, - const tor_addr_t *addr, uint16_t port); -extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect); + const tor_addr_t *addr, uint16_t port, + const struct protover_summary_flags_t *pv, + bool for_exit_use); +extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect, + bool for_exit); extend_info_t *extend_info_dup(extend_info_t *info); void extend_info_free_(extend_info_t *info); #define extend_info_free(info) \ @@ -26,6 +29,7 @@ void extend_info_free_(extend_info_t *info); int extend_info_addr_is_allowed(const tor_addr_t *addr); int extend_info_supports_tap(const extend_info_t* ei); int extend_info_supports_ntor(const extend_info_t* ei); +int extend_info_supports_ntor_v3(const extend_info_t *ei); int extend_info_has_preferred_onion_key(const extend_info_t* ei); bool extend_info_has_orport(const extend_info_t *ei, const tor_addr_t *addr, uint16_t port); diff --git a/src/core/or/half_edge_st.h b/src/core/or/half_edge_st.h index c956c7434a..642d8e1ea5 100644 --- a/src/core/or/half_edge_st.h +++ b/src/core/or/half_edge_st.h @@ -31,6 +31,18 @@ typedef struct half_edge_t { * our deliver window */ int data_pending; + /** + * Monotime timestamp of when the other end should have successfully + * shut down the stream and stop sending data, based on the larger + * of circuit RTT and CBT. Used if 'used_ccontrol' is true, to expire + * the half_edge at this monotime timestamp. */ + uint64_t end_ack_expected_usec; + + /** + * Did this edge use congestion control? If so, use + * timer instead of pending data approach */ + int used_ccontrol : 1; + /** Is there a connected cell pending? */ int connected_pending : 1; } half_edge_t; diff --git a/src/core/or/include.am b/src/core/or/include.am index b578b75673..b08f8509cc 100644 --- a/src/core/or/include.am +++ b/src/core/or/include.am @@ -28,13 +28,17 @@ LIBTOR_APP_A_SOURCES += \ src/core/or/orconn_event.c \ src/core/or/policies.c \ src/core/or/protover.c \ - src/core/or/protover_rust.c \ src/core/or/reasons.c \ src/core/or/relay.c \ src/core/or/scheduler.c \ src/core/or/scheduler_kist.c \ src/core/or/scheduler_vanilla.c \ src/core/or/sendme.c \ + src/core/or/congestion_control_common.c \ + src/core/or/congestion_control_vegas.c \ + src/core/or/congestion_control_nola.c \ + src/core/or/congestion_control_westwood.c \ + src/core/or/congestion_control_flow.c \ src/core/or/status.c \ src/core/or/versions.c @@ -57,6 +61,7 @@ noinst_HEADERS += \ src/core/or/circuitpadding_machines.h \ src/core/or/circuituse.h \ src/core/or/command.h \ + src/core/or/congestion_control_st.h \ src/core/or/connection_edge.h \ src/core/or/connection_or.h \ src/core/or/connection_st.h \ @@ -77,6 +82,7 @@ noinst_HEADERS += \ src/core/or/entry_port_cfg_st.h \ src/core/or/extend_info_st.h \ src/core/or/listener_connection_st.h \ + src/core/or/lttng_cc.inc \ src/core/or/lttng_circuit.inc \ src/core/or/onion.h \ src/core/or/or.h \ @@ -97,6 +103,11 @@ noinst_HEADERS += \ src/core/or/relay_crypto_st.h \ src/core/or/scheduler.h \ src/core/or/sendme.h \ + src/core/or/congestion_control_flow.h \ + src/core/or/congestion_control_common.h \ + src/core/or/congestion_control_vegas.h \ + src/core/or/congestion_control_nola.h \ + src/core/or/congestion_control_westwood.h \ src/core/or/server_port_cfg_st.h \ src/core/or/socks_request_st.h \ src/core/or/status.h \ @@ -106,7 +117,9 @@ noinst_HEADERS += \ if USE_TRACING_INSTRUMENTATION_LTTNG LIBTOR_APP_A_SOURCES += \ + src/core/or/trace_probes_cc.c \ src/core/or/trace_probes_circuit.c noinst_HEADERS += \ + src/core/or/trace_probes_cc.h \ src/core/or/trace_probes_circuit.h endif diff --git a/src/core/or/lttng_cc.inc b/src/core/or/lttng_cc.inc new file mode 100644 index 0000000000..de06fa026f --- /dev/null +++ b/src/core/or/lttng_cc.inc @@ -0,0 +1,166 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file lttng_cc.inc + * \brief LTTng tracing probe declaration for the congestion control subsystem. + * It is in this .inc file due to the non C standard syntax and the way + * we guard the header with the LTTng specific + * TRACEPOINT_HEADER_MULTI_READ. + **/ + +#include "orconfig.h" + +/* We only build the following if LTTng instrumentation has been enabled. */ +#ifdef USE_TRACING_INSTRUMENTATION_LTTNG + +/* The following defines are LTTng-UST specific. */ +#undef TRACEPOINT_PROVIDER +#define TRACEPOINT_PROVIDER tor_cc + +#undef TRACEPOINT_INCLUDE +#define TRACEPOINT_INCLUDE "./src/core/or/lttng_cc.inc" + +#if !defined(LTTNG_CC_INC) || defined(TRACEPOINT_HEADER_MULTI_READ) +#define LTTNG_CC_INC + +#include <lttng/tracepoint.h> + +/* + * Flow Control + */ + +/* Emitted every time the flow_control_decide_xon() function is called. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xon, + TP_ARGS(const edge_connection_t *, stream, size_t, n_written), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(size_t, written_bytes, n_written) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* Emitted when flow control starts measuring the drain rate. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_start, + TP_ARGS(const edge_connection_t *, stream), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* Emitted when the drain rate is updated. The new_drain_rate value is what was + * just computed. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_update, + TP_ARGS(const edge_connection_t *, stream, uint32_t, drain_rate), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, new_drain_rate, drain_rate) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* Emitted when an XON cell is sent due to a notice in a drain rate change. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xon_rate_change, + TP_ARGS(const edge_connection_t *, stream), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* Emitted when an XON cell is sent because we partially or fully drained the + * edge connection buffer. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xon_partial_drain, + TP_ARGS(const edge_connection_t *, stream), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* Emitted when we double the drain rate which is an attempt to see if we can + * speed things up. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_doubled, + TP_ARGS(const edge_connection_t *, stream), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* XOFF */ + +/* Emitted when we send an XOFF cell. */ +TRACEPOINT_EVENT(tor_cc, flow_decide_xoff_sending, + TP_ARGS(const edge_connection_t *, stream), + TP_FIELDS( + ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier) + ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes) + ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes) + ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent) + ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate) + ctf_integer(size_t, outbuf_len, + connection_get_outbuf_len(TO_CONN(stream))) + ) +) + +/* + * Congestion Control + */ + +/* Emitted when the BDP value has been updated. */ +TRACEPOINT_EVENT(tor_cc, bdp_update, + TP_ARGS(const circuit_t *, circ, const congestion_control_t *, cc, + uint64_t, curr_rtt_usec, uint64_t, sendme_rate_bdp), + TP_FIELDS( + ctf_integer(uint64_t, circuit_ptr, circ) + ctf_integer(uint32_t, n_circ_id, circ->n_circ_id) + ctf_integer(uint64_t, min_rtt_usec, cc->min_rtt_usec) + ctf_integer(uint64_t, curr_rtt_usec, curr_rtt_usec) + ctf_integer(uint64_t, ewma_rtt_usec, cc->ewma_rtt_usec) + ctf_integer(uint64_t, max_rtt_usec, cc->max_rtt_usec) + ctf_integer(uint64_t, bdp_inflight_rtt, cc->bdp[BDP_ALG_INFLIGHT_RTT]) + ctf_integer(uint64_t, bdp_cwnd_rtt, cc->bdp[BDP_ALG_CWND_RTT]) + ctf_integer(uint64_t, bdp_sendme_rate, cc->bdp[BDP_ALG_SENDME_RATE]) + ctf_integer(uint64_t, bdp_piecewise, cc->bdp[BDP_ALG_PIECEWISE]) + ctf_integer(uint64_t, sendme_rate_bdp, sendme_rate_bdp) + ) +) + +#endif /* LTTNG_CC_INC || TRACEPOINT_HEADER_MULTI_READ */ + +/* Must be included after the probes declaration. */ +#include <lttng/tracepoint-event.h> + +#endif /* USE_TRACING_INSTRUMENTATION_LTTNG */ diff --git a/src/core/or/onion.c b/src/core/or/onion.c index 62ad7af3fe..0bdd2a6d35 100644 --- a/src/core/or/onion.c +++ b/src/core/or/onion.c @@ -88,6 +88,10 @@ check_create_cell(const create_cell_t *cell, int unknown_ok) if (cell->handshake_len != NTOR_ONIONSKIN_LEN) return -1; break; + case ONION_HANDSHAKE_TYPE_NTOR_V3: + /* ntor v3 has variable length fields that are checked + * elsewhere. Fall through to always valid here. */ + break; default: if (! unknown_ok) return -1; @@ -521,6 +525,11 @@ create_cell_format_impl(cell_t *cell_out, const create_cell_t *cell_in, switch (cell_in->cell_type) { case CELL_CREATE: + if (BUG(cell_in->handshake_type == ONION_HANDSHAKE_TYPE_NTOR_V3)) { + log_warn(LD_BUG, "Create cells cannot contain ntorv3."); + return -1; + } + if (cell_in->handshake_type == ONION_HANDSHAKE_TYPE_NTOR) { memcpy(p, NTOR_CREATE_MAGIC, 16); p += 16; @@ -619,6 +628,11 @@ extend_cell_format(uint8_t *command_out, uint16_t *len_out, switch (cell_in->cell_type) { case RELAY_COMMAND_EXTEND: { + if (BUG(cell_in->create_cell.handshake_type == + ONION_HANDSHAKE_TYPE_NTOR_V3)) { + log_warn(LD_BUG, "Extend cells cannot contain ntorv3!"); + return -1; + } *command_out = RELAY_COMMAND_EXTEND; *len_out = 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN; set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr)); diff --git a/src/core/or/or.h b/src/core/or/or.h index 99948f26e2..dc8f516f0a 100644 --- a/src/core/or/or.h +++ b/src/core/or/or.h @@ -210,6 +210,9 @@ struct curve25519_public_key_t; #define RELAY_COMMAND_PADDING_NEGOTIATE 41 #define RELAY_COMMAND_PADDING_NEGOTIATED 42 +#define RELAY_COMMAND_XOFF 43 +#define RELAY_COMMAND_XON 44 + /* Reasons why an OR connection is closed. */ #define END_OR_CONN_REASON_DONE 1 #define END_OR_CONN_REASON_REFUSED 2 /* connection refused */ @@ -591,18 +594,6 @@ typedef struct or_handshake_state_t or_handshake_state_t; /** Length of Extended ORPort connection identifier. */ #define EXT_OR_CONN_ID_LEN DIGEST_LEN /* 20 */ -/* - * OR_CONN_HIGHWATER and OR_CONN_LOWWATER moved from connection_or.c so - * channeltls.c can see them too. - */ - -/** When adding cells to an OR connection's outbuf, keep adding until the - * outbuf is at least this long, or we run out of cells. */ -#define OR_CONN_HIGHWATER (32*1024) - -/** Add cells to an OR connection's outbuf whenever the outbuf's data length - * drops below this size. */ -#define OR_CONN_LOWWATER (16*1024) typedef struct connection_t connection_t; typedef struct control_connection_t control_connection_t; @@ -741,6 +732,9 @@ typedef struct protover_summary_flags_t { * negotiate hs circuit setup padding. Requires Padding=2. */ unsigned int supports_hs_setup_padding : 1; + /** True iff this router supports congestion control. + * Requires both FlowCtrl=2 *and* Relay=4 */ + unsigned int supports_congestion_control : 1; } protover_summary_flags_t; typedef struct routerinfo_t routerinfo_t; @@ -799,7 +793,8 @@ typedef enum { #define ONION_HANDSHAKE_TYPE_TAP 0x0000 #define ONION_HANDSHAKE_TYPE_FAST 0x0001 #define ONION_HANDSHAKE_TYPE_NTOR 0x0002 -#define MAX_ONION_HANDSHAKE_TYPE 0x0002 +#define ONION_HANDSHAKE_TYPE_NTOR_V3 0x0003 +#define MAX_ONION_HANDSHAKE_TYPE 0x0003 typedef struct onion_handshake_state_t onion_handshake_state_t; typedef struct relay_crypto_t relay_crypto_t; diff --git a/src/core/or/or_circuit_st.h b/src/core/or/or_circuit_st.h index b8fbf9658e..11695ec301 100644 --- a/src/core/or/or_circuit_st.h +++ b/src/core/or/or_circuit_st.h @@ -52,6 +52,10 @@ struct or_circuit_t { /** Stores KH for the handshake. */ char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */ + /** Number of cells which we have discarded because of having no next hop, + * despite not recognizing the cell. */ + uint32_t n_cells_discarded_at_end; + /** How many more relay_early cells can we send on this circuit, according * to the specification? */ unsigned int remaining_relay_early_cells : 4; @@ -93,4 +97,3 @@ struct or_circuit_t { }; #endif /* !defined(OR_CIRCUIT_ST_H) */ - diff --git a/src/core/or/origin_circuit_st.h b/src/core/or/origin_circuit_st.h index 9264077c50..6c86a56000 100644 --- a/src/core/or/origin_circuit_st.h +++ b/src/core/or/origin_circuit_st.h @@ -180,6 +180,12 @@ struct origin_circuit_t { unsigned first_hop_from_controller : 1; /** + * If true, this circuit's path has been chosen, in full or in part, + * by the controller API, and it's okay to ignore checks that we'd + * usually do on the path as whole. */ + unsigned int any_hop_from_controller : 1; + + /** * Tristate variable to guard against pathbias miscounting * due to circuit purpose transitions changing the decision * of pathbias_should_count(). This variable is informational diff --git a/src/core/or/policies.c b/src/core/or/policies.c index f91c23ad31..a53849b4d0 100644 --- a/src/core/or/policies.c +++ b/src/core/or/policies.c @@ -59,6 +59,9 @@ static smartlist_t *authdir_invalid_policy = NULL; /** Policy that addresses for incoming router descriptors must <b>not</b> * match in order to not be marked as BadExit. */ static smartlist_t *authdir_badexit_policy = NULL; +/** Policy that addresses for incoming router descriptors must <b>not</b> + * match in order to not be marked as MiddleOnly. */ +static smartlist_t *authdir_middleonly_policy = NULL; /** Parsed addr_policy_t describing which addresses we believe we can start * circuits at. */ @@ -1119,6 +1122,17 @@ authdir_policy_badexit_address(const tor_addr_t *addr, uint16_t port) return addr_is_in_cc_list(addr, get_options()->AuthDirBadExitCCs); } +/** Return 1 if <b>addr</b>:<b>port</b> should be marked as MiddleOnly, + * based on <b>authdir_middleonly_policy</b>. Else return 0. + */ +int +authdir_policy_middleonly_address(const tor_addr_t *addr, uint16_t port) +{ + if (!addr_policy_permits_tor_addr(addr, port, authdir_middleonly_policy)) + return 1; + return addr_is_in_cc_list(addr, get_options()->AuthDirMiddleOnlyCCs); +} + #define REJECT(arg) \ STMT_BEGIN *msg = tor_strdup(arg); goto err; STMT_END @@ -1173,6 +1187,9 @@ validate_addr_policies(const or_options_t *options, char **msg) if (parse_addr_policy(options->AuthDirBadExit, &addr_policy, ADDR_POLICY_REJECT)) REJECT("Error in AuthDirBadExit entry."); + if (parse_addr_policy(options->AuthDirMiddleOnly, &addr_policy, + ADDR_POLICY_REJECT)) + REJECT("Error in AuthDirMiddleOnly entry."); if (parse_addr_policy(options->ReachableAddresses, &addr_policy, ADDR_POLICY_ACCEPT)) @@ -1266,6 +1283,9 @@ policies_parse_from_options(const or_options_t *options) if (load_policy_from_option(options->AuthDirBadExit, "AuthDirBadExit", &authdir_badexit_policy, ADDR_POLICY_REJECT) < 0) ret = -1; + if (load_policy_from_option(options->AuthDirMiddleOnly, "AuthDirMiddleOnly", + &authdir_middleonly_policy, ADDR_POLICY_REJECT) < 0) + ret = -1; if (parse_metrics_port_policy(options) < 0) { ret = -1; } @@ -3112,6 +3132,8 @@ policies_free_all(void) authdir_invalid_policy = NULL; addr_policy_list_free(authdir_badexit_policy); authdir_badexit_policy = NULL; + addr_policy_list_free(authdir_middleonly_policy); + authdir_middleonly_policy = NULL; if (!HT_EMPTY(&policy_root)) { policy_map_ent_t **ent; diff --git a/src/core/or/policies.h b/src/core/or/policies.h index a32f50ab1d..e11e1d0ff5 100644 --- a/src/core/or/policies.h +++ b/src/core/or/policies.h @@ -106,6 +106,7 @@ int metrics_policy_permits_address(const tor_addr_t *addr); int authdir_policy_permits_address(const tor_addr_t *addr, uint16_t port); int authdir_policy_valid_address(const tor_addr_t *addr, uint16_t port); int authdir_policy_badexit_address(const tor_addr_t *addr, uint16_t port); +int authdir_policy_middleonly_address(const tor_addr_t *addr, uint16_t port); int validate_addr_policies(const or_options_t *options, char **msg); void policy_expand_private(smartlist_t **policy); diff --git a/src/core/or/protover.c b/src/core/or/protover.c index 484c15386f..4cd6510da7 100644 --- a/src/core/or/protover.c +++ b/src/core/or/protover.c @@ -28,8 +28,6 @@ #include "core/or/versions.h" #include "lib/tls/tortls.h" -#ifndef HAVE_RUST - static const smartlist_t *get_supported_protocol_list(void); static int protocol_list_contains(const smartlist_t *protos, protocol_type_t pr, uint32_t ver); @@ -387,6 +385,46 @@ protocol_list_supports_protocol_or_later(const char *list, /* * XXX START OF HAZARDOUS ZONE XXX */ +/* All protocol version that this relay version supports. */ +#define PR_CONS_V "1-2" +#define PR_DESC_V "1-2" +#define PR_DIRCACHE_V "2" +#define PR_FLOWCTRL_V "1-2" +#define PR_HSDIR_V "2" +#define PR_HSINTRO_V "4-5" +#define PR_HSREND_V "1-2" +#define PR_LINK_V "1-5" +#ifdef HAVE_WORKING_TOR_TLS_GET_TLSSECRETS +#define PR_LINKAUTH_V "1,3" +#else +#define PR_LINKAUTH_V "3" +#endif +#define PR_MICRODESC_V "1-2" +#define PR_PADDING_V "2" +#define PR_RELAY_V "1-4" + +/** Return the string containing the supported version for the given protocol + * type. */ +const char * +protover_get_supported(const protocol_type_t type) +{ + switch (type) { + case PRT_CONS: return PR_CONS_V; + case PRT_DESC: return PR_DESC_V; + case PRT_DIRCACHE: return PR_DIRCACHE_V; + case PRT_FLOWCTRL: return PR_FLOWCTRL_V; + case PRT_HSDIR: return PR_HSDIR_V; + case PRT_HSINTRO: return PR_HSINTRO_V; + case PRT_HSREND: return PR_HSREND_V; + case PRT_LINK: return PR_LINK_V; + case PRT_LINKAUTH: return PR_LINKAUTH_V; + case PRT_MICRODESC: return PR_MICRODESC_V; + case PRT_PADDING: return PR_PADDING_V; + case PRT_RELAY: return PR_RELAY_V; + default: + tor_assert_unreached(); + } +} /** Return the canonical string containing the list of protocols * that we support. @@ -433,22 +471,18 @@ protover_get_supported_protocols(void) */ return - "Cons=1-2 " - "Desc=1-2 " - "DirCache=2 " - "FlowCtrl=1 " - "HSDir=2 " - "HSIntro=4-5 " - "HSRend=1-2 " - "Link=1-5 " -#ifdef HAVE_WORKING_TOR_TLS_GET_TLSSECRETS - "LinkAuth=1,3 " -#else - "LinkAuth=3 " -#endif - "Microdesc=1-2 " - "Padding=2 " - "Relay=1-3"; + "Cons=" PR_CONS_V " " + "Desc=" PR_DESC_V " " + "DirCache=" PR_DIRCACHE_V " " + "FlowCtrl=" PR_FLOWCTRL_V " " + "HSDir=" PR_HSDIR_V " " + "HSIntro=" PR_HSINTRO_V " " + "HSRend=" PR_HSREND_V " " + "Link=" PR_LINK_V " " + "LinkAuth=" PR_LINKAUTH_V " " + "Microdesc=" PR_MICRODESC_V " " + "Padding=" PR_PADDING_V " " + "Relay=" PR_RELAY_V; } /* @@ -855,5 +889,3 @@ protover_free_all(void) supported_protocol_list = NULL; } } - -#endif /* !defined(HAVE_RUST) */ diff --git a/src/core/or/protover.h b/src/core/or/protover.h index c0739a092e..8f15c02fb2 100644 --- a/src/core/or/protover.h +++ b/src/core/or/protover.h @@ -35,6 +35,8 @@ struct smartlist_t; /** The protover version number where relays can consider IPv6 connections * canonical */ #define PROTOVER_RELAY_CANONICAL_IPV6 3 +/** The protover version number where relays can accept ntorv3 */ +#define PROTOVER_RELAY_NTOR_V3 4 /** The protover version number that signifies HSv3 intro point support */ #define PROTOVER_HS_INTRO_V3 4 @@ -51,6 +53,9 @@ struct smartlist_t; /** The protover that signals support for HS circuit setup padding machines */ #define PROTOVER_HS_SETUP_PADDING 2 +/** The protover that signals support for congestion control */ +#define PROTOVER_FLOWCTRL_CC 2 + /** List of recognized subprotocols. */ /// C_RUST_COUPLED: src/rust/protover/ffi.rs `translate_to_rust` /// C_RUST_COUPLED: src/rust/protover/protover.rs `Proto` @@ -70,6 +75,7 @@ typedef enum protocol_type_t { } protocol_type_t; bool protover_list_is_invalid(const char *s); +const char *protover_get_supported(const protocol_type_t type); int protover_all_supported(const char *s, char **missing); int protover_is_supported_here(protocol_type_t pr, uint32_t ver); const char *protover_get_supported_protocols(void); @@ -103,13 +109,13 @@ typedef struct proto_entry_t { uint64_t bitmask; } proto_entry_t; -#if !defined(HAVE_RUST) && defined(TOR_UNIT_TESTS) +#if defined(TOR_UNIT_TESTS) STATIC struct smartlist_t *parse_protocol_list(const char *s); STATIC char *encode_protocol_list(const struct smartlist_t *sl); STATIC const char *protocol_type_to_str(protocol_type_t pr); STATIC int str_to_protocol_type(const char *s, protocol_type_t *pr_out); STATIC void proto_entry_free_(proto_entry_t *entry); -#endif /* !defined(HAVE_RUST) && defined(TOR_UNIT_TESTS) */ +#endif /* defined(TOR_UNIT_TESTS) */ #define proto_entry_free(entry) \ FREE_AND_NULL(proto_entry_t, proto_entry_free_, (entry)) diff --git a/src/core/or/protover_rust.c b/src/core/or/protover_rust.c deleted file mode 100644 index 31ddfa1bdf..0000000000 --- a/src/core/or/protover_rust.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (c) 2016-2021, The Tor Project, Inc. */ -/* See LICENSE for licensing information */ - -/* - * \file protover_rust.c - * \brief Provide a C wrapper for functions exposed in /src/rust/protover, - * and safe translation/handling between the Rust/C boundary. - */ - -#include "core/or/or.h" -#include "core/or/protover.h" - -#ifdef HAVE_RUST - -/* Define for compatibility, used in main.c */ -void -protover_free_all(void) -{ -} - -int protover_contains_long_protocol_names_(const char *s); - -/** - * Return true if the unparsed protover in <b>s</b> would contain a protocol - * name longer than MAX_PROTOCOL_NAME_LENGTH, and false otherwise. - */ -bool -protover_list_is_invalid(const char *s) -{ - return protover_contains_long_protocol_names_(s) != 0; -} - -#endif /* defined(HAVE_RUST) */ - diff --git a/src/core/or/relay.c b/src/core/or/relay.c index f5a9e73856..68fddd1ae7 100644 --- a/src/core/or/relay.c +++ b/src/core/or/relay.c @@ -97,6 +97,8 @@ #include "feature/nodelist/routerinfo_st.h" #include "core/or/socks_request_st.h" #include "core/or/sendme.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_flow.h" static edge_connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, @@ -115,13 +117,6 @@ static void adjust_exit_policy_from_exitpolicy_failure(origin_circuit_t *circ, node_t *node, const tor_addr_t *addr); -/** Stop reading on edge connections when we have this many cells - * waiting on the appropriate queue. */ -#define CELL_QUEUE_HIGHWATER_SIZE 256 -/** Start reading from edge connections again when we get down to this many - * cells. */ -#define CELL_QUEUE_LOWWATER_SIZE 64 - /** Stats: how many relay cells have originated at this hop, or have * been relayed onward (not recognized at this hop)? */ @@ -338,8 +333,17 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ, } return 0; } - log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, - "Didn't recognize cell, but circ stops here! Closing circ."); + if (BUG(CIRCUIT_IS_ORIGIN(circ))) { + /* Should be impossible at this point. */ + return -END_CIRC_REASON_TORPROTOCOL; + } + or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); + if (++or_circ->n_cells_discarded_at_end == 1) { + time_t seconds_open = approx_time() - circ->timestamp_created.tv_sec; + log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, + "Didn't recognize a cell, but circ stops here! Closing circuit. " + "It was created %ld seconds ago.", (long)seconds_open); + } return -END_CIRC_REASON_TORPROTOCOL; } @@ -1574,6 +1578,7 @@ process_sendme_cell(const relay_header_t *rh, const cell_t *cell, } /* Stream level SENDME cell. */ + // TODO: Turn this off for cc_alg=1,2,3; use XON/XOFF instead ret = sendme_process_stream_level(conn, circ, rh->length); if (ret < 0) { /* Means we need to close the circuit with reason ret. */ @@ -1738,6 +1743,44 @@ handle_relay_cell_command(cell_t *cell, circuit_t *circ, } return 0; + case RELAY_COMMAND_XOFF: + if (!conn) { + if (CIRCUIT_IS_ORIGIN(circ)) { + origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); + if (relay_crypt_from_last_hop(ocirc, layer_hint) && + connection_half_edge_is_valid_data(ocirc->half_streams, + rh->stream_id)) { + circuit_read_valid_data(ocirc, rh->length); + } + } + return 0; + } + + if (circuit_process_stream_xoff(conn, layer_hint, cell)) { + if (CIRCUIT_IS_ORIGIN(circ)) { + circuit_read_valid_data(TO_ORIGIN_CIRCUIT(circ), rh->length); + } + } + return 0; + case RELAY_COMMAND_XON: + if (!conn) { + if (CIRCUIT_IS_ORIGIN(circ)) { + origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); + if (relay_crypt_from_last_hop(ocirc, layer_hint) && + connection_half_edge_is_valid_data(ocirc->half_streams, + rh->stream_id)) { + circuit_read_valid_data(ocirc, rh->length); + } + } + return 0; + } + + if (circuit_process_stream_xon(conn, layer_hint, cell)) { + if (CIRCUIT_IS_ORIGIN(circ)) { + circuit_read_valid_data(TO_ORIGIN_CIRCUIT(circ), rh->length); + } + } + return 0; case RELAY_COMMAND_END: reason = rh->length > 0 ? get_uint8(cell->payload+RELAY_HEADER_SIZE) : END_STREAM_REASON_MISC; @@ -2091,6 +2134,7 @@ void circuit_reset_sendme_randomness(circuit_t *circ) { circ->have_sent_sufficiently_random_cell = 0; + // XXX: do we need to change this check for congestion control? circ->send_randomness_after_n_cells = CIRCWINDOW_INCREMENT / 2 + crypto_fast_rng_get_uint(get_thread_fast_rng(), CIRCWINDOW_INCREMENT / 2); } @@ -2284,7 +2328,7 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial, } /* Handle the stream-level SENDME package window. */ - if (sendme_note_stream_data_packaged(conn) < 0) { + if (sendme_note_stream_data_packaged(conn, length) < 0) { connection_stop_reading(TO_CONN(conn)); log_debug(domain,"conn->package_window reached 0."); circuit_consider_stop_edge_reading(circ, cpath_layer); @@ -2350,15 +2394,16 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn, /* How many cells do we have space for? It will be the minimum of * the number needed to exhaust the package window, and the minimum * needed to fill the cell queue. */ - max_to_package = circ->package_window; + + max_to_package = congestion_control_get_package_window(circ, layer_hint); if (CIRCUIT_IS_ORIGIN(circ)) { cells_on_queue = circ->n_chan_cells.n; } else { or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); cells_on_queue = or_circ->p_chan_cells.n; } - if (CELL_QUEUE_HIGHWATER_SIZE - cells_on_queue < max_to_package) - max_to_package = CELL_QUEUE_HIGHWATER_SIZE - cells_on_queue; + if (cell_queue_highwatermark() - cells_on_queue < max_to_package) + max_to_package = cell_queue_highwatermark() - cells_on_queue; /* Once we used to start listening on the streams in the order they * appeared in the linked list. That leads to starvation on the @@ -2398,7 +2443,8 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn, /* Activate reading starting from the chosen stream */ for (conn=chosen_stream; conn; conn = conn->next_stream) { /* Start reading for the streams starting from here */ - if (conn->base_.marked_for_close || conn->package_window <= 0) + if (conn->base_.marked_for_close || conn->package_window <= 0 || + conn->xoff_received) continue; if (!layer_hint || conn->cpath_layer == layer_hint) { connection_start_reading(TO_CONN(conn)); @@ -2409,7 +2455,8 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn, } /* Go back and do the ones we skipped, circular-style */ for (conn = first_conn; conn != chosen_stream; conn = conn->next_stream) { - if (conn->base_.marked_for_close || conn->package_window <= 0) + if (conn->base_.marked_for_close || conn->package_window <= 0 || + conn->xoff_received) continue; if (!layer_hint || conn->cpath_layer == layer_hint) { connection_start_reading(TO_CONN(conn)); @@ -2495,7 +2542,7 @@ circuit_consider_stop_edge_reading(circuit_t *circ, crypt_path_t *layer_hint) or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); log_debug(domain,"considering circ->package_window %d", circ->package_window); - if (circ->package_window <= 0) { + if (congestion_control_get_package_window(circ, layer_hint) <= 0) { log_debug(domain,"yes, not-at-origin. stopped."); for (conn = or_circ->n_streams; conn; conn=conn->next_stream) connection_stop_reading(TO_CONN(conn)); @@ -2506,7 +2553,7 @@ circuit_consider_stop_edge_reading(circuit_t *circ, crypt_path_t *layer_hint) /* else, layer hint is defined, use it */ log_debug(domain,"considering layer_hint->package_window %d", layer_hint->package_window); - if (layer_hint->package_window <= 0) { + if (congestion_control_get_package_window(circ, layer_hint) <= 0) { log_debug(domain,"yes, at-origin. stopped."); for (conn = TO_ORIGIN_CIRCUIT(circ)->p_streams; conn; conn=conn->next_stream) { @@ -2722,11 +2769,18 @@ cell_queues_get_total_allocation(void) /** The time at which we were last low on memory. */ static time_t last_time_under_memory_pressure = 0; +/** Statistics on how many bytes were removed by the OOM per type. */ +uint64_t oom_stats_n_bytes_removed_dns = 0; +uint64_t oom_stats_n_bytes_removed_cell = 0; +uint64_t oom_stats_n_bytes_removed_geoip = 0; +uint64_t oom_stats_n_bytes_removed_hsdir = 0; + /** Check whether we've got too much space used for cells. If so, * call the OOM handler and return 1. Otherwise, return 0. */ STATIC int cell_queues_check_size(void) { + size_t removed = 0; time_t now = time(NULL); size_t alloc = cell_queues_get_total_allocation(); alloc += half_streams_get_total_allocation(); @@ -2751,20 +2805,27 @@ cell_queues_check_size(void) if (hs_cache_total > get_options()->MaxMemInQueues / 5) { const size_t bytes_to_remove = hs_cache_total - (size_t)(get_options()->MaxMemInQueues / 10); - alloc -= hs_cache_handle_oom(now, bytes_to_remove); + removed = hs_cache_handle_oom(now, bytes_to_remove); + oom_stats_n_bytes_removed_hsdir += removed; + alloc -= removed; } if (geoip_client_cache_total > get_options()->MaxMemInQueues / 5) { const size_t bytes_to_remove = geoip_client_cache_total - (size_t)(get_options()->MaxMemInQueues / 10); - alloc -= geoip_client_cache_handle_oom(now, bytes_to_remove); + removed = geoip_client_cache_handle_oom(now, bytes_to_remove); + oom_stats_n_bytes_removed_geoip += removed; + alloc -= removed; } if (dns_cache_total > get_options()->MaxMemInQueues / 5) { const size_t bytes_to_remove = dns_cache_total - (size_t)(get_options()->MaxMemInQueues / 10); - alloc -= dns_cache_handle_oom(now, bytes_to_remove); + removed = dns_cache_handle_oom(now, bytes_to_remove); + oom_stats_n_bytes_removed_dns += removed; + alloc -= removed; } - circuits_handle_oom(alloc); + removed = circuits_handle_oom(alloc); + oom_stats_n_bytes_removed_cell += removed; return 1; } } @@ -3062,7 +3123,7 @@ channel_flush_from_first_active_circuit, (channel_t *chan, int max)) /* Is the cell queue low enough to unblock all the streams that are waiting * to write to this circuit? */ - if (streams_blocked && queue->n <= CELL_QUEUE_LOWWATER_SIZE) + if (streams_blocked && queue->n <= cell_queue_lowwatermark()) set_streams_blocked_on_circ(circ, chan, 0, 0); /* unblock streams */ /* If n_flushed < max still, loop around and pick another circuit */ @@ -3180,7 +3241,7 @@ append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan, /* If we have too many cells on the circuit, we should stop reading from * the edge streams for a while. */ - if (!streams_blocked && queue->n >= CELL_QUEUE_HIGHWATER_SIZE) + if (!streams_blocked && queue->n >= cell_queue_highwatermark()) set_streams_blocked_on_circ(circ, chan, 1, 0); /* block streams */ if (streams_blocked && fromstream) { diff --git a/src/core/or/relay.h b/src/core/or/relay.h index 2f337d5d16..eac920f491 100644 --- a/src/core/or/relay.h +++ b/src/core/or/relay.h @@ -49,6 +49,11 @@ extern uint64_t stats_n_data_bytes_packaged; extern uint64_t stats_n_data_cells_received; extern uint64_t stats_n_data_bytes_received; +extern uint64_t oom_stats_n_bytes_removed_dns; +extern uint64_t oom_stats_n_bytes_removed_cell; +extern uint64_t oom_stats_n_bytes_removed_geoip; +extern uint64_t oom_stats_n_bytes_removed_hsdir; + void dump_cell_pool_usage(int severity); size_t packed_cell_mem_cost(void); diff --git a/src/core/or/scheduler_kist.c b/src/core/or/scheduler_kist.c index eba55f6497..52bc62f1b4 100644 --- a/src/core/or/scheduler_kist.c +++ b/src/core/or/scheduler_kist.c @@ -465,9 +465,17 @@ MOCK_IMPL(int, channel_should_write_to_kernel, MOCK_IMPL(void, channel_write_to_kernel, (channel_t *chan)) { tor_assert(chan); + + /* This is possible because a channel might have an outbuf table entry even + * though it has no more cells in its outbuf. Just move on. */ + size_t outbuf_len = channel_outbuf_length(chan); + if (outbuf_len == 0) { + return; + } + log_debug(LD_SCHED, "Writing %lu bytes to kernel for chan %" PRIu64, - (unsigned long)channel_outbuf_length(chan), - chan->global_identifier); + (unsigned long) outbuf_len, chan->global_identifier); + /* Note that 'connection_handle_write()' may change the scheduler state of * the channel during the scheduling loop with * 'connection_or_flushed_some()' -> 'scheduler_channel_wants_writes()'. diff --git a/src/core/or/sendme.c b/src/core/or/sendme.c index ce3385ae98..90f4dfcf05 100644 --- a/src/core/or/sendme.c +++ b/src/core/or/sendme.c @@ -21,6 +21,8 @@ #include "core/or/or_circuit_st.h" #include "core/or/relay.h" #include "core/or/sendme.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_flow.h" #include "feature/nodelist/networkstatus.h" #include "lib/ctime/di_ops.h" #include "trunnel/sendme_cell.h" @@ -64,13 +66,6 @@ pop_first_cell_digest(const circuit_t *circ) return NULL; } - /* More cell digest than the SENDME window is never suppose to happen. The - * cell should have been rejected before reaching this point due to its - * package_window down to 0 leading to a circuit close. Scream loudly but - * still pop the element so we don't memory leak. */ - tor_assert_nonfatal(smartlist_len(circ->sendme_last_digests) <= - CIRCWINDOW_START_MAX / CIRCWINDOW_INCREMENT); - circ_digest = smartlist_get(circ->sendme_last_digests, 0); smartlist_del_keeporder(circ->sendme_last_digests, 0); return circ_digest; @@ -334,17 +329,18 @@ record_cell_digest_on_circ(circuit_t *circ, const uint8_t *sendme_digest) /** Return true iff the next cell for the given cell window is expected to be * a SENDME. * - * We are able to know that because the package or deliver window value minus - * one cell (the possible SENDME cell) should be a multiple of the increment - * window value. */ -static bool -circuit_sendme_cell_is_next(int window) + * We are able to know that because the package or inflight window value minus + * one cell (the possible SENDME cell) should be a multiple of the + * cells-per-sendme increment value (set via consensus parameter, negotiated + * for the circuit, and passed in as sendme_inc). + * + * This function is used when recording a cell digest and this is done quite + * low in the stack when decrypting or encrypting a cell. The window is only + * updated once the cell is actually put in the outbuf. + */ +STATIC bool +circuit_sendme_cell_is_next(int deliver_window, int sendme_inc) { - /* At the start of the window, no SENDME will be expected. */ - if (window == CIRCWINDOW_START) { - return false; - } - /* Are we at the limit of the increment and if not, we don't expect next * cell is a SENDME. * @@ -353,10 +349,12 @@ circuit_sendme_cell_is_next(int window) * decremented just yet so when this is called, we are currently processing * the "window - 1" cell. * - * This function is used when recording a cell digest and this is done quite - * low in the stack when decrypting or encrypting a cell. The window is only - * updated once the cell is actually put in the outbuf. */ - if (((window - 1) % CIRCWINDOW_INCREMENT) != 0) { + * Because deliver_window starts at CIRCWINDOW_START and counts down, + * to get the actual number of received cells for this check, we must + * first convert to receieved cells, or the modulus operator will fail. + */ + tor_assert(deliver_window <= CIRCWINDOW_START); + if (((CIRCWINDOW_START - (deliver_window - 1)) % sendme_inc) != 0) { return false; } @@ -378,6 +376,10 @@ sendme_connection_edge_consider_sending(edge_connection_t *conn) int log_domain = TO_CONN(conn)->type == CONN_TYPE_AP ? LD_APP : LD_EXIT; + /* If we use flow control, we do not send stream sendmes */ + if (edge_uses_flow_control(conn)) + goto end; + /* Don't send it if we still have data to deliver. */ if (connection_outbuf_too_full(TO_CONN(conn))) { goto end; @@ -419,15 +421,16 @@ sendme_circuit_consider_sending(circuit_t *circ, crypt_path_t *layer_hint) { bool sent_one_sendme = false; const uint8_t *digest; + int sendme_inc = sendme_get_inc_count(circ, layer_hint); while ((layer_hint ? layer_hint->deliver_window : circ->deliver_window) <= - CIRCWINDOW_START - CIRCWINDOW_INCREMENT) { + CIRCWINDOW_START - sendme_inc) { log_debug(LD_CIRC,"Queuing circuit sendme."); if (layer_hint) { - layer_hint->deliver_window += CIRCWINDOW_INCREMENT; + layer_hint->deliver_window += sendme_inc; digest = cpath_get_sendme_digest(layer_hint); } else { - circ->deliver_window += CIRCWINDOW_INCREMENT; + circ->deliver_window += sendme_inc; digest = relay_crypto_get_sendme_digest(&TO_OR_CIRCUIT(circ)->crypto); } if (send_circuit_level_sendme(circ, layer_hint, digest) < 0) { @@ -448,6 +451,9 @@ sendme_circuit_consider_sending(circuit_t *circ, crypt_path_t *layer_hint) * the length of the SENDME cell payload (excluding the header). The * cell_payload is the payload. * + * This function validates the SENDME's digest, and then dispatches to + * the appropriate congestion control algorithm in use on the circuit. + * * Return 0 on success (the SENDME is valid and the package window has * been updated properly). * @@ -460,6 +466,7 @@ sendme_process_circuit_level(crypt_path_t *layer_hint, { tor_assert(circ); tor_assert(cell_payload); + congestion_control_t *cc; /* Validate the SENDME cell. Depending on the version, different validation * can be done. An invalid SENDME requires us to close the circuit. */ @@ -467,6 +474,36 @@ sendme_process_circuit_level(crypt_path_t *layer_hint, return -END_CIRC_REASON_TORPROTOCOL; } + /* origin circuits need to count valid sendmes as valid protocol data */ + if (CIRCUIT_IS_ORIGIN(circ)) { + circuit_read_valid_data(TO_ORIGIN_CIRCUIT(circ), cell_payload_len); + } + + // Get CC + if (layer_hint) { + cc = layer_hint->ccontrol; + } else { + cc = circ->ccontrol; + } + + /* If there is no CC object, assume fixed alg */ + if (!cc) { + return sendme_process_circuit_level_impl(layer_hint, circ); + } + + return congestion_control_dispatch_cc_alg(cc, circ, layer_hint); +} + +/** + * Process a SENDME for Tor's original fixed window circuit-level flow control. + * Updates the package_window and ensures that it does not exceed the max. + * + * Returns -END_CIRC_REASON_TORPROTOCOL if the max is exceeded, otherwise + * returns 0. + */ +int +sendme_process_circuit_level_impl(crypt_path_t *layer_hint, circuit_t *circ) +{ /* If we are the origin of the circuit, we are the Client so we use the * layer hint (the Exit hop) for the package window tracking. */ if (CIRCUIT_IS_ORIGIN(circ)) { @@ -486,10 +523,6 @@ sendme_process_circuit_level(crypt_path_t *layer_hint, layer_hint->package_window += CIRCWINDOW_INCREMENT; log_debug(LD_APP, "circ-level sendme at origin, packagewindow %d.", layer_hint->package_window); - - /* We count circuit-level sendme's as valid delivered data because they - * are rate limited. */ - circuit_read_valid_data(TO_ORIGIN_CIRCUIT(circ), cell_payload_len); } else { /* We aren't the origin of this circuit so we are the Exit and thus we * track the package window with the circuit object. */ @@ -525,6 +558,12 @@ sendme_process_stream_level(edge_connection_t *conn, circuit_t *circ, tor_assert(conn); tor_assert(circ); + if (edge_uses_flow_control(conn)) { + log_fn(LOG_PROTOCOL_WARN, LD_EDGE, + "Congestion control got stream sendme"); + return -END_CIRC_REASON_TORPROTOCOL; + } + /* Don't allow the other endpoint to request more than our maximum (i.e. * initial) stream SENDME window worth of data. Well-behaved stock clients * will not request more than this max (as per the check in the while loop @@ -582,7 +621,12 @@ int sendme_stream_data_received(edge_connection_t *conn) { tor_assert(conn); - return --conn->deliver_window; + + if (edge_uses_flow_control(conn)) { + return flow_control_decide_xoff(conn); + } else { + return --conn->deliver_window; + } } /* Called when a relay DATA cell is packaged on the given circuit. If @@ -592,34 +636,56 @@ int sendme_note_circuit_data_packaged(circuit_t *circ, crypt_path_t *layer_hint) { int package_window, domain; + congestion_control_t *cc; tor_assert(circ); - if (CIRCUIT_IS_ORIGIN(circ)) { - /* Client side. */ - tor_assert(layer_hint); - --layer_hint->package_window; - package_window = layer_hint->package_window; + if (layer_hint) { + cc = layer_hint->ccontrol; domain = LD_APP; } else { - /* Exit side. */ - tor_assert(!layer_hint); - --circ->package_window; - package_window = circ->package_window; + cc = circ->ccontrol; domain = LD_EXIT; } - log_debug(domain, "Circuit package_window now %d.", package_window); - return package_window; + if (cc) { + congestion_control_note_cell_sent(cc, circ, layer_hint); + } else { + /* Fixed alg uses package_window and must update it */ + + if (CIRCUIT_IS_ORIGIN(circ)) { + /* Client side. */ + tor_assert(layer_hint); + --layer_hint->package_window; + package_window = layer_hint->package_window; + } else { + /* Exit side. */ + tor_assert(!layer_hint); + --circ->package_window; + package_window = circ->package_window; + } + log_debug(domain, "Circuit package_window now %d.", package_window); + } + + /* Return appropriate number designating how many cells can still be sent */ + return congestion_control_get_package_window(circ, layer_hint); } /* Called when a relay DATA cell is packaged for the given edge connection * conn. Update the package window and return its new value. */ int -sendme_note_stream_data_packaged(edge_connection_t *conn) +sendme_note_stream_data_packaged(edge_connection_t *conn, size_t len) { tor_assert(conn); + if (edge_uses_flow_control(conn)) { + flow_control_note_sent_data(conn, len); + if (conn->xoff_received) + return -1; + else + return 1; + } + --conn->package_window; log_debug(LD_APP, "Stream package_window now %d.", conn->package_window); return conn->package_window; @@ -631,20 +697,14 @@ sendme_note_stream_data_packaged(edge_connection_t *conn) void sendme_record_cell_digest_on_circ(circuit_t *circ, crypt_path_t *cpath) { - int package_window; uint8_t *sendme_digest; tor_assert(circ); - package_window = circ->package_window; - if (cpath) { - package_window = cpath->package_window; - } - /* Is this the last cell before a SENDME? The idea is that if the * package_window reaches a multiple of the increment, after this cell, we * should expect a SENDME. */ - if (!circuit_sendme_cell_is_next(package_window)) { + if (!circuit_sent_cell_for_sendme(circ, cpath)) { return; } @@ -670,7 +730,8 @@ sendme_record_received_cell_digest(circuit_t *circ, crypt_path_t *cpath) /* Only record if the next cell is expected to be a SENDME. */ if (!circuit_sendme_cell_is_next(cpath ? cpath->deliver_window : - circ->deliver_window)) { + circ->deliver_window, + sendme_get_inc_count(circ, cpath))) { return; } @@ -692,8 +753,7 @@ sendme_record_sending_cell_digest(circuit_t *circ, crypt_path_t *cpath) tor_assert(circ); /* Only record if the next cell is expected to be a SENDME. */ - if (!circuit_sendme_cell_is_next(cpath ? cpath->package_window : - circ->package_window)) { + if (!circuit_sent_cell_for_sendme(circ, cpath)) { goto end; } diff --git a/src/core/or/sendme.h b/src/core/or/sendme.h index a008940905..bc1daef23d 100644 --- a/src/core/or/sendme.h +++ b/src/core/or/sendme.h @@ -22,6 +22,7 @@ void sendme_circuit_consider_sending(circuit_t *circ, int sendme_process_circuit_level(crypt_path_t *layer_hint, circuit_t *circ, const uint8_t *cell_payload, uint16_t cell_payload_len); +int sendme_process_circuit_level_impl(crypt_path_t *, circuit_t *); int sendme_process_stream_level(edge_connection_t *conn, circuit_t *circ, uint16_t cell_body_len); @@ -32,7 +33,7 @@ int sendme_circuit_data_received(circuit_t *circ, crypt_path_t *layer_hint); /* Update package window functions. */ int sendme_note_circuit_data_packaged(circuit_t *circ, crypt_path_t *layer_hint); -int sendme_note_stream_data_packaged(edge_connection_t *conn); +int sendme_note_stream_data_packaged(edge_connection_t *conn, size_t len); /* Record cell digest on circuit. */ void sendme_record_cell_digest_on_circ(circuit_t *circ, crypt_path_t *cpath); @@ -72,6 +73,8 @@ STATIC ssize_t build_cell_payload_v1(const uint8_t *cell_digest, STATIC bool sendme_is_valid(const circuit_t *circ, const uint8_t *cell_payload, size_t cell_payload_len); +STATIC bool circuit_sendme_cell_is_next(int deliver_window, + int sendme_inc); #endif /* defined(TOR_UNIT_TESTS) */ diff --git a/src/core/or/status.c b/src/core/or/status.c index 9e7ae70535..1e599aafb3 100644 --- a/src/core/or/status.c +++ b/src/core/or/status.c @@ -147,6 +147,32 @@ note_connection(bool inbound, int family) } } +/** + * @name Counters for unrecognized cells + * + * Track cells that we drop because they are unrecognized and we have + * nobody to send them to. + **/ +/**@{*/ +static unsigned n_circs_closed_for_unrecognized_cells; +static uint64_t n_unrecognized_cells_discarded; +static uint64_t n_secs_on_circs_with_unrecognized_cells; +/**@}*/ + +/** + * Note that a circuit has closed @a n_seconds after having been created, + * because of one or more unrecognized cells. Also note the number of + * unrecognized cells @a n_cells. + */ +void +note_circ_closed_for_unrecognized_cells(time_t n_seconds, uint32_t n_cells) +{ + ++n_circs_closed_for_unrecognized_cells; + n_unrecognized_cells_discarded += n_cells; + if (n_seconds >= 0) + n_secs_on_circs_with_unrecognized_cells += (uint64_t) n_seconds; +} + /** Log a "heartbeat" message describing Tor's status and history so that the * user can know that there is indeed a running Tor. Return 0 on success and * -1 on failure. */ @@ -240,6 +266,23 @@ log_heartbeat(time_t now) (main_loop_idle_count)); } + if (n_circs_closed_for_unrecognized_cells) { + double avg_time_alive = ((double) n_secs_on_circs_with_unrecognized_cells) + / n_circs_closed_for_unrecognized_cells; + double avg_cells = ((double) n_unrecognized_cells_discarded) + / n_circs_closed_for_unrecognized_cells; + log_fn(LOG_NOTICE, LD_HEARTBEAT, + "Since our last heartbeat, %u circuits were closed because of " + "unrecognized cells while we were the last hop. On average, each " + "one was alive for %lf seconds, and had %lf unrecognized cells.", + n_circs_closed_for_unrecognized_cells, + avg_time_alive, + avg_cells); + n_circs_closed_for_unrecognized_cells = 0; + n_unrecognized_cells_discarded = 0; + n_secs_on_circs_with_unrecognized_cells = 0; + } + /** Now, if we are an HS service, log some stats about our usage */ log_onion_service_stats(); diff --git a/src/core/or/status.h b/src/core/or/status.h index 927df9a192..57e28002fc 100644 --- a/src/core/or/status.h +++ b/src/core/or/status.h @@ -12,6 +12,9 @@ #include "lib/testsupport/testsupport.h" void note_connection(bool inbound, int family); +void note_circ_closed_for_unrecognized_cells(time_t n_seconds, + uint32_t n_cells); + int log_heartbeat(time_t now); #ifdef STATUS_PRIVATE diff --git a/src/core/or/trace_probes_cc.c b/src/core/or/trace_probes_cc.c new file mode 100644 index 0000000000..b0ca23e208 --- /dev/null +++ b/src/core/or/trace_probes_cc.c @@ -0,0 +1,34 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file trace_probes_cc.c + * \brief Tracepoint provider source file for the cc subsystem. Probes + * are generated within this C file for LTTng-UST + **/ + +#include "orconfig.h" + +/* + * Following section is specific to LTTng-UST. + */ +#ifdef USE_TRACING_INSTRUMENTATION_LTTNG + +/* Header files that the probes need. */ +#include "core/or/or.h" +#include "core/or/channel.h" +#include "core/or/circuit_st.h" +#include "core/or/circuitlist.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_st.h" +#include "core/or/connection_st.h" +#include "core/or/edge_connection_st.h" +#include "core/or/or_circuit_st.h" +#include "core/or/origin_circuit_st.h" + +#define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES + +#include "core/or/trace_probes_cc.h" + +#endif /* defined(USE_TRACING_INSTRUMENTATION_LTTNG) */ diff --git a/src/core/or/trace_probes_cc.h b/src/core/or/trace_probes_cc.h new file mode 100644 index 0000000000..1f87528723 --- /dev/null +++ b/src/core/or/trace_probes_cc.h @@ -0,0 +1,22 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file trace_probes_cc.c + * \brief The tracing probes for the congestion control subsystem. + * Currently, only LTTng-UST probes are available. + **/ + +#ifndef TOR_TRACE_PROBES_CC_H +#define TOR_TRACE_PROBES_CC_H + +#include "lib/trace/events.h" + +/* We only build the following if LTTng instrumentation has been enabled. */ +#ifdef USE_TRACING_INSTRUMENTATION_LTTNG + +#include "core/or/lttng_cc.inc" + +#endif /* USE_TRACING_INSTRUMENTATION_LTTNG */ + +#endif /* !defined(TOR_TRACE_PROBES_CC_H) */ diff --git a/src/core/or/versions.c b/src/core/or/versions.c index b9fad22c04..9913b3ee31 100644 --- a/src/core/or/versions.c +++ b/src/core/or/versions.c @@ -482,6 +482,12 @@ memoize_protover_summary(protover_summary_flags_t *out, protocol_list_supports_protocol(protocols, PRT_PADDING, PROTOVER_HS_SETUP_PADDING); + out->supports_congestion_control = + protocol_list_supports_protocol(protocols, PRT_FLOWCTRL, + PROTOVER_FLOWCTRL_CC) && + protocol_list_supports_protocol(protocols, PRT_RELAY, + PROTOVER_RELAY_NTOR_V3); + protover_summary_flags_t *new_cached = tor_memdup(out, sizeof(*out)); cached = strmap_set(protover_summary_map, protocols, new_cached); tor_assert(!cached); diff --git a/src/ext/ed25519/donna/test-ticks.h b/src/ext/ed25519/donna/test-ticks.h index 0103e03dde..16cec9ba92 100644 --- a/src/ext/ed25519/donna/test-ticks.h +++ b/src/ext/ed25519/donna/test-ticks.h @@ -13,7 +13,7 @@ get_ticks(void) { __asm__ __volatile__("rdtsc" : "=a" (lo), "=d" (hi)); return ((uint64_t)lo | ((uint64_t)hi << 32)); #else - need rdtsc for this compiler + #error need rdtsc for this compiler #endif #elif defined(OS_SOLARIS) return (uint64_t)gethrtime(); @@ -35,7 +35,7 @@ get_ticks(void) { t = ((uint64_t)t2.tv_usec << 32) | (uint64_t)t2.tv_sec; return t; #else - need ticks for this platform + #error need ticks for this platform #endif } diff --git a/src/ext/rust b/src/ext/rust deleted file mode 160000 -Subproject aa37fb84fb829902e83ca11a7244bbc6b86b809 diff --git a/src/feature/api/tor_api.c b/src/feature/api/tor_api.c index 051be50b3a..88e91ebfd5 100644 --- a/src/feature/api/tor_api.c +++ b/src/feature/api/tor_api.c @@ -18,9 +18,9 @@ // Include this after the above headers, to insure that they don't // depend on anything else. #include "orconfig.h" +#include "lib/cc/compat_compiler.h" #include "lib/cc/torint.h" #include "feature/api/tor_api_internal.h" -#include "lib/cc/compat_compiler.h" #include <stdio.h> #include <stdlib.h> @@ -39,7 +39,9 @@ #include "lib/net/socketpair.h" #define raw_socketpair tor_ersatz_socketpair #define raw_closesocket closesocket +#if !defined(HAVE_SNPRINTF) #define snprintf _snprintf +#endif #else /* !defined(_WIN32) */ #define raw_socketpair socketpair #define raw_closesocket close diff --git a/src/feature/client/bridges.c b/src/feature/client/bridges.c index d40bcc6c8e..9e36d26929 100644 --- a/src/feature/client/bridges.c +++ b/src/feature/client/bridges.c @@ -943,9 +943,17 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node) } /** We just learned a descriptor for a bridge. See if that - * digest is in our entry guard list, and add it if not. */ + * digest is in our entry guard list, and add it if not. Schedule the + * next fetch for a long time from now, and initiate any follow-up + * activities like continuing to bootstrap. + * + * <b>from_cache</b> * tells us whether we fetched it from disk (else + * the network) + * + * <b>desc_is_new</b> tells us if we preferred it to the old version we + * had, if any. */ void -learned_bridge_descriptor(routerinfo_t *ri, int from_cache) +learned_bridge_descriptor(routerinfo_t *ri, int from_cache, int desc_is_new) { tor_assert(ri); tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE); @@ -961,12 +969,14 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache) if (bridge) { /* if we actually want to use this one */ node_t *node; - /* it's here; schedule its re-fetch for a long time from now. */ if (!from_cache) { /* This schedules the re-fetch at a constant interval, which produces * a pattern of bridge traffic. But it's better than trying all * configured bridges several times in the first few minutes. */ download_status_reset(&bridge->fetch_status); + /* it's here; schedule its re-fetch for a long time from now. */ + bridge->fetch_status.next_attempt_at += + get_options()->TestingBridgeDownloadInitialDelay; } node = node_get_mutable_by_id(ri->cache_info.identity_digest); @@ -982,8 +992,10 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache) entry_guard_learned_bridge_identity(&bridge->addrport_configured, (const uint8_t*)ri->cache_info.identity_digest); - log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname, - from_cache ? "cached" : "fresh", router_describe(ri)); + if (desc_is_new) + log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", + ri->nickname, + from_cache ? "cached" : "fresh", router_describe(ri)); /* If we didn't have a reachable bridge before this one, try directory * documents again. */ if (first) { diff --git a/src/feature/client/bridges.h b/src/feature/client/bridges.h index a42363f683..dd3e498a0a 100644 --- a/src/feature/client/bridges.h +++ b/src/feature/client/bridges.h @@ -46,7 +46,8 @@ void learned_router_identity(const tor_addr_t *addr, uint16_t port, void bridge_add_from_config(struct bridge_line_t *bridge_line); void retry_bridge_descriptor_fetch_directly(const char *digest); void fetch_bridge_descriptors(const or_options_t *options, time_t now); -void learned_bridge_descriptor(routerinfo_t *ri, int from_cache); +void learned_bridge_descriptor(routerinfo_t *ri, + int from_cache, int desc_is_new); const smartlist_t *get_socks_args_by_bridge_addrport(const tor_addr_t *addr, uint16_t port); diff --git a/src/feature/client/circpathbias.c b/src/feature/client/circpathbias.c index 9c0ecc56ad..ff9e05a645 100644 --- a/src/feature/client/circpathbias.c +++ b/src/feature/client/circpathbias.c @@ -363,6 +363,17 @@ pathbias_should_count(origin_circuit_t *circ) return 0; } + /* Ignore circuits where the controller helped choose the path. When + * this happens, we can't be sure whether the path was chosen randomly + * or not. */ + if (circ->any_hop_from_controller) { + /* (In this case, we _don't_ check to see if shouldcount is changing, + * since it's possible that an already-created circuit later gets extended + * by the controller. */ + circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED; + return 0; + } + /* Completely ignore one hop circuits */ if (circ->build_state->onehop_tunnel || circ->build_state->desired_path_len == 1) { diff --git a/src/feature/client/dnsserv.c b/src/feature/client/dnsserv.c index 67ab20eded..f0bb0af100 100644 --- a/src/feature/client/dnsserv.c +++ b/src/feature/client/dnsserv.c @@ -65,6 +65,9 @@ evdns_server_callback(struct evdns_server_request *req, void *data_) log_info(LD_APP, "Got a new DNS request!"); + /* Receiving a request on the DNSPort counts as user activity. */ + note_user_activity(approx_time()); + req->flags |= 0x80; /* set RA */ /* First, check whether the requesting address matches our SOCKSPolicy. */ diff --git a/src/feature/client/entrynodes.c b/src/feature/client/entrynodes.c index 502cb99690..15f29d1c3e 100644 --- a/src/feature/client/entrynodes.c +++ b/src/feature/client/entrynodes.c @@ -132,6 +132,7 @@ #include "feature/client/entrynodes.h" #include "feature/client/transports.h" #include "feature/control/control_events.h" +#include "feature/dirclient/dlstatus.h" #include "feature/dircommon/directory.h" #include "feature/nodelist/describe.h" #include "feature/nodelist/microdesc.h" @@ -559,7 +560,7 @@ get_extreme_restriction_threshold(void) int32_t pct = networkstatus_get_param(NULL, "guard-extreme-restriction-percent", DFLT_EXTREME_RESTRICTION_PERCENT, - 1, INT32_MAX); + 1, 100); return pct / 100.0; } @@ -576,6 +577,18 @@ mark_guard_maybe_reachable(entry_guard_t *guard) guard->is_reachable = GUARD_REACHABLE_MAYBE; if (guard->is_filtered_guard) guard->is_usable_filtered_guard = 1; + + /* Check if it is a bridge and we don't have its descriptor yet */ + if (guard->bridge_addr && !guard_has_descriptor(guard)) { + /* Reset the descriptor fetch retry schedule, so it gives it another + * go soon. It's important to keep any "REACHABLE_MAYBE" bridges in + * sync with the descriptor fetch schedule, since we will refuse to + * use the network until our first primary bridges are either + * known-usable or known-unusable. See bug 40396. */ + download_status_t *dl = get_bridge_dl_status_by_id(guard->identity); + if (dl) + download_status_reset(dl); + } } /** @@ -2046,6 +2059,14 @@ entry_guard_consider_retry(entry_guard_t *guard) get_retry_schedule(guard->failing_since, now, guard->is_primary); const time_t last_attempt = guard->last_tried_to_connect; + /* Check if it is a bridge and we don't have its descriptor yet */ + if (guard->bridge_addr && !guard_has_descriptor(guard)) { + /* We want to leave the retry schedule to fetch_bridge_descriptors(), + * so we don't have two retry schedules clobbering each other. See + * bugs 40396 and 40497 for details of why we need this exception. */ + return; + } + if (BUG(last_attempt == 0) || now >= last_attempt + delay) { /* We should mark this retriable. */ @@ -2271,6 +2292,13 @@ entry_guards_note_guard_failure(guard_selection_t *gs, guard->is_primary?"primary ":"", guard->confirmed_idx>=0?"confirmed ":"", entry_guard_describe(guard)); + + /* Schedule a re-assessment of whether we have enough dir info to + * use the network. Counterintuitively, *losing* a bridge might actually + * be just what we need to *resume* using the network, if we had it in + * state GUARD_REACHABLE_MAYBE and we were stalling to learn this + * outcome. See bug 40396 for more details. */ + router_dir_info_changed(); } /** @@ -2295,6 +2323,12 @@ entry_guards_note_guard_success(guard_selection_t *gs, /* If guard was not already marked as reachable, send a GUARD UP signal */ if (guard->is_reachable != GUARD_REACHABLE_YES) { control_event_guard(guard->nickname, guard->identity, "UP"); + + /* Schedule a re-assessment of whether we have enough dir info to + * use the network. One of our guards has just moved to + * GUARD_REACHABLE_YES, so maybe we can resume using the network + * now. */ + router_dir_info_changed(); } guard->is_reachable = GUARD_REACHABLE_YES; @@ -2709,7 +2743,7 @@ entry_guards_upgrade_waiting_circuits(guard_selection_t *gs, {NONPRIMARY_GUARD_CONNECT_TIMEOUT} seconds." */ circuit_guard_state_t *state = origin_circuit_get_guard_state(circ); - if BUG((state == NULL)) + if (BUG(state == NULL)) continue; if (state->state != GUARD_CIRC_STATE_COMPLETE) continue; @@ -3538,6 +3572,11 @@ entry_guards_changed_for_guard_selection(guard_selection_t *gs) entry_guards_update_guards_in_state() */ or_state_mark_dirty(get_or_state(), when); + + /* Schedule a re-assessment of whether we have enough dir info to + * use the network. When we add or remove or disable or enable a + * guard, the decision could shift. */ + router_dir_info_changed(); } /** Our list of entry guards has changed for the default guard selection @@ -3930,6 +3969,253 @@ guard_selection_free_(guard_selection_t *gs) tor_free(gs); } +/**********************************************************************/ + +/** Layer2 guard subsystem (vanguards-lite) used for onion service circuits */ + +/** A simple representation of a layer2 guard. We just need its identity so + * that we feed it into a routerset, and a sampled timestamp to do expiration + * checks. */ +typedef struct layer2_guard_t { + /** Identity of the guard */ + char identity[DIGEST_LEN]; + /** When does this guard expire? (randomized timestamp) */ + time_t expire_on_date; +} layer2_guard_t; + +#define layer2_guard_free(val) \ + FREE_AND_NULL(layer2_guard_t, layer2_guard_free_, (val)) + +/** Return true if the vanguards-lite subsystem is enabled */ +bool +vanguards_lite_is_enabled(void) +{ + /* First check torrc option and then maybe also the consensus parameter. */ + const or_options_t *options = get_options(); + + /* If the option is explicitly disabled, that's the final word here */ + if (options->VanguardsLiteEnabled == 0) { + return false; + } + + /* If the option is set to auto, then check the consensus parameter */ + if (options->VanguardsLiteEnabled == -1) { + return networkstatus_get_param(NULL, "vanguards-lite-enabled", + 1, /* default to "on" */ + 0, 1); + } + + /* else it's enabled */ + tor_assert_nonfatal(options->VanguardsLiteEnabled == 1); + return options->VanguardsLiteEnabled; +} + +static void +layer2_guard_free_(layer2_guard_t *l2) +{ + if (!l2) { + return; + } + + tor_free(l2); +} + +/** Global list and routerset of L2 guards. They are both synced and they get + * updated periodically. We need both the list and the routerset: we use the + * smartlist to keep track of expiration times and the routerset is what we + * return to the users of this subsystem. */ +static smartlist_t *layer2_guards = NULL; +static routerset_t *layer2_routerset = NULL; + +/** Number of L2 guards */ +#define NUMBER_SECOND_GUARDS 4 +/** Make sure that the number of L2 guards is less than the number of + * MAX_SANE_RESTRICTED_NODES */ +CTASSERT(NUMBER_SECOND_GUARDS < 20); + +/** Lifetime of L2 guards: + * 1 to 12 days, for an average of a week using the max(x,x) distribution */ +#define MIN_SECOND_GUARD_LIFETIME (3600*24) +#define MAX_SECOND_GUARD_LIFETIME (3600*24*12) + +/** Return the number of guards our L2 guardset should have */ +static int +get_number_of_layer2_hs_guards(void) +{ + return (int) networkstatus_get_param(NULL, + "guard-hs-l2-number", + NUMBER_SECOND_GUARDS, + 1, 19); +} + +/** Return the minimum lifetime of L2 guards */ +static int +get_min_lifetime_of_layer2_hs_guards(void) +{ + return (int) networkstatus_get_param(NULL, + "guard-hs-l2-lifetime-min", + MIN_SECOND_GUARD_LIFETIME, + 1, INT32_MAX); +} + +/** Return the maximum lifetime of L2 guards */ +static int +get_max_lifetime_of_layer2_hs_guards(void) +{ + return (int) networkstatus_get_param(NULL, + "guard-hs-l2-lifetime-max", + MAX_SECOND_GUARD_LIFETIME, + 1, INT32_MAX); +} + +/** + * Sample and return a lifetime for an L2 guard. + * + * Lifetime randomized uniformly between min and max consensus params. + */ +static int +get_layer2_hs_guard_lifetime(void) +{ + int min = get_min_lifetime_of_layer2_hs_guards(); + int max = get_max_lifetime_of_layer2_hs_guards(); + + if (BUG(min >= max)) { + return min; + } + + return crypto_rand_int_range(min, max); +} + +/** Maintain the L2 guard list. Make sure the list contains enough guards, do + * expirations as necessary, and keep all the data structures of this + * subsystem synchronized */ +void +maintain_layer2_guards(void) +{ + if (!router_have_minimum_dir_info()) { + return; + } + + /* Create the list if it doesn't exist */ + if (!layer2_guards) { + layer2_guards = smartlist_new(); + } + + /* Go through the list and perform any needed expirations */ + SMARTLIST_FOREACH_BEGIN(layer2_guards, layer2_guard_t *, g) { + /* Expire based on expiration date */ + if (g->expire_on_date <= approx_time()) { + log_info(LD_GENERAL, "Removing expired Layer2 guard %s", + safe_str_client(hex_str(g->identity, DIGEST_LEN))); + // Nickname may be gone from consensus and doesn't matter anyway + control_event_guard("None", g->identity, "BAD_L2"); + layer2_guard_free(g); + SMARTLIST_DEL_CURRENT_KEEPORDER(layer2_guards, g); + continue; + } + + /* Expire if relay has left consensus */ + if (router_get_consensus_status_by_id(g->identity) == NULL) { + log_info(LD_GENERAL, "Removing missing Layer2 guard %s", + safe_str_client(hex_str(g->identity, DIGEST_LEN))); + // Nickname may be gone from consensus and doesn't matter anyway + control_event_guard("None", g->identity, "BAD_L2"); + layer2_guard_free(g); + SMARTLIST_DEL_CURRENT_KEEPORDER(layer2_guards, g); + continue; + } + } SMARTLIST_FOREACH_END(g); + + /* Find out how many guards we need to add */ + int new_guards_needed_n = + get_number_of_layer2_hs_guards() - smartlist_len(layer2_guards); + if (new_guards_needed_n <= 0) { + return; + } + + log_info(LD_GENERAL, "Adding %d guards to Layer2 routerset", + new_guards_needed_n); + + /* Add required guards to the list */ + smartlist_t *excluded = smartlist_new(); + for (int i = 0; i < new_guards_needed_n; i++) { + const node_t *choice = NULL; + const or_options_t *options = get_options(); + /* Pick Stable nodes */ + router_crn_flags_t flags = CRN_NEED_DESC|CRN_NEED_UPTIME; + choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); + if (!choice) { + break; + } + + /* We found our node: create an L2 guard out of it */ + layer2_guard_t *layer2_guard = tor_malloc_zero(sizeof(layer2_guard_t)); + memcpy(layer2_guard->identity, choice->identity, DIGEST_LEN); + layer2_guard->expire_on_date = approx_time() + + get_layer2_hs_guard_lifetime(); + smartlist_add(layer2_guards, layer2_guard); + log_info(LD_GENERAL, "Adding Layer2 guard %s", + safe_str_client(hex_str(layer2_guard->identity, DIGEST_LEN))); + // Nickname can also be None here because it is looked up later + control_event_guard("None", layer2_guard->identity, + "GOOD_L2"); + /* Exclude this node and its family so that we don't double-pick. */ + nodelist_add_node_and_family(excluded, choice); + } + + /* Some cleanup */ + smartlist_free(excluded); + + /* Now that the list is up to date, synchronize the routerset */ + routerset_free(layer2_routerset); + layer2_routerset = routerset_new(); + + SMARTLIST_FOREACH_BEGIN (layer2_guards, layer2_guard_t *, g) { + routerset_parse(layer2_routerset, + hex_str(g->identity, DIGEST_LEN), + "l2 guards"); + } SMARTLIST_FOREACH_END(g); +} + +/** + * Reset vanguards-lite list(s). + * + * Used for SIGNAL NEWNYM. + */ +void +purge_vanguards_lite(void) +{ + if (!layer2_guards) + return; + + /* Go through the list and perform any needed expirations */ + SMARTLIST_FOREACH_BEGIN(layer2_guards, layer2_guard_t *, g) { + layer2_guard_free(g); + } SMARTLIST_FOREACH_END(g); + + smartlist_clear(layer2_guards); + + /* Pick new l2 guards */ + maintain_layer2_guards(); +} + +/** Return a routerset containing the L2 guards or NULL if it's not yet + * initialized. Callers must not free the routerset. Designed for use in + * pick_vanguard_middle_node() and should not be used anywhere else. Do not + * store this pointer -- any future calls to maintain_layer2_guards() and + * purge_vanguards_lite() can invalidate it. */ +const routerset_t * +get_layer2_guards(void) +{ + if (!layer2_guards) { + maintain_layer2_guards(); + } + + return layer2_routerset; +} + +/*****************************************************************************/ + /** Release all storage held by the list of entry guards and related * memory structs. */ void @@ -3946,4 +4232,15 @@ entry_guards_free_all(void) guard_contexts = NULL; } circuit_build_times_free_timeouts(get_circuit_build_times_mutable()); + + if (!layer2_guards) { + return; + } + + SMARTLIST_FOREACH_BEGIN(layer2_guards, layer2_guard_t *, g) { + layer2_guard_free(g); + } SMARTLIST_FOREACH_END(g); + + smartlist_free(layer2_guards); + routerset_free(layer2_routerset); } diff --git a/src/feature/client/entrynodes.h b/src/feature/client/entrynodes.h index 88ed8f649e..08fd7cf745 100644 --- a/src/feature/client/entrynodes.h +++ b/src/feature/client/entrynodes.h @@ -651,4 +651,9 @@ guard_get_guardfraction_bandwidth(guardfraction_bandwidth_t *guardfraction_bw, int orig_bandwidth, uint32_t guardfraction_percentage); +bool vanguards_lite_is_enabled(void); +const routerset_t *get_layer2_guards(void); +void maintain_layer2_guards(void); +void purge_vanguards_lite(void); + #endif /* !defined(TOR_ENTRYNODES_H) */ diff --git a/src/feature/client/transports.c b/src/feature/client/transports.c index 167beb96c6..80903ac9e5 100644 --- a/src/feature/client/transports.c +++ b/src/feature/client/transports.c @@ -843,7 +843,7 @@ handle_methods_done(const managed_proxy_t *mp) tor_assert(mp->transports); if (smartlist_len(mp->transports) == 0) - log_notice(LD_GENERAL, "Managed proxy '%s' was spawned successfully, " + log_warn(LD_GENERAL, "Managed proxy '%s' was spawned successfully, " "but it didn't launch any pluggable transport listeners!", mp->argv[0]); @@ -903,14 +903,22 @@ handle_proxy_line(const char *line, managed_proxy_t *mp) if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS) goto err; + /* Log the error but do not kill the managed proxy. + * A proxy may contain several transports and if one + * of them is misconfigured, we still want to use + * the other transports. A managed proxy with no usable + * transports will log a warning. + * See https://gitlab.torproject.org/tpo/core/tor/-/issues/7362 + * */ parse_client_method_error(line); - goto err; + return; } else if (!strcmpstart(line, PROTO_SMETHOD_ERROR)) { if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS) goto err; + /* Log the error but do not kill the managed proxy */ parse_server_method_error(line); - goto err; + return; } else if (!strcmpstart(line, PROTO_CMETHOD)) { if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS) goto err; diff --git a/src/feature/control/control_cmd.c b/src/feature/control/control_cmd.c index bd0d41d29e..dd0cde4f7d 100644 --- a/src/feature/control/control_cmd.c +++ b/src/feature/control/control_cmd.c @@ -817,11 +817,16 @@ handle_control_extendcircuit(control_connection_t *conn, circ->first_hop_from_controller = 1; } + circ->any_hop_from_controller = 1; + /* now circ refers to something that is ready to be extended */ first_node = zero_circ; SMARTLIST_FOREACH(nodes, const node_t *, node, { - extend_info_t *info = extend_info_from_node(node, first_node); + /* We treat every hop as an exit to try to negotiate congestion + * control, because we have no idea which hop the controller wil + * try to use for streams and when */ + extend_info_t *info = extend_info_from_node(node, first_node, true); if (!info) { tor_assert_nonfatal(first_node); log_warn(LD_CONTROL, @@ -1075,7 +1080,7 @@ static const control_cmd_syntax_t redirectstream_syntax = { .max_args = UINT_MAX, // XXX should be 3. }; -/** Called when we receive a REDIRECTSTERAM command. Try to change the target +/** Called when we receive a REDIRECTSTREAM command. Try to change the target * address of the named AP stream, and report success or failure. */ static int handle_control_redirectstream(control_connection_t *conn, diff --git a/src/feature/control/control_events.c b/src/feature/control/control_events.c index e2aca6c03e..4c8cf9a425 100644 --- a/src/feature/control/control_events.c +++ b/src/feature/control/control_events.c @@ -21,6 +21,7 @@ #include "core/or/command.h" #include "core/or/connection_edge.h" #include "core/or/connection_or.h" +#include "core/or/congestion_control_common.h" #include "core/or/reasons.h" #include "feature/control/control.h" #include "feature/control/control_events.h" @@ -819,6 +820,10 @@ control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp, case STREAM_EVENT_FAILED_RETRIABLE: status = "DETACHED"; break; case STREAM_EVENT_REMAP: status = "REMAP"; break; case STREAM_EVENT_CONTROLLER_WAIT: status = "CONTROLLER_WAIT"; break; + case STREAM_EVENT_XOFF_SENT: status = "XOFF_SENT"; break; + case STREAM_EVENT_XOFF_RECV: status = "XOFF_RECV"; break; + case STREAM_EVENT_XON_SENT: status = "XON_SENT"; break; + case STREAM_EVENT_XON_RECV: status = "XON_RECV"; break; default: log_warn(LD_BUG, "Unrecognized status code %d", (int)tp); return 0; @@ -1075,10 +1080,12 @@ control_event_circ_bandwidth_used_for_circ(origin_circuit_t *ocirc) tor_gettimeofday(&now); format_iso_time_nospace_usec(tbuf, &now); + + char *ccontrol_buf = congestion_control_get_control_port_fields(ocirc); send_control_event(EVENT_CIRC_BANDWIDTH_USED, "650 CIRC_BW ID=%d READ=%lu WRITTEN=%lu TIME=%s " "DELIVERED_READ=%lu OVERHEAD_READ=%lu " - "DELIVERED_WRITTEN=%lu OVERHEAD_WRITTEN=%lu\r\n", + "DELIVERED_WRITTEN=%lu OVERHEAD_WRITTEN=%lu%s\r\n", ocirc->global_identifier, (unsigned long)ocirc->n_read_circ_bw, (unsigned long)ocirc->n_written_circ_bw, @@ -1086,11 +1093,16 @@ control_event_circ_bandwidth_used_for_circ(origin_circuit_t *ocirc) (unsigned long)ocirc->n_delivered_read_circ_bw, (unsigned long)ocirc->n_overhead_read_circ_bw, (unsigned long)ocirc->n_delivered_written_circ_bw, - (unsigned long)ocirc->n_overhead_written_circ_bw); + (unsigned long)ocirc->n_overhead_written_circ_bw, + ccontrol_buf ? ccontrol_buf : ""); + ocirc->n_written_circ_bw = ocirc->n_read_circ_bw = 0; ocirc->n_overhead_written_circ_bw = ocirc->n_overhead_read_circ_bw = 0; ocirc->n_delivered_written_circ_bw = ocirc->n_delivered_read_circ_bw = 0; + if (ccontrol_buf) + tor_free(ccontrol_buf); + return 0; } diff --git a/src/feature/control/control_events.h b/src/feature/control/control_events.h index 68269cabba..901d2701cf 100644 --- a/src/feature/control/control_events.h +++ b/src/feature/control/control_events.h @@ -37,7 +37,11 @@ typedef enum stream_status_event_t { STREAM_EVENT_NEW_RESOLVE = 6, STREAM_EVENT_FAILED_RETRIABLE = 7, STREAM_EVENT_REMAP = 8, - STREAM_EVENT_CONTROLLER_WAIT = 9 + STREAM_EVENT_CONTROLLER_WAIT = 9, + STREAM_EVENT_XOFF_SENT = 10, + STREAM_EVENT_XOFF_RECV = 11, + STREAM_EVENT_XON_SENT = 12, + STREAM_EVENT_XON_RECV = 13 } stream_status_event_t; /** Used to indicate the type of a buildtime event */ diff --git a/src/feature/dirauth/dirauth_options.inc b/src/feature/dirauth/dirauth_options.inc index 05726b8c2f..4fd07a8859 100644 --- a/src/feature/dirauth/dirauth_options.inc +++ b/src/feature/dirauth/dirauth_options.inc @@ -27,6 +27,10 @@ CONF_VAR(AuthDirHasIPv6Connectivity, BOOL, 0, "0") * good. */ CONF_VAR(AuthDirListBadExits, BOOL, 0, "0") +/** True iff we should list middle-only relays, and vote for all other + * relays as possibly suitable for other positions. */ +CONF_VAR(AuthDirListMiddleOnly, BOOL, 0, "0") + /** Do not permit more than this number of servers per IP address. */ CONF_VAR(AuthDirMaxServersPerAddr, POSINT, 0, "2") @@ -109,4 +113,7 @@ CONF_VAR(VersioningAuthoritativeDirectory, BOOL, 0, "0") * pressure or not. */ CONF_VAR(AuthDirRejectRequestsUnderLoad, BOOL, 0, "1") +/** Boolean: Should we not give bandwidth weight measurements to dirauths? */ +CONF_VAR(AuthDirDontVoteOnDirAuthBandwidth, BOOL, 0, "1") + END_CONF_STRUCT(dirauth_options_t) diff --git a/src/feature/dirauth/dirvote.c b/src/feature/dirauth/dirvote.c index fa906c0c3c..cdd2c132ef 100644 --- a/src/feature/dirauth/dirvote.c +++ b/src/feature/dirauth/dirvote.c @@ -1479,6 +1479,21 @@ compute_nth_protocol_set(int n, int n_voters, const smartlist_t *votes) return result; } +/** Helper: Takes a smartlist of `const char *` flags, and a flag to remove. + * + * Removes that flag if it is present in the list. Doesn't free it. + */ +static void +remove_flag(smartlist_t *sl, const char *flag) +{ + /* We can't use smartlist_string_remove() here, since that doesn't preserve + * order, and since it frees elements from the string. */ + + int idx = smartlist_string_pos(sl, flag); + if (idx >= 0) + smartlist_del_keeporder(sl, idx); +} + /** Given a list of vote networkstatus_t in <b>votes</b>, our public * authority <b>identity_key</b>, our private authority <b>signing_key</b>, * and the number of <b>total_authorities</b> that we believe exist in our @@ -1633,6 +1648,9 @@ networkstatus_compute_consensus(smartlist_t *votes, tor_free(votesec_list); tor_free(distsec_list); } + // True if anybody is voting on the BadExit flag. + const bool badexit_flag_is_listed = + smartlist_contains_string(flags, "BadExit"); chunks = smartlist_new(); @@ -1924,7 +1942,7 @@ networkstatus_compute_consensus(smartlist_t *votes, const char *chosen_name = NULL; int exitsummary_disagreement = 0; int is_named = 0, is_unnamed = 0, is_running = 0, is_valid = 0; - int is_guard = 0, is_exit = 0, is_bad_exit = 0; + int is_guard = 0, is_exit = 0, is_bad_exit = 0, is_middle_only = 0; int naming_conflict = 0; int n_listing = 0; char microdesc_digest[DIGEST256_LEN]; @@ -2055,7 +2073,6 @@ networkstatus_compute_consensus(smartlist_t *votes, } /* Set the flags. */ - smartlist_add(chosen_flags, (char*)"s"); /* for the start of the line. */ SMARTLIST_FOREACH_BEGIN(flags, const char *, fl) { if (!strcmp(fl, "Named")) { if (is_named) @@ -2077,6 +2094,8 @@ networkstatus_compute_consensus(smartlist_t *votes, is_running = 1; else if (!strcmp(fl, "BadExit")) is_bad_exit = 1; + else if (!strcmp(fl, "MiddleOnly")) + is_middle_only = 1; else if (!strcmp(fl, "Valid")) is_valid = 1; } @@ -2093,6 +2112,22 @@ networkstatus_compute_consensus(smartlist_t *votes, if (!is_valid) continue; + /* Starting with consensus method 32, we handle the middle-only + * flag specially: when it is present, we clear some flags, and + * set others. */ + if (is_middle_only && consensus_method >= MIN_METHOD_FOR_MIDDLEONLY) { + remove_flag(chosen_flags, "Exit"); + remove_flag(chosen_flags, "V2Dir"); + remove_flag(chosen_flags, "Guard"); + remove_flag(chosen_flags, "HSDir"); + is_exit = is_guard = 0; + if (! is_bad_exit && badexit_flag_is_listed) { + is_bad_exit = 1; + smartlist_add(chosen_flags, (char *)"BadExit"); + smartlist_sort_strings(chosen_flags); // restore order. + } + } + /* Pick the version. */ if (smartlist_len(versions)) { sort_version_list(versions, 0); @@ -2253,6 +2288,8 @@ networkstatus_compute_consensus(smartlist_t *votes, smartlist_add_asprintf(chunks, "m %s\n", m); } /* Next line is all flags. The "\n" is missing. */ + smartlist_add_asprintf(chunks, "s%s", + smartlist_len(chosen_flags)?" ":""); smartlist_add(chunks, smartlist_join_strings(chosen_flags, " ", 0, NULL)); /* Now the version line. */ @@ -2265,7 +2302,8 @@ networkstatus_compute_consensus(smartlist_t *votes, smartlist_add_asprintf(chunks, "pr %s\n", chosen_protocol_list); } /* Now the weight line. */ - if (rs_out.has_bandwidth) { + if (rs_out.has_bandwidth && (!rs_out.is_authority || + !dirauth_get_options()->AuthDirDontVoteOnDirAuthBandwidth)) { char *guardfraction_str = NULL; int unmeasured = rs_out.bw_is_unmeasured; @@ -4581,6 +4619,7 @@ const char DIRVOTE_UNIVERSAL_FLAGS[] = * depending on our configuration. */ const char DIRVOTE_OPTIONAL_FLAGS[] = "BadExit " + "MiddleOnly " "Running"; /** Return a new networkstatus_t* containing our current opinion. (For v3 @@ -4598,7 +4637,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key, smartlist_t *routers, *routerstatuses; char identity_digest[DIGEST_LEN]; char signing_key_digest[DIGEST_LEN]; - const int listbadexits = d_options->AuthDirListBadExits; + const int list_bad_exits = d_options->AuthDirListBadExits; + const int list_middle_only = d_options->AuthDirListMiddleOnly; routerlist_t *rl = router_get_routerlist(); time_t now = time(NULL); time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH; @@ -4703,7 +4743,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key, vrs = tor_malloc_zero(sizeof(vote_routerstatus_t)); rs = &vrs->status; dirauth_set_routerstatus_from_routerinfo(rs, node, ri, now, - listbadexits); + list_bad_exits, + list_middle_only); if (ri->cache_info.signing_key_cert) { memcpy(vrs->ed25519_id, @@ -4825,8 +4866,10 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key, 0, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); if (vote_on_reachability) smartlist_add_strdup(v3_out->known_flags, "Running"); - if (listbadexits) + if (list_bad_exits) smartlist_add_strdup(v3_out->known_flags, "BadExit"); + if (list_middle_only) + smartlist_add_strdup(v3_out->known_flags, "MiddleOnly"); smartlist_sort_strings(v3_out->known_flags); if (d_options->ConsensusParams) { diff --git a/src/feature/dirauth/dirvote.h b/src/feature/dirauth/dirvote.h index 3420098315..64aaec116e 100644 --- a/src/feature/dirauth/dirvote.h +++ b/src/feature/dirauth/dirvote.h @@ -53,7 +53,7 @@ #define MIN_SUPPORTED_CONSENSUS_METHOD 28 /** The highest consensus method that we currently support. */ -#define MAX_SUPPORTED_CONSENSUS_METHOD 31 +#define MAX_SUPPORTED_CONSENSUS_METHOD 32 /** * Lowest consensus method where microdescriptor lines are put in canonical @@ -70,6 +70,10 @@ */ #define MIN_METHOD_FOR_CORRECT_BWWEIGHTSCALE 31 +/** Lowest consensus method for which we handle the MiddleOnly flag specially. + */ +#define MIN_METHOD_FOR_MIDDLEONLY 32 + /** Default bandwidth to clip unmeasured bandwidths to using method >= * MIN_METHOD_TO_CLIP_UNMEASURED_BW. (This is not a consensus method; do not * get confused with the above macros.) */ diff --git a/src/feature/dirauth/process_descs.c b/src/feature/dirauth/process_descs.c index eca987b8b5..7d61247e23 100644 --- a/src/feature/dirauth/process_descs.c +++ b/src/feature/dirauth/process_descs.c @@ -226,6 +226,8 @@ dirserv_load_fingerprint_file(void) add_status = RTR_BADEXIT; } else if (!strcasecmp(nickname, "!invalid")) { add_status = RTR_INVALID; + } else if (!strcasecmp(nickname, "!middleonly")) { + add_status = RTR_MIDDLEONLY; } /* Check if fingerprint is RSA or ed25519 by verifying it. */ @@ -402,21 +404,8 @@ dirserv_rejects_tor_version(const char *platform, static const char please_upgrade_string[] = "Tor version is insecure or unsupported. Please upgrade!"; - /* Versions before Tor 0.3.5 are unsupported. - * - * Also, reject unstable versions of 0.3.5, since (as of this writing) - * they are almost none of the network. */ - if (!tor_version_as_new_as(platform,"0.3.5.7")) { - if (msg) - *msg = please_upgrade_string; - return true; - } - - /* Series between Tor 0.3.6 and 0.4.1 inclusive are unsupported. Reject - * them. 0.3.6.0-alpha-dev only existed for a short time, before it was - * renamed to 0.4.0.0-alpha-dev. */ - if (tor_version_as_new_as(platform,"0.3.6.0-alpha-dev") && - !tor_version_as_new_as(platform,"0.4.2.1-alpha")) { + /* Anything before 0.4.5.6 is unsupported. Reject them. */ + if (!tor_version_as_new_as(platform,"0.4.5.6")) { if (msg) { *msg = please_upgrade_string; } @@ -496,6 +485,13 @@ dirserv_get_status_impl(const char *id_digest, result |= RTR_BADEXIT; } + if (authdir_policy_middleonly_address(ipv4_addr, ipv4_orport)) { + log_fn(severity, LD_DIRSERV, + "Marking '%s' as middle-only because of address '%s'", + nickname, fmt_addr(ipv4_addr)); + result |= RTR_MIDDLEONLY; + } + if (!authdir_policy_permits_address(ipv4_addr, ipv4_orport)) { log_fn(severity, LD_DIRSERV, "Rejecting '%s' because of address '%s'", nickname, fmt_addr(ipv4_addr)); @@ -630,6 +626,7 @@ dirserv_set_node_flags_from_authoritative_status(node_t *node, { node->is_valid = (authstatus & RTR_INVALID) ? 0 : 1; node->is_bad_exit = (authstatus & RTR_BADEXIT) ? 1 : 0; + node->is_middle_only = (authstatus & RTR_MIDDLEONLY) ? 1 : 0; } /** True iff <b>a</b> is more severe than <b>b</b>. */ @@ -963,6 +960,11 @@ directory_remove_invalid(void) (r & RTR_BADEXIT) ? "bad" : "good"); node->is_bad_exit = (r&RTR_BADEXIT) ? 1: 0; } + if (bool_neq((r & RTR_MIDDLEONLY), node->is_middle_only)) { + log_info(LD_DIRSERV, "Router '%s' is now %smiddle-only", description, + (r & RTR_MIDDLEONLY) ? "" : "not"); + node->is_middle_only = (r&RTR_MIDDLEONLY) ? 1: 0; + } } SMARTLIST_FOREACH_END(node); routerlist_assert_ok(rl); diff --git a/src/feature/dirauth/process_descs.h b/src/feature/dirauth/process_descs.h index 6c056d11dd..a509eb1fbe 100644 --- a/src/feature/dirauth/process_descs.h +++ b/src/feature/dirauth/process_descs.h @@ -45,7 +45,8 @@ typedef struct authdir_config_t { #define RTR_REJECT 4 /**< We will not publish this router. */ /* 8 Historically used to avoid using this as a dir. */ #define RTR_BADEXIT 16 /**< We'll tell clients not to use this as an exit. */ -/* 32 Historically used to indicade Unnamed */ +/** We'll vote to only use this router as a midpoint. */ +#define RTR_MIDDLEONLY 32 #endif /* defined(PROCESS_DESCS_PRIVATE) || defined(TOR_UNIT_TESTS) */ diff --git a/src/feature/dirauth/voteflags.c b/src/feature/dirauth/voteflags.c index d755a270be..05c19ff501 100644 --- a/src/feature/dirauth/voteflags.c +++ b/src/feature/dirauth/voteflags.c @@ -565,7 +565,8 @@ dirauth_set_routerstatus_from_routerinfo(routerstatus_t *rs, node_t *node, const routerinfo_t *ri, time_t now, - int listbadexits) + int listbadexits, + int listmiddleonly) { const or_options_t *options = get_options(); uint32_t routerbw_kb = dirserv_get_credible_bandwidth_kb(ri); @@ -597,6 +598,14 @@ dirauth_set_routerstatus_from_routerinfo(routerstatus_t *rs, /* Override rs->is_bad_exit */ rs->is_bad_exit = listbadexits && node->is_bad_exit; + /* Override rs->is_middle_only and related flags. */ + rs->is_middle_only = listmiddleonly && node->is_middle_only; + if (rs->is_middle_only) { + if (listbadexits) + rs->is_bad_exit = 1; + rs->is_exit = rs->is_possible_guard = rs->is_hs_dir = rs->is_v2_dir = 0; + } + /* Set rs->is_staledesc. */ rs->is_staledesc = (ri->cache_info.published_on + DESC_IS_STALE_INTERVAL) < now; diff --git a/src/feature/dirauth/voteflags.h b/src/feature/dirauth/voteflags.h index 818a0bafd2..8371f1c315 100644 --- a/src/feature/dirauth/voteflags.h +++ b/src/feature/dirauth/voteflags.h @@ -22,7 +22,8 @@ void dirauth_set_routerstatus_from_routerinfo(routerstatus_t *rs, node_t *node, const routerinfo_t *ri, time_t now, - int listbadexits); + int listbadexits, + int listmiddleonly); void dirserv_compute_performance_thresholds(digestmap_t *omit_as_sybil); #endif /* defined(HAVE_MODULE_DIRAUTH) */ diff --git a/src/feature/dircache/dircache.c b/src/feature/dircache/dircache.c index 7fdb1bc70f..7319b96caf 100644 --- a/src/feature/dircache/dircache.c +++ b/src/feature/dircache/dircache.c @@ -1569,6 +1569,8 @@ directory_handle_command_post,(dir_connection_t *conn, const char *headers, char *url = NULL; const or_options_t *options = get_options(); + (void) body_len; + log_debug(LD_DIRSERV,"Received POST command."); conn->base_.state = DIR_CONN_STATE_SERVER_WRITING; diff --git a/src/feature/dirclient/dir_server_st.h b/src/feature/dirclient/dir_server_st.h index ed6b00647e..ac45f3787b 100644 --- a/src/feature/dirclient/dir_server_st.h +++ b/src/feature/dirclient/dir_server_st.h @@ -16,6 +16,8 @@ #include "core/or/or.h" #include "feature/nodelist/routerstatus_st.h" +struct smartlist_t; + /** Represents information about a single trusted or fallback directory * server. */ struct dir_server_t { @@ -48,6 +50,10 @@ struct dir_server_t { time_t addr_current_at; /**< When was the document that we derived the * address information from published? */ + /** Authority only. Can be null. If present, a list of auth_dirport_t + * representing HTTP dirports for this authority. */ + struct smartlist_t *auth_dirports; + routerstatus_t fake_status; /**< Used when we need to pass this trusted * dir_server_t to * directory_request_set_routerstatus. diff --git a/src/feature/dirclient/dirclient.c b/src/feature/dirclient/dirclient.c index 0b6a8101a5..4e9c8e2f45 100644 --- a/src/feature/dirclient/dirclient.c +++ b/src/feature/dirclient/dirclient.c @@ -1134,6 +1134,7 @@ directory_request_set_routerstatus(directory_request_t *req, { req->routerstatus = status; } + /** * Helper: update the addresses, ports, and identities in <b>req</b> * from the routerstatus object in <b>req</b>. Return 0 on success. @@ -1176,7 +1177,7 @@ directory_request_set_dir_from_routerstatus(directory_request_t *req) return -1; } - /* At this point, if we are a client making a direct connection to a + /* At this point, if we are a client making a direct connection to a * directory server, we have selected a server that has at least one address * allowed by ClientUseIPv4/6 and Reachable{"",OR,Dir}Addresses. This * selection uses the preference in ClientPreferIPv6{OR,Dir}Port, if @@ -1191,6 +1192,37 @@ directory_request_set_dir_from_routerstatus(directory_request_t *req) return -1; } + /* One last thing: If we're talking to an authority, we might want to use + * a special HTTP port for it based on our purpose. + */ + if (req->indirection == DIRIND_DIRECT_CONN && status->is_authority) { + const dir_server_t *ds = router_get_trusteddirserver_by_digest( + status->identity_digest); + if (ds) { + const tor_addr_port_t *v4 = NULL; + if (authdir_mode_v3(get_options())) { + // An authority connecting to another authority should always + // prefer the VOTING usage, if one is specifically configured. + v4 = trusted_dir_server_get_dirport_exact( + ds, AUTH_USAGE_VOTING, AF_INET); + } + if (! v4) { + // Everybody else should prefer a usage dependent on their + // the dir_purpose. + auth_dirport_usage_t usage = + auth_dirport_usage_for_purpose(req->dir_purpose); + v4 = trusted_dir_server_get_dirport(ds, usage, AF_INET); + } + tor_assert_nonfatal(v4); + if (v4) { + // XXXX We could, if we wanted, also select a v6 address. But a v4 + // address must exist here, and we as a relay are required to support + // ipv4. So we just that. + tor_addr_port_copy(&use_dir_ap, v4); + } + } + } + directory_request_set_or_addr_port(req, &use_or_ap); directory_request_set_dir_addr_port(req, &use_dir_ap); directory_request_set_directory_id_digest(req, status->identity_digest); @@ -1209,7 +1241,7 @@ directory_initiate_request,(directory_request_t *request)) tor_assert_nonfatal( ! directory_request_dir_contact_info_specified(request)); if (directory_request_set_dir_from_routerstatus(request) < 0) { - return; + return; // or here XXXX } } @@ -1324,6 +1356,8 @@ directory_initiate_request,(directory_request_t *request)) entry_guard_cancel(&guard_state); } + // XXXX This is the case where we replace. + switch (connection_connect(TO_CONN(conn), conn->base_.address, &addr, port, &socket_error)) { case -1: diff --git a/src/feature/dirclient/dlstatus.c b/src/feature/dirclient/dlstatus.c index 8be2983a5d..c21dd113b4 100644 --- a/src/feature/dirclient/dlstatus.c +++ b/src/feature/dirclient/dlstatus.c @@ -73,15 +73,14 @@ find_dl_min_delay(const download_status_t *dls, const or_options_t *options) } } case DL_SCHED_BRIDGE: - if (options->UseBridges && num_bridges_usable(0) > 0) { - /* A bridge client that is sure that one or more of its bridges are - * running can afford to wait longer to update bridge descriptors. */ - return options->TestingBridgeDownloadInitialDelay; - } else { - /* A bridge client which might have no running bridges, must try to - * get bridge descriptors straight away. */ - return options->TestingBridgeBootstrapDownloadInitialDelay; - } + /* Be conservative here: always return the 'during bootstrap' delay + * value, so we never delay while trying to fetch descriptors + * for new bridges. Once we do succeed at fetching a descriptor + * for our bridge, we will adjust its next_attempt_at based on + * the longer "TestingBridgeDownloadInitialDelay" value. See + * learned_bridge_descriptor() for details. + */ + return options->TestingBridgeBootstrapDownloadInitialDelay; default: tor_assert(0); } diff --git a/src/feature/dircommon/consdiff.c b/src/feature/dircommon/consdiff.c index c877227adc..323f2bd576 100644 --- a/src/feature/dircommon/consdiff.c +++ b/src/feature/dircommon/consdiff.c @@ -1128,7 +1128,7 @@ consdiff_get_digests(const smartlist_t *diff, { const cdline_t *line2 = smartlist_get(diff, 1); char *h = tor_memdup_nulterm(line2->s, line2->len); - smartlist_split_string(hash_words, h, " ", 0, 0); + smartlist_split_string(hash_words, h, " ", 0, 4); tor_free(h); } diff --git a/src/feature/dirparse/ns_parse.c b/src/feature/dirparse/ns_parse.c index 947b3810a4..cd3e2731be 100644 --- a/src/feature/dirparse/ns_parse.c +++ b/src/feature/dirparse/ns_parse.c @@ -434,6 +434,8 @@ routerstatus_parse_entry_from_string(memarea_t *area, rs->is_possible_guard = 1; else if (!strcmp(tok->args[i], "BadExit")) rs->is_bad_exit = 1; + else if (!strcmp(tok->args[i], "MiddleOnly")) + rs->is_middle_only = 1; else if (!strcmp(tok->args[i], "Authority")) rs->is_authority = 1; else if (!strcmp(tok->args[i], "Unnamed") && diff --git a/src/feature/dirparse/parsecommon.h b/src/feature/dirparse/parsecommon.h index 0f343e9c62..675c5f68d5 100644 --- a/src/feature/dirparse/parsecommon.h +++ b/src/feature/dirparse/parsecommon.h @@ -172,6 +172,7 @@ typedef enum { R3_DESC_AUTH_KEY, R3_DESC_AUTH_CLIENT, R3_ENCRYPTED, + R3_FLOW_CONTROL, R_IPO_IDENTIFIER, R_IPO_IP_ADDRESS, diff --git a/src/feature/dirparse/policy_parse.c b/src/feature/dirparse/policy_parse.c index abf3df36c6..8d30410f58 100644 --- a/src/feature/dirparse/policy_parse.c +++ b/src/feature/dirparse/policy_parse.c @@ -192,6 +192,10 @@ router_parse_addr_policy_private(directory_token_t *tok) uint16_t port_min, port_max; addr_policy_t result; + /* Safeguard: always flag non canonical because it is a stack allocated + * object and thus should not be considered a copy stored in a map. */ + result.is_canonical = 0; + arg = tok->args[0]; if (strcmpstart(arg, "private")) return NULL; diff --git a/src/feature/dirparse/unparseable.c b/src/feature/dirparse/unparseable.c index 930717a6ff..e966db734a 100644 --- a/src/feature/dirparse/unparseable.c +++ b/src/feature/dirparse/unparseable.c @@ -403,7 +403,7 @@ dump_desc_compare_fifo_entries(const void **a_v, const void **b_v) } } else { /* - * We shouldn't see this, but what the hell, NULLs precede everythin + * We shouldn't see this, but what the hell, NULLs precede everything * else */ return 1; diff --git a/src/feature/hs/hs_cell.c b/src/feature/hs/hs_cell.c index f84407de9e..490f05e54f 100644 --- a/src/feature/hs/hs_cell.c +++ b/src/feature/hs/hs_cell.c @@ -14,12 +14,14 @@ #include "feature/hs/hs_cell.h" #include "feature/hs/hs_ob.h" #include "core/crypto/hs_ntor.h" +#include "core/or/congestion_control_common.h" #include "core/or/origin_circuit_st.h" /* Trunnel. */ +#include "trunnel/congestion_control.h" #include "trunnel/ed25519_cert.h" -#include "trunnel/hs/cell_common.h" +#include "trunnel/extension.h" #include "trunnel/hs/cell_establish_intro.h" #include "trunnel/hs/cell_introduce1.h" #include "trunnel/hs/cell_rendezvous.h" @@ -372,6 +374,26 @@ introduce1_encrypt_and_encode(trn_cell_introduce1_t *cell, tor_free(encrypted); } +/** Build and set the INTRODUCE congestion control extension in the given + * extensions. */ +static void +build_introduce_cc_extension(trn_extension_t *extensions) +{ + trn_extension_field_t *field = NULL; + + /* Build CC request extension. */ + field = trn_extension_field_new(); + trn_extension_field_set_field_type(field, + TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST); + + /* No payload indicating a request to use congestion control. */ + trn_extension_field_set_field_len(field, 0); + + /* Build final extension. */ + trn_extension_add_fields(extensions, field); + trn_extension_set_num(extensions, trn_extension_get_num(extensions) + 1); +} + /** Using the INTRODUCE1 data, setup the ENCRYPTED section in cell. This means * set it, encrypt it and encode it. */ static void @@ -379,7 +401,7 @@ introduce1_set_encrypted(trn_cell_introduce1_t *cell, const hs_cell_introduce1_data_t *data) { trn_cell_introduce_encrypted_t *enc_cell; - trn_cell_extension_t *ext; + trn_extension_t *ext; tor_assert(cell); tor_assert(data); @@ -387,10 +409,13 @@ introduce1_set_encrypted(trn_cell_introduce1_t *cell, enc_cell = trn_cell_introduce_encrypted_new(); tor_assert(enc_cell); - /* Set extension data. None are used. */ - ext = trn_cell_extension_new(); + /* Setup extension(s) if any. */ + ext = trn_extension_new(); tor_assert(ext); - trn_cell_extension_set_num(ext, 0); + /* Build congestion control extension is enabled. */ + if (data->cc_enabled) { + build_introduce_cc_extension(ext); + } trn_cell_introduce_encrypted_set_extensions(enc_cell, ext); /* Set the rendezvous cookie. */ @@ -454,20 +479,20 @@ build_establish_intro_dos_param(trn_cell_extension_dos_t *dos_ext, * possible if there is a bug.) */ static int build_establish_intro_dos_extension(const hs_service_config_t *service_config, - trn_cell_extension_t *extensions) + trn_extension_t *extensions) { ssize_t ret; size_t dos_ext_encoded_len; uint8_t *field_array; - trn_cell_extension_field_t *field = NULL; + trn_extension_field_t *field = NULL; trn_cell_extension_dos_t *dos_ext = NULL; tor_assert(service_config); tor_assert(extensions); /* We are creating a cell extension field of the type DoS. */ - field = trn_cell_extension_field_new(); - trn_cell_extension_field_set_field_type(field, + field = trn_extension_field_new(); + trn_extension_field_set_field_type(field, TRUNNEL_CELL_EXTENSION_TYPE_DOS); /* Build DoS extension field. We will put in two parameters. */ @@ -490,24 +515,23 @@ build_establish_intro_dos_extension(const hs_service_config_t *service_config, } dos_ext_encoded_len = ret; /* Set length field and the field array size length. */ - trn_cell_extension_field_set_field_len(field, dos_ext_encoded_len); - trn_cell_extension_field_setlen_field(field, dos_ext_encoded_len); + trn_extension_field_set_field_len(field, dos_ext_encoded_len); + trn_extension_field_setlen_field(field, dos_ext_encoded_len); /* Encode the DoS extension into the cell extension field. */ - field_array = trn_cell_extension_field_getarray_field(field); + field_array = trn_extension_field_getarray_field(field); ret = trn_cell_extension_dos_encode(field_array, - trn_cell_extension_field_getlen_field(field), dos_ext); + trn_extension_field_getlen_field(field), dos_ext); if (BUG(ret <= 0)) { goto err; } tor_assert(ret == (ssize_t) dos_ext_encoded_len); /* Finally, encode field into the cell extension. */ - trn_cell_extension_add_fields(extensions, field); + trn_extension_add_fields(extensions, field); /* We've just add an extension field to the cell extensions so increment the * total number. */ - trn_cell_extension_set_num(extensions, - trn_cell_extension_get_num(extensions) + 1); + trn_extension_set_num(extensions, trn_extension_get_num(extensions) + 1); /* Cleanup. DoS extension has been encoded at this point. */ trn_cell_extension_dos_free(dos_ext); @@ -515,7 +539,7 @@ build_establish_intro_dos_extension(const hs_service_config_t *service_config, return 0; err: - trn_cell_extension_field_free(field); + trn_extension_field_free(field); trn_cell_extension_dos_free(dos_ext); return -1; } @@ -526,18 +550,18 @@ build_establish_intro_dos_extension(const hs_service_config_t *service_config, /** Allocate and build all the ESTABLISH_INTRO cell extension. The given * extensions pointer is always set to a valid cell extension object. */ -STATIC trn_cell_extension_t * +STATIC trn_extension_t * build_establish_intro_extensions(const hs_service_config_t *service_config, const hs_service_intro_point_t *ip) { int ret; - trn_cell_extension_t *extensions; + trn_extension_t *extensions; tor_assert(service_config); tor_assert(ip); - extensions = trn_cell_extension_new(); - trn_cell_extension_set_num(extensions, 0); + extensions = trn_extension_new(); + trn_extension_set_num(extensions, 0); /* If the defense has been enabled service side (by the operator with a * torrc option) and the intro point does support it. */ @@ -568,7 +592,7 @@ hs_cell_build_establish_intro(const char *circ_nonce, ssize_t cell_len = -1; uint16_t sig_len = ED25519_SIG_LEN; trn_cell_establish_intro_t *cell = NULL; - trn_cell_extension_t *extensions; + trn_extension_t *extensions; tor_assert(circ_nonce); tor_assert(service_config); @@ -760,6 +784,31 @@ get_introduce2_keys_and_verify_mac(hs_cell_introduce2_data_t *data, return intro_keys_result; } +/** Parse the given INTRODUCE cell extension. Update the data object + * accordingly depending on the extension. */ +static void +parse_introduce_cell_extension(hs_cell_introduce2_data_t *data, + const trn_extension_field_t *field) +{ + trn_extension_field_cc_t *cc_field = NULL; + + tor_assert(data); + tor_assert(field); + + switch (trn_extension_field_get_field_type(field)) { + case TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST: + /* CC requests, enable it. */ + data->cc_enabled = 1; + data->pv.protocols_known = 1; + data->pv.supports_congestion_control = data->cc_enabled; + break; + default: + break; + } + + trn_extension_field_cc_free(cc_field); +} + /** Parse the INTRODUCE2 cell using data which contains everything we need to * do so and contains the destination buffers of information we extract and * compute from the cell. Return 0 on success else a negative value. The @@ -888,6 +937,27 @@ hs_cell_parse_introduce2(hs_cell_introduce2_data_t *data, smartlist_add(data->link_specifiers, lspec_dup); } + /* Extract any extensions. */ + const trn_extension_t *extensions = + trn_cell_introduce_encrypted_get_extensions(enc_cell); + if (extensions != NULL) { + for (size_t idx = 0; idx < trn_extension_get_num(extensions); idx++) { + const trn_extension_field_t *field = + trn_extension_getconst_fields(extensions, idx); + if (BUG(field == NULL)) { + /* The number of extensions should match the number of fields. */ + break; + } + parse_introduce_cell_extension(data, field); + } + } + + /* If the client asked for congestion control, but we don't support it, + * that's a failure. It should not have asked, based on our descriptor. */ + if (data->cc_enabled && !congestion_control_enabled()) { + goto done; + } + /* Success. */ ret = 0; log_info(LD_REND, "Valid INTRODUCE2 cell. Launching rendezvous circuit."); @@ -947,7 +1017,7 @@ hs_cell_build_introduce1(const hs_cell_introduce1_data_t *data, { ssize_t cell_len; trn_cell_introduce1_t *cell; - trn_cell_extension_t *ext; + trn_extension_t *ext; tor_assert(data); tor_assert(cell_out); @@ -956,9 +1026,9 @@ hs_cell_build_introduce1(const hs_cell_introduce1_data_t *data, tor_assert(cell); /* Set extension data. None are used. */ - ext = trn_cell_extension_new(); + ext = trn_extension_new(); tor_assert(ext); - trn_cell_extension_set_num(ext, 0); + trn_extension_set_num(ext, 0); trn_cell_introduce1_set_extensions(cell, ext); /* Set the authentication key. */ diff --git a/src/feature/hs/hs_cell.h b/src/feature/hs/hs_cell.h index dc083ca03f..c76a0690a8 100644 --- a/src/feature/hs/hs_cell.h +++ b/src/feature/hs/hs_cell.h @@ -40,6 +40,8 @@ typedef struct hs_cell_introduce1_data_t { const curve25519_keypair_t *client_kp; /** Rendezvous point link specifiers. */ smartlist_t *link_specifiers; + /** Congestion control parameters. */ + unsigned int cc_enabled : 1; } hs_cell_introduce1_data_t; /** This data structure contains data that we need to parse an INTRODUCE2 cell @@ -82,6 +84,10 @@ typedef struct hs_cell_introduce2_data_t { smartlist_t *link_specifiers; /** Replay cache of the introduction point. */ replaycache_t *replay_cache; + /** Flow control negotiation parameters. */ + protover_summary_flags_t pv; + /** Congestion control parameters. */ + unsigned int cc_enabled : 1; } hs_cell_introduce2_data_t; /* Build cell API. */ @@ -115,9 +121,9 @@ void hs_cell_introduce1_data_clear(hs_cell_introduce1_data_t *data); #ifdef TOR_UNIT_TESTS -#include "trunnel/hs/cell_common.h" +#include "trunnel/extension.h" -STATIC trn_cell_extension_t * +STATIC trn_extension_t * build_establish_intro_extensions(const hs_service_config_t *service_config, const hs_service_intro_point_t *ip); diff --git a/src/feature/hs/hs_circuit.c b/src/feature/hs/hs_circuit.c index 0d7dd1c2b8..d253802f79 100644 --- a/src/feature/hs/hs_circuit.c +++ b/src/feature/hs/hs_circuit.c @@ -17,6 +17,8 @@ #include "core/or/relay.h" #include "core/or/crypt_path.h" #include "core/or/extendinfo.h" +#include "core/or/congestion_control_common.h" +#include "core/crypto/onion_crypto.h" #include "feature/client/circpathbias.h" #include "feature/hs/hs_cell.h" #include "feature/hs/hs_circuit.h" @@ -35,9 +37,9 @@ /* Trunnel. */ #include "trunnel/ed25519_cert.h" -#include "trunnel/hs/cell_common.h" #include "trunnel/hs/cell_establish_intro.h" +#include "core/or/congestion_control_st.h" #include "core/or/cpath_build_state_st.h" #include "core/or/crypt_path_st.h" #include "feature/nodelist/node_st.h" @@ -129,6 +131,12 @@ finalize_rend_circuit(origin_circuit_t *circ, crypt_path_t *hop, * so we can actually use it. */ circ->hs_circ_has_timed_out = 0; + /* If congestion control, transfer ccontrol onto the cpath. */ + if (TO_CIRCUIT(circ)->ccontrol) { + hop->ccontrol = TO_CIRCUIT(circ)->ccontrol; + TO_CIRCUIT(circ)->ccontrol = NULL; + } + /* Append the hop to the cpath of this circuit */ cpath_extend_linked_list(&circ->cpath, hop); @@ -408,6 +416,12 @@ launch_rendezvous_point_circuit,(const hs_service_t *service, tor_assert(circ->hs_ident); } + /* Setup congestion control if asked by the client from the INTRO cell. */ + if (data->cc_enabled) { + hs_circ_setup_congestion_control(circ, congestion_control_sendme_inc(), + service->config.is_single_onion); + } + end: extend_info_free(info); } @@ -504,6 +518,15 @@ retry_service_rendezvous_point(const origin_circuit_t *circ) new_circ->build_state->expiry_time = bstate->expiry_time; new_circ->hs_ident = hs_ident_circuit_dup(circ->hs_ident); + /* Setup congestion control if asked by the client from the INTRO cell. */ + if (TO_CIRCUIT(circ)->ccontrol) { + /* As per above, in this case, we are a full 3 hop rend, even if we're a + * single-onion service. */ + hs_circ_setup_congestion_control(new_circ, + TO_CIRCUIT(circ)->ccontrol->sendme_inc, + false); + } + done: return; } @@ -550,6 +573,7 @@ setup_introduce1_data(const hs_desc_intro_point_t *ip, /* We can't rendezvous without the curve25519 onion key. */ goto end; } + /* Success, we have valid introduce data. */ ret = 0; @@ -589,6 +613,41 @@ cleanup_on_free_client_circ(circuit_t *circ) /* Public API */ /* ========== */ +/** Setup on the given circuit congestion control with the given parameters. + * + * This function assumes that congestion control is enabled on the network and + * so it is the caller responsability to make sure of it. */ +void +hs_circ_setup_congestion_control(origin_circuit_t *origin_circ, + uint8_t sendme_inc, bool is_single_onion) +{ + circuit_t *circ = NULL; + circuit_params_t circ_params = {0}; + + tor_assert(origin_circ); + + /* Ease our lives */ + circ = TO_CIRCUIT(origin_circ); + + circ_params.cc_enabled = true; + circ_params.sendme_inc_cells = sendme_inc; + + /* It is setup on the circuit in order to indicate that congestion control is + * enabled. It will be transferred to the RP crypt_path_t once the handshake + * is finalized in finalize_rend_circuit() for both client and service + * because the final hop is not available until then. */ + + if (is_single_onion) { + circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_SOS); + } else { + if (get_options()->HSLayer3Nodes) { + circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); + } else { + circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); + } + } +} + /** Return an introduction point circuit matching the given intro point object. * NULL is returned is no such circuit can be found. */ origin_circuit_t * @@ -955,6 +1014,7 @@ hs_circ_handle_introduce2(const hs_service_t *service, data.payload_len = payload_len; data.link_specifiers = smartlist_new(); data.replay_cache = ip->replay_cache; + data.cc_enabled = 0; if (get_subcredential_for_handling_intro2_cell(service, &data, subcredential)) { @@ -1073,6 +1133,12 @@ hs_circ_send_introduce1(origin_circuit_t *intro_circ, goto close; } + /* If the rend circ was set up for congestion control, add that to the + * intro data, to signal it in an extension */ + if (TO_CIRCUIT(rend_circ)->ccontrol) { + intro1_data.cc_enabled = 1; + } + /* Final step before we encode a cell, we setup the circuit identifier which * will generate both the rendezvous cookie and client keypair for this * connection. Those are put in the ident. */ diff --git a/src/feature/hs/hs_circuit.h b/src/feature/hs/hs_circuit.h index fbbd5f8f33..808e648951 100644 --- a/src/feature/hs/hs_circuit.h +++ b/src/feature/hs/hs_circuit.h @@ -69,6 +69,10 @@ int hs_circuit_setup_e2e_rend_circ_legacy_client(origin_circuit_t *circ, bool hs_circ_is_rend_sent_in_intro1(const origin_circuit_t *circ); +void hs_circ_setup_congestion_control(origin_circuit_t *origin_circ, + uint8_t sendme_inc, + bool is_single_onion); + #ifdef HS_CIRCUIT_PRIVATE struct hs_ntor_rend_cell_keys_t; diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c index ced75109e0..d08b518d94 100644 --- a/src/feature/hs/hs_client.c +++ b/src/feature/hs/hs_client.c @@ -11,12 +11,15 @@ #include "core/or/or.h" #include "app/config/config.h" #include "core/crypto/hs_ntor.h" +#include "core/crypto/onion_crypto.h" #include "core/mainloop/connection.h" #include "core/or/circuitbuild.h" #include "core/or/circuitlist.h" #include "core/or/circuituse.h" #include "core/or/connection_edge.h" +#include "core/or/congestion_control_common.h" #include "core/or/extendinfo.h" +#include "core/or/protover.h" #include "core/or/reasons.h" #include "feature/client/circpathbias.h" #include "feature/dirclient/dirclient.h" @@ -641,6 +644,16 @@ send_introduce1(origin_circuit_t *intro_circ, goto tran_err; } + /* Check if the rendevous circuit was setup WITHOUT congestion control but if + * it is enabled and the service supports it. This can happen, see + * setup_rendezvous_circ_congestion_control() and so close rendezvous circuit + * so another one can be created. */ + if (TO_CIRCUIT(rend_circ)->ccontrol == NULL && congestion_control_enabled() + && hs_desc_supports_congestion_control(desc)) { + circuit_mark_for_close(TO_CIRCUIT(rend_circ), END_CIRC_REASON_INTERNAL); + goto tran_err; + } + /* We need to find which intro point in the descriptor we are connected to * on intro_circ. */ ip = find_desc_intro_point_by_ident(intro_circ->hs_ident, desc); @@ -776,6 +789,45 @@ client_intro_circ_has_opened(origin_circuit_t *circ) connection_ap_attach_pending(1); } +/** Setup the congestion control parameters on the given rendezvous circuit. + * This looks at the service descriptor flow control line (if any). + * + * It is possible that we are unable to set congestion control on the circuit + * if the descriptor can't be found. In that case, the introduction circuit + * can't be opened without it so a fetch will be triggered. + * + * However, if the descriptor asks for congestion control but the RP circuit + * doesn't have it, it will be closed and a new circuit will be opened. */ +static void +setup_rendezvous_circ_congestion_control(origin_circuit_t *circ) +{ + tor_assert(circ); + + /* Setup congestion control parameters on the circuit. */ + const hs_descriptor_t *desc = + hs_cache_lookup_as_client(&circ->hs_ident->identity_pk); + if (desc == NULL) { + /* This is possible because between launching the circuit and the circuit + * ending in opened state, the descriptor could have been removed from the + * cache. In this case, we just can't setup congestion control. */ + return; + } + + /* Check if the service lists support for congestion control in its + * descriptor. If not, we don't setup congestion control. */ + if (!hs_desc_supports_congestion_control(desc)) { + return; + } + + /* If network doesn't enable it, do not setup. */ + if (!congestion_control_enabled()) { + return; + } + + hs_circ_setup_congestion_control(circ, desc->encrypted_data.sendme_inc, + desc->encrypted_data.single_onion_service); +} + /** Called when a rendezvous circuit has opened. */ static void client_rendezvous_circ_has_opened(origin_circuit_t *circ) @@ -805,6 +857,9 @@ client_rendezvous_circ_has_opened(origin_circuit_t *circ) log_info(LD_REND, "Rendezvous circuit has opened to %s.", safe_str_client(extend_info_describe(rp_ei))); + /* Setup congestion control parameters on the circuit. */ + setup_rendezvous_circ_congestion_control(circ); + /* Ignore returned value, nothing we can really do. On failure, the circuit * will be marked for close. */ hs_circ_send_establish_rendezvous(circ); diff --git a/src/feature/hs/hs_common.c b/src/feature/hs/hs_common.c index c9195c2934..e326581dd1 100644 --- a/src/feature/hs/hs_common.c +++ b/src/feature/hs/hs_common.c @@ -1687,7 +1687,7 @@ hs_get_extend_info_from_lspecs(const smartlist_t *lspecs, /* We do have everything for which we think we can connect successfully. */ info = extend_info_new(NULL, legacy_id, (have_ed25519_id) ? &ed25519_pk : NULL, NULL, - onion_key, &ap.addr, ap.port); + onion_key, &ap.addr, ap.port, NULL, false); done: return info; } diff --git a/src/feature/hs/hs_config.c b/src/feature/hs/hs_config.c index 73f9176186..a76893fe1a 100644 --- a/src/feature/hs/hs_config.c +++ b/src/feature/hs/hs_config.c @@ -548,15 +548,19 @@ config_service(config_line_t *line, const or_options_t *options, tor_assert(service->config.version <= HS_VERSION_MAX); - /* Check permission on service directory that was just parsed. And this must - * be done regardless of the service version. Do not ask for the directory - * to be created, this is done when the keys are loaded because we could be - * in validation mode right now. */ - if (hs_check_service_private_dir(options->User, - service->config.directory_path, - service->config.dir_group_readable, - 0) < 0) { - goto err; + /* If we're running with TestingTorNetwork enabled, we relax the permissions + * check on the hs directory. */ + if (!options->TestingTorNetwork) { + /* Check permission on service directory that was just parsed. And this + * must be done regardless of the service version. Do not ask for the + * directory to be created, this is done when the keys are loaded because + * we could be in validation mode right now. */ + if (hs_check_service_private_dir(options->User, + service->config.directory_path, + service->config.dir_group_readable, + 0) < 0) { + goto err; + } } /* We'll try to learn the service version here by loading the key(s) if @@ -640,6 +644,7 @@ hs_config_service_all(const or_options_t *options, int validate_only) int rv = config_service(section, options, new_service_list); config_free_lines(section); if (rv < 0) { + config_free_lines(remaining); goto err; } } diff --git a/src/feature/hs/hs_descriptor.c b/src/feature/hs/hs_descriptor.c index 70ff4e9690..15ad9d8efb 100644 --- a/src/feature/hs/hs_descriptor.c +++ b/src/feature/hs/hs_descriptor.c @@ -61,6 +61,8 @@ #include "trunnel/ed25519_cert.h" /* Trunnel interface. */ #include "feature/hs/hs_descriptor.h" #include "core/or/circuitbuild.h" +#include "core/or/congestion_control_common.h" +#include "core/or/protover.h" #include "lib/crypt_ops/crypto_rand.h" #include "lib/crypt_ops/crypto_util.h" #include "feature/dirparse/parsecommon.h" @@ -69,6 +71,7 @@ #include "feature/nodelist/torcert.h" /* tor_cert_encode_ed22519() */ #include "lib/memarea/memarea.h" #include "lib/crypt_ops/crypto_format.h" +#include "core/or/versions.h" #include "core/or/extend_info_st.h" @@ -92,6 +95,7 @@ #define str_ip_legacy_key "legacy-key" #define str_ip_legacy_key_cert "legacy-key-cert" #define str_intro_point_start "\n" str_intro_point " " +#define str_flow_control "flow-control" /* Constant string value for the construction to encrypt the encrypted data * section. */ #define str_enc_const_superencryption "hsdir-superencrypted-data" @@ -138,6 +142,7 @@ static token_rule_t hs_desc_encrypted_v3_token_table[] = { T1_START(str_create2_formats, R3_CREATE2_FORMATS, CONCAT_ARGS, NO_OBJ), T01(str_intro_auth_required, R3_INTRO_AUTH_REQUIRED, GE(1), NO_OBJ), T01(str_single_onion, R3_SINGLE_ONION_SERVICE, ARGS, NO_OBJ), + T01(str_flow_control, R3_FLOW_CONTROL, GE(2), NO_OBJ), END_OF_TABLE }; @@ -765,6 +770,13 @@ get_inner_encrypted_layer_plaintext(const hs_descriptor_t *desc) if (desc->encrypted_data.single_onion_service) { smartlist_add_asprintf(lines, "%s\n", str_single_onion); } + + if (congestion_control_enabled()) { + /* Add flow control line into the descriptor. */ + smartlist_add_asprintf(lines, "%s %s %u\n", str_flow_control, + protover_get_supported(PRT_FLOWCTRL), + congestion_control_sendme_inc()); + } } /* Build the introduction point(s) section. */ @@ -1607,8 +1619,8 @@ decrypt_desc_layer,(const hs_descriptor_t *desc, * put in decrypted_out which contains the superencrypted layer of the * descriptor. Return the length of decrypted_out on success else 0 is * returned and decrypted_out is set to NULL. */ -static size_t -desc_decrypt_superencrypted(const hs_descriptor_t *desc, char **decrypted_out) +MOCK_IMPL(STATIC size_t, +desc_decrypt_superencrypted,(const hs_descriptor_t *desc,char **decrypted_out)) { size_t superencrypted_len = 0; char *superencrypted_plaintext = NULL; @@ -1639,10 +1651,10 @@ desc_decrypt_superencrypted(const hs_descriptor_t *desc, char **decrypted_out) * decrypted_out which contains the encrypted layer of the descriptor. * Return the length of decrypted_out on success else 0 is returned and * decrypted_out is set to NULL. */ -static size_t -desc_decrypt_encrypted(const hs_descriptor_t *desc, - const curve25519_secret_key_t *client_auth_sk, - char **decrypted_out) +MOCK_IMPL(STATIC size_t, +desc_decrypt_encrypted,(const hs_descriptor_t *desc, + const curve25519_secret_key_t *client_auth_sk, + char **decrypted_out)) { size_t encrypted_len = 0; char *encrypted_plaintext = NULL; @@ -2145,7 +2157,7 @@ desc_decode_plaintext_v3(smartlist_t *tokens, /** Decode the version 3 superencrypted section of the given descriptor desc. * The desc_superencrypted_out will be populated with the decoded data. */ -static hs_desc_decode_status_t +STATIC hs_desc_decode_status_t desc_decode_superencrypted_v3(const hs_descriptor_t *desc, hs_desc_superencrypted_data_t * desc_superencrypted_out) @@ -2259,7 +2271,7 @@ desc_decode_superencrypted_v3(const hs_descriptor_t *desc, /** Decode the version 3 encrypted section of the given descriptor desc. The * desc_encrypted_out will be populated with the decoded data. */ -static hs_desc_decode_status_t +STATIC hs_desc_decode_status_t desc_decode_encrypted_v3(const hs_descriptor_t *desc, const curve25519_secret_key_t *client_auth_sk, hs_desc_encrypted_data_t *desc_encrypted_out) @@ -2335,6 +2347,23 @@ desc_decode_encrypted_v3(const hs_descriptor_t *desc, desc_encrypted_out->single_onion_service = 1; } + /* Get flow control if any. */ + tok = find_opt_by_keyword(tokens, R3_FLOW_CONTROL); + if (tok) { + int ok; + + tor_asprintf(&desc_encrypted_out->flow_control_pv, "FlowCtrl=%s", + tok->args[0]); + uint8_t sendme_inc = + (uint8_t) tor_parse_uint64(tok->args[1], 10, 0, UINT8_MAX, &ok, NULL); + if (!ok || !congestion_control_validate_sendme_increment(sendme_inc)) { + log_warn(LD_REND, "Service descriptor flow control sendme " + "value is invalid"); + goto err; + } + desc_encrypted_out->sendme_inc = sendme_inc; + } + /* Initialize the descriptor's introduction point list before we start * decoding. Having 0 intro point is valid. Then decode them all. */ desc_encrypted_out->intro_points = smartlist_new(); @@ -2745,6 +2774,7 @@ hs_desc_encrypted_data_free_contents(hs_desc_encrypted_data_t *desc) hs_desc_intro_point_free(ip)); smartlist_free(desc->intro_points); } + tor_free(desc->flow_control_pv); memwipe(desc, 0, sizeof(*desc)); } @@ -2957,3 +2987,16 @@ hs_descriptor_clear_intro_points(hs_descriptor_t *desc) smartlist_clear(ips); } } + +/** Return true iff we support the given descriptor congestion control + * parameters. */ +bool +hs_desc_supports_congestion_control(const hs_descriptor_t *desc) +{ + tor_assert(desc); + + /* Validate that we support the protocol version in the descriptor. */ + return desc->encrypted_data.flow_control_pv && + protocol_list_supports_protocol(desc->encrypted_data.flow_control_pv, + PRT_FLOWCTRL, PROTOVER_FLOWCTRL_CC); +} diff --git a/src/feature/hs/hs_descriptor.h b/src/feature/hs/hs_descriptor.h index 7e437faeb8..8f42b2138b 100644 --- a/src/feature/hs/hs_descriptor.h +++ b/src/feature/hs/hs_descriptor.h @@ -167,6 +167,10 @@ typedef struct hs_desc_encrypted_data_t { /** Is this descriptor a single onion service? */ unsigned int single_onion_service : 1; + /** Flow control protocol version line. */ + char *flow_control_pv; + uint8_t sendme_inc; + /** A list of intro points. Contains hs_desc_intro_point_t objects. */ smartlist_t *intro_points; } hs_desc_encrypted_data_t; @@ -315,6 +319,8 @@ void hs_desc_superencrypted_data_free_contents( hs_desc_superencrypted_data_t *desc); void hs_desc_encrypted_data_free_contents(hs_desc_encrypted_data_t *desc); +bool hs_desc_supports_congestion_control(const hs_descriptor_t *desc); + #ifdef HS_DESCRIPTOR_PRIVATE /* Encoding. */ @@ -339,6 +345,25 @@ MOCK_DECL(STATIC size_t, decrypt_desc_layer,(const hs_descriptor_t *desc, bool is_superencrypted_layer, char **decrypted_out)); +STATIC hs_desc_decode_status_t desc_decode_encrypted_v3( + const hs_descriptor_t *desc, + const curve25519_secret_key_t *client_auth_sk, + hs_desc_encrypted_data_t *desc_encrypted_out); + +STATIC hs_desc_decode_status_t +desc_decode_superencrypted_v3(const hs_descriptor_t *desc, + hs_desc_superencrypted_data_t * + desc_superencrypted_out); + +MOCK_DECL(STATIC size_t, desc_decrypt_encrypted,( + const hs_descriptor_t *desc, + const curve25519_secret_key_t *client_auth_sk, + char **decrypted_out)); + +MOCK_DECL(STATIC size_t, desc_decrypt_superencrypted,( + const hs_descriptor_t *desc, + char **decrypted_out)); + #endif /* defined(HS_DESCRIPTOR_PRIVATE) */ #endif /* !defined(TOR_HS_DESCRIPTOR_H) */ diff --git a/src/feature/hs/hs_intropoint.c b/src/feature/hs/hs_intropoint.c index b589e44cc3..0a656b78dd 100644 --- a/src/feature/hs/hs_intropoint.c +++ b/src/feature/hs/hs_intropoint.c @@ -20,7 +20,7 @@ /* Trunnel */ #include "trunnel/ed25519_cert.h" -#include "trunnel/hs/cell_common.h" +#include "trunnel/extension.h" #include "trunnel/hs/cell_establish_intro.h" #include "trunnel/hs/cell_introduce1.h" @@ -155,14 +155,14 @@ hs_intro_send_intro_established_cell,(or_circuit_t *circ)) uint8_t *encoded_cell = NULL; ssize_t encoded_len, result_len; trn_cell_intro_established_t *cell; - trn_cell_extension_t *ext; + trn_extension_t *ext; tor_assert(circ); /* Build the cell payload. */ cell = trn_cell_intro_established_new(); - ext = trn_cell_extension_new(); - trn_cell_extension_set_num(ext, 0); + ext = trn_extension_new(); + trn_extension_set_num(ext, 0); trn_cell_intro_established_set_extensions(cell, ext); /* Encode the cell to binary format. */ encoded_len = trn_cell_intro_established_encoded_len(cell); @@ -249,7 +249,7 @@ cell_dos_extension_parameters_are_valid(uint64_t intro2_rate_per_sec, * values, the DoS defenses is disabled on the circuit. */ static void handle_establish_intro_cell_dos_extension( - const trn_cell_extension_field_t *field, + const trn_extension_field_t *field, or_circuit_t *circ) { ssize_t ret; @@ -260,8 +260,8 @@ handle_establish_intro_cell_dos_extension( tor_assert(circ); ret = trn_cell_extension_dos_parse(&dos, - trn_cell_extension_field_getconstarray_field(field), - trn_cell_extension_field_getlen_field(field)); + trn_extension_field_getconstarray_field(field), + trn_extension_field_getlen_field(field)); if (ret < 0) { goto end; } @@ -332,7 +332,7 @@ handle_establish_intro_cell_extensions( const trn_cell_establish_intro_t *parsed_cell, or_circuit_t *circ) { - const trn_cell_extension_t *extensions; + const trn_extension_t *extensions; tor_assert(parsed_cell); tor_assert(circ); @@ -343,15 +343,15 @@ handle_establish_intro_cell_extensions( } /* Go over all extensions. */ - for (size_t idx = 0; idx < trn_cell_extension_get_num(extensions); idx++) { - const trn_cell_extension_field_t *field = - trn_cell_extension_getconst_fields(extensions, idx); + for (size_t idx = 0; idx < trn_extension_get_num(extensions); idx++) { + const trn_extension_field_t *field = + trn_extension_getconst_fields(extensions, idx); if (BUG(field == NULL)) { /* The number of extensions should match the number of fields. */ break; } - switch (trn_cell_extension_field_get_field_type(field)) { + switch (trn_extension_field_get_field_type(field)) { case TRUNNEL_CELL_EXTENSION_TYPE_DOS: /* After this, the circuit should be set for DoS defenses. */ handle_establish_intro_cell_dos_extension(field, circ); @@ -541,7 +541,7 @@ send_introduce_ack_cell(or_circuit_t *circ, uint16_t status) uint8_t *encoded_cell = NULL; ssize_t encoded_len, result_len; trn_cell_introduce_ack_t *cell; - trn_cell_extension_t *ext; + trn_extension_t *ext; tor_assert(circ); @@ -550,8 +550,8 @@ send_introduce_ack_cell(or_circuit_t *circ, uint16_t status) cell = trn_cell_introduce_ack_new(); ret = trn_cell_introduce_ack_set_status(cell, status); /* We have no cell extensions in an INTRODUCE_ACK cell. */ - ext = trn_cell_extension_new(); - trn_cell_extension_set_num(ext, 0); + ext = trn_extension_new(); + trn_extension_set_num(ext, 0); trn_cell_introduce_ack_set_extensions(cell, ext); /* A wrong status is a very bad code flow error as this value is controlled * by the code in this file and not an external input. This means we use a diff --git a/src/feature/hs/hs_metrics.c b/src/feature/hs/hs_metrics.c index a82d2ae370..e80d98c2dd 100644 --- a/src/feature/hs/hs_metrics.c +++ b/src/feature/hs/hs_metrics.c @@ -29,22 +29,6 @@ port_to_str(const uint16_t port) return buf; } -/** Return a static buffer pointer that contains a formatted label on the form - * of key=value. - * - * NOTE: Important, label values MUST NOT contain double quotes else, in the - * case of Prometheus, it will fail with a malformed line because we force the - * label value to be enclosed in double quotes. - * - * Subsequent call to this function invalidates the previous buffer. */ -static const char * -format_label(const char *key, const char *value) -{ - static char buf[128]; - tor_snprintf(buf, sizeof(buf), "%s=\"%s\"", key, value); - return buf; -} - /** Initialize a metrics store for the given service. * * Essentially, this goes over the base_metrics array and adds them all to the @@ -69,16 +53,16 @@ init_store(hs_service_t *service) /* Add labels to the entry. */ metrics_store_entry_add_label(entry, - format_label("onion", service->onion_address)); + metrics_format_label("onion", service->onion_address)); metrics_store_entry_add_label(entry, - format_label("port", port_to_str(p->virtual_port))); + metrics_format_label("port", port_to_str(p->virtual_port))); } SMARTLIST_FOREACH_END(p); } else { metrics_store_entry_t *entry = metrics_store_add(store, base_metrics[i].type, base_metrics[i].name, base_metrics[i].help); metrics_store_entry_add_label(entry, - format_label("onion", service->onion_address)); + metrics_format_label("onion", service->onion_address)); } } } @@ -107,7 +91,7 @@ hs_metrics_update_by_service(const hs_metrics_key_t key, SMARTLIST_FOREACH_BEGIN(entries, metrics_store_entry_t *, entry) { if (port == 0 || metrics_store_entry_has_label(entry, - format_label("port", port_to_str(port)))) { + metrics_format_label("port", port_to_str(port)))) { metrics_store_entry_update(entry, n); break; } diff --git a/src/feature/hs/hs_service.c b/src/feature/hs/hs_service.c index 9b7b590140..ff34e5dc44 100644 --- a/src/feature/hs/hs_service.c +++ b/src/feature/hs/hs_service.c @@ -16,6 +16,7 @@ #include "core/or/circuitbuild.h" #include "core/or/circuitlist.h" #include "core/or/circuituse.h" +#include "core/or/congestion_control_common.h" #include "core/or/extendinfo.h" #include "core/or/relay.h" #include "feature/client/circpathbias.h" @@ -59,7 +60,6 @@ /* Trunnel */ #include "trunnel/ed25519_cert.h" -#include "trunnel/hs/cell_common.h" #include "trunnel/hs/cell_establish_intro.h" #ifdef HAVE_SYS_STAT_H @@ -714,7 +714,7 @@ get_extend_info_from_intro_point(const hs_service_intro_point_t *ip, /* In the case of a direct connection (single onion service), it is possible * our firewall policy won't allow it so this can return a NULL value. */ - info = extend_info_from_node(node, direct_conn); + info = extend_info_from_node(node, direct_conn, false); end: return info; @@ -3691,6 +3691,34 @@ hs_service_map_has_changed(void) rescan_periodic_events(get_options()); } +/** Called when a new consensus has arrived and has been set globally. The new + * consensus is pointed by ns. */ +void +hs_service_new_consensus_params(const networkstatus_t *ns) +{ + tor_assert(ns); + + /* This value is the new value from the consensus. */ + uint8_t current_sendme_inc = congestion_control_sendme_inc(); + + if (!hs_service_map) + return; + + /* Check each service and look if their descriptor contains a different + * sendme increment. If so, nuke all intro points by forcing an expiration + * which will lead to rebuild and reupload with the new value. */ + FOR_EACH_SERVICE_BEGIN(service) { + FOR_EACH_DESCRIPTOR_BEGIN(service, desc) { + if (desc->desc && + desc->desc->encrypted_data.sendme_inc != current_sendme_inc) { + /* Passing the maximum time_t will force expiration of all intro points + * and thus will lead to a rebuild of the descriptor. */ + cleanup_intro_points(service, LONG_MAX); + } + } FOR_EACH_DESCRIPTOR_END; + } FOR_EACH_SERVICE_END; +} + /** Upload an encoded descriptor in encoded_desc of the given version. This * descriptor is for the service identity_pk and blinded_pk used to setup the * directory connection identifier. It is uploaded to the directory hsdir_rs diff --git a/src/feature/hs/hs_service.h b/src/feature/hs/hs_service.h index c48f470245..95461289ce 100644 --- a/src/feature/hs/hs_service.h +++ b/src/feature/hs/hs_service.h @@ -355,6 +355,7 @@ smartlist_t *hs_service_get_metrics_stores(void); void hs_service_map_has_changed(void); void hs_service_dir_info_changed(void); +void hs_service_new_consensus_params(const networkstatus_t *ns); void hs_service_run_scheduled_events(time_t now); void hs_service_circuit_has_opened(origin_circuit_t *circ); int hs_service_receive_intro_established(origin_circuit_t *circ, diff --git a/src/feature/keymgt/loadkey.c b/src/feature/keymgt/loadkey.c index 114b7ae665..1000826376 100644 --- a/src/feature/keymgt/loadkey.c +++ b/src/feature/keymgt/loadkey.c @@ -712,7 +712,7 @@ ed_key_init_from_file(const char *fname, uint32_t flags, } /** - * Create a new signing key and (optionally) certficiate; do not read or write + * Create a new signing key and (optionally) certificate; do not read or write * from disk. See ed_key_init_from_file() for more information. */ ed25519_keypair_t * diff --git a/src/feature/nodelist/dirlist.c b/src/feature/nodelist/dirlist.c index 1f18bd71a2..1f1ac4d106 100644 --- a/src/feature/nodelist/dirlist.c +++ b/src/feature/nodelist/dirlist.c @@ -43,6 +43,14 @@ #include "feature/dirclient/dir_server_st.h" #include "feature/nodelist/node_st.h" +/** Information about an (HTTP) dirport for a directory authority. */ +struct auth_dirport_t { + /** What is the intended usage for this dirport? One of AUTH_USAGE_* */ + auth_dirport_usage_t usage; + /** What is the correct address/port ? */ + tor_addr_port_t dirport; +}; + /** Global list of a dir_server_t object for each directory * authority. */ static smartlist_t *trusted_dir_servers = NULL; @@ -66,6 +74,11 @@ add_trusted_dir_to_nodelist_addr_set(const dir_server_t *dir) /* IPv6 DirPort is not a thing yet for authorities. */ nodelist_add_addr_to_address_set(&dir->ipv6_addr, dir->ipv6_orport, 0); } + if (dir->auth_dirports) { + SMARTLIST_FOREACH_BEGIN(dir->auth_dirports, const auth_dirport_t *, p) { + nodelist_add_addr_to_address_set(&p->dirport.addr, 0, p->dirport.port); + } SMARTLIST_FOREACH_END(p); + } } /** Go over the trusted directory server list and add their address(es) to the @@ -256,7 +269,10 @@ MOCK_IMPL(int, router_digest_is_trusted_dir_type, /** Return true iff the given address matches a trusted directory that matches * at least one bit of type. * - * If type is NO_DIRINFO or ALL_DIRINFO, any authority is matched. */ + * If type is NO_DIRINFO or ALL_DIRINFO, any authority is matched. + * + * Only ORPorts' addresses are considered. + */ bool router_addr_is_trusted_dir_type(const tor_addr_t *addr, dirinfo_type_t type) { @@ -281,6 +297,39 @@ router_addr_is_trusted_dir_type(const tor_addr_t *addr, dirinfo_type_t type) return false; } +/** Return an appropriate usage value describing which authdir port to use + * for a given directory connection purpose. + */ +auth_dirport_usage_t +auth_dirport_usage_for_purpose(int purpose) +{ + switch (purpose) { + case DIR_PURPOSE_FETCH_SERVERDESC: + case DIR_PURPOSE_FETCH_EXTRAINFO: + case DIR_PURPOSE_FETCH_CONSENSUS: + case DIR_PURPOSE_FETCH_CERTIFICATE: + case DIR_PURPOSE_FETCH_MICRODESC: + return AUTH_USAGE_DOWNLOAD; + + case DIR_PURPOSE_UPLOAD_DIR: + return AUTH_USAGE_UPLOAD; + + case DIR_PURPOSE_UPLOAD_VOTE: + case DIR_PURPOSE_UPLOAD_SIGNATURES: + case DIR_PURPOSE_FETCH_DETACHED_SIGNATURES: + case DIR_PURPOSE_FETCH_STATUS_VOTE: + return AUTH_USAGE_VOTING; + + case DIR_PURPOSE_SERVER: + case DIR_PURPOSE_UPLOAD_HSDESC: + case DIR_PURPOSE_FETCH_HSDESC: + case DIR_PURPOSE_HAS_FETCHED_HSDESC: + default: + tor_assert_nonfatal_unreached(); + return AUTH_USAGE_LEGACY; + } +} + /** Create a directory server at <b>address</b>:<b>port</b>, with OR identity * key <b>digest</b> which has DIGEST_LEN bytes. If <b>address</b> is NULL, * add ourself. If <b>is_authority</b>, this is a directory authority. Return @@ -357,6 +406,7 @@ dir_server_new(int is_authority, ent->fake_status.ipv4_dirport = ent->ipv4_dirport; ent->fake_status.ipv4_orport = ent->ipv4_orport; ent->fake_status.ipv6_orport = ent->ipv6_orport; + ent->fake_status.is_authority = !! is_authority; return ent; } @@ -404,10 +454,98 @@ trusted_dir_server_new(const char *nickname, const char *address, ipv6_addrport, digest, v3_auth_digest, type, weight); + + if (ipv4_dirport) { + tor_addr_port_t p; + memset(&p, 0, sizeof(p)); + tor_addr_copy(&p.addr, &ipv4_addr); + p.port = ipv4_dirport; + trusted_dir_server_add_dirport(result, AUTH_USAGE_LEGACY, &p); + } tor_free(hostname); return result; } +/** + * Add @a dirport as an HTTP DirPort contact point for the directory authority + * @a ds, for use when contacting that authority for the given @a usage. + * + * Multiple ports of the same usage are allowed; if present, then only + * the first one of each address family is currently used. + */ +void +trusted_dir_server_add_dirport(dir_server_t *ds, + auth_dirport_usage_t usage, + const tor_addr_port_t *dirport) +{ + tor_assert(ds); + tor_assert(dirport); + + if (BUG(! ds->is_authority)) { + return; + } + + if (ds->auth_dirports == NULL) { + ds->auth_dirports = smartlist_new(); + } + + auth_dirport_t *port = tor_malloc_zero(sizeof(auth_dirport_t)); + port->usage = usage; + tor_addr_port_copy(&port->dirport, dirport); + smartlist_add(ds->auth_dirports, port); +} + +/** + * Helper for trusted_dir_server_get_dirport: only return the exact requested + * usage type. + */ +const tor_addr_port_t * +trusted_dir_server_get_dirport_exact(const dir_server_t *ds, + auth_dirport_usage_t usage, + int addr_family) +{ + tor_assert(ds); + tor_assert_nonfatal(addr_family == AF_INET || addr_family == AF_INET6); + if (ds->auth_dirports == NULL) + return NULL; + + SMARTLIST_FOREACH_BEGIN(ds->auth_dirports, const auth_dirport_t *, port) { + if (port->usage == usage && + tor_addr_family(&port->dirport.addr) == addr_family) { + return &port->dirport; + } + } SMARTLIST_FOREACH_END(port); + + return NULL; +} + +/** + * Return the DirPort of the authority @a ds for with the usage type + * @a usage and address family @a addr_family. If none is found, try + * again with an AUTH_USAGE_LEGACY dirport, if there is one. Return NULL + * if no port can be found. + */ +const tor_addr_port_t * +trusted_dir_server_get_dirport(const dir_server_t *ds, + auth_dirport_usage_t usage, + int addr_family) +{ + const tor_addr_port_t *port; + + while (1) { + port = trusted_dir_server_get_dirport_exact(ds, usage, addr_family); + if (port) + return port; + + // If we tried LEGACY, there is no fallback from this point. + if (usage == AUTH_USAGE_LEGACY) + return NULL; + + // Try again with LEGACY. + usage = AUTH_USAGE_LEGACY; + } +} + /** Return a new dir_server_t for a fallback directory server at * <b>addr</b>:<b>or_port</b>/<b>dir_port</b>, with identity key digest * <b>id_digest</b> */ @@ -447,6 +585,10 @@ dir_server_free_(dir_server_t *ds) if (!ds) return; + if (ds->auth_dirports) { + SMARTLIST_FOREACH(ds->auth_dirports, auth_dirport_t *, p, tor_free(p)); + smartlist_free(ds->auth_dirports); + } tor_free(ds->nickname); tor_free(ds->description); tor_free(ds->address); diff --git a/src/feature/nodelist/dirlist.h b/src/feature/nodelist/dirlist.h index f744fecf92..3b4faf07af 100644 --- a/src/feature/nodelist/dirlist.h +++ b/src/feature/nodelist/dirlist.h @@ -11,6 +11,28 @@ #ifndef TOR_DIRLIST_H #define TOR_DIRLIST_H +typedef struct auth_dirport_t auth_dirport_t; +/** + * Different usages for an authority's HTTP directory port. + * + * Historically, only legacy ports existed; proposal 330 added multiple types + * of dirport to better enable authorities to offload work and resist DoS + * attacks. + **/ +typedef enum auth_dirport_usage_t { + /** Flag for an authority's dirport that is intended for misc/legacy + * usage. May be used when no other dirport is available. */ + AUTH_USAGE_LEGACY, + /** Flag for an authority's dirport that is intended for descriptor uploads + * only. */ + AUTH_USAGE_UPLOAD, + /** Flag for an authority's dirport that is intended for voting only */ + AUTH_USAGE_VOTING, + /** Flag for an authority's dirport that is intended for relay downloads + * only. */ + AUTH_USAGE_DOWNLOAD, +} auth_dirport_usage_t; + int get_n_authorities(dirinfo_type_t type); const smartlist_t *router_get_trusted_dir_servers(void); const smartlist_t *router_get_fallback_dir_servers(void); @@ -18,6 +40,8 @@ smartlist_t *router_get_trusted_dir_servers_mutable(void); smartlist_t *router_get_fallback_dir_servers_mutable(void); void mark_all_dirservers_up(smartlist_t *server_list); +auth_dirport_usage_t auth_dirport_usage_for_purpose(int purpose); + dir_server_t *router_get_trusteddirserver_by_digest(const char *d); dir_server_t *router_get_fallback_dirserver_by_digest( const char *digest); @@ -28,6 +52,14 @@ MOCK_DECL(dir_server_t *, trusteddirserver_get_by_v3_auth_digest, MOCK_DECL(int, router_digest_is_trusted_dir_type, (const char *digest, dirinfo_type_t type)); +const tor_addr_port_t *trusted_dir_server_get_dirport(const dir_server_t *ds, + auth_dirport_usage_t usage, + int addr_family); +const tor_addr_port_t *trusted_dir_server_get_dirport_exact( + const dir_server_t *ds, + auth_dirport_usage_t usage, + int addr_family); + bool router_addr_is_trusted_dir_type(const tor_addr_t *addr, dirinfo_type_t type); #define router_addr_is_trusted_dir(d) \ @@ -41,6 +73,9 @@ dir_server_t *trusted_dir_server_new(const char *nickname, const char *address, const tor_addr_port_t *addrport_ipv6, const char *digest, const char *v3_auth_digest, dirinfo_type_t type, double weight); +void trusted_dir_server_add_dirport(dir_server_t *ds, + auth_dirport_usage_t usage, + const tor_addr_port_t *dirport); dir_server_t *fallback_dir_server_new(const tor_addr_t *addr, uint16_t dir_port, uint16_t or_port, const tor_addr_port_t *addrport_ipv6, diff --git a/src/feature/nodelist/fmt_routerstatus.c b/src/feature/nodelist/fmt_routerstatus.c index 6db40c0b68..95379a7721 100644 --- a/src/feature/nodelist/fmt_routerstatus.c +++ b/src/feature/nodelist/fmt_routerstatus.c @@ -87,7 +87,7 @@ routerstatus_format_entry(const routerstatus_t *rs, const char *version, goto done; smartlist_add_asprintf(chunks, - "s%s%s%s%s%s%s%s%s%s%s%s%s\n", + "s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", /* These must stay in alphabetical order. */ rs->is_authority?" Authority":"", rs->is_bad_exit?" BadExit":"", @@ -95,6 +95,7 @@ routerstatus_format_entry(const routerstatus_t *rs, const char *version, rs->is_fast?" Fast":"", rs->is_possible_guard?" Guard":"", rs->is_hs_dir?" HSDir":"", + rs->is_middle_only?" MiddleOnly":"", rs->is_flagged_running?" Running":"", rs->is_stable?" Stable":"", rs->is_staledesc?" StaleDesc":"", diff --git a/src/feature/nodelist/networkstatus.c b/src/feature/nodelist/networkstatus.c index af808a6ba7..aaddf2331d 100644 --- a/src/feature/nodelist/networkstatus.c +++ b/src/feature/nodelist/networkstatus.c @@ -45,6 +45,8 @@ #include "core/or/channel.h" #include "core/or/channelpadding.h" #include "core/or/circuitpadding.h" +#include "core/or/congestion_control_common.h" +#include "core/or/congestion_control_flow.h" #include "core/or/circuitmux.h" #include "core/or/circuitmux_ewma.h" #include "core/or/circuitstats.h" @@ -80,6 +82,7 @@ #include "feature/nodelist/routerinfo.h" #include "feature/nodelist/routerlist.h" #include "feature/nodelist/torcert.h" +#include "feature/relay/dns.h" #include "feature/relay/routermode.h" #include "lib/crypt_ops/crypto_rand.h" #include "lib/crypt_ops/crypto_util.h" @@ -1701,6 +1704,13 @@ notify_after_networkstatus_changes(void) channelpadding_new_consensus_params(c); circpad_new_consensus_params(c); router_new_consensus_params(c); + congestion_control_new_consensus_params(c); + flow_control_new_consensus_params(c); + hs_service_new_consensus_params(c); + dns_new_consensus_params(c); + + /* Maintenance of our L2 guard list */ + maintain_layer2_guards(); } /** Copy all the ancillary information (like router download status and so on) diff --git a/src/feature/nodelist/node_st.h b/src/feature/nodelist/node_st.h index b15e7154c4..df67a47ada 100644 --- a/src/feature/nodelist/node_st.h +++ b/src/feature/nodelist/node_st.h @@ -70,6 +70,8 @@ struct node_t { unsigned int is_exit:1; /**< Do we think this is an OK exit? */ unsigned int is_bad_exit:1; /**< Do we think this exit is censored, borked, * or otherwise nasty? */ + /** Is this unsuitable for use as anything besides a middle relay? */ + unsigned int is_middle_only:1; unsigned int is_hs_dir:1; /**< True iff this router is a hidden service * directory according to the authorities. */ diff --git a/src/feature/nodelist/nodelist.c b/src/feature/nodelist/nodelist.c index 121dc8823a..b895a2c7f8 100644 --- a/src/feature/nodelist/nodelist.c +++ b/src/feature/nodelist/nodelist.c @@ -1205,7 +1205,7 @@ node_ed25519_id_matches(const node_t *node, const ed25519_public_key_t *id) /** Dummy object that should be unreturnable. Used to ensure that * node_get_protover_summary_flags() always returns non-NULL. */ static const protover_summary_flags_t zero_protover_flags = { - 0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0 }; /** Return the protover_summary_flags for a given node. */ @@ -2820,6 +2820,7 @@ update_router_have_minimum_dir_info(void) const networkstatus_t *consensus = networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor()); int using_md; + static int be_loud_when_things_work_again = 0; if (!consensus) { if (!networkstatus_get_latest_consensus()) @@ -2875,8 +2876,9 @@ update_router_have_minimum_dir_info(void) if (res && !have_min_dir_info) { control_event_client_status(LOG_NOTICE, "ENOUGH_DIR_INFO"); control_event_boot_dir(BOOTSTRAP_STATUS_ENOUGH_DIRINFO, 0); - log_info(LD_DIR, - "We now have enough directory information to build circuits."); + tor_log(be_loud_when_things_work_again ? LOG_NOTICE : LOG_INFO, LD_DIR, + "We now have enough directory information to build circuits."); + be_loud_when_things_work_again = 0; } /* If paths have just become unavailable in this update. */ @@ -2885,6 +2887,10 @@ update_router_have_minimum_dir_info(void) tor_log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR, "Our directory information is no longer up-to-date " "enough to build circuits: %s", dir_info_status); + if (!quiet) { + /* remember to do a notice-level log when things come back */ + be_loud_when_things_work_again = 1; + } /* a) make us log when we next complete a circuit, so we know when Tor * is back up and usable, and b) disable some activities that Tor diff --git a/src/feature/nodelist/routerlist.c b/src/feature/nodelist/routerlist.c index 565d4596d4..c00f7ffb26 100644 --- a/src/feature/nodelist/routerlist.c +++ b/src/feature/nodelist/routerlist.c @@ -1617,6 +1617,13 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg, "descriptor for router %s", router_describe(router)); } else { + if (router->purpose == ROUTER_PURPOSE_BRIDGE) { + /* Even if we're not going to keep this descriptor, we need to + * let the bridge descriptor fetch subsystem know that we + * succeeded at getting it -- so we can adjust the retry schedule + * to stop trying for a while. */ + learned_bridge_descriptor(router, from_cache, 0); + } log_info(LD_DIR, "Dropping descriptor that we already have for router %s", router_describe(router)); @@ -2012,6 +2019,30 @@ routerlist_remove_old_routers(void) router_rebuild_store(RRS_DONT_REMOVE_OLD,&routerlist->extrainfo_store); } +/* Drop every bridge descriptor in our routerlist. Used by the external + * 'bridgestrap' tool to discard bridge descriptors so that it can then + * do a clean reachability test. */ +void +routerlist_drop_bridge_descriptors(void) +{ + routerinfo_t *router; + int i; + + if (!routerlist) + return; + + for (i = 0; i < smartlist_len(routerlist->routers); ++i) { + router = smartlist_get(routerlist->routers, i); + if (router->purpose == ROUTER_PURPOSE_BRIDGE) { + log_notice(LD_DIR, + "Dropping existing bridge descriptor for %s", + router_describe(router)); + routerlist_remove(routerlist, router, 0, time(NULL)); + i--; + } + } +} + /** We just added a new set of descriptors. Take whatever extra steps * we need. */ void @@ -2023,7 +2054,7 @@ routerlist_descriptors_added(smartlist_t *sl, int from_cache) control_event_descriptors_changed(sl); SMARTLIST_FOREACH_BEGIN(sl, routerinfo_t *, ri) { if (ri->purpose == ROUTER_PURPOSE_BRIDGE) - learned_bridge_descriptor(ri, from_cache); + learned_bridge_descriptor(ri, from_cache, 1); if (ri->needs_retest_if_added) { ri->needs_retest_if_added = 0; dirserv_single_reachability_test(approx_time(), ri); diff --git a/src/feature/nodelist/routerlist.h b/src/feature/nodelist/routerlist.h index 7dc748c94b..7ba305baf6 100644 --- a/src/feature/nodelist/routerlist.h +++ b/src/feature/nodelist/routerlist.h @@ -145,6 +145,7 @@ was_router_added_t router_add_extrainfo_to_routerlist( int from_cache, int from_fetch); void routerlist_descriptors_added(smartlist_t *sl, int from_cache); void routerlist_remove_old_routers(void); +void routerlist_drop_bridge_descriptors(void); int router_load_single_router(const char *s, uint8_t purpose, int cache, const char **msg); int router_load_routers_from_string(const char *s, const char *eos, diff --git a/src/feature/nodelist/routerstatus_st.h b/src/feature/nodelist/routerstatus_st.h index 46ff0bdeac..55b76de581 100644 --- a/src/feature/nodelist/routerstatus_st.h +++ b/src/feature/nodelist/routerstatus_st.h @@ -51,6 +51,8 @@ struct routerstatus_t { * choice as an entry guard. */ unsigned int is_bad_exit:1; /**< True iff this node is a bad choice for * an exit node. */ + unsigned int is_middle_only:1; /**< True iff this node is marked as bad + * for anything besides middle positions. */ unsigned int is_hs_dir:1; /**< True iff this router is a v2-or-later hidden * service directory. */ unsigned int is_v2_dir:1; /** True iff this router publishes an open DirPort diff --git a/src/feature/nodelist/torcert.c b/src/feature/nodelist/torcert.c index ab3c0ecc1b..8e115a2dc6 100644 --- a/src/feature/nodelist/torcert.c +++ b/src/feature/nodelist/torcert.c @@ -13,7 +13,7 @@ * contents themselves may be another Ed25519 key, a digest of a * RSA key, or some other material. * - * In this module there is also support for a crooss-certification of + * In this module there is also support for a cross-certification of * Ed25519 identities using (older) RSA1024 identities. * * Tor uses other types of certificate too, beyond those described in this diff --git a/src/feature/relay/circuitbuild_relay.c b/src/feature/relay/circuitbuild_relay.c index 2d346b1809..5b1609a1af 100644 --- a/src/feature/relay/circuitbuild_relay.c +++ b/src/feature/relay/circuitbuild_relay.c @@ -392,7 +392,9 @@ circuit_open_connection_for_extend(const struct extend_cell_t *ec, NULL, /*onion_key*/ NULL, /*curve25519_key*/ &chosen_ap->addr, - chosen_ap->port); + chosen_ap->port, + NULL /* protover summary */, + false); circ->n_chan_create_cell = tor_memdup(&ec->create_cell, sizeof(ec->create_cell)); diff --git a/src/feature/relay/dns.c b/src/feature/relay/dns.c index 6a703f2ab3..4ae4a8e4b9 100644 --- a/src/feature/relay/dns.c +++ b/src/feature/relay/dns.c @@ -61,6 +61,7 @@ #include "core/or/relay.h" #include "feature/control/control_events.h" #include "feature/relay/dns.h" +#include "feature/nodelist/networkstatus.h" #include "feature/relay/router.h" #include "feature/relay/routermode.h" #include "feature/stats/rephist.h" @@ -110,6 +111,7 @@ static int answer_is_wildcarded(const char *ip); static int evdns_err_is_transient(int err); static void inform_pending_connections(cached_resolve_t *resolve); static void make_pending_resolve_cached(cached_resolve_t *cached); +static void configure_libevent_options(void); #ifdef DEBUG_DNS_CACHE static void assert_cache_ok_(void); @@ -212,6 +214,19 @@ evdns_log_cb(int warn, const char *msg) tor_log(severity, LD_EXIT, "eventdns: %s", msg); } +/** New consensus just appeared, take appropriate actions if need be. */ +void +dns_new_consensus_params(const networkstatus_t *ns) +{ + (void) ns; + + /* Consensus has parameters for the Exit relay DNS side and so we only reset + * the DNS nameservers if we are in server mode. */ + if (server_mode(get_options())) { + configure_libevent_options(); + } +} + /** Initialize the DNS subsystem; called by the OR process. */ int dns_init(void) @@ -1353,6 +1368,111 @@ configured_nameserver_address(const size_t idx) } #endif /* defined(HAVE_EVDNS_BASE_GET_NAMESERVER_ADDR) */ +/** Return a pointer to a stack allocated buffer containing the string + * representation of the exit_dns_timeout consensus parameter. */ +static const char * +get_consensus_param_exit_dns_timeout(void) +{ + static char str[4]; + + /* Get the Exit DNS timeout value from the consensus or default. This is in + * milliseconds. */ +#define EXIT_DNS_TIMEOUT_DEFAULT (1000) +#define EXIT_DNS_TIMEOUT_MIN (1) +#define EXIT_DNS_TIMEOUT_MAX (120000) + int32_t val = networkstatus_get_param(NULL, "exit_dns_timeout", + EXIT_DNS_TIMEOUT_DEFAULT, + EXIT_DNS_TIMEOUT_MIN, + EXIT_DNS_TIMEOUT_MAX); + /* NOTE: We convert it to seconds because libevent only supports that. In the + * future, if we support different resolver(s), we might want to specialize + * this call. */ + + /* NOTE: We also don't allow 0 and so we must cap the division to 1 second + * else all DNS request would fail if the consensus would ever tell us a + * value below 1000 (1 sec). */ + val = MAX(1, val / 1000); + + tor_snprintf(str, sizeof(str), "%d", val); + return str; +} + +/** Return a pointer to a stack allocated buffer containing the string + * representation of the exit_dns_num_attempts consensus parameter. */ +static const char * +get_consensus_param_exit_dns_attempts(void) +{ + static char str[4]; + + /* Get the Exit DNS number of attempt value from the consensus or default. */ +#define EXIT_DNS_NUM_ATTEMPTS_DEFAULT (2) +#define EXIT_DNS_NUM_ATTEMPTS_MIN (0) +#define EXIT_DNS_NUM_ATTEMPTS_MAX (255) + int32_t val = networkstatus_get_param(NULL, "exit_dns_num_attempts", + EXIT_DNS_NUM_ATTEMPTS_DEFAULT, + EXIT_DNS_NUM_ATTEMPTS_MIN, + EXIT_DNS_NUM_ATTEMPTS_MAX); + tor_snprintf(str, sizeof(str), "%d", val); + return str; +} + +/** Configure the libevent options. This can safely be called after + * initialization or even if the evdns base is not set. */ +static void +configure_libevent_options(void) +{ + /* This is possible because we can get called when a new consensus is set + * while the DNS subsystem is not initialized just yet. It should be + * harmless. */ + if (!the_evdns_base) { + return; + } + +#define SET(k,v) evdns_base_set_option(the_evdns_base, (k), (v)) + + // If we only have one nameserver, it does not make sense to back off + // from it for a timeout. Unfortunately, the value for max-timeouts is + // currently clamped by libevent to 255, but it does not hurt to set + // it higher in case libevent gets a patch for this. Higher-than- + // default maximum of 3 with multiple nameservers to avoid spuriously + // marking one down on bursts of timeouts resulting from scans/attacks + // against non-responding authoritative DNS servers. + if (evdns_base_count_nameservers(the_evdns_base) == 1) { + SET("max-timeouts:", "1000000"); + } else { + SET("max-timeouts:", "10"); + } + + // Elongate the queue of maximum inflight dns requests, so if a bunch + // remain pending at the resolver (happens commonly with Unbound) we won't + // stall every other DNS request. This potentially means some wasted + // CPU as there's a walk over a linear queue involved, but this is a + // much better tradeoff compared to just failing DNS requests because + // of a full queue. + SET("max-inflight:", "8192"); + + /* Set timeout to be 1 second. This tells libevent that it shouldn't wait + * more than N second to drop a DNS query and consider it "timed out". It is + * very important to differentiate here a libevent timeout and a DNS server + * timeout. And so, by setting this to N second, libevent sends back + * "DNS_ERR_TIMEOUT" if that N second is reached which does NOT indicate that + * the query itself timed out in transit. */ + SET("timeout:", get_consensus_param_exit_dns_timeout()); + + /* This tells libevent to attemps up to X times a DNS query if the previous + * one failed to complete within N second. We believe that this should be + * enough to catch temporary hiccups on the first query. But after that, it + * should signal us that it won't be able to resolve it. */ + SET("attempts:", get_consensus_param_exit_dns_attempts()); + + if (get_options()->ServerDNSRandomizeCase) + SET("randomize-case:", "1"); + else + SET("randomize-case:", "0"); + +#undef SET +} + /** Configure eventdns nameservers if force is true, or if the configuration * has changed since the last time we called this function, or if we failed on * our last attempt. On Unix, this reads from /etc/resolv.conf or @@ -1466,43 +1586,10 @@ configure_nameservers(int force) } #endif /* defined(_WIN32) */ -#define SET(k,v) evdns_base_set_option(the_evdns_base, (k), (v)) - - // If we only have one nameserver, it does not make sense to back off - // from it for a timeout. Unfortunately, the value for max-timeouts is - // currently clamped by libevent to 255, but it does not hurt to set - // it higher in case libevent gets a patch for this. Higher-than- - // default maximum of 3 with multiple nameservers to avoid spuriously - // marking one down on bursts of timeouts resulting from scans/attacks - // against non-responding authoritative DNS servers. - if (evdns_base_count_nameservers(the_evdns_base) == 1) { - SET("max-timeouts:", "1000000"); - } else { - SET("max-timeouts:", "10"); - } - - // Elongate the queue of maximum inflight dns requests, so if a bunch - // remain pending at the resolver (happens commonly with Unbound) we won't - // stall every other DNS request. This potentially means some wasted - // CPU as there's a walk over a linear queue involved, but this is a - // much better tradeoff compared to just failing DNS requests because - // of a full queue. - SET("max-inflight:", "8192"); - - // Two retries at 5 and 10 seconds for bind9/named which relies on - // clients to handle retries. Second retry for retried circuits with - // extended 15 second timeout. Superfluous with local-system Unbound - // instance--has its own elaborate retry scheme. - SET("timeout:", "5"); - SET("attempts:","3"); - - if (options->ServerDNSRandomizeCase) - SET("randomize-case:", "1"); - else - SET("randomize-case:", "0"); - -#undef SET + /* Setup libevent options. */ + configure_libevent_options(); + /* Relaunch periodical DNS check event. */ dns_servers_relaunch_checks(); nameservers_configured = 1; @@ -1642,7 +1729,7 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses, /* The result can be changed within this function thus why we note the result * at the end. */ - rep_hist_note_dns_query(type, result); + rep_hist_note_dns_error(type, result); tor_free(arg_); } @@ -1662,6 +1749,9 @@ launch_one_resolve(const char *address, uint8_t query_type, addr[0] = (char) query_type; memcpy(addr+1, address, addr_len + 1); + /* Note the query for our statistics. */ + rep_hist_note_dns_request(query_type); + switch (query_type) { case DNS_IPv4_A: req = evdns_base_resolve_ipv4(the_evdns_base, diff --git a/src/feature/relay/dns.h b/src/feature/relay/dns.h index d7a815e697..3f8519bd97 100644 --- a/src/feature/relay/dns.h +++ b/src/feature/relay/dns.h @@ -26,6 +26,7 @@ void dns_reset_correctness_checks(void); size_t dns_cache_total_allocation(void); void dump_dns_mem_usage(int severity); size_t dns_cache_handle_oom(time_t now, size_t min_remove_bytes); +void dns_new_consensus_params(const networkstatus_t *ns); /* These functions are only used within the feature/relay module, and don't * need stubs. */ @@ -47,6 +48,8 @@ void dns_launch_correctness_checks(void); ((void)(severity)) #define dns_cache_handle_oom(now, bytes) \ ((void)(now), (void)(bytes), 0) +#define dns_new_consensus_params(ns) \ + ((void) ns) #define connection_dns_remove(conn) \ STMT_BEGIN \ diff --git a/src/feature/relay/include.am b/src/feature/relay/include.am index 84bb1ff35e..8a121cef01 100644 --- a/src/feature/relay/include.am +++ b/src/feature/relay/include.am @@ -15,6 +15,7 @@ MODULE_RELAY_SOURCES = \ src/feature/relay/routermode.c \ src/feature/relay/relay_config.c \ src/feature/relay/relay_handshake.c \ + src/feature/relay/relay_metrics.c \ src/feature/relay/relay_periodic.c \ src/feature/relay/relay_sys.c \ src/feature/relay/routerkeys.c \ @@ -30,6 +31,7 @@ noinst_HEADERS += \ src/feature/relay/onion_queue.h \ src/feature/relay/relay_config.h \ src/feature/relay/relay_handshake.h \ + src/feature/relay/relay_metrics.h \ src/feature/relay/relay_periodic.h \ src/feature/relay/relay_sys.h \ src/feature/relay/relay_find_addr.h \ diff --git a/src/feature/relay/onion_queue.c b/src/feature/relay/onion_queue.c index 85ec0dc74a..81a655135d 100644 --- a/src/feature/relay/onion_queue.c +++ b/src/feature/relay/onion_queue.c @@ -42,7 +42,7 @@ typedef struct onion_queue_t { TOR_TAILQ_ENTRY(onion_queue_t) next; or_circuit_t *circ; - uint16_t handshake_type; + uint16_t queue_idx; create_cell_t *onionskin; time_t when_added; } onion_queue_t; @@ -53,20 +53,41 @@ typedef struct onion_queue_t { TOR_TAILQ_HEAD(onion_queue_head_t, onion_queue_t); typedef struct onion_queue_head_t onion_queue_head_t; +/** We have 3 queues: tap, fast, and ntor. (ntorv3 goes into ntor queue). */ +#define MAX_QUEUE_IDX ONION_HANDSHAKE_TYPE_NTOR + /** Array of queues of circuits waiting for CPU workers. An element is NULL * if that queue is empty.*/ -static onion_queue_head_t ol_list[MAX_ONION_HANDSHAKE_TYPE+1] = +static onion_queue_head_t ol_list[MAX_QUEUE_IDX+1] = { TOR_TAILQ_HEAD_INITIALIZER(ol_list[0]), /* tap */ TOR_TAILQ_HEAD_INITIALIZER(ol_list[1]), /* fast */ TOR_TAILQ_HEAD_INITIALIZER(ol_list[2]), /* ntor */ }; /** Number of entries of each type currently in each element of ol_list[]. */ -static int ol_entries[MAX_ONION_HANDSHAKE_TYPE+1]; +static int ol_entries[MAX_QUEUE_IDX+1]; static int num_ntors_per_tap(void); static void onion_queue_entry_remove(onion_queue_t *victim); +/** + * We combine ntorv3 and ntor into the same queue, so we must + * use this function to covert the cell type to a queue index. + */ +static inline uint16_t +onionskin_type_to_queue(uint16_t type) +{ + if (type == ONION_HANDSHAKE_TYPE_NTOR_V3) { + return ONION_HANDSHAKE_TYPE_NTOR; + } + + if (BUG(type > MAX_QUEUE_IDX)) { + return MAX_QUEUE_IDX; // use ntor if out of range + } + + return type; +} + /* XXXX Check lengths vs MAX_ONIONSKIN_{CHALLENGE,REPLY}_LEN. * * (By which I think I meant, "make sure that no @@ -144,6 +165,7 @@ onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin) { onion_queue_t *tmp; time_t now = time(NULL); + uint16_t queue_idx = 0; if (onionskin->handshake_type > MAX_ONION_HANDSHAKE_TYPE) { /* LCOV_EXCL_START @@ -154,20 +176,21 @@ onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin) /* LCOV_EXCL_STOP */ } + queue_idx = onionskin_type_to_queue(onionskin->handshake_type); + tmp = tor_malloc_zero(sizeof(onion_queue_t)); tmp->circ = circ; - tmp->handshake_type = onionskin->handshake_type; + tmp->queue_idx = queue_idx; tmp->onionskin = onionskin; tmp->when_added = now; - if (!have_room_for_onionskin(onionskin->handshake_type)) { + if (!have_room_for_onionskin(queue_idx)) { #define WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL (60) static ratelim_t last_warned = RATELIM_INIT(WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL); - if (onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR) { + rep_hist_note_circuit_handshake_dropped(queue_idx); + if (queue_idx == ONION_HANDSHAKE_TYPE_NTOR) { char *m; - /* Note this ntor onionskin drop as an overload */ - rep_hist_note_overload(OVERLOAD_GENERAL); if ((m = rate_limit_log(&last_warned, approx_time()))) { log_warn(LD_GENERAL, "Your computer is too slow to handle this many circuit " @@ -182,18 +205,18 @@ onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin) return -1; } - ++ol_entries[onionskin->handshake_type]; + ++ol_entries[queue_idx]; log_info(LD_OR, "New create (%s). Queues now ntor=%d and tap=%d.", - onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap", + queue_idx == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap", ol_entries[ONION_HANDSHAKE_TYPE_NTOR], ol_entries[ONION_HANDSHAKE_TYPE_TAP]); circ->onionqueue_entry = tmp; - TOR_TAILQ_INSERT_TAIL(&ol_list[onionskin->handshake_type], tmp, next); + TOR_TAILQ_INSERT_TAIL(&ol_list[queue_idx], tmp, next); /* cull elderly requests. */ while (1) { - onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[onionskin->handshake_type]); + onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[queue_idx]); if (now - head->when_added < (time_t)ONIONQUEUE_WAIT_CUTOFF) break; @@ -281,15 +304,15 @@ onion_next_task(create_cell_t **onionskin_out) return NULL; /* no onions pending, we're done */ tor_assert(head->circ); - tor_assert(head->handshake_type <= MAX_ONION_HANDSHAKE_TYPE); + tor_assert(head->queue_idx <= MAX_QUEUE_IDX); // tor_assert(head->circ->p_chan); /* make sure it's still valid */ /* XXX I only commented out the above line to make the unit tests * more manageable. That's probably not good long-term. -RD */ circ = head->circ; if (head->onionskin) - --ol_entries[head->handshake_type]; + --ol_entries[head->queue_idx]; log_info(LD_OR, "Processing create (%s). Queues now ntor=%d and tap=%d.", - head->handshake_type == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap", + head->queue_idx == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap", ol_entries[ONION_HANDSHAKE_TYPE_NTOR], ol_entries[ONION_HANDSHAKE_TYPE_TAP]); @@ -305,7 +328,7 @@ onion_next_task(create_cell_t **onionskin_out) int onion_num_pending(uint16_t handshake_type) { - return ol_entries[handshake_type]; + return ol_entries[onionskin_type_to_queue(handshake_type)]; } /** Go through ol_list, find the onion_queue_t element which points to @@ -331,23 +354,23 @@ onion_pending_remove(or_circuit_t *circ) static void onion_queue_entry_remove(onion_queue_t *victim) { - if (victim->handshake_type > MAX_ONION_HANDSHAKE_TYPE) { + if (victim->queue_idx > MAX_QUEUE_IDX) { /* LCOV_EXCL_START * We should have rejected this far before this point */ log_warn(LD_BUG, "Handshake %d out of range! Dropping.", - victim->handshake_type); + victim->queue_idx); /* XXX leaks */ return; /* LCOV_EXCL_STOP */ } - TOR_TAILQ_REMOVE(&ol_list[victim->handshake_type], victim, next); + TOR_TAILQ_REMOVE(&ol_list[victim->queue_idx], victim, next); if (victim->circ) victim->circ->onionqueue_entry = NULL; if (victim->onionskin) - --ol_entries[victim->handshake_type]; + --ol_entries[victim->queue_idx]; tor_free(victim->onionskin); tor_free(victim); @@ -359,7 +382,7 @@ clear_pending_onions(void) { onion_queue_t *victim, *next; int i; - for (i=0; i<=MAX_ONION_HANDSHAKE_TYPE; i++) { + for (i=0; i<=MAX_QUEUE_IDX; i++) { for (victim = TOR_TAILQ_FIRST(&ol_list[i]); victim; victim = next) { next = TOR_TAILQ_NEXT(victim,next); onion_queue_entry_remove(victim); diff --git a/src/feature/relay/relay_config.c b/src/feature/relay/relay_config.c index 959128a298..85ccfc18a7 100644 --- a/src/feature/relay/relay_config.c +++ b/src/feature/relay/relay_config.c @@ -190,7 +190,7 @@ describe_relay_port(const port_cfg_t *port) /** Return true iff port p1 is equal to p2. * - * This does a field by field comparaison. */ + * This does a field by field comparison. */ static bool port_cfg_eq(const port_cfg_t *p1, const port_cfg_t *p2) { diff --git a/src/feature/relay/relay_find_addr.c b/src/feature/relay/relay_find_addr.c index 33a50ce3c3..f4f9d40823 100644 --- a/src/feature/relay/relay_find_addr.c +++ b/src/feature/relay/relay_find_addr.c @@ -221,7 +221,7 @@ relay_addr_learn_from_dirauth(void) "learn for now our address from them."); return; } - extend_info_t *ei = extend_info_from_node(node, 1); + extend_info_t *ei = extend_info_from_node(node, 1, false); if (BUG(!ei)) { return; } diff --git a/src/feature/relay/relay_metrics.c b/src/feature/relay/relay_metrics.c new file mode 100644 index 0000000000..908cfdb0d9 --- /dev/null +++ b/src/feature/relay/relay_metrics.c @@ -0,0 +1,403 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * @file relay_metrics.c + * @brief Relay metrics exposed through the MetricsPort + **/ + +#define RELAY_METRICS_ENTRY_PRIVATE + +#include "orconfig.h" + +#include "core/or/or.h" +#include "core/or/relay.h" + +#include "lib/malloc/malloc.h" +#include "lib/container/smartlist.h" +#include "lib/metrics/metrics_store.h" +#include "lib/log/util_bug.h" + +#include "feature/relay/relay_metrics.h" +#include "feature/stats/rephist.h" + +#include <event2/dns.h> + +/** Declarations of each fill function for metrics defined in base_metrics. */ +static void fill_dns_error_values(void); +static void fill_dns_query_values(void); +static void fill_global_bw_limit_values(void); +static void fill_socket_values(void); +static void fill_onionskins_values(void); +static void fill_oom_values(void); +static void fill_tcp_exhaustion_values(void); + +/** The base metrics that is a static array of metrics added to the metrics + * store. + * + * The key member MUST be also the index of the entry in the array. */ +static const relay_metrics_entry_t base_metrics[] = +{ + { + .key = RELAY_METRICS_NUM_OOM_BYTES, + .type = METRICS_TYPE_COUNTER, + .name = METRICS_NAME(relay_load_oom_bytes_total), + .help = "Total number of bytes the OOM has freed by subsystem", + .fill_fn = fill_oom_values, + }, + { + .key = RELAY_METRICS_NUM_ONIONSKINS, + .type = METRICS_TYPE_COUNTER, + .name = METRICS_NAME(relay_load_onionskins_total), + .help = "Total number of onionskins handled", + .fill_fn = fill_onionskins_values, + }, + { + .key = RELAY_METRICS_NUM_SOCKETS, + .type = METRICS_TYPE_GAUGE, + .name = METRICS_NAME(relay_load_socket_total), + .help = "Total number of sockets", + .fill_fn = fill_socket_values, + }, + { + .key = RELAY_METRICS_NUM_GLOBAL_RW_LIMIT, + .type = METRICS_TYPE_COUNTER, + .name = METRICS_NAME(relay_load_global_rate_limit_reached_total), + .help = "Total number of global connection bucket limit reached", + .fill_fn = fill_global_bw_limit_values, + }, + { + .key = RELAY_METRICS_NUM_DNS, + .type = METRICS_TYPE_COUNTER, + .name = METRICS_NAME(relay_exit_dns_query_total), + .help = "Total number of DNS queries done by this relay", + .fill_fn = fill_dns_query_values, + }, + { + .key = RELAY_METRICS_NUM_DNS_ERRORS, + .type = METRICS_TYPE_COUNTER, + .name = METRICS_NAME(relay_exit_dns_error_total), + .help = "Total number of DNS errors encountered by this relay", + .fill_fn = fill_dns_error_values, + }, + { + .key = RELAY_METRICS_NUM_TCP_EXHAUSTION, + .type = METRICS_TYPE_COUNTER, + .name = METRICS_NAME(relay_load_tcp_exhaustion_total), + .help = "Total number of times we ran out of TCP ports", + .fill_fn = fill_tcp_exhaustion_values, + }, +}; +static const size_t num_base_metrics = ARRAY_LENGTH(base_metrics); + +/** The only and single store of all the relay metrics. */ +static metrics_store_t *the_store; + +/** Helper function to convert an handshake type into a string. */ +static inline const char * +handshake_type_to_str(const uint16_t type) +{ + switch (type) { + case ONION_HANDSHAKE_TYPE_TAP: + return "tap"; + case ONION_HANDSHAKE_TYPE_FAST: + return "fast"; + case ONION_HANDSHAKE_TYPE_NTOR: + return "ntor"; + case ONION_HANDSHAKE_TYPE_NTOR_V3: + return "ntor_v3"; + default: + // LCOV_EXCL_START + tor_assert_unreached(); + // LCOV_EXCL_STOP + } +} + +/** Fill function for the RELAY_METRICS_NUM_DNS metrics. */ +static void +fill_tcp_exhaustion_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_TCP_EXHAUSTION]; + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_update(sentry, rep_hist_get_n_tcp_exhaustion()); +} + +/* NOTE: Disable the record type label until libevent is fixed. */ +#if 0 +/** Helper array containing mapping for the name of the different DNS records + * and their corresponding libevent values. */ +static struct dns_type { + const char *name; + uint8_t type; +} dns_types[] = { + { .name = "A", .type = DNS_IPv4_A }, + { .name = "PTR", .type = DNS_PTR }, + { .name = "AAAA", .type = DNS_IPv6_AAAA }, +}; +static const size_t num_dns_types = ARRAY_LENGTH(dns_types); +#endif + +/** Fill function for the RELAY_METRICS_NUM_DNS_ERRORS metrics. */ +static void +fill_dns_error_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_DNS_ERRORS]; + + /* Helper array to map libeven DNS errors to their names and so we can + * iterate over this array to add all metrics. */ + static struct dns_error { + const char *name; + uint8_t key; + } errors[] = { + { .name = "success", .key = DNS_ERR_NONE }, + { .name = "format", .key = DNS_ERR_FORMAT }, + { .name = "serverfailed", .key = DNS_ERR_SERVERFAILED }, + { .name = "notexist", .key = DNS_ERR_NOTEXIST }, + { .name = "notimpl", .key = DNS_ERR_NOTIMPL }, + { .name = "refused", .key = DNS_ERR_REFUSED }, + { .name = "truncated", .key = DNS_ERR_TRUNCATED }, + { .name = "unknown", .key = DNS_ERR_UNKNOWN }, + { .name = "tor_timeout", .key = DNS_ERR_TIMEOUT }, + { .name = "shutdown", .key = DNS_ERR_SHUTDOWN }, + { .name = "cancel", .key = DNS_ERR_CANCEL }, + { .name = "nodata", .key = DNS_ERR_NODATA }, + }; + static const size_t num_errors = ARRAY_LENGTH(errors); + + /* NOTE: Disable the record type label until libevent is fixed. */ +#if 0 + for (size_t i = 0; i < num_dns_types; i++) { + /* Dup the label because metrics_format_label() returns a pointer to a + * string on the stack and we need that label for all metrics. */ + char *record_label = + tor_strdup(metrics_format_label("record", dns_types[i].name)); + + for (size_t j = 0; j < num_errors; j++) { + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, record_label); + metrics_store_entry_add_label(sentry, + metrics_format_label("reason", errors[j].name)); + metrics_store_entry_update(sentry, + rep_hist_get_n_dns_error(dns_types[i].type, errors[j].key)); + } + tor_free(record_label); + } +#endif + + /* Put in the DNS errors, unfortunately not per-type for now. */ + for (size_t j = 0; j < num_errors; j++) { + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("reason", errors[j].name)); + metrics_store_entry_update(sentry, + rep_hist_get_n_dns_error(0, errors[j].key)); + } +} + +/** Fill function for the RELAY_METRICS_NUM_DNS metrics. */ +static void +fill_dns_query_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_DNS]; + + /* NOTE: Disable the record type label until libevent is fixed (#40490). */ +#if 0 + for (size_t i = 0; i < num_dns_types; i++) { + /* Dup the label because metrics_format_label() returns a pointer to a + * string on the stack and we need that label for all metrics. */ + char *record_label = + tor_strdup(metrics_format_label("record", dns_types[i].name)); + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, record_label); + metrics_store_entry_update(sentry, + rep_hist_get_n_dns_request(dns_types[i].type)); + tor_free(record_label); + } +#endif + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_update(sentry, rep_hist_get_n_dns_request(0)); +} + +/** Fill function for the RELAY_METRICS_NUM_GLOBAL_RW_LIMIT metrics. */ +static void +fill_global_bw_limit_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_GLOBAL_RW_LIMIT]; + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("side", "read")); + metrics_store_entry_update(sentry, rep_hist_get_n_read_limit_reached()); + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("side", "write")); + metrics_store_entry_update(sentry, rep_hist_get_n_write_limit_reached()); +} + +/** Fill function for the RELAY_METRICS_NUM_SOCKETS metrics. */ +static void +fill_socket_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_SOCKETS]; + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("state", "opened")); + metrics_store_entry_update(sentry, get_n_open_sockets()); + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_update(sentry, get_max_sockets()); +} + +/** Fill function for the RELAY_METRICS_NUM_ONIONSKINS metrics. */ +static void +fill_onionskins_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_ONIONSKINS]; + + for (uint16_t t = 0; t <= MAX_ONION_HANDSHAKE_TYPE; t++) { + /* Dup the label because metrics_format_label() returns a pointer to a + * string on the stack and we need that label for all metrics. */ + char *type_label = + tor_strdup(metrics_format_label("type", handshake_type_to_str(t))); + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, type_label); + metrics_store_entry_add_label(sentry, + metrics_format_label("action", "processed")); + metrics_store_entry_update(sentry, + rep_hist_get_circuit_n_handshake_assigned(t)); + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, type_label); + metrics_store_entry_add_label(sentry, + metrics_format_label("action", "dropped")); + metrics_store_entry_update(sentry, + rep_hist_get_circuit_n_handshake_dropped(t)); + tor_free(type_label); + } +} + +/** Fill function for the RELAY_METRICS_NUM_OOM_BYTES metrics. */ +static void +fill_oom_values(void) +{ + metrics_store_entry_t *sentry; + const relay_metrics_entry_t *rentry = + &base_metrics[RELAY_METRICS_NUM_OOM_BYTES]; + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("subsys", "cell")); + metrics_store_entry_update(sentry, oom_stats_n_bytes_removed_cell); + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("subsys", "dns")); + metrics_store_entry_update(sentry, oom_stats_n_bytes_removed_dns); + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("subsys", "geoip")); + metrics_store_entry_update(sentry, oom_stats_n_bytes_removed_geoip); + + sentry = metrics_store_add(the_store, rentry->type, rentry->name, + rentry->help); + metrics_store_entry_add_label(sentry, + metrics_format_label("subsys", "hsdir")); + metrics_store_entry_update(sentry, oom_stats_n_bytes_removed_hsdir); +} + +/** Reset the global store and fill it with all the metrics from base_metrics + * and their associated values. + * + * To pull this off, every metrics has a "fill" function that is called and in + * charge of adding the metrics to the store, appropriate labels and finally + * updating the value to report. */ +static void +fill_store(void) +{ + /* Reset the current store, we are about to fill it with all the things. */ + metrics_store_reset(the_store); + + /* Call the fill function for each metrics. */ + for (size_t i = 0; i < num_base_metrics; i++) { + if (BUG(!base_metrics[i].fill_fn)) { + continue; + } + base_metrics[i].fill_fn(); + } +} + +/** Return a list of all the relay metrics stores. This is the + * function attached to the .get_metrics() member of the subsys_t. */ +const smartlist_t * +relay_metrics_get_stores(void) +{ + /* We can't have the caller to free the returned list so keep it static, + * simply update it. */ + static smartlist_t *stores_list = NULL; + + /* We dynamically fill the store with all the metrics upon a request. The + * reason for this is because the exposed metrics of a relay are often + * internal counters in the fast path and thus we fetch the value when a + * metrics port request arrives instead of keeping a local metrics store of + * those values. */ + fill_store(); + + if (!stores_list) { + stores_list = smartlist_new(); + smartlist_add(stores_list, the_store); + } + + return stores_list; +} + +/** Initialize the relay metrics. */ +void +relay_metrics_init(void) +{ + if (BUG(the_store)) { + return; + } + the_store = metrics_store_new(); +} + +/** Free the relay metrics. */ +void +relay_metrics_free(void) +{ + if (!the_store) { + return; + } + /* NULL is set with this call. */ + metrics_store_free(the_store); +} diff --git a/src/feature/relay/relay_metrics.h b/src/feature/relay/relay_metrics.h new file mode 100644 index 0000000000..00dfeaa624 --- /dev/null +++ b/src/feature/relay/relay_metrics.h @@ -0,0 +1,55 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * @file relay_metrics.h + * @brief Header for feature/relay/relay_metrics.c + **/ + +#ifndef TOR_FEATURE_RELAY_RELAY_METRICS_H +#define TOR_FEATURE_RELAY_RELAY_METRICS_H + +#include "lib/container/smartlist.h" +#include "lib/metrics/metrics_common.h" + +/** Metrics key for each reported metrics. This key is also used as an index in + * the base_metrics array. */ +typedef enum { + /** Number of OOM invocation. */ + RELAY_METRICS_NUM_OOM_BYTES = 0, + /** Number of onionskines handled. */ + RELAY_METRICS_NUM_ONIONSKINS = 1, + /** Number of sockets. */ + RELAY_METRICS_NUM_SOCKETS = 2, + /** Number of global connection rate limit. */ + RELAY_METRICS_NUM_GLOBAL_RW_LIMIT = 3, + /** Number of DNS queries. */ + RELAY_METRICS_NUM_DNS = 4, + /** Number of DNS query errors. */ + RELAY_METRICS_NUM_DNS_ERRORS = 5, + /** Number of TCP exhaustion reached. */ + RELAY_METRICS_NUM_TCP_EXHAUSTION = 6, +} relay_metrics_key_t; + +/** The metadata of a relay metric. */ +typedef struct relay_metrics_entry_t { + /* Metric key used as a static array index. */ + relay_metrics_key_t key; + /* Metric type. */ + metrics_type_t type; + /* Metrics output name. */ + const char *name; + /* Metrics output help comment. */ + const char *help; + /* Update value function. */ + void (*fill_fn)(void); +} relay_metrics_entry_t; + +/* Init. */ +void relay_metrics_init(void); +void relay_metrics_free(void); + +/* Accessors. */ +const smartlist_t *relay_metrics_get_stores(void); + +#endif /* !defined(TOR_FEATURE_RELAY_RELAY_METRICS_H) */ diff --git a/src/feature/relay/relay_periodic.c b/src/feature/relay/relay_periodic.c index ee94590e01..dd9be4e36f 100644 --- a/src/feature/relay/relay_periodic.c +++ b/src/feature/relay/relay_periodic.c @@ -219,7 +219,7 @@ reachability_warnings_callback(time_t now, const or_options_t *options) tor_asprintf(&where4, "%s:%d", address4, me->ipv4_orport); if (!v6_ok) tor_asprintf(&where6, "[%s]:%d", address6, me->ipv6_orport); - const char *opt_and = (!v4_ok && !v6_ok) ? "and" : ""; + const char *opt_and = (!v4_ok && !v6_ok) ? " and " : ""; /* IPv4 reachability test worked but not the IPv6. We will _not_ * publish the descriptor if our IPv6 was configured. We will if it diff --git a/src/feature/relay/relay_sys.c b/src/feature/relay/relay_sys.c index 25fc0bbd32..9c43734b84 100644 --- a/src/feature/relay/relay_sys.c +++ b/src/feature/relay/relay_sys.c @@ -14,6 +14,7 @@ #include "feature/relay/dns.h" #include "feature/relay/ext_orport.h" +#include "feature/relay/relay_metrics.h" #include "feature/relay/onion_queue.h" #include "feature/relay/relay_periodic.h" #include "feature/relay/relay_sys.h" @@ -25,6 +26,7 @@ static int subsys_relay_initialize(void) { + relay_metrics_init(); relay_register_periodic_events(); return 0; } @@ -37,6 +39,7 @@ subsys_relay_shutdown(void) clear_pending_onions(); routerkeys_free_all(); router_free_all(); + relay_metrics_free(); } const struct subsys_fns_t sys_relay = { @@ -46,4 +49,6 @@ const struct subsys_fns_t sys_relay = { .level = RELAY_SUBSYS_LEVEL, .initialize = subsys_relay_initialize, .shutdown = subsys_relay_shutdown, + + .get_metrics = relay_metrics_get_stores, }; diff --git a/src/feature/relay/selftest.c b/src/feature/relay/selftest.c index 8922d20a19..399b6bca6e 100644 --- a/src/feature/relay/selftest.c +++ b/src/feature/relay/selftest.c @@ -228,7 +228,10 @@ extend_info_from_router(const routerinfo_t *r, int family) info = extend_info_new(r->nickname, r->cache_info.identity_digest, ed_id_key, rsa_pubkey, r->onion_curve25519_pkey, - &ap.addr, ap.port); + &ap.addr, ap.port, + /* TODO-324: Should self-test circuits use + * congestion control? */ + NULL, false); crypto_pk_free(rsa_pubkey); return info; } @@ -254,6 +257,11 @@ router_do_orport_reachability_checks(const routerinfo_t *me, if (ei) { const char *family_name = fmt_af_family(family); const tor_addr_port_t *ap = extend_info_get_orport(ei, family); + if (BUG(!ap)) { + /* Not much we can do here to recover apart from screaming loudly. */ + extend_info_free(ei); + return; + } log_info(LD_CIRC, "Testing %s of my %s ORPort: %s.", !orport_reachable ? "reachability" : "bandwidth", family_name, fmt_addrport_ap(ap)); diff --git a/src/feature/rend/rendmid.c b/src/feature/rend/rendmid.c index df838aa527..8f6a45dfef 100644 --- a/src/feature/rend/rendmid.c +++ b/src/feature/rend/rendmid.c @@ -131,7 +131,11 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request, rend_circ = hs_circuitmap_get_rend_circ_relay_side(request); if (!rend_circ) { - log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, + /* Once this was a LOG_PROTOCOL_WARN, but it can happen naturally if a + * client gives up on a rendezvous circuit after sending INTRODUCE1, but + * before the onion service sends the RENDEZVOUS1 cell. + */ + log_fn(LOG_DEBUG, LD_PROTOCOL, "Rejecting RENDEZVOUS1 cell with unrecognized rendezvous cookie %s.", hexid); reason = END_CIRC_REASON_TORPROTOCOL; diff --git a/src/feature/stats/geoip_stats.c b/src/feature/stats/geoip_stats.c index b4b107c3f7..a0fe8597c1 100644 --- a/src/feature/stats/geoip_stats.c +++ b/src/feature/stats/geoip_stats.c @@ -1206,11 +1206,11 @@ format_bridge_stats_controller(time_t now) char * format_client_stats_heartbeat(time_t now) { - const int n_hours = 6; + const int n_seconds = get_options()->HeartbeatPeriod; char *out = NULL; int n_clients = 0; clientmap_entry_t **ent; - unsigned cutoff = (unsigned)( (now-n_hours*3600)/60 ); + unsigned cutoff = (unsigned)( (now-n_seconds)/60 ); if (!start_of_bridge_stats_interval) return NULL; /* Not initialized. */ @@ -1226,8 +1226,7 @@ format_client_stats_heartbeat(time_t now) } tor_asprintf(&out, "Heartbeat: " - "In the last %d hours, I have seen %d unique clients.", - n_hours, + "Since last heartbeat message, I have seen %d unique clients.", n_clients); return out; diff --git a/src/feature/stats/rephist.c b/src/feature/stats/rephist.c index 2bfa14d326..52bd94aba9 100644 --- a/src/feature/stats/rephist.c +++ b/src/feature/stats/rephist.c @@ -206,18 +206,33 @@ typedef struct { uint64_t overload_fd_exhausted; } overload_stats_t; +/** Current state of overload stats */ +static overload_stats_t overload_stats; + +/** Counters to count the number of times we've reached an overload for the + * global connection read/write limit. Reported on the MetricsPort. */ +static uint64_t stats_n_read_limit_reached = 0; +static uint64_t stats_n_write_limit_reached = 0; + +/** Total number of times we've reached TCP port exhaustion. */ +static uint64_t stats_n_tcp_exhaustion = 0; + /***** DNS statistics *****/ -/** Represents the statistics of DNS queries seen if it is an Exit. */ +/** Overload DNS statistics. The information in this object is used to assess + * if, due to DNS errors, we should emit a general overload signal or not. + * + * NOTE: This structure is _not_ per DNS query type like the statistics below + * because of a libevent bug + * (https://github.com/libevent/libevent/issues/1219), on error, the type is + * not propagated up back to the user and so we need to keep our own stats for + * the overload signal. */ typedef struct { /** Total number of DNS request seen at an Exit. They might not all end * successfully or might even be lost by tor. This counter is incremented * right before the DNS request is initiated. */ uint64_t stats_n_request; - /** Total number of DNS timeout errors. */ - uint64_t stats_n_error_timeout; - /** When is the next assessment time of the general overload for DNS errors. * Once this time is reached, all stats are reset and this time is set to the * next assessment time. */ @@ -227,121 +242,230 @@ typedef struct { /** Keep track of the DNS requests for the general overload state. */ static overload_dns_stats_t overload_dns_stats; -/* We use a scale here so we can represent percentages with decimal points by - * scaling the value by this factor and so 0.5% becomes a value of 500. - * Default is 1% and thus min and max range is 0 to 100%. */ -#define OVERLOAD_DNS_TIMEOUT_PERCENT_SCALE 1000.0 -#define OVERLOAD_DNS_TIMEOUT_PERCENT_DEFAULT 1000 -#define OVERLOAD_DNS_TIMEOUT_PERCENT_MIN 0 -#define OVERLOAD_DNS_TIMEOUT_PERCENT_MAX 100000 - -/** Consensus parameter: indicate what fraction of DNS timeout errors over the - * total number of DNS requests must be reached before we trigger a general - * overload signal .*/ -static double overload_dns_timeout_fraction = - OVERLOAD_DNS_TIMEOUT_PERCENT_DEFAULT / - OVERLOAD_DNS_TIMEOUT_PERCENT_SCALE / 100.0; - -/* Number of seconds for the assessment period. Default is 10 minutes (600) and - * the min max range is within a 32bit value. */ -#define OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_DEFAULT (10 * 60) -#define OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_MIN 0 -#define OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_MAX INT32_MAX +/** Represents the statistics of DNS queries seen if it is an Exit. */ +typedef struct { + /* Total number of DNS errors found in RFC 1035 (from 0 to 5 code). */ + uint64_t stats_n_error_none; /* 0 */ + uint64_t stats_n_error_format; /* 1 */ + uint64_t stats_n_error_serverfailed; /* 2 */ + uint64_t stats_n_error_notexist; /* 3 */ + uint64_t stats_n_error_notimpl; /* 4 */ + uint64_t stats_n_error_refused; /* 5 */ + + /* Total number of DNS errors specific to libevent. */ + uint64_t stats_n_error_truncated; /* 65 */ + uint64_t stats_n_error_unknown; /* 66 */ + uint64_t stats_n_error_tor_timeout; /* 67 */ + uint64_t stats_n_error_shutdown; /* 68 */ + uint64_t stats_n_error_cancel; /* 69 */ + uint64_t stats_n_error_nodata; /* 70 */ + + /* Total number of DNS request seen at an Exit. They might not all end + * successfully or might even be lost by tor. This counter is incremented + * right before the DNS request is initiated. */ + uint64_t stats_n_request; +} dns_stats_t; + +/* This is disabled because of the libevent bug where on error we don't get the + * DNS query type back. Once it is fixed, we can re-enable this. */ +#if 0 +/** DNS statistics store for each DNS record type for which tor supports only + * three at the moment: A, PTR and AAAA. */ +static dns_stats_t dns_A_stats; +static dns_stats_t dns_PTR_stats; +static dns_stats_t dns_AAAA_stats; +#endif -/** Consensus parameter: Period, in seconds, over which we count the number of - * DNS requests and timeout errors. After that period, we assess if we trigger - * an overload or not. */ -static int32_t overload_dns_timeout_period_secs = - OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_DEFAULT; +/** DNS query statistics store. It covers all type of queries. */ +static dns_stats_t dns_all_stats; -/** Current state of overload stats */ -static overload_stats_t overload_stats; +/** Return the point to the DNS statistics store. Ignore the type for now + * because of a libevent problem. */ +static inline dns_stats_t * +get_dns_stats_by_type(const int type) +{ + (void) type; + return &dns_all_stats; +} -/** Return true if this overload happened within the last `n_hours`. */ -static bool -overload_happened_recently(time_t overload_time, int n_hours) +#if 0 +/** From a libevent record type, return a pointer to the corresponding DNS + * statistics store. NULL is returned if the type is unhandled. */ +static inline dns_stats_t * +get_dns_stats_by_type(const int type) { - /* An overload is relevant if it happened in the last 72 hours */ - if (overload_time > approx_time() - 3600 * n_hours) { - return true; + switch (type) { + case DNS_IPv4_A: + return &dns_A_stats; + case DNS_PTR: + return &dns_PTR_stats; + case DNS_IPv6_AAAA: + return &dns_AAAA_stats; + default: + return NULL; } - return false; } +#endif -/** Assess the DNS timeout errors and if we have enough to trigger a general - * overload. */ -static void -overload_general_dns_assessment(void) +/** Return the DNS error count for the given libevent DNS type and error code. + * The possible types are: DNS_IPv4_A, DNS_PTR, DNS_IPv6_AAAA. */ +uint64_t +rep_hist_get_n_dns_error(int type, uint8_t error) { - /* Initialize the time. Should be done once. */ - if (overload_dns_stats.next_assessment_time == 0) { - goto reset; + dns_stats_t *dns_stats = get_dns_stats_by_type(type); + if (BUG(!dns_stats)) { + return 0; } - /* Not the time yet. */ - if (overload_dns_stats.next_assessment_time > approx_time()) { - return; + switch (error) { + case DNS_ERR_NONE: + return dns_stats->stats_n_error_none; + case DNS_ERR_FORMAT: + return dns_stats->stats_n_error_format; + case DNS_ERR_SERVERFAILED: + return dns_stats->stats_n_error_serverfailed; + case DNS_ERR_NOTEXIST: + return dns_stats->stats_n_error_notexist; + case DNS_ERR_NOTIMPL: + return dns_stats->stats_n_error_notimpl; + case DNS_ERR_REFUSED: + return dns_stats->stats_n_error_refused; + case DNS_ERR_TRUNCATED: + return dns_stats->stats_n_error_truncated; + case DNS_ERR_UNKNOWN: + return dns_stats->stats_n_error_unknown; + case DNS_ERR_TIMEOUT: + return dns_stats->stats_n_error_tor_timeout; + case DNS_ERR_SHUTDOWN: + return dns_stats->stats_n_error_shutdown; + case DNS_ERR_CANCEL: + return dns_stats->stats_n_error_cancel; + case DNS_ERR_NODATA: + return dns_stats->stats_n_error_nodata; + default: + /* Unhandled code sent back by libevent. */ + return 0; } - - reset: - /* Reset counters for the next period. */ - overload_dns_stats.stats_n_error_timeout = 0; - overload_dns_stats.stats_n_request = 0; - overload_dns_stats.next_assessment_time = - approx_time() + overload_dns_timeout_period_secs; } -/** Called just before the consensus will be replaced. Update the consensus - * parameters in case they changed. */ -void -rep_hist_consensus_has_changed(const networkstatus_t *ns) +/** Return the total number of DNS request seen for the given libevent DNS + * record type. Possible types are: DNS_IPv4_A, DNS_PTR, DNS_IPv6_AAAA. */ +uint64_t +rep_hist_get_n_dns_request(int type) { - overload_dns_timeout_fraction = - networkstatus_get_param(ns, "overload_dns_timeout_scale_percent", - OVERLOAD_DNS_TIMEOUT_PERCENT_DEFAULT, - OVERLOAD_DNS_TIMEOUT_PERCENT_MIN, - OVERLOAD_DNS_TIMEOUT_PERCENT_MAX) / - OVERLOAD_DNS_TIMEOUT_PERCENT_SCALE / 100.0; - - overload_dns_timeout_period_secs = - networkstatus_get_param(ns, "overload_dns_timeout_period_secs", - OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_DEFAULT, - OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_MIN, - OVERLOAD_DNS_TIMEOUT_PERIOD_SECS_MAX); + dns_stats_t *dns_stats = get_dns_stats_by_type(type); + if (BUG(!dns_stats)) { + return 0; + } + return dns_stats->stats_n_request; } /** Note a DNS error for the given given libevent DNS record type and error * code. Possible types are: DNS_IPv4_A, DNS_PTR, DNS_IPv6_AAAA. * - * IMPORTANT: Libevent is _not_ returning the type in case of an error and so - * if error is anything but DNS_ERR_NONE, the type is not usable and set to 0. + * NOTE: Libevent is _not_ returning the type in case of an error and so if + * error is anything but DNS_ERR_NONE, the type is not usable and set to 0. * * See: https://gitlab.torproject.org/tpo/core/tor/-/issues/40490 */ void -rep_hist_note_dns_query(int type, uint8_t error) +rep_hist_note_dns_error(int type, uint8_t error) { - (void) type; + overload_dns_stats.stats_n_request++; - /* Assess if we need to trigger a general overload with regards to the DNS - * errors or not. */ - overload_general_dns_assessment(); + /* Again, the libevent bug (see function comment), for an error that is + * anything but DNS_ERR_NONE, the type is always 0 which means that we don't + * have a DNS stat object for it so this code will do nothing until libevent + * is fixed. */ + dns_stats_t *dns_stats = get_dns_stats_by_type(type); + /* Unsupported DNS query type. */ + if (!dns_stats) { + return; + } - /* We only care about timeouts for the moment. */ switch (error) { + case DNS_ERR_NONE: + dns_stats->stats_n_error_none++; + break; + case DNS_ERR_FORMAT: + dns_stats->stats_n_error_format++; + break; + case DNS_ERR_SERVERFAILED: + dns_stats->stats_n_error_serverfailed++; + break; + case DNS_ERR_NOTEXIST: + dns_stats->stats_n_error_notexist++; + break; + case DNS_ERR_NOTIMPL: + dns_stats->stats_n_error_notimpl++; + break; + case DNS_ERR_REFUSED: + dns_stats->stats_n_error_refused++; + break; + case DNS_ERR_TRUNCATED: + dns_stats->stats_n_error_truncated++; + break; + case DNS_ERR_UNKNOWN: + dns_stats->stats_n_error_unknown++; + break; case DNS_ERR_TIMEOUT: - overload_dns_stats.stats_n_error_timeout++; + dns_stats->stats_n_error_tor_timeout++; + break; + case DNS_ERR_SHUTDOWN: + dns_stats->stats_n_error_shutdown++; + break; + case DNS_ERR_CANCEL: + dns_stats->stats_n_error_cancel++; + break; + case DNS_ERR_NODATA: + dns_stats->stats_n_error_nodata++; break; default: + /* Unhandled code sent back by libevent. */ break; } +} - /* Increment total number of requests. */ - overload_dns_stats.stats_n_request++; +/** Note a DNS request for the given given libevent DNS record type. */ +void +rep_hist_note_dns_request(int type) +{ + dns_stats_t *dns_stats = get_dns_stats_by_type(type); + if (BUG(!dns_stats)) { + return; + } + dns_stats->stats_n_request++; +} + +/***** END of DNS statistics *****/ + +/** Return true if this overload happened within the last `n_hours`. */ +static bool +overload_happened_recently(time_t overload_time, int n_hours) +{ + /* An overload is relevant if it happened in the last 72 hours */ + if (overload_time > approx_time() - 3600 * n_hours) { + return true; + } + return false; } /* The current version of the overload stats version */ #define OVERLOAD_STATS_VERSION 1 +/** Return the stats_n_read_limit_reached counter. */ +uint64_t +rep_hist_get_n_read_limit_reached(void) +{ + return stats_n_read_limit_reached; +} + +/** Return the stats_n_write_limit_reached counter. */ +uint64_t +rep_hist_get_n_write_limit_reached(void) +{ + return stats_n_write_limit_reached; +} + /** Returns an allocated string for server descriptor for publising information * on whether we are overloaded or not. */ char * @@ -420,6 +544,7 @@ rep_hist_note_overload(overload_type_t overload) SET_TO_START_OF_HOUR(overload_stats.overload_general_time); break; case OVERLOAD_READ: { + stats_n_read_limit_reached++; SET_TO_START_OF_HOUR(overload_stats.overload_ratelimits_time); if (approx_time() >= last_read_counted + 60) { /* Count once a minute */ overload_stats.overload_read_count++; @@ -428,6 +553,7 @@ rep_hist_note_overload(overload_type_t overload) break; } case OVERLOAD_WRITE: { + stats_n_write_limit_reached++; SET_TO_START_OF_HOUR(overload_stats.overload_ratelimits_time); if (approx_time() >= last_write_counted + 60) { /* Count once a minute */ overload_stats.overload_write_count++; @@ -442,6 +568,22 @@ rep_hist_note_overload(overload_type_t overload) } } +/** Note down that we've reached a TCP port exhaustion. This triggers an + * overload general event. */ +void +rep_hist_note_tcp_exhaustion(void) +{ + stats_n_tcp_exhaustion++; + rep_hist_note_overload(OVERLOAD_GENERAL); +} + +/** Return the total number of TCP exhaustion times we've reached. */ +uint64_t +rep_hist_get_n_tcp_exhaustion(void) +{ + return stats_n_tcp_exhaustion; +} + /** Return the or_history_t for the OR with identity digest <b>id</b>, * creating it if necessary. */ static or_history_t * @@ -641,7 +783,7 @@ rep_hist_downrate_old_runs(time_t now) return stability_last_downrated + STABILITY_INTERVAL; /* Okay, we should downrate the data. By how much? */ - while (stability_last_downrated + STABILITY_INTERVAL < now) { + while (stability_last_downrated + STABILITY_INTERVAL <= now) { stability_last_downrated += STABILITY_INTERVAL; alpha *= STABILITY_ALPHA; } @@ -1908,17 +2050,155 @@ rep_hist_note_desc_served(const char * desc) /** Internal statistics to track how many requests of each type of * handshake we've received, and how many we've assigned to cpuworkers. * Useful for seeing trends in cpu load. + * + * They are reset at every heartbeat. * @{ */ -STATIC int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0}; -STATIC int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1] = {0}; +STATIC int onion_handshakes_requested[MAX_ONION_STAT_TYPE+1] = {0}; +STATIC int onion_handshakes_assigned[MAX_ONION_STAT_TYPE+1] = {0}; /**@}*/ +/** Counters keeping the same stats as above but for the entire duration of the + * process (not reset). */ +static uint64_t stats_n_onionskin_assigned[MAX_ONION_STAT_TYPE+1] = {0}; +static uint64_t stats_n_onionskin_dropped[MAX_ONION_STAT_TYPE+1] = {0}; + +/* We use a scale here so we can represent percentages with decimal points by + * scaling the value by this factor and so 0.5% becomes a value of 500. + * Default is 1% and thus min and max range is 0 to 100%. */ +#define OVERLOAD_ONIONSKIN_NTOR_PERCENT_SCALE 1000.0 +#define OVERLOAD_ONIONSKIN_NTOR_PERCENT_DEFAULT 1000 +#define OVERLOAD_ONIONSKIN_NTOR_PERCENT_MIN 0 +#define OVERLOAD_ONIONSKIN_NTOR_PERCENT_MAX 100000 + +/** Consensus parameter: indicate what fraction of ntor onionskin drop over the + * total number of requests must be reached before we trigger a general + * overload signal.*/ +static double overload_onionskin_ntor_fraction = + OVERLOAD_ONIONSKIN_NTOR_PERCENT_DEFAULT / + OVERLOAD_ONIONSKIN_NTOR_PERCENT_SCALE / 100.0; + +/* Number of seconds for the assessment period. Default is 6 hours (21600) and + * the min max range is within a 32bit value. We align this period to the + * Heartbeat so the logs would match this period more or less. */ +#define OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_DEFAULT (60 * 60 * 6) +#define OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_MIN 0 +#define OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_MAX INT32_MAX + +/** Consensus parameter: Period, in seconds, over which we count the number of + * ntor onionskins requests and how many were dropped. After that period, we + * assess if we trigger an overload or not. */ +static int32_t overload_onionskin_ntor_period_secs = + OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_DEFAULT; + +/** Structure containing information for an assessment period of the onionskin + * drop overload general signal. + * + * It is used to track, within a time period, how many requests we've gotten + * and how many were dropped. The overload general signal is decided from these + * depending on some consensus parameters. */ +typedef struct { + /** Total number of ntor onionskin requested for an assessment period. */ + uint64_t n_ntor_requested; + + /** Total number of dropped ntor onionskins for an assessment period. */ + uint64_t n_ntor_dropped; + + /** When is the next assessment time of the general overload for ntor + * onionskin drop. Once this time is reached, all stats are reset and this + * time is set to the next assessment time. */ + time_t next_assessment_time; +} overload_onionskin_assessment_t; + +/** Keep track of the onionskin requests for an assessment period. */ +static overload_onionskin_assessment_t overload_onionskin_assessment; + +/** + * We combine ntorv3 and ntor into the same stat, so we must + * use this function to covert the cell type to a stat index. + */ +static inline uint16_t +onionskin_type_to_stat(uint16_t type) +{ + if (type == ONION_HANDSHAKE_TYPE_NTOR_V3) { + return ONION_HANDSHAKE_TYPE_NTOR; + } + + if (BUG(type > MAX_ONION_STAT_TYPE)) { + return MAX_ONION_STAT_TYPE; // use ntor if out of range + } + + return type; +} + +/** Assess our ntor handshake statistics and decide if we need to emit a + * general overload signal. + * + * Regardless of overloaded or not, if the assessment time period has passed, + * the stats are reset back to 0 and the assessment time period updated. + * + * This is called when a ntor handshake is _requested_ because we want to avoid + * to have an assymetric situation where requested counter is reset to 0 but + * then a drop happens leading to the drop counter being incremented while the + * requested counter is 0. */ +static void +overload_general_onionskin_assessment(void) +{ + /* Initialize the time. Should be done once. */ + if (overload_onionskin_assessment.next_assessment_time == 0) { + goto reset; + } + + /* Not the time yet. */ + if (overload_onionskin_assessment.next_assessment_time > approx_time()) { + goto done; + } + + /* Make sure we have enough requests to be able to make a proper assessment. + * We want to avoid 1 single request/drop to trigger an overload as we want + * at least the number of requests to be above the scale of our fraction. */ + if (overload_onionskin_assessment.n_ntor_requested < + OVERLOAD_ONIONSKIN_NTOR_PERCENT_SCALE) { + goto done; + } + + /* Lets see if we can signal a general overload. */ + double fraction = (double) overload_onionskin_assessment.n_ntor_dropped / + (double) overload_onionskin_assessment.n_ntor_requested; + if (fraction >= overload_onionskin_ntor_fraction) { + log_notice(LD_HIST, "General overload -> Ntor dropped (%" PRIu64 ") " + "fraction %.4f%% is above threshold of %.4f%%", + overload_onionskin_assessment.n_ntor_dropped, + fraction * 100.0, + overload_onionskin_ntor_fraction * 100.0); + rep_hist_note_overload(OVERLOAD_GENERAL); + } + + reset: + /* Reset counters for the next period. */ + overload_onionskin_assessment.n_ntor_dropped = 0; + overload_onionskin_assessment.n_ntor_requested = 0; + overload_onionskin_assessment.next_assessment_time = + approx_time() + overload_onionskin_ntor_period_secs; + + done: + return; +} + /** A new onionskin (using the <b>type</b> handshake) has arrived. */ void rep_hist_note_circuit_handshake_requested(uint16_t type) { - if (type <= MAX_ONION_HANDSHAKE_TYPE) - onion_handshakes_requested[type]++; + uint16_t stat = onionskin_type_to_stat(type); + + onion_handshakes_requested[stat]++; + + /* Only relays get to record requested onionskins. */ + if (stat == ONION_HANDSHAKE_TYPE_NTOR) { + /* Assess if we've reached the overload general signal. */ + overload_general_onionskin_assessment(); + + overload_onionskin_assessment.n_ntor_requested++; + } } /** We've sent an onionskin (using the <b>type</b> handshake) to a @@ -1926,28 +2206,52 @@ rep_hist_note_circuit_handshake_requested(uint16_t type) void rep_hist_note_circuit_handshake_assigned(uint16_t type) { - if (type <= MAX_ONION_HANDSHAKE_TYPE) - onion_handshakes_assigned[type]++; + onion_handshakes_assigned[onionskin_type_to_stat(type)]++; + stats_n_onionskin_assigned[onionskin_type_to_stat(type)]++; +} + +/** We've just drop an onionskin (using the <b>type</b> handshake) due to being + * overloaded. */ +void +rep_hist_note_circuit_handshake_dropped(uint16_t type) +{ + uint16_t stat = onionskin_type_to_stat(type); + + stats_n_onionskin_dropped[stat]++; + + /* Only relays get to record requested onionskins. */ + if (stat == ONION_HANDSHAKE_TYPE_NTOR) { + /* Note the dropped ntor in the overload assessment object. */ + overload_onionskin_assessment.n_ntor_dropped++; + } } /** Get the circuit handshake value that is requested. */ MOCK_IMPL(int, rep_hist_get_circuit_handshake_requested, (uint16_t type)) { - if (BUG(type > MAX_ONION_HANDSHAKE_TYPE)) { - return 0; - } - return onion_handshakes_requested[type]; + return onion_handshakes_requested[onionskin_type_to_stat(type)]; } /** Get the circuit handshake value that is assigned. */ MOCK_IMPL(int, rep_hist_get_circuit_handshake_assigned, (uint16_t type)) { - if (BUG(type > MAX_ONION_HANDSHAKE_TYPE)) { - return 0; - } - return onion_handshakes_assigned[type]; + return onion_handshakes_assigned[onionskin_type_to_stat(type)]; +} + +/** Get the total number of circuit handshake value that is assigned. */ +MOCK_IMPL(uint64_t, +rep_hist_get_circuit_n_handshake_assigned, (uint16_t type)) +{ + return stats_n_onionskin_assigned[onionskin_type_to_stat(type)]; +} + +/** Get the total number of circuit handshake value that is dropped. */ +MOCK_IMPL(uint64_t, +rep_hist_get_circuit_n_handshake_dropped, (uint16_t type)) +{ + return stats_n_onionskin_dropped[onionskin_type_to_stat(type)]; } /** Log our onionskin statistics since the last time we were called. */ @@ -2522,6 +2826,25 @@ rep_hist_free_all(void) tor_assert_nonfatal_once(rephist_total_num == 0); } +/** Called just before the consensus will be replaced. Update the consensus + * parameters in case they changed. */ +void +rep_hist_consensus_has_changed(const networkstatus_t *ns) +{ + overload_onionskin_ntor_fraction = + networkstatus_get_param(ns, "overload_onionskin_ntor_scale_percent", + OVERLOAD_ONIONSKIN_NTOR_PERCENT_DEFAULT, + OVERLOAD_ONIONSKIN_NTOR_PERCENT_MIN, + OVERLOAD_ONIONSKIN_NTOR_PERCENT_MAX) / + OVERLOAD_ONIONSKIN_NTOR_PERCENT_SCALE / 100.0; + + overload_onionskin_ntor_period_secs = + networkstatus_get_param(ns, "overload_onionskin_ntor_period_secs", + OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_DEFAULT, + OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_MIN, + OVERLOAD_ONIONSKIN_NTOR_PERIOD_SECS_MAX); +} + #ifdef TOR_UNIT_TESTS /* only exists for unit tests: get HSv2 stats object */ const hs_v2_stats_t * diff --git a/src/feature/stats/rephist.h b/src/feature/stats/rephist.h index 749b4996a8..e8f43fbb1d 100644 --- a/src/feature/stats/rephist.h +++ b/src/feature/stats/rephist.h @@ -58,11 +58,17 @@ time_t rep_hist_desc_stats_write(time_t now); void rep_hist_note_circuit_handshake_requested(uint16_t type); void rep_hist_note_circuit_handshake_assigned(uint16_t type); +void rep_hist_note_circuit_handshake_dropped(uint16_t type); void rep_hist_log_circuit_handshake_stats(time_t now); MOCK_DECL(int, rep_hist_get_circuit_handshake_requested, (uint16_t type)); MOCK_DECL(int, rep_hist_get_circuit_handshake_assigned, (uint16_t type)); +MOCK_DECL(uint64_t, rep_hist_get_circuit_n_handshake_assigned, + (uint16_t type)); +MOCK_DECL(uint64_t, rep_hist_get_circuit_n_handshake_dropped, + (uint16_t type)); + void rep_hist_hs_stats_init(time_t now); void rep_hist_hs_stats_term(void); time_t rep_hist_hs_stats_write(time_t now, bool is_v3); @@ -72,20 +78,28 @@ void rep_hist_seen_new_rp_cell(bool is_v2); char *rep_hist_get_hs_v3_stats_string(void); void rep_hist_hsdir_stored_maybe_new_v3_onion(const uint8_t *blinded_key); -void rep_hist_note_dns_query(int type, uint8_t error); - void rep_hist_free_all(void); void rep_hist_note_negotiated_link_proto(unsigned link_proto, int started_here); void rep_hist_log_link_protocol_counts(void); + +uint64_t rep_hist_get_n_dns_error(int type, uint8_t error); +uint64_t rep_hist_get_n_dns_request(int type); +void rep_hist_note_dns_request(int type); +void rep_hist_note_dns_error(int type, uint8_t error); + void rep_hist_consensus_has_changed(const networkstatus_t *ns); +/** We combine ntor and ntorv3 stats, so we have 3 stat types: + * tap, fast, and ntor. The max type is ntor (2) */ +#define MAX_ONION_STAT_TYPE ONION_HANDSHAKE_TYPE_NTOR + extern uint64_t rephist_total_alloc; extern uint32_t rephist_total_num; #ifdef TOR_UNIT_TESTS -extern int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1]; -extern int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1]; +extern int onion_handshakes_requested[MAX_ONION_STAT_TYPE+1]; +extern int onion_handshakes_assigned[MAX_ONION_STAT_TYPE+1]; #endif #ifdef REPHIST_PRIVATE @@ -162,6 +176,12 @@ void rep_hist_note_overload(overload_type_t overload); char *rep_hist_get_overload_general_line(void); char *rep_hist_get_overload_stats_lines(void); +void rep_hist_note_tcp_exhaustion(void); +uint64_t rep_hist_get_n_tcp_exhaustion(void); + +uint64_t rep_hist_get_n_read_limit_reached(void); +uint64_t rep_hist_get_n_write_limit_reached(void); + #ifdef TOR_UNIT_TESTS struct hs_v2_stats_t; const struct hs_v2_stats_t *rep_hist_get_hs_v2_stats(void); diff --git a/src/include.am b/src/include.am index 0826da7548..36d323e6eb 100644 --- a/src/include.am +++ b/src/include.am @@ -85,7 +85,6 @@ include src/app/main/include.am include src/core/include.am include src/app/include.am -include src/rust/include.am include src/test/include.am include src/tools/include.am include src/win32/include.am diff --git a/src/lib/cc/compat_compiler.h b/src/lib/cc/compat_compiler.h index 50bfedffba..991b33d9e7 100644 --- a/src/lib/cc/compat_compiler.h +++ b/src/lib/cc/compat_compiler.h @@ -15,6 +15,15 @@ #include "orconfig.h" #include <inttypes.h> +#if defined(__MINGW32__) || defined(__MINGW64__) +#define MINGW_ANY +#endif + +#ifdef MINGW_ANY +/* We need this for __MINGW_PRINTF_FORMAT, alas. */ +#include <stdio.h> +#endif + #if defined(__has_feature) # if __has_feature(address_sanitizer) /* Some of the fancy glibc strcmp() macros include references to memory that @@ -36,16 +45,30 @@ #error "It seems that you encode characters in something other than ASCII." #endif +/* Use the right magic attribute on mingw, which might be printf, gnu_printf, + * or ms_printf, depending on how we're set up to build. + */ +#ifdef __MINGW_PRINTF_FORMAT +#define PRINTF_FORMAT_ATTR __MINGW_PRINTF_FORMAT +#else +#define PRINTF_FORMAT_ATTR printf +#endif +#ifdef __MINGW_SCANF_FORMAT +#define SCANF_FORMAT_ATTR __MINGW_SCANF_FORMAT +#else +#define SCANF_FORMAT_ATTR scanf +#endif + /* GCC can check printf and scanf types on arbitrary functions. */ #ifdef __GNUC__ #define CHECK_PRINTF(formatIdx, firstArg) \ - __attribute__ ((format(printf, formatIdx, firstArg))) + __attribute__ ((format(PRINTF_FORMAT_ATTR, formatIdx, firstArg))) #else #define CHECK_PRINTF(formatIdx, firstArg) #endif /* defined(__GNUC__) */ #ifdef __GNUC__ #define CHECK_SCANF(formatIdx, firstArg) \ - __attribute__ ((format(scanf, formatIdx, firstArg))) + __attribute__ ((format(SCANF_FORMAT_ATTR, formatIdx, firstArg))) #else #define CHECK_SCANF(formatIdx, firstArg) #endif /* defined(__GNUC__) */ @@ -191,10 +214,6 @@ #define OP_EQ == #define OP_NE != -#if defined(__MINGW32__) || defined(__MINGW64__) -#define MINGW_ANY -#endif - /** Macro: yield a pointer to the field at position <b>off</b> within the * structure <b>st</b>. Example: * <pre> diff --git a/src/lib/crypt_ops/crypto_rand.c b/src/lib/crypt_ops/crypto_rand.c index 5bf3a65b3b..f39ee6c24f 100644 --- a/src/lib/crypt_ops/crypto_rand.c +++ b/src/lib/crypt_ops/crypto_rand.c @@ -568,6 +568,8 @@ crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix, prefixlen = strlen(prefix); resultlen = prefixlen + strlen(suffix) + randlen + 16; + /* (x+(n-1))/n is an idiom for dividing x by n, rounding up to the nearest + * integer and thus why this construction. */ rand_bytes_len = ((randlen*5)+7)/8; if (rand_bytes_len % 5) rand_bytes_len += 5 - (rand_bytes_len%5); diff --git a/src/lib/metrics/metrics_common.c b/src/lib/metrics/metrics_common.c index 5941a4d892..f3f7e22d88 100644 --- a/src/lib/metrics/metrics_common.c +++ b/src/lib/metrics/metrics_common.c @@ -11,6 +11,7 @@ #include "orconfig.h" #include "lib/log/util_bug.h" +#include "lib/string/printf.h" #include "lib/metrics/metrics_common.h" @@ -27,3 +28,15 @@ metrics_type_to_str(const metrics_type_t type) tor_assert_unreached(); } } + +/** Return a static buffer pointer that contains a formatted label on the form + * of key=value. + * + * Subsequent call to this function invalidates the previous buffer. */ +const char * +metrics_format_label(const char *key, const char *value) +{ + static char buf[128]; + tor_snprintf(buf, sizeof(buf), "%s=\"%s\"", key, value); + return buf; +} diff --git a/src/lib/metrics/metrics_common.h b/src/lib/metrics/metrics_common.h index 59aa9c0e90..3644ad3d50 100644 --- a/src/lib/metrics/metrics_common.h +++ b/src/lib/metrics/metrics_common.h @@ -42,4 +42,7 @@ typedef struct metrics_gauge_t { const char *metrics_type_to_str(const metrics_type_t type); +/* Helpers. */ +const char *metrics_format_label(const char *key, const char *value); + #endif /* !defined(TOR_LIB_METRICS_METRICS_COMMON_H) */ diff --git a/src/lib/metrics/metrics_store.c b/src/lib/metrics/metrics_store.c index 4cab5245f3..b017e97688 100644 --- a/src/lib/metrics/metrics_store.c +++ b/src/lib/metrics/metrics_store.c @@ -34,7 +34,8 @@ struct metrics_store_t { }; /** Function pointer to the format function of a specific driver. */ -typedef void (fmt_driver_fn_t)(const metrics_store_entry_t *, buf_t *); +typedef void (fmt_driver_fn_t)(const metrics_store_entry_t *, buf_t *, + bool no_comment); /** Helper: Free a single entry in a metrics_store_t taking a void pointer * parameter. */ @@ -47,6 +48,8 @@ metrics_store_free_void(void *p) smartlist_free(list); } +#include <stdio.h> + /** Put the given store output in the buffer data and use the format function * given in fmt to get it for each entry. */ static void @@ -57,8 +60,11 @@ get_output(const metrics_store_t *store, buf_t *data, fmt_driver_fn_t fmt) tor_assert(fmt); STRMAP_FOREACH(store->entries, key, const smartlist_t *, entries) { + /* Indicate that we've formatted the comment already for the entries. */ + bool comment_formatted = false; SMARTLIST_FOREACH_BEGIN(entries, const metrics_store_entry_t *, entry) { - fmt(entry, data); + fmt(entry, data, comment_formatted); + comment_formatted = true; } SMARTLIST_FOREACH_END(entry); } STRMAP_FOREACH_END; } @@ -138,3 +144,14 @@ metrics_store_get_output(const metrics_format_t fmt, // LCOV_EXCL_STOP } } + +/** Reset a store as in free its content. */ +void +metrics_store_reset(metrics_store_t *store) +{ + if (store == NULL) { + return; + } + strmap_free(store->entries, metrics_store_free_void); + store->entries = strmap_new(); +} diff --git a/src/lib/metrics/metrics_store.h b/src/lib/metrics/metrics_store.h index 42bc56e8fd..d85f484bd6 100644 --- a/src/lib/metrics/metrics_store.h +++ b/src/lib/metrics/metrics_store.h @@ -28,6 +28,7 @@ metrics_store_t *metrics_store_new(void); metrics_store_entry_t *metrics_store_add(metrics_store_t *store, metrics_type_t type, const char *name, const char *help); +void metrics_store_reset(metrics_store_t *store); /* Accessors. */ smartlist_t *metrics_store_get_all(const metrics_store_t *store, diff --git a/src/lib/metrics/prometheus.c b/src/lib/metrics/prometheus.c index 65241ed6c1..aac23ac92e 100644 --- a/src/lib/metrics/prometheus.c +++ b/src/lib/metrics/prometheus.c @@ -42,14 +42,17 @@ format_labels(smartlist_t *labels) /** Format the given entry in to the buffer data. */ void -prometheus_format_store_entry(const metrics_store_entry_t *entry, buf_t *data) +prometheus_format_store_entry(const metrics_store_entry_t *entry, buf_t *data, + bool no_comment) { tor_assert(entry); tor_assert(data); - buf_add_printf(data, "# HELP %s %s\n", entry->name, entry->help); - buf_add_printf(data, "# TYPE %s %s\n", entry->name, - metrics_type_to_str(entry->type)); + if (!no_comment) { + buf_add_printf(data, "# HELP %s %s\n", entry->name, entry->help); + buf_add_printf(data, "# TYPE %s %s\n", entry->name, + metrics_type_to_str(entry->type)); + } buf_add_printf(data, "%s%s %" PRIi64 "\n", entry->name, format_labels(entry->labels), metrics_store_entry_get_value(entry)); diff --git a/src/lib/metrics/prometheus.h b/src/lib/metrics/prometheus.h index 19770e7911..faa7681daa 100644 --- a/src/lib/metrics/prometheus.h +++ b/src/lib/metrics/prometheus.h @@ -13,6 +13,6 @@ #include "lib/metrics/metrics_store_entry.h" void prometheus_format_store_entry(const metrics_store_entry_t *entry, - buf_t *data); + buf_t *data, bool no_comment); #endif /* !defined(TOR_LIB_METRICS_PROMETHEUS_H) */ diff --git a/src/lib/net/address.c b/src/lib/net/address.c index 26b155bc4c..085eb8c458 100644 --- a/src/lib/net/address.c +++ b/src/lib/net/address.c @@ -2005,20 +2005,15 @@ parse_port_range(const char *port, uint16_t *port_min_out, char *endptr = NULL; port_min = (int)tor_parse_long(port, 10, 0, 65535, &ok, &endptr); if (!ok) { - log_warn(LD_GENERAL, - "Malformed port %s on address range; rejecting.", - escaped(port)); - return -1; - } else if (endptr && *endptr == '-') { + goto malformed_port; + } else if (endptr && *endptr != '\0') { + if (*endptr != '-') + goto malformed_port; port = endptr+1; endptr = NULL; port_max = (int)tor_parse_long(port, 10, 1, 65535, &ok, &endptr); - if (!ok) { - log_warn(LD_GENERAL, - "Malformed port %s on address range; rejecting.", - escaped(port)); - return -1; - } + if (!ok) + goto malformed_port; } else { port_max = port_min; } @@ -2037,6 +2032,11 @@ parse_port_range(const char *port, uint16_t *port_min_out, *port_max_out = (uint16_t) port_max; return 0; + malformed_port: + log_warn(LD_GENERAL, + "Malformed port %s on address range; rejecting.", + escaped(port)); + return -1; } /** Given a host-order <b>addr</b>, call tor_inet_ntop() on it diff --git a/src/lib/sandbox/sandbox.c b/src/lib/sandbox/sandbox.c index 5f73fd2b46..e87edd8e21 100644 --- a/src/lib/sandbox/sandbox.c +++ b/src/lib/sandbox/sandbox.c @@ -58,6 +58,10 @@ #include <linux/futex.h> #include <sys/file.h> +#ifdef ENABLE_FRAGILE_HARDENING +#include <sys/ptrace.h> +#endif + #include <stdarg.h> #include <seccomp.h> #include <signal.h> @@ -148,7 +152,11 @@ static sandbox_cfg_t *filter_dynamic = NULL; static int filter_nopar_gen[] = { SCMP_SYS(access), SCMP_SYS(brk), +#ifdef __NR_clock_gettime64 + SCMP_SYS(clock_gettime64), +#else SCMP_SYS(clock_gettime), +#endif SCMP_SYS(close), SCMP_SYS(clone), SCMP_SYS(dup), @@ -194,6 +202,9 @@ static int filter_nopar_gen[] = { SCMP_SYS(getgid32), #endif SCMP_SYS(getpid), +#ifdef ENABLE_FRAGILE_HARDENING + SCMP_SYS(getppid), +#endif #ifdef __NR_getrlimit SCMP_SYS(getrlimit), #endif @@ -244,6 +255,9 @@ static int filter_nopar_gen[] = { SCMP_SYS(sigreturn), #endif SCMP_SYS(stat), +#if defined(__i386__) && defined(__NR_statx) + SCMP_SYS(statx), +#endif SCMP_SYS(uname), SCMP_SYS(wait4), SCMP_SYS(write), @@ -342,6 +356,7 @@ sb_rt_sigaction(scmp_filter_ctx ctx, sandbox_cfg_t *filter) return rc; } +#ifdef __NR_time /** * Function responsible for setting up the time syscall for * the seccomp filter sandbox. @@ -350,13 +365,11 @@ static int sb_time(scmp_filter_ctx ctx, sandbox_cfg_t *filter) { (void) filter; -#ifdef __NR_time + return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(time), SCMP_CMP(0, SCMP_CMP_EQ, 0)); -#else - return 0; -#endif /* defined(__NR_time) */ } +#endif /* defined(__NR_time) */ /** * Function responsible for setting up the accept4 syscall for @@ -535,6 +548,24 @@ sb_open(scmp_filter_ctx ctx, sandbox_cfg_t *filter) int use_openat = libc_uses_openat_for_open(); +#ifdef ENABLE_FRAGILE_HARDENING + /* AddressSanitizer uses the "open" syscall to access information about the + * running process via the filesystem, so that call must be allowed without + * restriction or the sanitizer will be unable to execute normally when the + * process terminates. */ + rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open)); + if (rc != 0) { + log_err(LD_BUG,"(Sandbox) failed to add open syscall, received " + "libseccomp error %d", rc); + return rc; + } + + /* If glibc also uses only the "open" syscall to open files on this system + * there is no need to consider any additional rules. */ + if (!use_openat) + return 0; +#endif + // for each dynamic parameter filters for (elem = filter; elem != NULL; elem = elem->next) { smp_param_t *param = elem->param; @@ -578,6 +609,32 @@ sb_chmod(scmp_filter_ctx ctx, sandbox_cfg_t *filter) return 0; } +#ifdef __i386__ +static int +sb_chown32(scmp_filter_ctx ctx, sandbox_cfg_t *filter) +{ + int rc; + sandbox_cfg_t *elem = NULL; + + // for each dynamic parameter filters + for (elem = filter; elem != NULL; elem = elem->next) { + smp_param_t *param = elem->param; + + if (param != NULL && param->prot == 1 && param->syscall + == SCMP_SYS(chown32)) { + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(chown32), + SCMP_CMP_STR(0, SCMP_CMP_EQ, param->value)); + if (rc != 0) { + log_err(LD_BUG,"(Sandbox) failed to add chown32 syscall, received " + "libseccomp error %d", rc); + return rc; + } + } + } + + return 0; +} +#else static int sb_chown(scmp_filter_ctx ctx, sandbox_cfg_t *filter) { @@ -602,6 +659,7 @@ sb_chown(scmp_filter_ctx ctx, sandbox_cfg_t *filter) return 0; } +#endif /* defined(__i386__) */ /** * Function responsible for setting up the rename syscall for @@ -690,6 +748,34 @@ sb_opendir(scmp_filter_ctx ctx, sandbox_cfg_t *filter) return 0; } +#ifdef ENABLE_FRAGILE_HARDENING +/** + * Function responsible for setting up the ptrace syscall for + * the seccomp filter sandbox. + */ +static int +sb_ptrace(scmp_filter_ctx ctx, sandbox_cfg_t *filter) +{ + int rc; + pid_t pid = getpid(); + (void) filter; + + rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(ptrace), + SCMP_CMP(0, SCMP_CMP_EQ, PTRACE_ATTACH), + SCMP_CMP(1, SCMP_CMP_EQ, pid)); + if (rc) + return rc; + + rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(ptrace), + SCMP_CMP(0, SCMP_CMP_EQ, PTRACE_GETREGS), + SCMP_CMP(1, SCMP_CMP_EQ, pid)); + if (rc) + return rc; + + return 0; +} +#endif + /** * Function responsible for setting up the socket syscall for * the seccomp filter sandbox. @@ -1012,6 +1098,18 @@ sb_prctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter) int rc = 0; (void) filter; +#ifdef ENABLE_FRAGILE_HARDENING + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), + SCMP_CMP(0, SCMP_CMP_EQ, PR_GET_DUMPABLE)); + if (rc) + return rc; + + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), + SCMP_CMP(0, SCMP_CMP_EQ, PR_SET_PTRACER)); + if (rc) + return rc; +#endif + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), SCMP_CMP(0, SCMP_CMP_EQ, PR_SET_DUMPABLE)); if (rc) @@ -1056,6 +1154,13 @@ sb_rt_sigprocmask(scmp_filter_ctx ctx, sandbox_cfg_t *filter) int rc = 0; (void) filter; +#ifdef ENABLE_FRAGILE_HARDENING + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask), + SCMP_CMP(0, SCMP_CMP_EQ, SIG_BLOCK)); + if (rc) + return rc; +#endif + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask), SCMP_CMP(0, SCMP_CMP_EQ, SIG_UNBLOCK)); if (rc) @@ -1195,16 +1300,25 @@ sb_kill(scmp_filter_ctx ctx, sandbox_cfg_t *filter) static sandbox_filter_func_t filter_func[] = { sb_rt_sigaction, sb_rt_sigprocmask, +#ifdef __NR_time sb_time, +#endif sb_accept4, #ifdef __NR_mmap2 sb_mmap2, #endif +#ifdef __i386__ + sb_chown32, +#else sb_chown, +#endif sb_chmod, sb_open, sb_openat, sb_opendir, +#ifdef ENABLE_FRAGILE_HARDENING + sb_ptrace, +#endif sb_rename, #ifdef __NR_fcntl64 sb_fcntl64, @@ -1471,6 +1585,12 @@ new_element(int syscall, char *value) return new_element2(syscall, value, NULL); } +#ifdef __i386__ +#define SCMP_chown SCMP_SYS(chown32) +#else +#define SCMP_chown SCMP_SYS(chown) +#endif + #ifdef __NR_stat64 #define SCMP_stat SCMP_SYS(stat64) #else @@ -1521,7 +1641,7 @@ sandbox_cfg_allow_chown_filename(sandbox_cfg_t **cfg, char *file) { sandbox_cfg_t *elem = NULL; - elem = new_element(SCMP_SYS(chown), file); + elem = new_element(SCMP_chown, file); elem->next = *cfg; *cfg = elem; diff --git a/src/lib/string/printf.c b/src/lib/string/printf.c index 62758093a7..bd35b76d1b 100644 --- a/src/lib/string/printf.c +++ b/src/lib/string/printf.c @@ -8,9 +8,9 @@ * \brief Compatibility wrappers around snprintf and its friends **/ +#include "lib/cc/torint.h" #include "lib/string/printf.h" #include "lib/err/torerr.h" -#include "lib/cc/torint.h" #include "lib/malloc/malloc.h" #include <stdlib.h> @@ -45,7 +45,7 @@ tor_vsnprintf(char *str, size_t size, const char *format, va_list args) return -1; /* no place for the NUL */ if (size > SIZE_T_CEILING) return -1; -#ifdef _WIN32 +#if defined(_WIN32) && !defined(HAVE_VSNPRINTF) r = _vsnprintf(str, size, format, args); #else r = vsnprintf(str, size, format, args); diff --git a/src/lib/thread/compat_winthreads.c b/src/lib/thread/compat_winthreads.c index e25fb52e39..f28cdcca00 100644 --- a/src/lib/thread/compat_winthreads.c +++ b/src/lib/thread/compat_winthreads.c @@ -146,7 +146,7 @@ tor_cond_wait(tor_cond_t *cond, tor_mutex_t *lock_, const struct timeval *tv) { // recursive SRW locks are not supported because they need extra logic for // acquiring and releasing but SleepConditionVariableSRW will use the OS - // lock relase function which lacks our extra logic + // lock release function which lacks our extra logic tor_assert(lock_->type == NON_RECURSIVE); SRWLOCK *lock = &lock_->mutex; DWORD ms = INFINITE; diff --git a/src/lib/tls/tortls_nss.c b/src/lib/tls/tortls_nss.c index b1007c6218..392747e930 100644 --- a/src/lib/tls/tortls_nss.c +++ b/src/lib/tls/tortls_nss.c @@ -588,6 +588,10 @@ tor_tls_write(tor_tls_t *tls, const char *cp, size_t n) tor_assert(cp || n == 0); tor_assert(n < INT_MAX); + if (n == 0) { + return 0; + } + PRInt32 rv = PR_Write(tls->ssl, cp, (int)n); // log_debug(LD_NET, "PR_Write(%zu) returned %d", n, (int)rv); if (rv > 0) { diff --git a/src/lib/tls/tortls_openssl.c b/src/lib/tls/tortls_openssl.c index d59d65d995..77de2d6a11 100644 --- a/src/lib/tls/tortls_openssl.c +++ b/src/lib/tls/tortls_openssl.c @@ -701,6 +701,12 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime, /* let us realloc bufs that we're writing from */ SSL_CTX_set_mode(result->ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); +#ifdef SSL_OP_TLSEXT_PADDING + /* Adds a padding extension to ensure the ClientHello size is never between + * 256 and 511 bytes in length. */ + SSL_CTX_set_options(result->ctx, SSL_OP_TLSEXT_PADDING); +#endif + return result; error: diff --git a/src/rust/.cargo/config.in b/src/rust/.cargo/config.in deleted file mode 100644 index 6eddc75459..0000000000 --- a/src/rust/.cargo/config.in +++ /dev/null @@ -1,12 +0,0 @@ -[source] - -@RUST_DL@ [source.crates-io] -@RUST_DL@ registry = 'https://github.com/rust-lang/crates.io-index' -@RUST_DL@ replace-with = 'vendored-sources' - -@RUST_DL@ [source.vendored-sources] -@RUST_DL@ directory = '@TOR_RUST_DEPENDENCIES@' - -[build] -@RUST_WARN@ rustflags = [ "-D", "warnings" ] -@RUST_TARGET_PROP@ diff --git a/src/rust/.rustfmt.toml b/src/rust/.rustfmt.toml deleted file mode 100644 index 4ff839dcf3..0000000000 --- a/src/rust/.rustfmt.toml +++ /dev/null @@ -1,12 +0,0 @@ -max_width = 100 -hard_tabs = false -tab_spaces = 4 -newline_style = "Unix" -#use_small_heuristics = "Default" -reorder_imports = true -reorder_modules = true -remove_nested_parens = true -merge_derives = true -use_try_shorthand = false -use_field_init_shorthand = false -force_explicit_abi = true diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock deleted file mode 100644 index e2f24b0af7..0000000000 --- a/src/rust/Cargo.lock +++ /dev/null @@ -1,122 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "crypto" -version = "0.0.1" -dependencies = [ - "digest 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "external 0.0.1", - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.0-pre.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.2.0-pre.0 (registry+https://github.com/rust-lang/crates.io-index)", - "smartlist 0.0.1", - "tor_allocate 0.0.1", - "tor_log 0.1.0", -] - -[[package]] -name = "digest" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "external" -version = "0.0.1" -dependencies = [ - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", - "smartlist 0.0.1", - "tor_allocate 0.0.1", -] - -[[package]] -name = "generic-array" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "libc" -version = "0.2.39" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "protover" -version = "0.0.1" -dependencies = [ - "external 0.0.1", - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", - "smartlist 0.0.1", - "tor_allocate 0.0.1", - "tor_log 0.1.0", - "tor_util 0.0.1", -] - -[[package]] -name = "rand" -version = "0.5.0-pre.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.2.0-pre.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.2.0-pre.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smartlist" -version = "0.0.1" -dependencies = [ - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tor_allocate" -version = "0.0.1" -dependencies = [ - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tor_log" -version = "0.1.0" -dependencies = [ - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", - "tor_allocate 0.0.1", -] - -[[package]] -name = "tor_rust" -version = "0.1.0" -dependencies = [ - "protover 0.0.1", - "tor_util 0.0.1", -] - -[[package]] -name = "tor_util" -version = "0.0.1" -dependencies = [ - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", - "tor_allocate 0.0.1", - "tor_log 0.1.0", -] - -[[package]] -name = "typenum" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum digest 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "00a49051fef47a72c9623101b19bd71924a45cca838826caae3eaa4d00772603" -"checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" -"checksum libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)" = "f54263ad99207254cf58b5f701ecb432c717445ea2ee8af387334bdd1a03fdff" -"checksum rand 0.5.0-pre.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3795e4701d9628a63a84d0289e66279883b40df165fca7caed7b87122447032a" -"checksum rand_core 0.2.0-pre.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7255ffbdb188d5be1a69b6f9f3cf187de4207430b9e79ed5b76458a6b20de9a" -"checksum typenum 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "13a99dc6780ef33c78780b826cf9d2a78840b72cae9474de4bcaf9051e60ebbd" diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml deleted file mode 100644 index de8693ea33..0000000000 --- a/src/rust/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[workspace] -members = [ - "crypto", - "external", - "protover", - "smartlist", - "tor_allocate", - "tor_log", - "tor_rust", - "tor_util", -] - -# Can remove panic="abort" when this issue is fixed: -# https://github.com/rust-lang/rust/issues/52652 -[profile.dev] -panic = "abort" - -[profile.release] -debug = true -panic = "abort" - -[profile.test] -panic = "abort" - -[profile.bench] -panic = "abort" diff --git a/src/rust/build.rs b/src/rust/build.rs deleted file mode 100644 index 5626b35f75..0000000000 --- a/src/rust/build.rs +++ /dev/null @@ -1,192 +0,0 @@ -//! Build script for Rust modules in Tor. -//! -//! We need to use this because some of our Rust tests need to use some -//! of our C modules, which need to link some external libraries. -//! -//! This script works by looking at a "config.rust" file generated by our -//! configure script, and then building a set of options for cargo to pass to -//! the compiler. - -use std::collections::HashMap; -use std::env; -use std::fs::File; -use std::io; -use std::io::prelude::*; -use std::path::PathBuf; - -/// Wrapper around a key-value map. -struct Config(HashMap<String, String>); - -/// Locate a config.rust file generated by autoconf, starting in the OUT_DIR -/// location provided by cargo and recursing up the directory tree. Note that -/// we need to look in the OUT_DIR, since autoconf will place generated files -/// in the build directory. -fn find_cfg() -> io::Result<String> { - let mut path = PathBuf::from(env::var("OUT_DIR").unwrap()); - loop { - path.push("config.rust"); - if path.exists() { - return Ok(path.to_str().unwrap().to_owned()); - } - path.pop(); // remove config.rust - if !path.pop() { - // can't remove last part of directory - return Err(io::Error::new(io::ErrorKind::NotFound, "No config.rust")); - } - } -} - -impl Config { - /// Find the config.rust file and try to parse it. - /// - /// The file format is a series of lines of the form KEY=VAL, with - /// any blank lines and lines starting with # ignored. - fn load() -> io::Result<Config> { - let path = find_cfg()?; - let f = File::open(&path)?; - let reader = io::BufReader::new(f); - let mut map = HashMap::new(); - for line in reader.lines() { - let s = line?; - if s.trim().starts_with("#") || s.trim() == "" { - continue; - } - let idx = match s.find("=") { - None => { - return Err(io::Error::new(io::ErrorKind::InvalidData, "missing =")); - } - Some(x) => x, - }; - let (var, eq_val) = s.split_at(idx); - let val = &eq_val[1..]; - map.insert(var.to_owned(), val.to_owned()); - } - Ok(Config(map)) - } - - /// Return a reference to the value whose key is 'key'. - /// - /// Panics if 'key' is not found in the configuration. - fn get(&self, key: &str) -> &str { - self.0.get(key).unwrap() - } - - /// Add a dependency on a static C library that is part of Tor, by name. - fn component(&self, s: &str) { - println!("cargo:rustc-link-lib=static={}", s); - } - - /// Add a dependency on a native library that is not part of Tor, by name. - fn dependency(&self, s: &str) { - println!("cargo:rustc-link-lib={}", s); - } - - /// Add a link path, relative to Tor's build directory. - fn link_relpath(&self, s: &str) { - let builddir = self.get("BUILDDIR"); - println!("cargo:rustc-link-search=native={}/{}", builddir, s); - } - - /// Add an absolute link path. - fn link_path(&self, s: &str) { - println!("cargo:rustc-link-search=native={}", s); - } - - /// Parse the CFLAGS in s, looking for -l and -L items, and adding - /// rust configuration as appropriate. - fn from_cflags(&self, s: &str) { - let mut next_is_lib = false; - let mut next_is_path = false; - for ent in self.get(s).split_whitespace() { - if next_is_lib { - self.dependency(ent); - next_is_lib = false; - } else if next_is_path { - self.link_path(ent); - next_is_path = false; - } else if ent == "-l" { - next_is_lib = true; - } else if ent == "-L" { - next_is_path = true; - } else if ent.starts_with("-L") { - self.link_path(&ent[2..]); - } else if ent.starts_with("-l") { - self.dependency(&ent[2..]); - } - } - } -} - -pub fn main() { - let cfg = Config::load().unwrap(); - let package = env::var("CARGO_PKG_NAME").unwrap(); - - match package.as_ref() { - "crypto" => { - // Right now, I'm having a separate configuration for each Rust - // package, since I'm hoping we can trim them down. Once we have a - // second Rust package that needs to use this build script, let's - // extract some of this stuff into a module. - // - // This is a ridiculous amount of code to be pulling in just - // to test our crypto library: modularity would be our - // friend here. - cfg.from_cflags("TOR_LDFLAGS_zlib"); - cfg.from_cflags("TOR_LDFLAGS_openssl"); - cfg.from_cflags("TOR_LDFLAGS_libevent"); - - cfg.link_relpath("src/lib"); - cfg.link_relpath("src/ext/keccak-tiny"); - cfg.link_relpath("src/ext/ed25519/ref10"); - cfg.link_relpath("src/ext/ed25519/donna"); - cfg.link_relpath("src/trunnel"); - - // Note that we can't pull in "libtor-testing", or else we - // will have dependencies on all the other rust packages that - // tor uses. We must be careful with factoring and dependencies - // moving forward! - cfg.component("tor-crypt-ops-testing"); - cfg.component("tor-sandbox-testing"); - cfg.component("tor-encoding-testing"); - cfg.component("tor-fs-testing"); - cfg.component("tor-net-testing"); - cfg.component("tor-buf-testing"); - cfg.component("tor-time-testing"); - cfg.component("tor-thread-testing"); - cfg.component("tor-memarea-testing"); - cfg.component("tor-log-testing"); - cfg.component("tor-lock-testing"); - cfg.component("tor-fdio-testing"); - cfg.component("tor-container-testing"); - cfg.component("tor-smartlist-core-testing"); - cfg.component("tor-string-testing"); - cfg.component("tor-malloc"); - cfg.component("tor-wallclock"); - cfg.component("tor-err-testing"); - cfg.component("tor-version-testing"); - cfg.component("tor-intmath-testing"); - cfg.component("tor-ctime-testing"); - cfg.component("curve25519_donna"); - cfg.component("keccak-tiny"); - cfg.component("ed25519_ref10"); - cfg.component("ed25519_donna"); - cfg.component("or-trunnel-testing"); - - cfg.from_cflags("TOR_ZLIB_LIBS"); - cfg.from_cflags("TOR_LIB_MATH"); - cfg.from_cflags("NSS_LIBS"); - cfg.from_cflags("TOR_OPENSSL_LIBS"); - cfg.from_cflags("TOR_LIBEVENT_LIBS"); - cfg.from_cflags("TOR_LIB_WS32"); - cfg.from_cflags("TOR_LIB_GDI"); - cfg.from_cflags("TOR_LIB_USERENV"); - cfg.from_cflags("CURVE25519_LIBS"); - cfg.from_cflags("TOR_LZMA_LIBS"); - cfg.from_cflags("TOR_ZSTD_LIBS"); - cfg.from_cflags("LIBS"); - } - _ => { - panic!("No configuration in build.rs for package {}", package); - } - } -} diff --git a/src/rust/crypto/Cargo.toml b/src/rust/crypto/Cargo.toml deleted file mode 100644 index a7ff7f78d9..0000000000 --- a/src/rust/crypto/Cargo.toml +++ /dev/null @@ -1,37 +0,0 @@ -[package] -authors = ["The Tor Project", - "Isis Lovecruft <isis@torproject.org>"] -name = "crypto" -version = "0.0.1" -publish = false -build = "../build.rs" - -[lib] -name = "crypto" -path = "lib.rs" - -[dependencies] -libc = "=0.2.39" -digest = "=0.7.2" -rand_core = { version = "=0.2.0-pre.0", default-features = false } - -external = { path = "../external" } -smartlist = { path = "../smartlist" } -tor_allocate = { path = "../tor_allocate" } -tor_log = { path = "../tor_log" } - -[dev-dependencies] -rand = { version = "=0.5.0-pre.2", default-features = false } -rand_core = { version = "=0.2.0-pre.0", default-features = false } - -[features] -# If this feature is enabled, test code which calls Tor C code from Rust will -# execute with `cargo test`. Due to numerous linker issues (#25386), this is -# currently disabled by default. -test-c-from-rust = [] - -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] diff --git a/src/rust/crypto/digests/mod.rs b/src/rust/crypto/digests/mod.rs deleted file mode 100644 index 58343b9ca7..0000000000 --- a/src/rust/crypto/digests/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Hash Digests and eXtendible Output Functions (XOFs) - -pub mod sha2; diff --git a/src/rust/crypto/digests/sha2.rs b/src/rust/crypto/digests/sha2.rs deleted file mode 100644 index 91e8b2b3c9..0000000000 --- a/src/rust/crypto/digests/sha2.rs +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Hash Digests and eXtendible Output Functions (XOFs) - -pub use digest::Digest; - -use digest::generic_array::typenum::U32; -use digest::generic_array::typenum::U64; -use digest::generic_array::GenericArray; -use digest::BlockInput; -use digest::FixedOutput; -use digest::Input; - -use external::crypto_digest::get_256_bit_digest; -use external::crypto_digest::get_512_bit_digest; -use external::crypto_digest::CryptoDigest; -use external::crypto_digest::DigestAlgorithm; - -pub use external::crypto_digest::DIGEST256_LEN; -pub use external::crypto_digest::DIGEST512_LEN; - -/// The block size for both SHA-256 and SHA-512 digests is 512 bits/64 bytes. -/// -/// Unfortunately, we have to use the generic_array crate currently to express -/// this at compile time. Later, in the future, when Rust implements const -/// generics, we'll be able to remove this dependency (actually, it will get -/// removed from the digest crate, which is currently `pub use`ing it). -type BlockSize = U64; - -/// A SHA2-256 digest. -/// -/// # C_RUST_COUPLED -/// -/// * `crypto_digest_dup` -#[derive(Clone)] -pub struct Sha256 { - engine: CryptoDigest, -} - -/// Construct a new, default instance of a `Sha256` hash digest function. -/// -/// # Examples -/// -/// ```rust,no_run -/// use crypto::digests::sha2::{Sha256, Digest}; -/// -/// let mut hasher: Sha256 = Sha256::default(); -/// ``` -/// -/// # Returns -/// -/// A new `Sha256` digest. -impl Default for Sha256 { - fn default() -> Sha256 { - Sha256 { - engine: CryptoDigest::new(Some(DigestAlgorithm::SHA2_256)), - } - } -} - -impl BlockInput for Sha256 { - type BlockSize = BlockSize; -} - -/// Input `msg` into the digest. -/// -/// # Examples -/// -/// ```rust,no_run -/// use crypto::digests::sha2::{Sha256, Digest}; -/// -/// let mut hasher: Sha256 = Sha256::default(); -/// -/// hasher.input(b"foo"); -/// hasher.input(b"bar"); -/// ``` -impl Input for Sha256 { - fn process(&mut self, msg: &[u8]) { - self.engine.add_bytes(&msg); - } -} - -/// Retrieve the output hash from everything which has been fed into this -/// `Sha256` digest thus far. -/// -// -// FIXME: Once const generics land in Rust, we should genericise calling -// crypto_digest_get_digest in external::crypto_digest. -impl FixedOutput for Sha256 { - type OutputSize = U32; - - fn fixed_result(self) -> GenericArray<u8, Self::OutputSize> { - let buffer: [u8; DIGEST256_LEN] = get_256_bit_digest(self.engine); - - GenericArray::from(buffer) - } -} - -/// A SHA2-512 digest. -/// -/// # C_RUST_COUPLED -/// -/// * `crypto_digest_dup` -#[derive(Clone)] -pub struct Sha512 { - engine: CryptoDigest, -} - -/// Construct a new, default instance of a `Sha512` hash digest function. -/// -/// # Examples -/// -/// ```rust,no_run -/// use crypto::digests::sha2::{Sha512, Digest}; -/// -/// let mut hasher: Sha512 = Sha512::default(); -/// ``` -/// -/// # Returns -/// -/// A new `Sha512` digest. -impl Default for Sha512 { - fn default() -> Sha512 { - Sha512 { - engine: CryptoDigest::new(Some(DigestAlgorithm::SHA2_512)), - } - } -} - -impl BlockInput for Sha512 { - type BlockSize = BlockSize; -} - -/// Input `msg` into the digest. -/// -/// # Examples -/// -/// ```rust,no_run -/// use crypto::digests::sha2::{Sha512, Digest}; -/// -/// let mut hasher: Sha512 = Sha512::default(); -/// -/// hasher.input(b"foo"); -/// hasher.input(b"bar"); -/// ``` -impl Input for Sha512 { - fn process(&mut self, msg: &[u8]) { - self.engine.add_bytes(&msg); - } -} - -/// Retrieve the output hash from everything which has been fed into this -/// `Sha512` digest thus far. -/// -// -// FIXME: Once const generics land in Rust, we should genericise calling -// crypto_digest_get_digest in external::crypto_digest. -impl FixedOutput for Sha512 { - type OutputSize = U64; - - fn fixed_result(self) -> GenericArray<u8, Self::OutputSize> { - let buffer: [u8; DIGEST512_LEN] = get_512_bit_digest(self.engine); - - GenericArray::clone_from_slice(&buffer) - } -} - -#[cfg(test)] -mod test { - #[cfg(feature = "test-c-from-rust")] - use digest::Digest; - - #[cfg(feature = "test-c-from-rust")] - use super::*; - - #[cfg(feature = "test-c-from-rust")] - #[test] - fn sha256_default() { - let _: Sha256 = Sha256::default(); - } - - #[cfg(feature = "test-c-from-rust")] - #[test] - fn sha256_digest() { - let mut h: Sha256 = Sha256::new(); - let mut result: [u8; DIGEST256_LEN] = [0u8; DIGEST256_LEN]; - let expected = [ - 151, 223, 53, 136, 181, 163, 242, 75, 171, 195, 133, 27, 55, 47, 11, 167, 26, 157, 205, - 222, 212, 59, 20, 185, 208, 105, 97, 191, 193, 112, 125, 157, - ]; - - h.input(b"foo"); - h.input(b"bar"); - h.input(b"baz"); - - result.copy_from_slice(h.fixed_result().as_slice()); - - println!("{:?}", &result[..]); - - assert_eq!(result, expected); - } - - #[cfg(feature = "test-c-from-rust")] - #[test] - fn sha512_default() { - let _: Sha512 = Sha512::default(); - } - - #[cfg(feature = "test-c-from-rust")] - #[test] - fn sha512_digest() { - let mut h: Sha512 = Sha512::new(); - let mut result: [u8; DIGEST512_LEN] = [0u8; DIGEST512_LEN]; - - let expected = [ - 203, 55, 124, 16, 176, 245, 166, 44, 128, 54, 37, 167, 153, 217, 233, 8, 190, 69, 231, - 103, 245, 209, 71, 212, 116, 73, 7, 203, 5, 89, 122, 164, 237, 211, 41, 160, 175, 20, - 122, 221, 12, 244, 24, 30, 211, 40, 250, 30, 121, 148, 38, 88, 38, 179, 237, 61, 126, - 246, 240, 103, 202, 153, 24, 90, - ]; - - h.input(b"foo"); - h.input(b"bar"); - h.input(b"baz"); - - result.copy_from_slice(h.fixed_result().as_slice()); - - println!("{:?}", &result[..]); - - assert_eq!(&result[..], &expected[..]); - } -} diff --git a/src/rust/crypto/lib.rs b/src/rust/crypto/lib.rs deleted file mode 100644 index 866ea93547..0000000000 --- a/src/rust/crypto/lib.rs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Common cryptographic functions and utilities. -//! -//! # Hash Digests and eXtendable Output Functions (XOFs) -//! -//! The `digests` module contains submodules for specific hash digests -//! and extendable output functions. -//! -//! ```rust,no_run -//! use crypto::digests::sha2::*; -//! -//! let mut hasher: Sha256 = Sha256::default(); -//! let mut result: [u8; 32] = [0u8; 32]; -//! -//! hasher.input(b"foo"); -//! hasher.input(b"bar"); -//! hasher.input(b"baz"); -//! -//! result.copy_from_slice(hasher.result().as_slice()); -//! -//! assert!(result == [b'X'; DIGEST256_LEN]); -//! ``` - -// XXX: add missing docs -//#![deny(missing_docs)] - -// External crates from cargo or TOR_RUST_DEPENDENCIES. -extern crate digest; -extern crate libc; -extern crate rand_core; - -// External dependencies for tests. -#[cfg(test)] -extern crate rand as rand_crate; - -// Our local crates. -extern crate external; -#[cfg(not(test))] -#[macro_use] -extern crate tor_log; - -pub mod digests; // Unfortunately named "digests" plural to avoid name conflict with the digest crate -pub mod rand; diff --git a/src/rust/crypto/rand/mod.rs b/src/rust/crypto/rand/mod.rs deleted file mode 100644 index da8b3bd8a5..0000000000 --- a/src/rust/crypto/rand/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -// Internal dependencies -pub mod rng; diff --git a/src/rust/crypto/rand/rng.rs b/src/rust/crypto/rand/rng.rs deleted file mode 100644 index 644a5c20b1..0000000000 --- a/src/rust/crypto/rand/rng.rs +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Wrappers for Tor's random number generators to provide implementations of -//! `rand_core` traits. - -// This is the real implementation, in use in production, which calls into our C -// wrappers in /src/common/crypto_rand.c, which call into OpenSSL, system -// libraries, and make syscalls. -#[cfg(not(test))] -mod internal { - use std::u64; - - use rand_core::impls::next_u32_via_fill; - use rand_core::impls::next_u64_via_fill; - use rand_core::CryptoRng; - use rand_core::Error; - use rand_core::RngCore; - - use external::c_tor_crypto_rand; - use external::c_tor_crypto_seed_rng; - use external::c_tor_crypto_strongest_rand; - - use tor_log::LogDomain; - use tor_log::LogSeverity; - - /// Largest strong entropy request permitted. - // - // C_RUST_COUPLED: `MAX_STRONGEST_RAND_SIZE` /src/common/crypto_rand.c - const MAX_STRONGEST_RAND_SIZE: usize = 256; - - /// A wrapper around OpenSSL's RNG. - pub struct TorRng { - // This private, zero-length field forces the struct to be treated the - // same as its opaque C counterpart. - _unused: [u8; 0], - } - - /// Mark `TorRng` as being suitable for cryptographic purposes. - impl CryptoRng for TorRng {} - - impl TorRng { - // C_RUST_COUPLED: `crypto_seed_rng()` /src/common/crypto_rand.c - #[allow(dead_code)] - pub fn new() -> Self { - if !c_tor_crypto_seed_rng() { - tor_log_msg!( - LogSeverity::Warn, - LogDomain::General, - "TorRng::from_seed()", - "The RNG could not be seeded!" - ); - } - // XXX also log success at info level —isis - TorRng { _unused: [0u8; 0] } - } - } - - impl RngCore for TorRng { - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn next_u32(&mut self) -> u32 { - next_u32_via_fill(self) - } - - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn next_u64(&mut self) -> u64 { - next_u64_via_fill(self) - } - - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn fill_bytes(&mut self, dest: &mut [u8]) { - c_tor_crypto_rand(dest); - } - - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> { - Ok(self.fill_bytes(dest)) - } - } - - /// A CSPRNG which hashes together randomness from OpenSSL's RNG and entropy - /// obtained from the operating system. - pub struct TorStrongestRng { - // This private, zero-length field forces the struct to be treated the - // same as its opaque C counterpart. - _unused: [u8; 0], - } - - /// Mark `TorRng` as being suitable for cryptographic purposes. - impl CryptoRng for TorStrongestRng {} - - impl TorStrongestRng { - // C_RUST_COUPLED: `crypto_seed_rng()` /src/common/crypto_rand.c - #[allow(dead_code)] - pub fn new() -> Self { - if !c_tor_crypto_seed_rng() { - tor_log_msg!( - LogSeverity::Warn, - LogDomain::General, - "TorStrongestRng::from_seed()", - "The RNG could not be seeded!" - ); - } - // XXX also log success at info level —isis - TorStrongestRng { _unused: [0u8; 0] } - } - } - - impl RngCore for TorStrongestRng { - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn next_u32(&mut self) -> u32 { - next_u32_via_fill(self) - } - - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn next_u64(&mut self) -> u64 { - next_u64_via_fill(self) - } - - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn fill_bytes(&mut self, dest: &mut [u8]) { - debug_assert!(dest.len() <= MAX_STRONGEST_RAND_SIZE); - - c_tor_crypto_strongest_rand(dest); - } - - // C_RUST_COUPLED: `crypto_strongest_rand()` /src/common/crypto_rand.c - fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> { - Ok(self.fill_bytes(dest)) - } - } -} - -// For testing, we expose a pure-Rust implementation. -#[cfg(test)] -mod internal { - // It doesn't matter if we pretend ChaCha is a CSPRNG in tests. - pub use rand_crate::ChaChaRng as TorRng; - pub use rand_crate::ChaChaRng as TorStrongestRng; -} - -// Finally, expose the public functionality of whichever appropriate internal -// module. -pub use self::internal::*; diff --git a/src/rust/external/Cargo.toml b/src/rust/external/Cargo.toml deleted file mode 100644 index 5f443645bb..0000000000 --- a/src/rust/external/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -authors = ["The Tor Project"] -version = "0.0.1" -name = "external" - -[dependencies] -libc = "=0.2.39" -smartlist = { path = "../smartlist" } -tor_allocate = { path = "../tor_allocate" } - -[lib] -name = "external" -path = "lib.rs" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] diff --git a/src/rust/external/crypto_digest.rs b/src/rust/external/crypto_digest.rs deleted file mode 100644 index 873f75e7a3..0000000000 --- a/src/rust/external/crypto_digest.rs +++ /dev/null @@ -1,454 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Bindings to external digest and XOF functions which live within -//! src/common/crypto_digest.[ch]. -//! -//! We wrap our C implementations in src/common/crypto_digest.[ch] with more -//! Rusty types and interfaces in src/rust/crypto/digest/. - -use std::process::abort; - -use libc::c_char; -use libc::c_int; -use libc::size_t; -use libc::uint8_t; - -use smartlist::Stringlist; - -/// Length of the output of our message digest. -pub const DIGEST_LEN: usize = 20; - -/// Length of the output of our second (improved) message digests. (For now -/// this is just sha256, but it could be any other 256-bit digest.) -pub const DIGEST256_LEN: usize = 32; - -/// Length of the output of our 64-bit optimized message digests (SHA512). -pub const DIGEST512_LEN: usize = 64; - -/// Length of a sha1 message digest when encoded in base32 with trailing = signs -/// removed. -pub const BASE32_DIGEST_LEN: usize = 32; - -/// Length of a sha1 message digest when encoded in base64 with trailing = signs -/// removed. -pub const BASE64_DIGEST_LEN: usize = 27; - -/// Length of a sha256 message digest when encoded in base64 with trailing = -/// signs removed. -pub const BASE64_DIGEST256_LEN: usize = 43; - -/// Length of a sha512 message digest when encoded in base64 with trailing = -/// signs removed. -pub const BASE64_DIGEST512_LEN: usize = 86; - -/// Length of hex encoding of SHA1 digest, not including final NUL. -pub const HEX_DIGEST_LEN: usize = 40; - -/// Length of hex encoding of SHA256 digest, not including final NUL. -pub const HEX_DIGEST256_LEN: usize = 64; - -/// Length of hex encoding of SHA512 digest, not including final NUL. -pub const HEX_DIGEST512_LEN: usize = 128; - -/// Our C code uses an enum to declare the digest algorithm types which we know -/// about. However, because enums are implementation-defined in C, we can -/// neither work with them directly nor translate them into Rust enums. -/// Instead, we represent them as a u8 (under the assumption that we'll never -/// support more than 256 hash functions). -#[allow(non_camel_case_types)] -type digest_algorithm_t = u8; - -const DIGEST_SHA1: digest_algorithm_t = 0; -const DIGEST_SHA256: digest_algorithm_t = 1; -const DIGEST_SHA512: digest_algorithm_t = 2; -const DIGEST_SHA3_256: digest_algorithm_t = 3; -const DIGEST_SHA3_512: digest_algorithm_t = 4; - -/// The number of hash digests we produce for a `common_digests_t`. -/// -/// We can't access these from Rust, because their definitions in C require -/// introspecting the `digest_algorithm_t` typedef, which is an enum, so we have -/// to redefine them here. -const N_COMMON_DIGEST_ALGORITHMS: usize = DIGEST_SHA256 as usize + 1; - -/// A digest function. -#[repr(C)] -#[derive(Debug, Copy, Clone)] -#[allow(non_camel_case_types)] -struct crypto_digest_t { - // This private, zero-length field forces the struct to be treated the same - // as its opaque C counterpart. - _unused: [u8; 0], -} - -/// An eXtendible Output Function (XOF). -#[repr(C)] -#[derive(Debug, Copy, Clone)] -#[allow(non_camel_case_types)] -struct crypto_xof_t { - // This private, zero-length field forces the struct to be treated the same - // as its opaque C counterpart. - _unused: [u8; 0], -} - -/// A set of all the digests we commonly compute, taken on a single -/// string. Any digests that are shorter than 512 bits are right-padded -/// with 0 bits. -/// -/// Note that this representation wastes 44 bytes for the SHA1 case, so -/// don't use it for anything where we need to allocate a whole bunch at -/// once. -#[repr(C)] -#[derive(Debug, Copy, Clone)] -#[allow(non_camel_case_types)] -struct common_digests_t { - pub d: [[c_char; N_COMMON_DIGEST_ALGORITHMS]; DIGEST256_LEN], -} - -/// A `smartlist_t` is just an alias for the `#[repr(C)]` type `Stringlist`, to -/// make it more clear that we're working with a smartlist which is owned by C. -#[allow(non_camel_case_types)] -// BINDGEN_GENERATED: This type isn't actually bindgen generated, but the code -// below it which uses it is. As such, this comes up as "dead code" as well. -#[allow(dead_code)] -type smartlist_t = Stringlist; - -/// All of the external functions from `src/common/crypto_digest.h`. -/// -/// These are kept private because they should be wrapped with Rust to make their usage safer. -// -// BINDGEN_GENERATED: These definitions were generated with bindgen and cleaned -// up manually. As such, there are more bindings than are likely necessary or -// which are in use. -#[allow(dead_code)] -extern "C" { - fn crypto_digest(digest: *mut c_char, m: *const c_char, len: size_t) -> c_int; - fn crypto_digest256( - digest: *mut c_char, - m: *const c_char, - len: size_t, - algorithm: digest_algorithm_t, - ) -> c_int; - fn crypto_digest512( - digest: *mut c_char, - m: *const c_char, - len: size_t, - algorithm: digest_algorithm_t, - ) -> c_int; - fn crypto_common_digests(ds_out: *mut common_digests_t, m: *const c_char, len: size_t) - -> c_int; - fn crypto_digest_smartlist_prefix( - digest_out: *mut c_char, - len_out: size_t, - prepend: *const c_char, - lst: *const smartlist_t, - append: *const c_char, - alg: digest_algorithm_t, - ); - fn crypto_digest_smartlist( - digest_out: *mut c_char, - len_out: size_t, - lst: *const smartlist_t, - append: *const c_char, - alg: digest_algorithm_t, - ); - fn crypto_digest_algorithm_get_name(alg: digest_algorithm_t) -> *const c_char; - fn crypto_digest_algorithm_get_length(alg: digest_algorithm_t) -> size_t; - fn crypto_digest_algorithm_parse_name(name: *const c_char) -> c_int; - fn crypto_digest_new() -> *mut crypto_digest_t; - fn crypto_digest256_new(algorithm: digest_algorithm_t) -> *mut crypto_digest_t; - fn crypto_digest512_new(algorithm: digest_algorithm_t) -> *mut crypto_digest_t; - fn crypto_digest_free_(digest: *mut crypto_digest_t); - fn crypto_digest_add_bytes(digest: *mut crypto_digest_t, data: *const c_char, len: size_t); - fn crypto_digest_get_digest(digest: *mut crypto_digest_t, out: *mut c_char, out_len: size_t); - fn crypto_digest_dup(digest: *const crypto_digest_t) -> *mut crypto_digest_t; - fn crypto_digest_assign(into: *mut crypto_digest_t, from: *const crypto_digest_t); - fn crypto_hmac_sha256( - hmac_out: *mut c_char, - key: *const c_char, - key_len: size_t, - msg: *const c_char, - msg_len: size_t, - ); - fn crypto_mac_sha3_256( - mac_out: *mut uint8_t, - len_out: size_t, - key: *const uint8_t, - key_len: size_t, - msg: *const uint8_t, - msg_len: size_t, - ); - fn crypto_xof_new() -> *mut crypto_xof_t; - fn crypto_xof_add_bytes(xof: *mut crypto_xof_t, data: *const uint8_t, len: size_t); - fn crypto_xof_squeeze_bytes(xof: *mut crypto_xof_t, out: *mut uint8_t, len: size_t); - fn crypto_xof_free(xof: *mut crypto_xof_t); -} - -/// A wrapper around a `digest_algorithm_t`. -pub enum DigestAlgorithm { - SHA2_256, - SHA2_512, - SHA3_256, - SHA3_512, -} - -impl From<DigestAlgorithm> for digest_algorithm_t { - fn from(digest: DigestAlgorithm) -> digest_algorithm_t { - match digest { - DigestAlgorithm::SHA2_256 => DIGEST_SHA256, - DigestAlgorithm::SHA2_512 => DIGEST_SHA512, - DigestAlgorithm::SHA3_256 => DIGEST_SHA3_256, - DigestAlgorithm::SHA3_512 => DIGEST_SHA3_512, - } - } -} - -/// A wrapper around a mutable pointer to a `crypto_digest_t`. -pub struct CryptoDigest(*mut crypto_digest_t); - -/// Explicitly copy the state of a `CryptoDigest` hash digest context. -/// -/// # C_RUST_COUPLED -/// -/// * `crypto_digest_dup` -impl Clone for CryptoDigest { - fn clone(&self) -> CryptoDigest { - let digest: *mut crypto_digest_t; - - unsafe { - digest = crypto_digest_dup(self.0 as *const crypto_digest_t); - } - - // See the note in the implementation of CryptoDigest for the - // reasoning for `abort()` here. - if digest.is_null() { - abort(); - } - - CryptoDigest(digest) - } -} - -impl CryptoDigest { - /// A wrapper to call one of the C functions `crypto_digest_new`, - /// `crypto_digest256_new`, or `crypto_digest512_new`. - /// - /// # Warnings - /// - /// This function will `abort()` the entire process in an "abnormal" fashion, - /// i.e. not unwinding this or any other thread's stack, running any - /// destructors, or calling any panic/exit hooks) if `tor_malloc()` (called in - /// `crypto_digest256_new()`) is unable to allocate memory. - /// - /// # Returns - /// - /// A new `CryptoDigest`, which is a wrapper around a opaque representation - /// of a `crypto_digest_t`. The underlying `crypto_digest_t` _MUST_ only - /// ever be handled via a raw pointer, and never introspected. - /// - /// # C_RUST_COUPLED - /// - /// * `crypto_digest_new` - /// * `crypto_digest256_new` - /// * `crypto_digest512_new` - /// * `tor_malloc` (called by `crypto_digest256_new`, but we make - /// assumptions about its behaviour and return values here) - pub fn new(algorithm: Option<DigestAlgorithm>) -> CryptoDigest { - let digest: *mut crypto_digest_t; - - if algorithm.is_none() { - unsafe { - digest = crypto_digest_new(); - } - } else { - let algo: digest_algorithm_t = algorithm.unwrap().into(); // can't fail because it's Some - - unsafe { - // XXX This is a pretty awkward API to use from Rust... - digest = match algo { - DIGEST_SHA1 => crypto_digest_new(), - DIGEST_SHA256 => crypto_digest256_new(DIGEST_SHA256), - DIGEST_SHA3_256 => crypto_digest256_new(DIGEST_SHA3_256), - DIGEST_SHA512 => crypto_digest512_new(DIGEST_SHA512), - DIGEST_SHA3_512 => crypto_digest512_new(DIGEST_SHA3_512), - _ => abort(), - } - } - } - - // In our C code, `crypto_digest*_new()` allocates memory with - // `tor_malloc()`. In `tor_malloc()`, if the underlying malloc - // implementation fails to allocate the requested memory and returns a - // NULL pointer, we call `exit(1)`. In the case that this `exit(1)` is - // called within a worker, be that a process or a thread, the inline - // comments within `tor_malloc()` mention "that's ok, since the parent - // will run out of memory soon anyway". However, if it takes long - // enough for the worker to die, and it manages to return a NULL pointer - // to our Rust code, our Rust is now in an irreparably broken state and - // may exhibit undefined behaviour. An even worse scenario, if/when we - // have parent/child processes/threads controlled by Rust, would be that - // the UB contagion in Rust manages to spread to other children before - // the entire process (hopefully terminates). - // - // However, following the assumptions made in `tor_malloc()` that - // calling `exit(1)` in a child is okay because the parent will - // eventually run into the same errors, and also to stymie any UB - // contagion in the meantime, we call abort!() here to terminate the - // entire program immediately. - if digest.is_null() { - abort(); - } - - CryptoDigest(digest) - } - - /// A wrapper to call the C function `crypto_digest_add_bytes`. - /// - /// # Inputs - /// - /// * `bytes`: a byte slice of bytes to be added into this digest. - /// - /// # C_RUST_COUPLED - /// - /// * `crypto_digest_add_bytes` - pub fn add_bytes(&self, bytes: &[u8]) { - unsafe { - crypto_digest_add_bytes( - self.0 as *mut crypto_digest_t, - bytes.as_ptr() as *const c_char, - bytes.len() as size_t, - ) - } - } -} - -impl Drop for CryptoDigest { - fn drop(&mut self) { - unsafe { - crypto_digest_free_(self.0 as *mut crypto_digest_t); - } - } -} - -/// Get the 256-bit digest output of a `crypto_digest_t`. -/// -/// # Inputs -/// -/// * `digest`: A `CryptoDigest` which wraps either a `DIGEST_SHA256` or a -/// `DIGEST_SHA3_256`. -/// -/// # Warning -/// -/// Calling this function with a `CryptoDigest` which is neither SHA2-256 or -/// SHA3-256 is a programming error. Since we cannot introspect the opaque -/// struct from Rust, however, there is no way for us to check that the correct -/// one is being passed in. That is up to you, dear programmer. If you mess -/// up, you will get a incorrectly-sized hash digest in return, and it will be -/// your fault. Don't do that. -/// -/// # Returns -/// -/// A 256-bit hash digest, as a `[u8; 32]`. -/// -/// # C_RUST_COUPLED -/// -/// * `crypto_digest_get_digest` -/// * `DIGEST256_LEN` -// -// FIXME: Once const generics land in Rust, we should genericise calling -// crypto_digest_get_digest w.r.t. output array size. -pub fn get_256_bit_digest(digest: CryptoDigest) -> [u8; DIGEST256_LEN] { - let mut buffer: [u8; DIGEST256_LEN] = [0u8; DIGEST256_LEN]; - - unsafe { - crypto_digest_get_digest( - digest.0, - buffer.as_mut_ptr() as *mut c_char, - DIGEST256_LEN as size_t, - ); - - if buffer.as_ptr().is_null() { - abort(); - } - } - buffer -} - -/// Get the 512-bit digest output of a `crypto_digest_t`. -/// -/// # Inputs -/// -/// * `digest`: A `CryptoDigest` which wraps either a `DIGEST_SHA512` or a -/// `DIGEST_SHA3_512`. -/// -/// # Warning -/// -/// Calling this function with a `CryptoDigest` which is neither SHA2-512 or -/// SHA3-512 is a programming error. Since we cannot introspect the opaque -/// struct from Rust, however, there is no way for us to check that the correct -/// one is being passed in. That is up to you, dear programmer. If you mess -/// up, you will get a incorrectly-sized hash digest in return, and it will be -/// your fault. Don't do that. -/// -/// # Returns -/// -/// A 512-bit hash digest, as a `[u8; 64]`. -/// -/// # C_RUST_COUPLED -/// -/// * `crypto_digest_get_digest` -/// * `DIGEST512_LEN` -// -// FIXME: Once const generics land in Rust, we should genericise calling -// crypto_digest_get_digest w.r.t. output array size. -pub fn get_512_bit_digest(digest: CryptoDigest) -> [u8; DIGEST512_LEN] { - let mut buffer: [u8; DIGEST512_LEN] = [0u8; DIGEST512_LEN]; - - unsafe { - crypto_digest_get_digest( - digest.0, - buffer.as_mut_ptr() as *mut c_char, - DIGEST512_LEN as size_t, - ); - - if buffer.as_ptr().is_null() { - abort(); - } - } - buffer -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_layout_common_digests_t() { - assert_eq!( - ::std::mem::size_of::<common_digests_t>(), - 64usize, - concat!("Size of: ", stringify!(common_digests_t)) - ); - assert_eq!( - ::std::mem::align_of::<common_digests_t>(), - 1usize, - concat!("Alignment of ", stringify!(common_digests_t)) - ); - } - - #[test] - fn test_layout_crypto_digest_t() { - assert_eq!( - ::std::mem::size_of::<crypto_digest_t>(), - 0usize, - concat!("Size of: ", stringify!(crypto_digest_t)) - ); - assert_eq!( - ::std::mem::align_of::<crypto_digest_t>(), - 1usize, - concat!("Alignment of ", stringify!(crypto_digest_t)) - ); - } -} diff --git a/src/rust/external/crypto_rand.rs b/src/rust/external/crypto_rand.rs deleted file mode 100644 index 703382093c..0000000000 --- a/src/rust/external/crypto_rand.rs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Bindings to external (P)RNG interfaces and utilities in -//! src/common/crypto_rand.[ch]. -//! -//! We wrap our C implementations in src/common/crypto_rand.[ch] here in order -//! to provide wrappers with native Rust types, and then provide more Rusty -//! types and and trait implementations in src/rust/crypto/rand/. - -use std::time::Duration; - -use libc::c_double; -use libc::c_int; -use libc::size_t; -use libc::time_t; -use libc::uint8_t; - -extern "C" { - fn crypto_seed_rng() -> c_int; - fn crypto_rand(out: *mut uint8_t, out_len: size_t); - fn crypto_strongest_rand(out: *mut uint8_t, out_len: size_t); - fn crypto_rand_time_range(min: time_t, max: time_t) -> time_t; - fn crypto_rand_double() -> c_double; -} - -/// Seed OpenSSL's random number generator with bytes from the operating -/// system. -/// -/// # Returns -/// -/// `true` on success; `false` on failure. -pub fn c_tor_crypto_seed_rng() -> bool { - let ret: c_int; - - unsafe { - ret = crypto_seed_rng(); - } - match ret { - 0 => return true, - _ => return false, - } -} - -/// Fill the bytes of `dest` with random data. -pub fn c_tor_crypto_rand(dest: &mut [u8]) { - unsafe { - crypto_rand(dest.as_mut_ptr(), dest.len() as size_t); - } -} - -/// Fill the bytes of `dest` with "strong" random data by hashing -/// together randomness obtained from OpenSSL's RNG and the operating -/// system. -pub fn c_tor_crypto_strongest_rand(dest: &mut [u8]) { - // We'll let the C side panic if the len is larger than - // MAX_STRONGEST_RAND_SIZE, rather than potentially panicking here. A - // paranoid caller should assert on the length of dest *before* calling this - // function. - unsafe { - crypto_strongest_rand(dest.as_mut_ptr(), dest.len() as size_t); - } -} - -/// Get a random time, in seconds since the Unix Epoch. -/// -/// # Returns -/// -/// A `std::time::Duration` of seconds since the Unix Epoch. -pub fn c_tor_crypto_rand_time_range(min: &Duration, max: &Duration) -> Duration { - let ret: time_t; - - unsafe { - ret = crypto_rand_time_range(min.as_secs() as time_t, max.as_secs() as time_t); - } - - Duration::from_secs(ret as u64) -} - -/// Return a pseudorandom 64-bit float, chosen uniformly from the range [0.0, 1.0). -pub fn c_tor_crypto_rand_double() -> f64 { - unsafe { crypto_rand_double() } -} diff --git a/src/rust/external/external.rs b/src/rust/external/external.rs deleted file mode 100644 index 0d324c8820..0000000000 --- a/src/rust/external/external.rs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -use libc::{c_char, c_int}; -use std::ffi::CString; - -extern "C" { - fn tor_version_as_new_as(platform: *const c_char, cutoff: *const c_char) -> c_int; -} - -/// Wrap calls to tor_version_as_new_as, defined in routerparse.c -pub fn c_tor_version_as_new_as(platform: &str, cutoff: &str) -> bool { - // CHK: These functions should log a warning if an error occurs. This - // can be added when integration with tor's logger is added to rust - let c_platform = match CString::new(platform) { - Ok(n) => n, - Err(_) => return false, - }; - - let c_cutoff = match CString::new(cutoff) { - Ok(n) => n, - Err(_) => return false, - }; - - let result: c_int = unsafe { tor_version_as_new_as(c_platform.as_ptr(), c_cutoff.as_ptr()) }; - - result == 1 -} - -extern "C" { - fn tor_is_using_nss() -> c_int; -} - -/// Return true if Tor was built to use NSS. -pub fn c_tor_is_using_nss() -> bool { - 0 != unsafe { tor_is_using_nss() } -} diff --git a/src/rust/external/lib.rs b/src/rust/external/lib.rs deleted file mode 100644 index 2f50610a4d..0000000000 --- a/src/rust/external/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -//! Copyright (c) 2016-2019, The Tor Project, Inc. */ -//! See LICENSE for licensing information */ - -//! Interface for external calls to tor C ABI -//! -//! The purpose of this module is to provide a clean interface for when Rust -//! modules need to interact with functionality in tor C code rather than each -//! module implementing this functionality repeatedly. - -extern crate libc; -extern crate tor_allocate; -extern crate smartlist; - -pub mod crypto_digest; -mod crypto_rand; -mod external; - -pub use crypto_rand::*; -pub use external::*; diff --git a/src/rust/include.am b/src/rust/include.am deleted file mode 100644 index 5e5b0b3faf..0000000000 --- a/src/rust/include.am +++ /dev/null @@ -1,41 +0,0 @@ -include src/rust/tor_rust/include.am - -EXTRA_DIST +=\ - src/rust/build.rs \ - src/rust/Cargo.toml \ - src/rust/Cargo.lock \ - src/rust/.cargo/config.in \ - src/rust/crypto/Cargo.toml \ - src/rust/crypto/lib.rs \ - src/rust/crypto/digests/mod.rs \ - src/rust/crypto/digests/sha2.rs \ - src/rust/crypto/rand/mod.rs \ - src/rust/crypto/rand/rng.rs \ - src/rust/external/Cargo.toml \ - src/rust/external/crypto_digest.rs \ - src/rust/external/crypto_rand.rs \ - src/rust/external/external.rs \ - src/rust/external/lib.rs \ - src/rust/protover/Cargo.toml \ - src/rust/protover/errors.rs \ - src/rust/protover/protoset.rs \ - src/rust/protover/ffi.rs \ - src/rust/protover/lib.rs \ - src/rust/protover/protover.rs \ - src/rust/protover/tests/protover.rs \ - src/rust/smartlist/Cargo.toml \ - src/rust/smartlist/lib.rs \ - src/rust/smartlist/smartlist.rs \ - src/rust/tor_allocate/Cargo.toml \ - src/rust/tor_allocate/lib.rs \ - src/rust/tor_allocate/tor_allocate.rs \ - src/rust/tor_log/Cargo.toml \ - src/rust/tor_log/lib.rs \ - src/rust/tor_log/tor_log.rs \ - src/rust/tor_rust/Cargo.toml \ - src/rust/tor_rust/include.am \ - src/rust/tor_rust/lib.rs \ - src/rust/tor_util/Cargo.toml \ - src/rust/tor_util/ffi.rs \ - src/rust/tor_util/lib.rs \ - src/rust/tor_util/strings.rs diff --git a/src/rust/protover/Cargo.toml b/src/rust/protover/Cargo.toml deleted file mode 100644 index 84a7c71c1a..0000000000 --- a/src/rust/protover/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -authors = ["The Tor Project"] -version = "0.0.1" -name = "protover" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] - -[dependencies] -libc = "=0.2.39" - -[dependencies.smartlist] -path = "../smartlist" - -[dependencies.external] -path = "../external" - -[dependencies.tor_util] -path = "../tor_util" - -[dependencies.tor_allocate] -path = "../tor_allocate" - -[dependencies.tor_log] -path = "../tor_log" - -[lib] -name = "protover" -path = "lib.rs" diff --git a/src/rust/protover/errors.rs b/src/rust/protover/errors.rs deleted file mode 100644 index 04397ac4fe..0000000000 --- a/src/rust/protover/errors.rs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Various errors which may occur during protocol version parsing. - -use std::fmt; -use std::fmt::Display; - -/// All errors which may occur during protover parsing routines. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)] -#[allow(missing_docs)] // See Display impl for error descriptions -pub enum ProtoverError { - Overlap, - LowGreaterThanHigh, - Unparseable, - ExceedsMax, - ExceedsExpansionLimit, - UnknownProtocol, - ExceedsNameLimit, - InvalidProtocol, -} - -/// Descriptive error messages for `ProtoverError` variants. -impl Display for ProtoverError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match *self { - ProtoverError::Overlap => write!( - f, - "Two or more (low, high) protover ranges would overlap once expanded." - ), - ProtoverError::LowGreaterThanHigh => write!( - f, - "The low in a (low, high) protover range was greater than high." - ), - ProtoverError::Unparseable => write!(f, "The protover string was unparseable."), - ProtoverError::ExceedsMax => write!( - f, - "The high in a (low, high) protover range exceeds 63." - ), - ProtoverError::ExceedsExpansionLimit => write!( - f, - "The protover string would exceed the maximum expansion limit." - ), - ProtoverError::UnknownProtocol => write!( - f, - "A protocol in the protover string we attempted to parse is unknown." - ), - ProtoverError::ExceedsNameLimit => { - write!(f, "An unrecognised protocol name was too long.") - } - ProtoverError::InvalidProtocol => { - write!(f, "A protocol name includes invalid characters.") - } - } - } -} diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs deleted file mode 100644 index 2bf8d3a987..0000000000 --- a/src/rust/protover/ffi.rs +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -//! FFI functions, only to be called from C. -//! -//! Equivalent C versions of this api are in `protover.c` - -use libc::{c_char, c_int, uint32_t}; -use std::ffi::CStr; - -use smartlist::*; -use tor_allocate::allocate_and_copy_string; - -use errors::ProtoverError; -use protover::*; - -/// Translate C enums to Rust Proto enums, using the integer value of the C -/// enum to map to its associated Rust enum. -/// -/// C_RUST_COUPLED: protover.h `protocol_type_t` -fn translate_to_rust(c_proto: uint32_t) -> Result<Protocol, ProtoverError> { - match c_proto { - 0 => Ok(Protocol::Link), - 1 => Ok(Protocol::LinkAuth), - 2 => Ok(Protocol::Relay), - 3 => Ok(Protocol::DirCache), - 4 => Ok(Protocol::HSDir), - 5 => Ok(Protocol::HSIntro), - 6 => Ok(Protocol::HSRend), - 7 => Ok(Protocol::Desc), - 8 => Ok(Protocol::Microdesc), - 9 => Ok(Protocol::Cons), - 10 => Ok(Protocol::Padding), - 11 => Ok(Protocol::FlowCtrl), - _ => Err(ProtoverError::UnknownProtocol), - } -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::all_supported -#[no_mangle] -pub extern "C" fn protover_all_supported( - c_relay_version: *const c_char, - missing_out: *mut *mut c_char, -) -> c_int { - if c_relay_version.is_null() { - return 1; - } - - // Require an unsafe block to read the version from a C string. The pointer - // is checked above to ensure it is not null. - let c_str: &CStr = unsafe { CStr::from_ptr(c_relay_version) }; - - let relay_version = match c_str.to_str() { - Ok(n) => n, - Err(_) => return 1, - }; - - let relay_proto_entry: UnvalidatedProtoEntry = - match UnvalidatedProtoEntry::from_str_any_len(relay_version) { - Ok(n) => n, - Err(_) => return 1, - }; - - if let Some(unsupported) = relay_proto_entry.all_supported() { - if missing_out.is_null() { - return 0; - } - let ptr = allocate_and_copy_string(&unsupported.to_string()); - unsafe { *missing_out = ptr }; - - return 0; - } - - 1 -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::list_supports_protocol -#[no_mangle] -pub extern "C" fn protocol_list_supports_protocol( - c_protocol_list: *const c_char, - c_protocol: uint32_t, - version: uint32_t, -) -> c_int { - if c_protocol_list.is_null() { - return 0; - } - - // Require an unsafe block to read the version from a C string. The pointer - // is checked above to ensure it is not null. - let c_str: &CStr = unsafe { CStr::from_ptr(c_protocol_list) }; - - let protocol_list = match c_str.to_str() { - Ok(n) => n, - Err(_) => return 0, - }; - let proto_entry: UnvalidatedProtoEntry = match protocol_list.parse() { - Ok(n) => n, - Err(_) => return 0, - }; - let protocol: UnknownProtocol = match translate_to_rust(c_protocol) { - Ok(n) => n.into(), - Err(_) => return 0, - }; - if proto_entry.supports_protocol(&protocol, &version) { - 1 - } else { - 0 - } -} - -#[no_mangle] -pub extern "C" fn protover_contains_long_protocol_names_(c_protocol_list: *const c_char) -> c_int { - if c_protocol_list.is_null() { - return 1; - } - - // Require an unsafe block to read the version from a C string. The pointer - // is checked above to ensure it is not null. - let c_str: &CStr = unsafe { CStr::from_ptr(c_protocol_list) }; - - let protocol_list = match c_str.to_str() { - Ok(n) => n, - Err(_) => return 1, - }; - - match protocol_list.parse::<UnvalidatedProtoEntry>() { - Ok(_) => 0, - Err(_) => 1, - } -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::list_supports_protocol_or_later -#[no_mangle] -pub extern "C" fn protocol_list_supports_protocol_or_later( - c_protocol_list: *const c_char, - c_protocol: uint32_t, - version: uint32_t, -) -> c_int { - if c_protocol_list.is_null() { - return 0; - } - - // Require an unsafe block to read the version from a C string. The pointer - // is checked above to ensure it is not null. - let c_str: &CStr = unsafe { CStr::from_ptr(c_protocol_list) }; - - let protocol_list = match c_str.to_str() { - Ok(n) => n, - Err(_) => return 0, - }; - - let protocol = match translate_to_rust(c_protocol) { - Ok(n) => n, - Err(_) => return 0, - }; - - let proto_entry: UnvalidatedProtoEntry = match protocol_list.parse() { - Ok(n) => n, - Err(_) => return 0, - }; - - if proto_entry.supports_protocol_or_later(&protocol.into(), &version) { - return 1; - } - 0 -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::get_supported_protocols -#[no_mangle] -pub extern "C" fn protover_get_supported_protocols() -> *const c_char { - let supported: &'static CStr; - - supported = get_supported_protocols_cstr(); - supported.as_ptr() -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::compute_vote -// -// Why is the threshold a signed integer? —isis -#[no_mangle] -pub extern "C" fn protover_compute_vote(list: *const Stringlist, threshold: c_int) -> *mut c_char { - if list.is_null() { - return allocate_and_copy_string(""); - } - - // Dereference of raw pointer requires an unsafe block. The pointer is - // checked above to ensure it is not null. - let data: Vec<String> = unsafe { (*list).get_list() }; - let hold: usize = threshold as usize; - let mut proto_entries: Vec<UnvalidatedProtoEntry> = Vec::new(); - - for datum in data { - let entry: UnvalidatedProtoEntry = match datum.parse() { - Ok(n) => n, - Err(_) => continue, - }; - proto_entries.push(entry); - } - let vote: UnvalidatedProtoEntry = ProtoverVote::compute(&proto_entries, &hold); - - allocate_and_copy_string(&vote.to_string()) -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::is_supported_here -#[no_mangle] -pub extern "C" fn protover_is_supported_here(c_protocol: uint32_t, version: uint32_t) -> c_int { - let protocol = match translate_to_rust(c_protocol) { - Ok(n) => n, - Err(_) => return 0, - }; - - let is_supported = is_supported_here(&protocol, &version); - - return if is_supported { 1 } else { 0 }; -} - -/// Provide an interface for C to translate arguments and return types for -/// protover::compute_for_old_tor -#[no_mangle] -pub extern "C" fn protover_compute_for_old_tor(version: *const c_char) -> *const c_char { - let supported: &'static CStr; - let empty: &'static CStr; - - empty = cstr!(""); - - if version.is_null() { - return empty.as_ptr(); - } - - // Require an unsafe block to read the version from a C string. The pointer - // is checked above to ensure it is not null. - let c_str: &CStr = unsafe { CStr::from_ptr(version) }; - - let version = match c_str.to_str() { - Ok(n) => n, - Err(_) => return empty.as_ptr(), - }; - - supported = compute_for_old_tor_cstr(&version); - supported.as_ptr() -} diff --git a/src/rust/protover/lib.rs b/src/rust/protover/lib.rs deleted file mode 100644 index 35c4106ae5..0000000000 --- a/src/rust/protover/lib.rs +++ /dev/null @@ -1,40 +0,0 @@ -//! Copyright (c) 2016-2019, The Tor Project, Inc. */ -//! See LICENSE for licensing information */ - -//! Versioning information for different pieces of the Tor protocol. -//! -//! The below description is taken from src/rust/protover.c, which is currently -//! enabled by default. We are in the process of experimenting with Rust in -//! tor, and this protover module is implemented to help achieve this goal. -//! -//! Starting in version 0.2.9.3-alpha, Tor places separate version numbers on -//! each of the different components of its protocol. Relays use these numbers -//! to advertise what versions of the protocols they can support, and clients -//! use them to find what they can ask a given relay to do. Authorities vote -//! on the supported protocol versions for each relay, and also vote on the -//! which protocols you should have to support in order to be on the Tor -//! network. All Tor instances use these required/recommended protocol versions -//! to tell what level of support for recent protocols each relay has, and -//! to decide whether they should be running given their current protocols. -//! -//! The main advantage of these protocol versions numbers over using Tor -//! version numbers is that they allow different implementations of the Tor -//! protocols to develop independently, without having to claim compatibility -//! with specific versions of Tor. - -// XXX: add missing docs -//#![deny(missing_docs)] - -extern crate external; -extern crate libc; -extern crate smartlist; -extern crate tor_allocate; -#[macro_use] -extern crate tor_util; - -pub mod errors; -pub mod ffi; -pub mod protoset; -mod protover; - -pub use protover::*; diff --git a/src/rust/protover/protoset.rs b/src/rust/protover/protoset.rs deleted file mode 100644 index 0ab94457c5..0000000000 --- a/src/rust/protover/protoset.rs +++ /dev/null @@ -1,697 +0,0 @@ -// Copyright (c) 2018-2019, The Tor Project, Inc. -// Copyright (c) 2018, isis agora lovecruft -// See LICENSE for licensing information - -//! Sets for lazily storing ordered, non-overlapping ranges of integers. - -use std::cmp; -use std::iter; -use std::slice; -use std::str::FromStr; -use std::u32; - -use errors::ProtoverError; - -/// A single version number. -pub type Version = u32; - -/// A `ProtoSet` stores an ordered `Vec<T>` of `(low, high)` pairs of ranges of -/// non-overlapping protocol versions. -/// -/// # Examples -/// -/// ``` -/// use std::str::FromStr; -/// -/// use protover::errors::ProtoverError; -/// use protover::protoset::ProtoSet; -/// use protover::protoset::Version; -/// -/// # fn do_test() -> Result<ProtoSet, ProtoverError> { -/// let protoset: ProtoSet = ProtoSet::from_str("3-5,8")?; -/// -/// // We could also equivalently call: -/// let protoset: ProtoSet = "3-5,8".parse()?; -/// -/// assert!(protoset.contains(&4)); -/// assert!(!protoset.contains(&7)); -/// -/// let expanded: Vec<Version> = protoset.clone().into(); -/// -/// assert_eq!(&expanded[..], &[3, 4, 5, 8]); -/// -/// let contracted: String = protoset.clone().to_string(); -/// -/// assert_eq!(contracted, "3-5,8".to_string()); -/// # Ok(protoset) -/// # } -/// # fn main() { do_test(); } // wrap the test so we can use the ? operator -#[derive(Clone, Debug, Eq, PartialEq, Hash)] -pub struct ProtoSet { - pub(crate) pairs: Vec<(Version, Version)>, -} - -impl Default for ProtoSet { - fn default() -> Self { - let pairs: Vec<(Version, Version)> = Vec::new(); - - ProtoSet { pairs } - } -} - -impl<'a> ProtoSet { - /// Create a new `ProtoSet` from a slice of `(low, high)` pairs. - /// - /// # Inputs - /// - /// We do not assume the input pairs are deduplicated or ordered. - pub fn from_slice(low_high_pairs: &'a [(Version, Version)]) -> Result<Self, ProtoverError> { - let mut pairs: Vec<(Version, Version)> = Vec::with_capacity(low_high_pairs.len()); - - for &(low, high) in low_high_pairs { - pairs.push((low, high)); - } - // Sort the pairs without reallocation and remove all duplicate pairs. - pairs.sort_unstable(); - pairs.dedup(); - - ProtoSet { pairs }.is_ok() - } -} - -/// Expand this `ProtoSet` to a `Vec` of all its `Version`s. -/// -/// # Examples -/// -/// ``` -/// use std::str::FromStr; -/// use protover::protoset::ProtoSet; -/// use protover::protoset::Version; -/// # use protover::errors::ProtoverError; -/// -/// # fn do_test() -> Result<Vec<Version>, ProtoverError> { -/// let protoset: ProtoSet = ProtoSet::from_str("3-5,21")?; -/// let versions: Vec<Version> = protoset.into(); -/// -/// assert_eq!(&versions[..], &[3, 4, 5, 21]); -/// # -/// # Ok(versions) -/// # } -/// # fn main() { do_test(); } // wrap the test so we can use the ? operator -/// ``` -impl Into<Vec<Version>> for ProtoSet { - fn into(self) -> Vec<Version> { - let mut versions: Vec<Version> = Vec::new(); - - for &(low, high) in self.iter() { - versions.extend(low..high + 1); - } - versions - } -} - -impl ProtoSet { - /// Get an iterator over the `(low, high)` `pairs` in this `ProtoSet`. - pub fn iter(&self) -> slice::Iter<(Version, Version)> { - self.pairs.iter() - } - - /// Expand this `ProtoSet` into a `Vec` of all its `Version`s. - /// - /// # Examples - /// - /// ``` - /// # use protover::errors::ProtoverError; - /// use protover::protoset::ProtoSet; - /// - /// # fn do_test() -> Result<bool, ProtoverError> { - /// let protoset: ProtoSet = "3-5,9".parse()?; - /// - /// assert_eq!(protoset.expand(), vec![3, 4, 5, 9]); - /// - /// let protoset: ProtoSet = "1,3,5-7".parse()?; - /// - /// assert_eq!(protoset.expand(), vec![1, 3, 5, 6, 7]); - /// # - /// # Ok(true) - /// # } - /// # fn main() { do_test(); } // wrap the test so we can use the ? operator - /// ``` - pub fn expand(self) -> Vec<Version> { - self.into() - } - - pub fn len(&self) -> usize { - let mut length: usize = 0; - - for &(low, high) in self.iter() { - length += (high as usize - low as usize) + 1; - } - - length - } - - /// Check that this `ProtoSet` is well-formed. - /// - /// This is automatically called in `ProtoSet::from_str()`. - /// - /// # Errors - /// - /// * `ProtoverError::LowGreaterThanHigh`: if its `pairs` were not - /// well-formed, i.e. a `low` in a `(low, high)` was higher than the - /// previous `high`, - /// * `ProtoverError::Overlap`: if one or more of the `pairs` are - /// overlapping, - /// * `ProtoverError::ExceedsMax`: if the number of versions when expanded - /// would exceed `MAX_PROTOCOLS_TO_EXPAND`, and - /// - /// # Returns - /// - /// A `Result` whose `Ok` is this `Protoset`, and whose `Err` is one of the - /// errors enumerated in the Errors section above. - fn is_ok(self) -> Result<ProtoSet, ProtoverError> { - let mut last_high: Version = 0; - - for &(low, high) in self.iter() { - if low == u32::MAX || high == u32::MAX { - return Err(ProtoverError::ExceedsMax); - } - if low <= last_high { - return Err(ProtoverError::Overlap); - } else if low > high { - return Err(ProtoverError::LowGreaterThanHigh); - } - last_high = high; - } - - Ok(self) - } - - /// Determine if this `ProtoSet` contains no `Version`s. - /// - /// # Returns - /// - /// * `true` if this `ProtoSet`'s length is zero, and - /// * `false` otherwise. - /// - /// # Examples - /// - /// ``` - /// use protover::protoset::ProtoSet; - /// - /// let protoset: ProtoSet = ProtoSet::default(); - /// - /// assert!(protoset.is_empty()); - /// ``` - pub fn is_empty(&self) -> bool { - self.pairs.len() == 0 - } - - /// Determine if `version` is included within this `ProtoSet`. - /// - /// # Inputs - /// - /// * `version`: a `Version`. - /// - /// # Returns - /// - /// `true` if the `version` is contained within this set; `false` otherwise. - /// - /// # Examples - /// - /// ``` - /// # use protover::errors::ProtoverError; - /// use protover::protoset::ProtoSet; - /// - /// # fn do_test() -> Result<ProtoSet, ProtoverError> { - /// let protoset: ProtoSet = ProtoSet::from_slice(&[(0, 5), (7, 9), (13, 14)])?; - /// - /// assert!(protoset.contains(&5)); - /// assert!(!protoset.contains(&10)); - /// # - /// # Ok(protoset) - /// # } - /// # fn main() { do_test(); } // wrap the test so we can use the ? operator - /// ``` - pub fn contains(&self, version: &Version) -> bool { - for &(low, high) in self.iter() { - if low <= *version && *version <= high { - return true; - } - } - false - } - - /// Returns all the `Version`s in `self` which are not also in the `other` - /// `ProtoSet`. - /// - /// # Examples - /// - /// ``` - /// # use protover::errors::ProtoverError; - /// use protover::protoset::ProtoSet; - /// - /// # fn do_test() -> Result<bool, ProtoverError> { - /// let protoset: ProtoSet = "1,3-6,10-12,15-16".parse()?; - /// let other: ProtoSet = "2,5-7,9-11,14-20".parse()?; - /// - /// let subset: ProtoSet = protoset.and_not_in(&other); - /// - /// assert_eq!(subset.expand(), vec![1, 3, 4, 12]); - /// # - /// # Ok(true) - /// # } - /// # fn main() { do_test(); } // wrap the test so we can use the ? operator - /// ``` - pub fn and_not_in(&self, other: &Self) -> Self { - if self.is_empty() || other.is_empty() { - return self.clone(); - } - - let pairs = self.iter().flat_map(|&(lo, hi)| { - let the_end = (hi + 1, hi + 1); // special case to mark the end of the range. - let excluded_ranges = other - .iter() - .cloned() // have to be owned tuples, to match iter::once(the_end). - .skip_while(move|&(_, hi2)| hi2 < lo) // skip the non-overlapping ranges. - .take_while(move|&(lo2, _)| lo2 <= hi) // take all the overlapping ones. - .chain(iter::once(the_end)); - - let mut nextlo = lo; - excluded_ranges.filter_map(move |(excluded_lo, excluded_hi)| { - let pair = if nextlo < excluded_lo { - Some((nextlo, excluded_lo - 1)) - } else { - None - }; - nextlo = cmp::min(excluded_hi, u32::MAX - 1) + 1; - pair - }) - }); - - let pairs = pairs.collect(); - ProtoSet::is_ok(ProtoSet { pairs }).expect("should be already sorted") - } -} - -/// Largest allowed protocol version. -/// C_RUST_COUPLED: protover.c `MAX_PROTOCOL_VERSION` -const MAX_PROTOCOL_VERSION: Version = 63; - -impl FromStr for ProtoSet { - type Err = ProtoverError; - - /// Parse the unique version numbers supported by a subprotocol from a string. - /// - /// # Inputs - /// - /// * `version_string`, a string comprised of "[0-9,-]" - /// - /// # Returns - /// - /// A `Result` whose `Ok` value is a `ProtoSet` holding all of the unique - /// version numbers. - /// - /// The returned `Result`'s `Err` value is an `ProtoverError` appropriate to - /// the error. - /// - /// # Errors - /// - /// This function will error if: - /// - /// * the `version_string` is an equals (`"="`) sign, - /// * the expansion of a version range produces an error (see - /// `expand_version_range`), - /// * any single version number is not parseable as an `u32` in radix 10, or - /// * there are greater than 2^16 version numbers to expand. - /// - /// # Examples - /// - /// ``` - /// use std::str::FromStr; - /// - /// use protover::errors::ProtoverError; - /// use protover::protoset::ProtoSet; - /// - /// # fn do_test() -> Result<ProtoSet, ProtoverError> { - /// let protoset: ProtoSet = ProtoSet::from_str("2-5,8")?; - /// - /// assert!(protoset.contains(&5)); - /// assert!(!protoset.contains(&10)); - /// - /// // We can also equivalently call `ProtoSet::from_str` by doing (all - /// // implementations of `FromStr` can be called this way, this one isn't - /// // special): - /// let protoset: ProtoSet = "4-6,12".parse()?; - /// - /// // Calling it (either way) can take really large ranges (up to `u32::MAX`): - /// let protoset: ProtoSet = "1-70000".parse()?; - /// let protoset: ProtoSet = "1-4294967296".parse()?; - /// - /// // There are lots of ways to get an `Err` from this function. Here are - /// // a few: - /// assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("=")); - /// assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("-")); - /// assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("not_an_int")); - /// assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("3-")); - /// assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1-,4")); - /// - /// // An empty string is, however, legal, and results in an - /// // empty `ProtoSet`: - /// assert_eq!(Ok(ProtoSet::default()), ProtoSet::from_str("")); - /// # - /// # Ok(protoset) - /// # } - /// # fn main() { do_test(); } // wrap the test so we can use the ? operator - /// ``` - fn from_str(version_string: &str) -> Result<Self, Self::Err> { - // If we were passed in an empty string, then return an empty ProtoSet. - if version_string.is_empty() { - return Ok(Self::default()); - } - - let mut pairs: Vec<(Version, Version)> = Vec::new(); - let pieces: ::std::str::Split<char> = version_string.split(','); - - for p in pieces { - let (lo,hi) = if p.contains('-') { - let mut pair = p.splitn(2, '-'); - - let low = pair.next().ok_or(ProtoverError::Unparseable)?; - let high = pair.next().ok_or(ProtoverError::Unparseable)?; - - let lo: Version = low.parse().or(Err(ProtoverError::Unparseable))?; - let hi: Version = high.parse().or(Err(ProtoverError::Unparseable))?; - - (lo,hi) - } else { - let v: u32 = p.parse().or(Err(ProtoverError::Unparseable))?; - - (v, v) - }; - - if lo > MAX_PROTOCOL_VERSION || hi > MAX_PROTOCOL_VERSION { - return Err(ProtoverError::ExceedsMax); - } - pairs.push((lo, hi)); - } - - ProtoSet::from_slice(&pairs[..]) - } -} - -impl ToString for ProtoSet { - /// Contracts a `ProtoSet` of versions into a string. - /// - /// # Returns - /// - /// A `String` representation of this `ProtoSet` in ascending order. - fn to_string(&self) -> String { - let mut final_output: Vec<String> = Vec::new(); - - for &(lo, hi) in self.iter() { - if lo != hi { - debug_assert!(lo < hi); - final_output.push(format!("{}-{}", lo, hi)); - } else { - final_output.push(format!("{}", lo)); - } - } - final_output.join(",") - } -} - -/// Checks to see if there is a continuous range of integers, starting at the -/// first in the list. Returns the last integer in the range if a range exists. -/// -/// # Inputs -/// -/// `list`, an ordered vector of `u32` integers of "[0-9,-]" representing the -/// supported versions for a single protocol. -/// -/// # Returns -/// -/// A `bool` indicating whether the list contains a range, starting at the first -/// in the list, a`Version` of the last integer in the range, and a `usize` of -/// the index of that version. -/// -/// For example, if given vec![1, 2, 3, 5], find_range will return true, -/// as there is a continuous range, and 3, which is the last number in the -/// continuous range, and 2 which is the index of 3. -fn find_range(list: &Vec<Version>) -> (bool, Version, usize) { - if list.len() == 0 { - return (false, 0, 0); - } - - let mut index: usize = 0; - let mut iterable = list.iter().peekable(); - let mut range_end = match iterable.next() { - Some(n) => *n, - None => return (false, 0, 0), - }; - - let mut has_range = false; - - while iterable.peek().is_some() { - let n = *iterable.next().unwrap(); - if n != range_end + 1 { - break; - } - - has_range = true; - range_end = n; - index += 1; - } - - (has_range, range_end, index) -} - -impl From<Vec<Version>> for ProtoSet { - fn from(mut v: Vec<Version>) -> ProtoSet { - let mut version_pairs: Vec<(Version, Version)> = Vec::new(); - - v.sort_unstable(); - v.dedup(); - - 'vector: while !v.is_empty() { - let (has_range, end, index): (bool, Version, usize) = find_range(&v); - - if has_range { - let first: Version = match v.first() { - Some(x) => *x, - None => continue, - }; - let last: Version = match v.get(index) { - Some(x) => *x, - None => continue, - }; - debug_assert!(last == end, format!("last = {}, end = {}", last, end)); - - version_pairs.push((first, last)); - v = v.split_off(index + 1); - - if v.len() == 0 { - break 'vector; - } - } else { - let last: Version = match v.get(index) { - Some(x) => *x, - None => continue, - }; - version_pairs.push((last, last)); - v.remove(index); - } - } - ProtoSet::from_slice(&version_pairs[..]).unwrap_or(ProtoSet::default()) - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_find_range() { - assert_eq!((false, 0, 0), find_range(&vec![])); - assert_eq!((false, 1, 0), find_range(&vec![1])); - assert_eq!((true, 2, 1), find_range(&vec![1, 2])); - assert_eq!((true, 3, 2), find_range(&vec![1, 2, 3])); - assert_eq!((true, 3, 2), find_range(&vec![1, 2, 3, 5])); - } - - macro_rules! assert_contains_each { - ($protoset:expr, $versions:expr) => { - for version in $versions { - assert!($protoset.contains(version)); - } - }; - } - - macro_rules! test_protoset_contains_versions { - ($list:expr, $str:expr) => { - let versions: &[Version] = $list; - let protoset: Result<ProtoSet, ProtoverError> = ProtoSet::from_str($str); - - assert!(protoset.is_ok()); - let p = protoset.unwrap(); - assert_contains_each!(p, versions); - }; - } - - #[test] - fn test_versions_from_str() { - test_protoset_contains_versions!(&[], ""); - test_protoset_contains_versions!(&[1], "1"); - test_protoset_contains_versions!(&[1, 2], "1,2"); - test_protoset_contains_versions!(&[1, 2, 3], "1-3"); - test_protoset_contains_versions!(&[1, 2, 5], "1-2,5"); - test_protoset_contains_versions!(&[1, 3, 4, 5], "1,3-5"); - test_protoset_contains_versions!(&[42, 55, 56, 57, 58], "42,55-58"); - } - - #[test] - fn test_versions_from_str_ab() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("a,b")); - } - - #[test] - fn test_versions_from_str_negative_1() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("-1")); - } - - #[test] - fn test_versions_from_str_commas() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str(",")); - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,,2")); - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,2,")); - } - - #[test] - fn test_versions_from_str_hyphens() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("--1")); - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("-1-2")); - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1--2")); - } - - #[test] - fn test_versions_from_str_triple() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1-2-3")); - } - - #[test] - fn test_versions_from_str_1exclam() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,!")); - } - - #[test] - fn test_versions_from_str_percent_equal() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("%=")); - } - - #[test] - fn test_versions_from_str_whitespace() { - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,2\n")); - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1\r,2")); - assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,\t2")); - } - - #[test] - fn test_versions_from_str_overlap() { - assert_eq!(Err(ProtoverError::Overlap), ProtoSet::from_str("1-3,2-4")); - } - - #[test] - fn test_versions_from_slice_overlap() { - assert_eq!( - Err(ProtoverError::Overlap), - ProtoSet::from_slice(&[(1, 3), (2, 4)]) - ); - } - - #[test] - fn test_versions_from_str_max() { - assert_eq!( - Err(ProtoverError::ExceedsMax), - ProtoSet::from_str("4294967295") - ); - } - - #[test] - fn test_versions_from_slice_max() { - assert_eq!( - Err(ProtoverError::ExceedsMax), - ProtoSet::from_slice(&[(4294967295, 4294967295)]) - ); - } - - #[test] - fn test_protoset_contains() { - let protoset: ProtoSet = ProtoSet::from_slice(&[(1, 5), (7, 9), (13, 14)]).unwrap(); - - for x in 1..6 { - assert!(protoset.contains(&x), format!("should contain {}", x)); - } - for x in 7..10 { - assert!(protoset.contains(&x), format!("should contain {}", x)); - } - for x in 13..15 { - assert!(protoset.contains(&x), format!("should contain {}", x)); - } - - for x in [6, 10, 11, 12, 15, 42, 43, 44, 45, 1234584].iter() { - assert!(!protoset.contains(&x), format!("should not contain {}", x)); - } - } - - #[test] - fn test_protoset_contains_1_3() { - let protoset: ProtoSet = ProtoSet::from_slice(&[(1, 3)]).unwrap(); - - for x in 1..4 { - assert!(protoset.contains(&x), format!("should contain {}", x)); - } - } - - macro_rules! assert_protoset_from_vec_contains_all { - ($($x:expr),*) => ( - let vec: Vec<Version> = vec!($($x),*); - let protoset: ProtoSet = vec.clone().into(); - - for x in vec.iter() { - assert!(protoset.contains(&x)); - } - ) - } - - #[test] - fn test_protoset_from_vec_123() { - assert_protoset_from_vec_contains_all!(1, 2, 3); - } - - #[test] - fn test_protoset_from_vec_1_315() { - assert_protoset_from_vec_contains_all!(1, 2, 3, 15); - } - - #[test] - fn test_protoset_from_vec_unordered() { - let v: Vec<Version> = vec![2, 3, 8, 4, 3, 9, 7, 2]; - let ps: ProtoSet = v.into(); - - assert_eq!(ps.to_string(), "2-4,7-9"); - } - - #[test] - fn test_protoset_into_vec() { - let ps: ProtoSet = "1-13,42".parse().unwrap(); - let v: Vec<Version> = ps.into(); - - assert!(v.contains(&7)); - assert!(v.contains(&42)); - } -} - -#[cfg(all(test, feature = "bench"))] -mod bench { - use super::*; -} diff --git a/src/rust/protover/protover.rs b/src/rust/protover/protover.rs deleted file mode 100644 index da87509ffa..0000000000 --- a/src/rust/protover/protover.rs +++ /dev/null @@ -1,984 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -use std::collections::hash_map; -use std::collections::HashMap; -use std::ffi::CStr; -use std::fmt; -use std::str; -use std::str::FromStr; -use std::string::String; - -use external::c_tor_version_as_new_as; - -use errors::ProtoverError; -use protoset::ProtoSet; -use protoset::Version; - -/// The first version of Tor that included "proto" entries in its descriptors. -/// Authorities should use this to decide whether to guess proto lines. -/// -/// C_RUST_COUPLED: -/// protover.h `FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS` -const FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS: &'static str = "0.2.9.3-alpha"; - -/// The maximum number of subprotocol version numbers we will attempt to expand -/// before concluding that someone is trying to DoS us -/// -/// C_RUST_COUPLED: protover.c `MAX_PROTOCOLS_TO_EXPAND` -const MAX_PROTOCOLS_TO_EXPAND: usize = 1 << 16; - -/// The maximum size an `UnknownProtocol`'s name may be. -pub(crate) const MAX_PROTOCOL_NAME_LENGTH: usize = 100; - -/// Known subprotocols in Tor. Indicates which subprotocol a relay supports. -/// -/// C_RUST_COUPLED: protover.h `protocol_type_t` -#[derive(Clone, Hash, Eq, PartialEq, Debug)] -pub enum Protocol { - Cons, - Desc, - DirCache, - HSDir, - HSIntro, - HSRend, - Link, - LinkAuth, - Microdesc, - Relay, - Padding, - FlowCtrl, -} - -impl fmt::Display for Protocol { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{:?}", self) - } -} - -/// Translates a string representation of a protocol into a Proto type. -/// Error if the string is an unrecognized protocol name. -/// -/// C_RUST_COUPLED: protover.c `PROTOCOL_NAMES` -impl FromStr for Protocol { - type Err = ProtoverError; - - fn from_str(s: &str) -> Result<Self, Self::Err> { - match s { - "Cons" => Ok(Protocol::Cons), - "Desc" => Ok(Protocol::Desc), - "DirCache" => Ok(Protocol::DirCache), - "HSDir" => Ok(Protocol::HSDir), - "HSIntro" => Ok(Protocol::HSIntro), - "HSRend" => Ok(Protocol::HSRend), - "Link" => Ok(Protocol::Link), - "LinkAuth" => Ok(Protocol::LinkAuth), - "Microdesc" => Ok(Protocol::Microdesc), - "Relay" => Ok(Protocol::Relay), - "Padding" => Ok(Protocol::Padding), - "FlowCtrl" => Ok(Protocol::FlowCtrl), - _ => Err(ProtoverError::UnknownProtocol), - } - } -} - -/// A protocol string which is not one of the `Protocols` we currently know -/// about. -#[derive(Clone, Debug, Hash, Eq, PartialEq)] -pub struct UnknownProtocol(String); - -impl fmt::Display for UnknownProtocol { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", self.0) - } -} - -fn is_valid_proto(s: &str) -> bool { - s.chars().all(|c| c.is_ascii_alphanumeric() || c == '-') -} - -impl FromStr for UnknownProtocol { - type Err = ProtoverError; - - fn from_str(s: &str) -> Result<Self, Self::Err> { - if !is_valid_proto(s) { - Err(ProtoverError::InvalidProtocol) - } else if s.len() <= MAX_PROTOCOL_NAME_LENGTH { - Ok(UnknownProtocol(s.to_string())) - } else { - Err(ProtoverError::ExceedsNameLimit) - } - } -} - -impl UnknownProtocol { - /// Create an `UnknownProtocol`, ignoring whether or not it - /// exceeds MAX_PROTOCOL_NAME_LENGTH. - fn from_str_any_len(s: &str) -> Result<Self, ProtoverError> { - if !is_valid_proto(s) { - return Err(ProtoverError::InvalidProtocol); - } - Ok(UnknownProtocol(s.to_string())) - } -} - -impl From<Protocol> for UnknownProtocol { - fn from(p: Protocol) -> UnknownProtocol { - UnknownProtocol(p.to_string()) - } -} - -#[cfg(feature = "test_linking_hack")] -fn have_linkauth_v1() -> bool { - true -} - -#[cfg(not(feature = "test_linking_hack"))] -fn have_linkauth_v1() -> bool { - use external::c_tor_is_using_nss; - !c_tor_is_using_nss() -} - -/// Get a CStr representation of current supported protocols, for -/// passing to C, or for converting to a `&str` for Rust. -/// -/// # Returns -/// -/// An `&'static CStr` whose value is the existing protocols supported by tor. -/// Returned data is in the format as follows: -/// -/// "HSDir=1-1 LinkAuth=1" -/// -/// # Note -/// -/// Rust code can use the `&'static CStr` as a normal `&'a str` by -/// calling `protover::get_supported_protocols`. -/// -// C_RUST_COUPLED: protover.c `protover_get_supported_protocols` -pub(crate) fn get_supported_protocols_cstr() -> &'static CStr { - if !have_linkauth_v1() { - cstr!( - "Cons=1-2 \ - Desc=1-2 \ - DirCache=2 \ - FlowCtrl=1 \ - HSDir=1-2 \ - HSIntro=3-5 \ - HSRend=1-2 \ - Link=1-5 \ - LinkAuth=3 \ - Microdesc=1-2 \ - Padding=2 \ - Relay=1-3" - ) - } else { - cstr!( - "Cons=1-2 \ - Desc=1-2 \ - DirCache=2 \ - FlowCtrl=1 \ - HSDir=1-2 \ - HSIntro=3-5 \ - HSRend=1-2 \ - Link=1-5 \ - LinkAuth=1,3 \ - Microdesc=1-2 \ - Padding=2 \ - Relay=1-3" - ) - } -} - -/// A map of protocol names to the versions of them which are supported. -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct ProtoEntry(HashMap<Protocol, ProtoSet>); - -impl Default for ProtoEntry { - fn default() -> ProtoEntry { - ProtoEntry(HashMap::new()) - } -} - -impl ProtoEntry { - /// Get an iterator over the `Protocol`s and their `ProtoSet`s in this `ProtoEntry`. - pub fn iter(&self) -> hash_map::Iter<Protocol, ProtoSet> { - self.0.iter() - } - - /// Translate the supported tor versions from a string into a - /// ProtoEntry, which is useful when looking up a specific - /// subprotocol. - pub fn supported() -> Result<Self, ProtoverError> { - let supported_cstr: &'static CStr = get_supported_protocols_cstr(); - let supported: &str = supported_cstr.to_str().unwrap_or(""); - - supported.parse() - } - - pub fn len(&self) -> usize { - self.0.len() - } - - pub fn get(&self, protocol: &Protocol) -> Option<&ProtoSet> { - self.0.get(protocol) - } - - pub fn insert(&mut self, key: Protocol, value: ProtoSet) { - self.0.insert(key, value); - } - - pub fn remove(&mut self, key: &Protocol) -> Option<ProtoSet> { - self.0.remove(key) - } - - pub fn is_empty(&self) -> bool { - self.0.is_empty() - } -} - -impl FromStr for ProtoEntry { - type Err = ProtoverError; - - /// Parse a string of subprotocol types and their version numbers. - /// - /// # Inputs - /// - /// * A `protocol_entry` string, comprised of a keywords, an "=" sign, and - /// one or more version numbers, each separated by a space. For example, - /// `"Cons=3-4 HSDir=1"`. - /// - /// # Returns - /// - /// A `Result` whose `Ok` value is a `ProtoEntry`. - /// Otherwise, the `Err` value of this `Result` is a `ProtoverError`. - fn from_str(protocol_entry: &str) -> Result<ProtoEntry, ProtoverError> { - let mut proto_entry: ProtoEntry = ProtoEntry::default(); - - if protocol_entry.is_empty() { - return Ok(proto_entry); - } - - let entries = protocol_entry.split(' '); - - for entry in entries { - let mut parts = entry.splitn(2, '='); - - let proto = match parts.next() { - Some(n) => n, - None => return Err(ProtoverError::Unparseable), - }; - - let vers = match parts.next() { - Some(n) => n, - None => return Err(ProtoverError::Unparseable), - }; - let versions: ProtoSet = vers.parse()?; - let proto_name: Protocol = proto.parse()?; - - proto_entry.insert(proto_name, versions); - - if proto_entry.len() > MAX_PROTOCOLS_TO_EXPAND { - return Err(ProtoverError::ExceedsMax); - } - } - Ok(proto_entry) - } -} - -/// Generate an implementation of `ToString` for either a `ProtoEntry` or an -/// `UnvalidatedProtoEntry`. -macro_rules! impl_to_string_for_proto_entry { - ($t:ty) => { - impl ToString for $t { - fn to_string(&self) -> String { - let mut parts: Vec<String> = Vec::new(); - - for (protocol, versions) in self.iter() { - parts.push(format!("{}={}", protocol.to_string(), versions.to_string())); - } - parts.sort_unstable(); - parts.join(" ") - } - } - }; -} - -impl_to_string_for_proto_entry!(ProtoEntry); -impl_to_string_for_proto_entry!(UnvalidatedProtoEntry); - -/// A `ProtoEntry`, but whose `Protocols` can be any `UnknownProtocol`, not just -/// the supported ones enumerated in `Protocols`. The protocol versions are -/// validated, however. -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct UnvalidatedProtoEntry(HashMap<UnknownProtocol, ProtoSet>); - -impl Default for UnvalidatedProtoEntry { - fn default() -> UnvalidatedProtoEntry { - UnvalidatedProtoEntry(HashMap::new()) - } -} - -impl UnvalidatedProtoEntry { - /// Get an iterator over the `Protocol`s and their `ProtoSet`s in this `ProtoEntry`. - pub fn iter(&self) -> hash_map::Iter<UnknownProtocol, ProtoSet> { - self.0.iter() - } - - pub fn get(&self, protocol: &UnknownProtocol) -> Option<&ProtoSet> { - self.0.get(protocol) - } - - pub fn insert(&mut self, key: UnknownProtocol, value: ProtoSet) { - self.0.insert(key, value); - } - - pub fn remove(&mut self, key: &UnknownProtocol) -> Option<ProtoSet> { - self.0.remove(key) - } - - pub fn is_empty(&self) -> bool { - self.0.is_empty() - } - - pub fn len(&self) -> usize { - let mut total: usize = 0; - - for (_, versions) in self.iter() { - total += versions.len(); - } - total - } - - /// Determine if we support every protocol a client supports, and if not, - /// determine which protocols we do not have support for. - /// - /// # Returns - /// - /// Optionally, return parameters which the client supports but which we do not. - /// - /// # Examples - /// ``` - /// use protover::UnvalidatedProtoEntry; - /// - /// let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap(); - /// let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - /// assert_eq!(true, unsupported.is_none()); - /// - /// let protocols: UnvalidatedProtoEntry = "Link=1-2 Wombat=9".parse().unwrap(); - /// let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - /// assert_eq!(true, unsupported.is_some()); - /// assert_eq!("Wombat=9", &unsupported.unwrap().to_string()); - /// ``` - pub fn all_supported(&self) -> Option<UnvalidatedProtoEntry> { - let mut unsupported: UnvalidatedProtoEntry = UnvalidatedProtoEntry::default(); - let supported: ProtoEntry = match ProtoEntry::supported() { - Ok(x) => x, - Err(_) => return None, - }; - - for (protocol, versions) in self.iter() { - let is_supported: Result<Protocol, ProtoverError> = protocol.0.parse(); - let supported_protocol: Protocol; - - // If the protocol wasn't even in the enum, then we definitely don't - // know about it and don't support any of its versions. - if is_supported.is_err() { - if !versions.is_empty() { - unsupported.insert(protocol.clone(), versions.clone()); - } - continue; - } else { - supported_protocol = is_supported.unwrap(); - } - - let maybe_supported_versions: Option<&ProtoSet> = supported.get(&supported_protocol); - let supported_versions: &ProtoSet; - - // If the protocol wasn't in the map, then we don't know about it - // and don't support any of its versions. Add its versions to the - // map (if it has versions). - if maybe_supported_versions.is_none() { - if !versions.is_empty() { - unsupported.insert(protocol.clone(), versions.clone()); - } - continue; - } else { - supported_versions = maybe_supported_versions.unwrap(); - } - let unsupported_versions = versions.and_not_in(supported_versions); - - if !unsupported_versions.is_empty() { - unsupported.insert(protocol.clone(), unsupported_versions); - } - } - - if unsupported.is_empty() { - return None; - } - Some(unsupported) - } - - /// Determine if we have support for some protocol and version. - /// - /// # Inputs - /// - /// * `proto`, an `UnknownProtocol` to test support for - /// * `vers`, a `Version` which we will go on to determine whether the - /// specified protocol supports. - /// - /// # Return - /// - /// Returns `true` iff this `UnvalidatedProtoEntry` includes support for the - /// indicated protocol and version, and `false` otherwise. - /// - /// # Examples - /// - /// ``` - /// # use std::str::FromStr; - /// use protover::*; - /// # use protover::errors::ProtoverError; - /// - /// # fn do_test () -> Result<UnvalidatedProtoEntry, ProtoverError> { - /// let proto: UnvalidatedProtoEntry = "Link=3-4 Cons=1 Doggo=3-5".parse()?; - /// assert_eq!(true, proto.supports_protocol(&Protocol::Cons.into(), &1)); - /// assert_eq!(false, proto.supports_protocol(&Protocol::Cons.into(), &5)); - /// assert_eq!(true, proto.supports_protocol(&UnknownProtocol::from_str("Doggo")?, &4)); - /// # Ok(proto) - /// # } fn main () { do_test(); } - /// ``` - pub fn supports_protocol(&self, proto: &UnknownProtocol, vers: &Version) -> bool { - let supported_versions: &ProtoSet = match self.get(proto) { - Some(n) => n, - None => return false, - }; - supported_versions.contains(&vers) - } - - /// As `UnvalidatedProtoEntry::supports_protocol()`, but also returns `true` - /// if any later version of the protocol is supported. - /// - /// # Examples - /// ``` - /// use protover::*; - /// # use protover::errors::ProtoverError; - /// - /// # fn do_test () -> Result<UnvalidatedProtoEntry, ProtoverError> { - /// let proto: UnvalidatedProtoEntry = "Link=3-4 Cons=5".parse()?; - /// - /// assert_eq!(true, proto.supports_protocol_or_later(&Protocol::Cons.into(), &5)); - /// assert_eq!(true, proto.supports_protocol_or_later(&Protocol::Cons.into(), &4)); - /// assert_eq!(false, proto.supports_protocol_or_later(&Protocol::Cons.into(), &6)); - /// # Ok(proto) - /// # } fn main () { do_test(); } - /// ``` - pub fn supports_protocol_or_later(&self, proto: &UnknownProtocol, vers: &Version) -> bool { - let supported_versions: &ProtoSet = match self.get(&proto) { - Some(n) => n, - None => return false, - }; - supported_versions.iter().any(|v| v.1 >= *vers) - } - - /// Split a string containing (potentially) several protocols and their - /// versions into a `Vec` of tuples of string in `(protocol, versions)` - /// form. - /// - /// # Inputs - /// - /// A &str in the form `"Link=3-4 Cons=5"`. - /// - /// # Returns - /// - /// A `Result` whose `Ok` variant is a `Vec<(&str, &str)>` of `(protocol, - /// versions)`, or whose `Err` variant is a `ProtoverError`. - /// - /// # Errors - /// - /// This will error with a `ProtoverError::Unparseable` if any of the - /// following are true: - /// - /// * If a protocol name is an empty string, e.g. `"Cons=1,3 =3-5"`. - /// * If an entry has no equals sign, e.g. `"Cons=1,3 Desc"`. - /// * If there is leading or trailing whitespace, e.g. `" Cons=1,3 Link=3"`. - /// * If there is any other extra whitespice, e.g. `"Cons=1,3 Link=3"`. - fn parse_protocol_and_version_str<'a>( - protocol_string: &'a str, - ) -> Result<Vec<(&'a str, &'a str)>, ProtoverError> { - let mut protovers: Vec<(&str, &str)> = Vec::new(); - - if protocol_string.is_empty() { - return Ok(protovers); - } - - for subproto in protocol_string.split(' ') { - let mut parts = subproto.splitn(2, '='); - - let name = match parts.next() { - Some("") => return Err(ProtoverError::Unparseable), - Some(n) => n, - None => return Err(ProtoverError::Unparseable), - }; - let vers = match parts.next() { - Some(n) => n, - None => return Err(ProtoverError::Unparseable), - }; - protovers.push((name, vers)); - } - Ok(protovers) - } -} - -impl FromStr for UnvalidatedProtoEntry { - type Err = ProtoverError; - - /// Parses a protocol list without validating the protocol names. - /// - /// # Inputs - /// - /// * `protocol_string`, a string comprised of keys and values, both which are - /// strings. The keys are the protocol names while values are a string - /// representation of the supported versions. - /// - /// The input is _not_ expected to be a subset of the Protocol types - /// - /// # Returns - /// - /// A `Result` whose `Ok` value is an `UnvalidatedProtoEntry`. - /// - /// The returned `Result`'s `Err` value is an `ProtoverError`. - /// - /// # Errors - /// - /// This function will error if: - /// - /// * The protocol string does not follow the "protocol_name=version_list" - /// expected format, or - /// * If the version string is malformed. See `impl FromStr for ProtoSet`. - fn from_str(protocol_string: &str) -> Result<UnvalidatedProtoEntry, ProtoverError> { - let mut parsed: UnvalidatedProtoEntry = UnvalidatedProtoEntry::default(); - let parts: Vec<(&str, &str)> = - UnvalidatedProtoEntry::parse_protocol_and_version_str(protocol_string)?; - - for &(name, vers) in parts.iter() { - let versions = ProtoSet::from_str(vers)?; - let protocol = UnknownProtocol::from_str(name)?; - - parsed.insert(protocol, versions); - } - Ok(parsed) - } -} - -impl UnvalidatedProtoEntry { - /// Create an `UnknownProtocol`, ignoring whether or not it - /// exceeds MAX_PROTOCOL_NAME_LENGTH. - pub(crate) fn from_str_any_len( - protocol_string: &str, - ) -> Result<UnvalidatedProtoEntry, ProtoverError> { - let mut parsed: UnvalidatedProtoEntry = UnvalidatedProtoEntry::default(); - let parts: Vec<(&str, &str)> = - UnvalidatedProtoEntry::parse_protocol_and_version_str(protocol_string)?; - - for &(name, vers) in parts.iter() { - let versions = ProtoSet::from_str(vers)?; - let protocol = UnknownProtocol::from_str_any_len(name)?; - - parsed.insert(protocol, versions); - } - Ok(parsed) - } -} - -/// Pretend a `ProtoEntry` is actually an `UnvalidatedProtoEntry`. -impl From<ProtoEntry> for UnvalidatedProtoEntry { - fn from(proto_entry: ProtoEntry) -> UnvalidatedProtoEntry { - let mut unvalidated: UnvalidatedProtoEntry = UnvalidatedProtoEntry::default(); - - for (protocol, versions) in proto_entry.iter() { - unvalidated.insert(UnknownProtocol::from(protocol.clone()), versions.clone()); - } - unvalidated - } -} - -/// A mapping of protocols to a count of how many times each of their `Version`s -/// were voted for or supported. -/// -/// # Warning -/// -/// The "protocols" are *not* guaranteed to be known/supported `Protocol`s, in -/// order to allow new subprotocols to be introduced even if Directory -/// Authorities don't yet know of them. -pub struct ProtoverVote(HashMap<UnknownProtocol, HashMap<Version, usize>>); - -impl Default for ProtoverVote { - fn default() -> ProtoverVote { - ProtoverVote(HashMap::new()) - } -} - -impl IntoIterator for ProtoverVote { - type Item = (UnknownProtocol, HashMap<Version, usize>); - type IntoIter = hash_map::IntoIter<UnknownProtocol, HashMap<Version, usize>>; - - fn into_iter(self) -> Self::IntoIter { - self.0.into_iter() - } -} - -impl ProtoverVote { - pub fn entry( - &mut self, - key: UnknownProtocol, - ) -> hash_map::Entry<UnknownProtocol, HashMap<Version, usize>> { - self.0.entry(key) - } - - /// Protocol voting implementation. - /// - /// Given a slice of `UnvalidatedProtoEntry`s and a vote `threshold`, return - /// a new `UnvalidatedProtoEntry` encoding all of the protocols that are - /// listed by at least `threshold` of the inputs. - /// - /// # Examples - /// - /// ``` - /// use protover::ProtoverVote; - /// use protover::UnvalidatedProtoEntry; - /// - /// let protos: &[UnvalidatedProtoEntry] = &["Link=3-4".parse().unwrap(), - /// "Link=3".parse().unwrap()]; - /// let vote = ProtoverVote::compute(protos, &2); - /// assert_eq!("Link=3", vote.to_string()); - /// ``` - // C_RUST_COUPLED: protover.c protover_compute_vote - pub fn compute( - proto_entries: &[UnvalidatedProtoEntry], - threshold: &usize, - ) -> UnvalidatedProtoEntry { - let mut all_count: ProtoverVote = ProtoverVote::default(); - let mut final_output: UnvalidatedProtoEntry = UnvalidatedProtoEntry::default(); - - if proto_entries.is_empty() { - return final_output; - } - - // parse and collect all of the protos and their versions and collect them - for vote in proto_entries { - // C_RUST_DIFFERS: This doesn't actually differ, bu this check on - // the total is here to make it match. Because the C version calls - // expand_protocol_list() which checks if there would be too many - // subprotocols *or* individual version numbers, i.e. more than - // MAX_PROTOCOLS_TO_EXPAND, and does this *per vote*, we need to - // match it's behaviour and ensure we're not allowing more than it - // would. - if vote.len() > MAX_PROTOCOLS_TO_EXPAND { - continue; - } - - for (protocol, versions) in vote.iter() { - let supported_vers: &mut HashMap<Version, usize> = - all_count.entry(protocol.clone()).or_insert(HashMap::new()); - - for version in versions.clone().expand() { - let counter: &mut usize = supported_vers.entry(version).or_insert(0); - *counter += 1; - } - } - } - - for (protocol, mut versions) in all_count { - // Go through and remove versions that are less than the threshold - versions.retain(|_, count| *count as usize >= *threshold); - - if versions.len() > 0 { - let voted_versions: Vec<Version> = versions.keys().cloned().collect(); - let voted_protoset: ProtoSet = ProtoSet::from(voted_versions); - - final_output.insert(protocol, voted_protoset); - } - } - final_output - } -} - -/// Returns a boolean indicating whether the given protocol and version is -/// supported in any of the existing Tor protocols -/// -/// # Examples -/// ``` -/// use protover::is_supported_here; -/// use protover::Protocol; -/// -/// let is_supported = is_supported_here(&Protocol::Link, &10); -/// assert_eq!(false, is_supported); -/// -/// let is_supported = is_supported_here(&Protocol::Link, &1); -/// assert_eq!(true, is_supported); -/// ``` -pub fn is_supported_here(proto: &Protocol, vers: &Version) -> bool { - let currently_supported: ProtoEntry = match ProtoEntry::supported() { - Ok(result) => result, - Err(_) => return false, - }; - let supported_versions = match currently_supported.get(proto) { - Some(n) => n, - None => return false, - }; - supported_versions.contains(vers) -} - -/// Since older versions of Tor cannot infer their own subprotocols, -/// determine which subprotocols are supported by older Tor versions. -/// -/// # Inputs -/// -/// * `version`, a string comprised of "[0-9a-z.-]" -/// -/// # Returns -/// -/// A `&'static CStr` encoding a list of protocol names and supported -/// versions. The string takes the following format: -/// -/// "HSDir=1-1 LinkAuth=1" -/// -/// This function returns the protocols that are supported by the version input, -/// only for tor versions older than `FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS` -/// (but not older than 0.2.4.19). For newer tors (or older than 0.2.4.19), it -/// returns an empty string. -/// -/// # Note -/// -/// This function is meant to be called for/within FFI code. If you'd -/// like to use this code in Rust, please see `compute_for_old_tor()`. -// -// C_RUST_COUPLED: src/rust/protover.c `compute_for_old_tor` -pub(crate) fn compute_for_old_tor_cstr(version: &str) -> &'static CStr { - let empty: &'static CStr = cstr!(""); - - if c_tor_version_as_new_as(version, FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS) { - return empty; - } - if c_tor_version_as_new_as(version, "0.2.9.1-alpha") { - return cstr!( - "Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 \ - Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2" - ); - } - if c_tor_version_as_new_as(version, "0.2.7.5") { - return cstr!( - "Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 \ - Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2" - ); - } - if c_tor_version_as_new_as(version, "0.2.4.19") { - return cstr!( - "Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 \ - Link=1-4 LinkAuth=1 Microdesc=1 Relay=1-2" - ); - } - empty -} - -/// Since older versions of Tor cannot infer their own subprotocols, -/// determine which subprotocols are supported by older Tor versions. -/// -/// # Inputs -/// -/// * `version`, a string comprised of "[0-9a-z.-]" -/// -/// # Returns -/// -/// A `Result` whose `Ok` value is an `&'static str` encoding a list of protocol -/// names and supported versions. The string takes the following format: -/// -/// "HSDir=1-1 LinkAuth=1" -/// -/// This function returns the protocols that are supported by the version input, -/// only for tor versions older than `FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS`. -/// (but not older than 0.2.4.19). For newer tors (or older than 0.2.4.19), its -/// `Ok` `Result` contains an empty string. -/// -/// Otherwise, its `Err` contains a `ProtoverError::Unparseable` if the -/// `version` string was invalid utf-8. -/// -/// # Note -/// -/// This function is meant to be called for/within non-FFI Rust code. -// -// C_RUST_COUPLED: src/rust/protover.c `compute_for_old_tor` -pub fn compute_for_old_tor(version: &str) -> Result<&'static str, ProtoverError> { - // .to_str() fails with a Utf8Error if it couldn't validate the - // utf-8, so convert that here into an Unparseable ProtoverError. - compute_for_old_tor_cstr(version) - .to_str() - .or(Err(ProtoverError::Unparseable)) -} - -#[cfg(test)] -mod test { - use std::str::FromStr; - use std::string::ToString; - - use super::*; - - macro_rules! parse_proto { - ($e:expr) => {{ - let proto: Result<UnknownProtocol, _> = $e.parse(); - let proto2 = UnknownProtocol::from_str_any_len($e); - assert_eq!(proto, proto2); - proto - }}; - } - - #[test] - fn test_protocol_from_str() { - assert!(parse_proto!("Cons").is_ok()); - assert!(parse_proto!("123").is_ok()); - assert!(parse_proto!("1-2-3").is_ok()); - - let err = Err(ProtoverError::InvalidProtocol); - assert_eq!(err, parse_proto!("a_b_c")); - assert_eq!(err, parse_proto!("a b")); - assert_eq!(err, parse_proto!("a,")); - assert_eq!(err, parse_proto!("b.")); - assert_eq!(err, parse_proto!("é")); - } - - macro_rules! assert_protoentry_is_parseable { - ($e:expr) => { - let protoentry: Result<ProtoEntry, ProtoverError> = $e.parse(); - - assert!(protoentry.is_ok(), format!("{:?}", protoentry.err())); - }; - } - - macro_rules! assert_protoentry_is_unparseable { - ($e:expr) => { - let protoentry: Result<ProtoEntry, ProtoverError> = $e.parse(); - - assert!(protoentry.is_err()); - }; - } - - #[test] - fn test_protoentry_from_str_multiple_protocols_multiple_versions() { - assert_protoentry_is_parseable!("Cons=3-4 Link=1,3-5"); - } - - #[test] - fn test_protoentry_from_str_empty() { - assert_protoentry_is_parseable!(""); - assert!(UnvalidatedProtoEntry::from_str("").is_ok()); - } - - #[test] - fn test_protoentry_from_str_single_protocol_single_version() { - assert_protoentry_is_parseable!("HSDir=1"); - } - - #[test] - fn test_protoentry_from_str_unknown_protocol() { - assert_protoentry_is_unparseable!("Ducks=5-7,8"); - } - - #[test] - fn test_protoentry_from_str_allowed_number_of_versions() { - assert_protoentry_is_parseable!("Desc=1-63"); - } - - #[test] - fn test_protoentry_from_str_too_many_versions() { - assert_protoentry_is_unparseable!("Desc=1-64"); - } - - #[test] - fn test_protoentry_all_supported_single_protocol_single_version() { - let protocol: UnvalidatedProtoEntry = "Cons=1".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); - } - - #[test] - fn test_protoentry_all_supported_multiple_protocol_multiple_versions() { - let protocols: UnvalidatedProtoEntry = "Link=3-4 Desc=2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); - } - - #[test] - fn test_protoentry_all_supported_three_values() { - let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); - } - - #[test] - fn test_protoentry_all_supported_unknown_protocol() { - let protocols: UnvalidatedProtoEntry = "Wombat=9".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("Wombat=9", &unsupported.unwrap().to_string()); - } - - #[test] - fn test_protoentry_all_supported_unsupported_high_version() { - let protocols: UnvalidatedProtoEntry = "HSDir=12-60".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("HSDir=12-60", &unsupported.unwrap().to_string()); - } - - #[test] - fn test_protoentry_all_supported_unsupported_low_version() { - let protocols: UnvalidatedProtoEntry = "HSIntro=2-3".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("HSIntro=2", &unsupported.unwrap().to_string()); - } - - #[test] - fn test_contract_protocol_list() { - let mut versions = ""; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - - versions = "1"; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - - versions = "1-2"; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - - versions = "1,3"; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - - versions = "1-4"; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - - versions = "1,3,5-7"; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - - versions = "1-3,50"; - assert_eq!( - String::from(versions), - ProtoSet::from_str(&versions).unwrap().to_string() - ); - } -} diff --git a/src/rust/protover/tests/protover.rs b/src/rust/protover/tests/protover.rs deleted file mode 100644 index a6305ac39a..0000000000 --- a/src/rust/protover/tests/protover.rs +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -extern crate protover; - -use protover::errors::ProtoverError; -use protover::ProtoEntry; -use protover::ProtoverVote; -use protover::UnvalidatedProtoEntry; - -#[test] -fn parse_protocol_with_single_proto_and_single_version() { - let _: ProtoEntry = "Cons=1".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_single_protocol_and_multiple_versions() { - let _: ProtoEntry = "Cons=1-2".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_different_single_protocol_and_single_version() { - let _: ProtoEntry = "HSDir=1".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_single_protocol_and_supported_version() { - let _: ProtoEntry = "Desc=2".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_two_protocols_and_single_version() { - let _: ProtoEntry = "Cons=1 HSDir=1".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_single_protocol_and_two_sequential_versions() { - let _: ProtoEntry = "Desc=1-2".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_single_protocol_and_protocol_range() { - let _: ProtoEntry = "Link=1-4".parse().unwrap(); -} - -#[test] -fn parse_protocol_with_single_protocol_and_protocol_set() { - let _: ProtoEntry = "Link=3-4 Desc=2".parse().unwrap(); -} - -#[test] -fn protocol_all_supported_with_single_protocol_and_protocol_set() { - let protocols: UnvalidatedProtoEntry = "Link=3-4 Desc=2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_two_values() { - let protocols: UnvalidatedProtoEntry = "Microdesc=1-2 Relay=2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_one_value() { - let protocols: UnvalidatedProtoEntry = "Microdesc=1-2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_three_values() { - let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_unsupported_protocol() { - let protocols: UnvalidatedProtoEntry = "Wombat=9".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("Wombat=9", &unsupported.unwrap().to_string()); -} - -#[test] -fn protocol_all_supported_with_unsupported_versions() { - let protocols: UnvalidatedProtoEntry = "Link=3-63".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("Link=6-63", &unsupported.unwrap().to_string()); -} - -#[test] -fn protocol_all_supported_with_unsupported_low_version() { - let protocols: UnvalidatedProtoEntry = "HSIntro=2-3".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("HSIntro=2", &unsupported.unwrap().to_string()); -} - -#[test] -fn protocol_all_supported_with_unsupported_high_version() { - let protocols: UnvalidatedProtoEntry = "Cons=1-2,60".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("Cons=60", &unsupported.unwrap().to_string()); -} - -#[test] -fn protocol_all_supported_with_mix_of_supported_and_unsupproted() { - let protocols: UnvalidatedProtoEntry = "Link=3-4 Wombat=9".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_some()); - assert_eq!("Wombat=9", &unsupported.unwrap().to_string()); -} - -#[test] -fn protover_string_supports_protocol_returns_true_for_single_supported() { - let protocols: UnvalidatedProtoEntry = "Link=3-4 Cons=1".parse().unwrap(); - let is_supported = protocols.supports_protocol(&protover::Protocol::Cons.into(), &1); - assert_eq!(true, is_supported); -} - -#[test] -fn protover_string_supports_protocol_returns_false_for_single_unsupported() { - let protocols: UnvalidatedProtoEntry = "Link=3-4 Cons=1".parse().unwrap(); - let is_supported = protocols.supports_protocol(&protover::Protocol::Cons.into(), &2); - assert_eq!(false, is_supported); -} - -#[test] -fn protover_string_supports_protocol_returns_false_for_unsupported() { - let protocols: UnvalidatedProtoEntry = "Link=3-4".parse().unwrap(); - let is_supported = protocols.supports_protocol(&protover::Protocol::Cons.into(), &2); - assert_eq!(false, is_supported); -} - -#[test] -#[should_panic] -fn parse_protocol_with_unexpected_characters() { - let _: UnvalidatedProtoEntry = "Cons=*-%".parse().unwrap(); -} - -#[test] -fn protover_compute_vote_returns_empty_for_empty_string() { - let protocols: &[UnvalidatedProtoEntry] = &["".parse().unwrap()]; - let listed = ProtoverVote::compute(protocols, &1); - assert_eq!("", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_single_protocol_for_matching() { - let protocols: &[UnvalidatedProtoEntry] = &["Cons=1".parse().unwrap()]; - let listed = ProtoverVote::compute(protocols, &1); - assert_eq!("Cons=1", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_two_protocols_for_two_matching() { - let protocols: &[UnvalidatedProtoEntry] = &["Link=1 Cons=1".parse().unwrap()]; - let listed = ProtoverVote::compute(protocols, &1); - assert_eq!("Cons=1 Link=1", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_one_protocol_when_one_out_of_two_matches() { - let protocols: &[UnvalidatedProtoEntry] = - &["Cons=1 Link=2".parse().unwrap(), "Cons=1".parse().unwrap()]; - let listed = ProtoverVote::compute(protocols, &2); - assert_eq!("Cons=1", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_protocols_that_it_doesnt_currently_support() { - let protocols: &[UnvalidatedProtoEntry] = - &["Foo=1 Cons=2".parse().unwrap(), "Bar=1".parse().unwrap()]; - let listed = ProtoverVote::compute(protocols, &1); - assert_eq!("Bar=1 Cons=2 Foo=1", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_matching_for_mix() { - let protocols: &[UnvalidatedProtoEntry] = &["Link=1-10,50 Cons=1,3-7,8".parse().unwrap()]; - let listed = ProtoverVote::compute(protocols, &1); - assert_eq!("Cons=1,3-8 Link=1-10,50", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_matching_for_longer_mix() { - let protocols: &[UnvalidatedProtoEntry] = &[ - "Desc=1-10,50 Cons=1,3-7,8".parse().unwrap(), - "Link=12-45,8 Cons=2-6,8 Desc=9".parse().unwrap(), - ]; - - let listed = ProtoverVote::compute(protocols, &1); - assert_eq!("Cons=1-8 Desc=1-10,50 Link=8,12-45", listed.to_string()); -} - -#[test] -fn protover_compute_vote_returns_matching_for_longer_mix_with_threshold_two() { - let protocols: &[UnvalidatedProtoEntry] = &[ - "Desc=1-10,50 Cons=1,3-7,8".parse().unwrap(), - "Link=8,12-45 Cons=2-6,8 Desc=9".parse().unwrap(), - ]; - - let listed = ProtoverVote::compute(protocols, &2); - assert_eq!("Cons=3-6,8 Desc=9", listed.to_string()); -} - -#[test] -fn protover_compute_vote_handles_duplicated_versions() { - let protocols: &[UnvalidatedProtoEntry] = - &["Cons=1".parse().unwrap(), "Cons=1".parse().unwrap()]; - assert_eq!("Cons=1", ProtoverVote::compute(protocols, &2).to_string()); - - let protocols: &[UnvalidatedProtoEntry] = - &["Cons=1-2".parse().unwrap(), "Cons=1-2".parse().unwrap()]; - assert_eq!("Cons=1-2", ProtoverVote::compute(protocols, &2).to_string()); -} - -#[test] -fn protover_compute_vote_handles_invalid_proto_entries() { - let protocols: &[UnvalidatedProtoEntry] = &[ - "Cons=1".parse().unwrap(), - "Cons=1".parse().unwrap(), - "Dinosaur=1".parse().unwrap(), - ]; - assert_eq!("Cons=1", ProtoverVote::compute(protocols, &2).to_string()); -} - -#[test] -fn parse_protocol_with_single_protocol_and_two_nonsequential_versions() { - let _: ProtoEntry = "Desc=1,2".parse().unwrap(); -} - -#[test] -fn protover_is_supported_here_returns_true_for_supported_protocol() { - assert_eq!( - true, - protover::is_supported_here(&protover::Protocol::Cons, &1) - ); -} - -#[test] -fn protover_is_supported_here_returns_false_for_unsupported_protocol() { - assert_eq!( - false, - protover::is_supported_here(&protover::Protocol::Cons, &5) - ); -} - -#[test] -fn protocol_all_supported_with_single_proto_and_single_version() { - let protocol: UnvalidatedProtoEntry = "Cons=1".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_single_protocol_and_multiple_versions() { - let protocol: UnvalidatedProtoEntry = "Cons=1-2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_different_single_protocol_and_single_version() { - let protocol: UnvalidatedProtoEntry = "HSDir=1".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_single_protocol_and_supported_version() { - let protocol: UnvalidatedProtoEntry = "Desc=2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_two_protocols_and_single_version() { - let protocols: UnvalidatedProtoEntry = "Cons=1 HSDir=1".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocols.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_single_protocol_and_two_nonsequential_versions() { - let protocol: UnvalidatedProtoEntry = "Desc=1,2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_single_protocol_and_two_sequential_versions() { - let protocol: UnvalidatedProtoEntry = "Desc=1-2".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protocol_all_supported_with_single_protocol_and_protocol_range() { - let protocol: UnvalidatedProtoEntry = "Link=1-4".parse().unwrap(); - let unsupported: Option<UnvalidatedProtoEntry> = protocol.all_supported(); - assert_eq!(true, unsupported.is_none()); -} - -#[test] -fn protover_all_supported_should_exclude_versions_we_actually_do_support() { - let proto: UnvalidatedProtoEntry = "Link=3-63".parse().unwrap(); - let result: String = proto.all_supported().unwrap().to_string(); - - assert_eq!(result, "Link=6-63".to_string()); -} - -#[test] -fn protover_all_supported_should_exclude_versions_we_actually_do_support_complex1() { - let proto: UnvalidatedProtoEntry = "Link=1-3,30-63".parse().unwrap(); - let result: String = proto.all_supported().unwrap().to_string(); - - assert_eq!(result, "Link=30-63".to_string()); -} - -#[test] -fn protover_all_supported_should_exclude_versions_we_actually_do_support_complex2() { - let proto: UnvalidatedProtoEntry = "Link=1-3,5-12".parse().unwrap(); - let result: String = proto.all_supported().unwrap().to_string(); - - assert_eq!(result, "Link=6-12".to_string()); -} - -#[test] -fn protover_all_supported_should_exclude_some_versions_and_entire_protocols() { - let proto: UnvalidatedProtoEntry = "Link=1-3,5-12 Quokka=50-51".parse().unwrap(); - let result: String = proto.all_supported().unwrap().to_string(); - - assert_eq!(result, "Link=6-12 Quokka=50-51".to_string()); -} - -#[test] -// C_RUST_DIFFERS: The C will return true (e.g. saying "yes, that's supported") -// but set the msg to NULL (??? seems maybe potentially bad). The Rust will -// simply return a None. -fn protover_all_supported_should_return_empty_string_for_weird_thing() { - let proto: UnvalidatedProtoEntry = "Fribble=".parse().unwrap(); - let result: Option<UnvalidatedProtoEntry> = proto.all_supported(); - - assert!(result.is_none()); -} - -#[test] -fn protover_unvalidatedprotoentry_should_err_entirely_unparseable_things() { - let proto: Result<UnvalidatedProtoEntry, ProtoverError> = "Fribble".parse(); - - assert_eq!(Err(ProtoverError::Unparseable), proto); -} - -#[test] -fn protover_all_supported_over_maximum_limit() { - let proto: Result<UnvalidatedProtoEntry, ProtoverError> = "Sleen=1-4294967295".parse(); - - assert_eq!(Err(ProtoverError::ExceedsMax), proto); -} diff --git a/src/rust/smartlist/Cargo.toml b/src/rust/smartlist/Cargo.toml deleted file mode 100644 index a5afe7bf74..0000000000 --- a/src/rust/smartlist/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -authors = ["The Tor Project"] -version = "0.0.1" -name = "smartlist" - -[dependencies] -libc = "0.2.39" - -[lib] -name = "smartlist" -path = "lib.rs" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] diff --git a/src/rust/smartlist/lib.rs b/src/rust/smartlist/lib.rs deleted file mode 100644 index 23301f88c3..0000000000 --- a/src/rust/smartlist/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -extern crate libc; - -mod smartlist; - -pub use smartlist::*; - -// When testing we may be compiled with sanitizers which are incompatible with -// Rust's default allocator, jemalloc (unsure why at this time). Most crates -// link to `tor_allocate` which switches by default to a non-jemalloc allocator, -// but we don't already depend on `tor_allocate` so make sure that while testing -// we don't use jemalloc. (but rather malloc/free) -#[global_allocator] -#[cfg(test)] -static A: std::alloc::System = std::alloc::System; diff --git a/src/rust/smartlist/smartlist.rs b/src/rust/smartlist/smartlist.rs deleted file mode 100644 index d8f8083dff..0000000000 --- a/src/rust/smartlist/smartlist.rs +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -use libc::{c_char, c_int}; -use std::ffi::CStr; -use std::slice; - -/// Smartlists are a type used in C code in tor to define a collection of a -/// generic type, which has a capacity and a number used. Each Smartlist -/// defines how to extract the list of values from the underlying C structure -/// -/// Implementations are required to have a C representation, as this module -/// serves purely to translate smartlists as defined in tor to vectors in Rust. -pub trait Smartlist<T> { - fn get_list(&self) -> Vec<T>; -} - -#[repr(C)] -pub struct Stringlist { - pub list: *const *const c_char, - pub num_used: c_int, - pub capacity: c_int, -} - -impl Smartlist<String> for Stringlist { - fn get_list(&self) -> Vec<String> { - let empty: Vec<String> = Vec::new(); - let mut rust_list: Vec<String> = Vec::new(); - - if self.list.is_null() || self.num_used == 0 { - return empty; - } - - // unsafe, as we need to extract the smartlist list into a vector of - // pointers, and then transform each element into a Rust string. - let elems: &[*const c_char] = - unsafe { slice::from_raw_parts(self.list, self.num_used as usize) }; - - for elem in elems.iter() { - if elem.is_null() { - continue; - } - - // unsafe, as we need to create a cstring from the referenced - // element - let c_string = unsafe { CStr::from_ptr(*elem) }; - - let r_string = match c_string.to_str() { - Ok(n) => n, - Err(_) => return empty, - }; - - rust_list.push(String::from(r_string)); - } - - rust_list - } -} - -// TODO: CHK: this module maybe should be tested from a test in C with a -// smartlist as defined in tor. -#[cfg(test)] -mod test { - #[test] - fn test_get_list_of_strings() { - extern crate libc; - - use libc::c_char; - use std::ffi::CString; - - use super::Smartlist; - use super::Stringlist; - - { - // test to verify that null pointers are gracefully handled - use std::ptr; - - let sl = Stringlist { - list: ptr::null(), - num_used: 0, - capacity: 0, - }; - - let data = sl.get_list(); - assert_eq!(0, data.len()); - } - - { - let args = vec![String::from("a"), String::from("b")]; - - // for each string, transform it into a CString - let c_strings: Vec<_> = args - .iter() - .map(|arg| CString::new(arg.as_str()).unwrap()) - .collect(); - - // then, collect a pointer for each CString - let p_args: Vec<_> = c_strings.iter().map(|arg| arg.as_ptr()).collect(); - - let p: *const *const c_char = p_args.as_ptr(); - - // This is the representation that we expect when receiving a - // smartlist at the Rust/C FFI layer. - let sl = Stringlist { - list: p, - num_used: 2, - capacity: 2, - }; - - let data = sl.get_list(); - assert_eq!("a", &data[0]); - assert_eq!("b", &data[1]); - } - } -} diff --git a/src/rust/tor_allocate/Cargo.toml b/src/rust/tor_allocate/Cargo.toml deleted file mode 100644 index 06ac605f17..0000000000 --- a/src/rust/tor_allocate/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -authors = ["The Tor Project"] -version = "0.0.1" -name = "tor_allocate" - -[dependencies] -libc = "=0.2.39" - -[lib] -name = "tor_allocate" -path = "lib.rs" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] diff --git a/src/rust/tor_allocate/lib.rs b/src/rust/tor_allocate/lib.rs deleted file mode 100644 index fff8a08006..0000000000 --- a/src/rust/tor_allocate/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -//! Allocation helper functions that allow data to be allocated in Rust -//! using tor's specified allocator. In doing so, this can be later freed -//! from C. -//! -//! This is currently a temporary solution, we will later use tor's allocator -//! by default for any allocation that occurs in Rust. However, as this will -//! stabalize in 2018, we can use this as a temporary measure. - -extern crate libc; - -use std::alloc::System; - -mod tor_allocate; -pub use tor_allocate::*; - -#[global_allocator] -static A: System = System; diff --git a/src/rust/tor_allocate/tor_allocate.rs b/src/rust/tor_allocate/tor_allocate.rs deleted file mode 100644 index 7b35e2451f..0000000000 --- a/src/rust/tor_allocate/tor_allocate.rs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ -// No-op defined purely for testing at the module level -use libc::c_char; - -use libc::c_void; -#[cfg(not(feature = "testing"))] -use std::{mem, ptr, slice}; - -// Define a no-op implementation for testing Rust modules without linking to C -#[cfg(feature = "testing")] -pub fn allocate_and_copy_string(s: &str) -> *mut c_char { - use std::ffi::CString; - CString::new(s).unwrap().into_raw() -} - -// Defined only for tests, used for testing purposes, so that we don't need -// to link to tor C files. Uses the system allocator -#[cfg(test)] -unsafe extern "C" fn tor_malloc_(size: usize) -> *mut c_void { - use libc::malloc; - malloc(size) -} - -#[cfg(all(not(test), not(feature = "testing")))] -extern "C" { - fn tor_malloc_(size: usize) -> *mut c_void; -} - -/// Allocate memory using tor_malloc_ and copy an existing string into the -/// allocated buffer, returning a pointer that can later be called in C. -/// -/// # Inputs -/// -/// * `src`, a reference to a String. -/// -/// # Returns -/// -/// A `*mut c_char` that should be freed by tor_free in C -/// -#[cfg(not(feature = "testing"))] -pub fn allocate_and_copy_string(src: &str) -> *mut c_char { - let bytes: &[u8] = src.as_bytes(); - - let size = mem::size_of_val::<[u8]>(bytes); - let size_one_byte = mem::size_of::<u8>(); - - // handle integer overflow when adding one to the calculated length - let size_with_null_byte = match size.checked_add(size_one_byte) { - Some(n) => n, - None => return ptr::null_mut(), - }; - - let dest = unsafe { tor_malloc_(size_with_null_byte) as *mut u8 }; - - if dest.is_null() { - return ptr::null_mut(); - } - - unsafe { ptr::copy_nonoverlapping(bytes.as_ptr(), dest, size) }; - - // set the last byte as null, using the ability to index into a slice - // rather than doing pointer arithmetic - let slice = unsafe { slice::from_raw_parts_mut(dest, size_with_null_byte) }; - slice[size] = 0; // add a null terminator - - dest as *mut c_char -} - -#[cfg(test)] -mod test { - - #[test] - fn test_allocate_and_copy_string_with_empty() { - use libc::{c_void, free}; - use std::ffi::CStr; - - use tor_allocate::allocate_and_copy_string; - - let allocated_empty = allocate_and_copy_string(""); - - let allocated_empty_rust = unsafe { CStr::from_ptr(allocated_empty).to_str().unwrap() }; - - assert_eq!("", allocated_empty_rust); - - unsafe { free(allocated_empty as *mut c_void) }; - } - - #[test] - fn test_allocate_and_copy_string_with_not_empty_string() { - use libc::{c_void, free}; - use std::ffi::CStr; - - use tor_allocate::allocate_and_copy_string; - - let allocated_empty = allocate_and_copy_string("foo bar biz"); - - let allocated_empty_rust = unsafe { CStr::from_ptr(allocated_empty).to_str().unwrap() }; - - assert_eq!("foo bar biz", allocated_empty_rust); - - unsafe { free(allocated_empty as *mut c_void) }; - } -} diff --git a/src/rust/tor_log/Cargo.toml b/src/rust/tor_log/Cargo.toml deleted file mode 100644 index 14d9ae803a..0000000000 --- a/src/rust/tor_log/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "tor_log" -version = "0.1.0" -authors = ["The Tor Project"] - -[lib] -name = "tor_log" -path = "lib.rs" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] - -[dependencies] -libc = "0.2.39" - -[dependencies.tor_allocate] -path = "../tor_allocate" diff --git a/src/rust/tor_log/lib.rs b/src/rust/tor_log/lib.rs deleted file mode 100644 index 4aa658e35b..0000000000 --- a/src/rust/tor_log/lib.rs +++ /dev/null @@ -1,16 +0,0 @@ -//! Copyright (c) 2016-2019, The Tor Project, Inc. */ -//! See LICENSE for licensing information */ - -//! Logging wrapper for Rust to utilize Tor's logger, found at -//! src/common/log.c and src/common/torlog.h -//! -//! Exposes different interfaces depending on whether we are running in test -//! or non-test mode. When testing, we use a no-op implementation, -//! otherwise we link directly to C. - -extern crate libc; -extern crate tor_allocate; - -mod tor_log; - -pub use tor_log::*; diff --git a/src/rust/tor_log/tor_log.rs b/src/rust/tor_log/tor_log.rs deleted file mode 100644 index 391cb32ab3..0000000000 --- a/src/rust/tor_log/tor_log.rs +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -// Note that these functions are untested due to the fact that there are no -// return variables to test and they are calling into a C API. - -/// The related domain which the logging message is relevant. For example, -/// log messages relevant to networking would use LogDomain::LdNet, whereas -/// general messages can use LdGeneral. -#[derive(Eq, PartialEq)] -pub enum LogDomain { - Net, - General, -} - -/// The severity level at which to log messages. -#[derive(Eq, PartialEq)] -pub enum LogSeverity { - Notice, - Warn, -} - -/// Main entry point for Rust modules to log messages. -/// -/// # Inputs -/// -/// * A `severity` of type LogSeverity, which defines the level of severity the -/// message will be logged. -/// * A `domain` of type LogDomain, which defines the domain the log message -/// will be associated with. -/// * A `function` of type &str, which defines the name of the function where -/// the message is being logged. There is a current RFC for a macro that -/// defines function names. When it is, we should use it. See -/// https://github.com/rust-lang/rfcs/pull/1719 -/// * A `message` of type &str, which is the log message itself. -#[macro_export] -macro_rules! tor_log_msg { - ($severity: path, - $domain: path, - $function: expr, - $($message:tt)*) => - { - { - let msg = format!($($message)*); - $crate::tor_log_msg_impl($severity, $domain, $function, msg) - } - }; -} - -#[inline] -pub fn tor_log_msg_impl(severity: LogSeverity, domain: LogDomain, function: &str, message: String) { - use std::ffi::CString; - - /// Default function name to log in case of errors when converting - /// a function name to a CString - const ERR_LOG_FUNCTION: &str = "tor_log_msg"; - - /// Default message to log in case of errors when converting a log - /// message to a CString - const ERR_LOG_MSG: &str = "Unable to log message from Rust \ - module due to error when converting to CString"; - - let func = match CString::new(function) { - Ok(n) => n, - Err(_) => CString::new(ERR_LOG_FUNCTION).unwrap(), - }; - - let msg = match CString::new(message) { - Ok(n) => n, - Err(_) => CString::new(ERR_LOG_MSG).unwrap(), - }; - - // Bind to a local variable to preserve ownership. This is essential so - // that ownership is guaranteed until these local variables go out of scope - let func_ptr = func.as_ptr(); - let msg_ptr = msg.as_ptr(); - - let c_severity = unsafe { log::translate_severity(severity) }; - let c_domain = unsafe { log::translate_domain(domain) }; - - unsafe { log::tor_log_string(c_severity, c_domain, func_ptr, msg_ptr) } -} - -/// This implementation is used when compiling for actual use, as opposed to -/// testing. -#[cfg(not(test))] -pub mod log { - use super::LogDomain; - use super::LogSeverity; - use libc::{c_char, c_int}; - - /// Severity log types. These mirror definitions in src/lib/log/log.h - /// C_RUST_COUPLED: src/lib/log/log.c, log domain types - extern "C" { - static LOG_WARN_: c_int; - static LOG_NOTICE_: c_int; - } - - /// Domain log types. These mirror definitions in src/lib/log/log.h - /// C_RUST_COUPLED: src/lib/log/log.c, log severity types - extern "C" { - static LD_NET_: u64; - static LD_GENERAL_: u64; - } - - /// Translate Rust definitions of log domain levels to C. This exposes a 1:1 - /// mapping between types. - #[inline] - pub unsafe fn translate_domain(domain: LogDomain) -> u64 { - match domain { - LogDomain::Net => LD_NET_, - LogDomain::General => LD_GENERAL_, - } - } - - /// Translate Rust definitions of log severity levels to C. This exposes a - /// 1:1 mapping between types. - #[inline] - pub unsafe fn translate_severity(severity: LogSeverity) -> c_int { - match severity { - LogSeverity::Warn => LOG_WARN_, - LogSeverity::Notice => LOG_NOTICE_, - } - } - - /// The main entry point into Tor's logger. When in non-test mode, this - /// will link directly with `tor_log_string` in torlog.c - extern "C" { - pub fn tor_log_string( - severity: c_int, - domain: u64, - function: *const c_char, - string: *const c_char, - ); - } -} - -/// This module exposes no-op functionality for testing other Rust modules -/// without linking to C. -#[cfg(test)] -pub mod log { - use super::LogDomain; - use super::LogSeverity; - use libc::{c_char, c_int}; - - pub static mut LAST_LOGGED_FUNCTION: *mut String = 0 as *mut String; - pub static mut LAST_LOGGED_MESSAGE: *mut String = 0 as *mut String; - - pub unsafe fn tor_log_string( - _severity: c_int, - _domain: u32, - function: *const c_char, - message: *const c_char, - ) { - use std::ffi::CStr; - - let f = CStr::from_ptr(function); - let fct = match f.to_str() { - Ok(n) => n, - Err(_) => "", - }; - LAST_LOGGED_FUNCTION = Box::into_raw(Box::new(String::from(fct))); - - let m = CStr::from_ptr(message); - let msg = match m.to_str() { - Ok(n) => n, - Err(_) => "", - }; - LAST_LOGGED_MESSAGE = Box::into_raw(Box::new(String::from(msg))); - } - - pub unsafe fn translate_domain(_domain: LogDomain) -> u32 { - 1 - } - - pub unsafe fn translate_severity(_severity: LogSeverity) -> c_int { - 1 - } -} - -#[cfg(test)] -mod test { - use tor_log::log::{LAST_LOGGED_FUNCTION, LAST_LOGGED_MESSAGE}; - use tor_log::*; - - #[test] - fn test_get_log_message() { - { - fn test_macro() { - tor_log_msg!( - LogSeverity::Warn, - LogDomain::Net, - "test_macro", - "test log message {}", - "a", - ); - } - - test_macro(); - - let function = unsafe { Box::from_raw(LAST_LOGGED_FUNCTION) }; - assert_eq!("test_macro", *function); - - let message = unsafe { Box::from_raw(LAST_LOGGED_MESSAGE) }; - assert_eq!("test log message a", *message); - } - - // test multiple inputs into the log message - { - fn test_macro() { - tor_log_msg!( - LogSeverity::Warn, - LogDomain::Net, - "next_test_macro", - "test log message {} {} {} {} {}", - 1, - 2, - 3, - 4, - 5 - ); - } - - test_macro(); - - let function = unsafe { Box::from_raw(LAST_LOGGED_FUNCTION) }; - assert_eq!("next_test_macro", *function); - - let message = unsafe { Box::from_raw(LAST_LOGGED_MESSAGE) }; - assert_eq!("test log message 1 2 3 4 5", *message); - } - - // test how a long log message will be formatted - { - fn test_macro() { - tor_log_msg!( - LogSeverity::Warn, - LogDomain::Net, - "test_macro", - "{}", - "All the world's a stage, and all the men and women \ - merely players: they have their exits and their \ - entrances; and one man in his time plays many parts, his \ - acts being seven ages." - ); - } - - test_macro(); - - let expected_string = "All the world's a \ - stage, and all the men \ - and women merely players: \ - they have their exits and \ - their entrances; and one man \ - in his time plays many parts, \ - his acts being seven ages."; - - let function = unsafe { Box::from_raw(LAST_LOGGED_FUNCTION) }; - assert_eq!("test_macro", *function); - - let message = unsafe { Box::from_raw(LAST_LOGGED_MESSAGE) }; - assert_eq!(expected_string, *message); - } - } -} diff --git a/src/rust/tor_rust/Cargo.toml b/src/rust/tor_rust/Cargo.toml deleted file mode 100644 index 35c629882e..0000000000 --- a/src/rust/tor_rust/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -authors = ["The Tor Project"] -name = "tor_rust" -version = "0.1.0" - -[lib] -name = "tor_rust" -path = "lib.rs" -crate_type = ["staticlib"] - -[dependencies.tor_util] -path = "../tor_util" - -[dependencies.protover] -path = "../protover" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] diff --git a/src/rust/tor_rust/include.am b/src/rust/tor_rust/include.am deleted file mode 100644 index ce673abbee..0000000000 --- a/src/rust/tor_rust/include.am +++ /dev/null @@ -1,28 +0,0 @@ -EXTRA_DIST +=\ - src/rust/tor_rust/Cargo.toml \ - src/rust/tor_rust/lib.rs - -EXTRA_CARGO_OPTIONS= - -@TOR_RUST_LIB_PATH@: FORCE - ( cd "$(abs_top_builddir)/src/rust" ; \ - CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \ - $(CARGO) build --release $(EXTRA_CARGO_OPTIONS) \ - $(CARGO_ONLINE) \ - --manifest-path "$(abs_top_srcdir)/src/rust/tor_rust/Cargo.toml" ) - -distclean-rust: - ( cd "$(abs_top_builddir)/src/rust" ; \ - CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \ - $(CARGO) clean $(EXTRA_CARGO_OPTIONS) \ - $(CARGO_ONLINE) \ - --manifest-path "$(abs_top_srcdir)/src/rust/tor_rust/Cargo.toml" ) - rm -rf "$(abs_top_builddir)/src/rust/registry" - -if USE_RUST -build-rust: @TOR_RUST_LIB_PATH@ -else -build-rust: -endif - -FORCE: diff --git a/src/rust/tor_rust/lib.rs b/src/rust/tor_rust/lib.rs deleted file mode 100644 index 18519f8497..0000000000 --- a/src/rust/tor_rust/lib.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate protover; -extern crate tor_util; - -pub use protover::*; -pub use tor_util::*; diff --git a/src/rust/tor_util/Cargo.toml b/src/rust/tor_util/Cargo.toml deleted file mode 100644 index 9ffaeda8a6..0000000000 --- a/src/rust/tor_util/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -authors = ["The Tor Project"] -name = "tor_util" -version = "0.0.1" - -[lib] -name = "tor_util" -path = "lib.rs" - -[dependencies.tor_allocate] -path = "../tor_allocate" - -[dependencies.tor_log] -path = "../tor_log" - -[dependencies] -libc = "=0.2.39" - -[features] -# We have to define a feature here because doctests don't get cfg(test), -# and we need to disable some C dependencies when running the doctests -# because of the various linker issues. See -# https://github.com/rust-lang/rust/issues/45599 -test_linking_hack = [] diff --git a/src/rust/tor_util/ffi.rs b/src/rust/tor_util/ffi.rs deleted file mode 100644 index b71b2bd093..0000000000 --- a/src/rust/tor_util/ffi.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -//! FFI functions to announce Rust support during tor startup, only to be -//! called from C. -//! - -use tor_log::{LogDomain, LogSeverity}; - -/// Returns a short string to announce Rust support during startup. -/// -/// # Examples -/// ```c -/// char *rust_str = rust_welcome_string(); -/// printf("%s", rust_str); -/// tor_free(rust_str); -/// ``` -#[no_mangle] -pub extern "C" fn rust_log_welcome_string() { - tor_log_msg!( - LogSeverity::Notice, - LogDomain::General, - "rust_log_welcome_string", - "Tor is running with Rust integration. Please report \ - any bugs you encounter." - ); -} diff --git a/src/rust/tor_util/lib.rs b/src/rust/tor_util/lib.rs deleted file mode 100644 index 8886767ede..0000000000 --- a/src/rust/tor_util/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -//! Small module to announce Rust support during startup for demonstration -//! purposes. - -extern crate libc; -extern crate tor_allocate; - -#[macro_use] -extern crate tor_log; - -pub mod ffi; -pub mod strings; diff --git a/src/rust/tor_util/strings.rs b/src/rust/tor_util/strings.rs deleted file mode 100644 index ede42c6ea8..0000000000 --- a/src/rust/tor_util/strings.rs +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) 2016-2019, The Tor Project, Inc. */ -// See LICENSE for licensing information */ - -//! Utilities for working with static strings. - -/// Create a `CStr` from a literal byte slice, appending a NUL byte to it first. -/// -/// # Warning -/// -/// The literal byte slice which is taken as an argument *MUST NOT* have any NUL -/// bytes (`b"\0"`) in it, anywhere, or else an empty string will be returned -/// (`CStr::from_bytes_with_nul_unchecked(b"\0")`) so as to avoid `panic!()`ing. -/// -/// # Examples -/// -/// ``` -/// #[macro_use] -/// extern crate tor_util; -/// -/// use std::ffi::CStr; -/// -/// # fn do_test() -> Result<&'static CStr, &'static str> { -/// let message: &'static str = "This is a test of the tsunami warning system."; -/// let tuesday: &'static CStr; -/// let original: &str; -/// -/// tuesday = cstr!("This is a test of the tsunami warning system."); -/// original = tuesday.to_str().or(Err("Couldn't unwrap CStr!"))?; -/// -/// assert!(original == message); -/// # -/// # Ok(tuesday) -/// # } -/// # fn main() { -/// # do_test(); // so that we can use the ? operator in the test -/// # } -/// ``` -/// It is also possible to pass several string literals to this macro. They -/// will be concatenated together in the order of the arguments, unmodified, -/// before finally being suffixed with a NUL byte: -/// -/// ``` -/// #[macro_use] -/// extern crate tor_util; -/// # -/// # use std::ffi::CStr; -/// # -/// # fn do_test() -> Result<&'static CStr, &'static str> { -/// -/// let quux: &'static CStr = cstr!("foo", "bar", "baz"); -/// let orig: &'static str = quux.to_str().or(Err("Couldn't unwrap CStr!"))?; -/// -/// assert!(orig == "foobarbaz"); -/// # Ok(quux) -/// # } -/// # fn main() { -/// # do_test(); // so that we can use the ? operator in the test -/// # } -/// ``` -/// This is useful for passing static strings to C from Rust FFI code. To do so -/// so, use the `.as_ptr()` method on the resulting `&'static CStr` to convert -/// it to the Rust equivalent of a C `const char*`: -/// -/// ``` -/// #[macro_use] -/// extern crate tor_util; -/// -/// use std::ffi::CStr; -/// use std::os::raw::c_char; -/// -/// pub extern "C" fn give_static_borrowed_string_to_c() -> *const c_char { -/// let hello: &'static CStr = cstr!("Hello, language my parents wrote."); -/// -/// hello.as_ptr() -/// } -/// # fn main() { -/// # let greetings = give_static_borrowed_string_to_c(); -/// # } -/// ``` -/// Note that the C code this static borrowed string is passed to *MUST NOT* -/// attempt to free the memory for the string. -/// -/// # Note -/// -/// An unfortunate limitation of the rustc compiler (as of 1.25.0-nightly), is -/// that the first example above compiles, but if we were to change the -/// assignment of `tuesday` as follows, it will fail to compile, because Rust -/// macros are expanded at parse time, and at parse time there is no symbol -/// table available. -/// -/// ```ignore -/// tuesday = cstr!(message); -/// ``` -/// with the error message `error: expected a literal`. -/// -/// # Returns -/// -/// If the string literals passed as arguments contain no NUL bytes anywhere, -/// then an `&'static CStr` containing the (concatenated) bytes of the string -/// literal(s) passed as arguments, with a NUL byte appended, is returned. -/// Otherwise, an `&'static CStr` containing a single NUL byte is returned (an -/// "empty" string in C). -#[macro_export] -macro_rules! cstr { - ($($bytes:expr),*) => ( - ::std::ffi::CStr::from_bytes_with_nul( - concat!($($bytes),*, "\0").as_bytes() - ).unwrap_or_default() - ) -} - -#[cfg(test)] -mod test { - use std::ffi::CStr; - - #[test] - fn cstr_macro() { - let _: &'static CStr = cstr!("boo"); - } - - #[test] - fn cstr_macro_multi_input() { - let quux: &'static CStr = cstr!("foo", "bar", "baz"); - - assert!(quux.to_str().unwrap() == "foobarbaz"); - } - - #[test] - fn cstr_macro_bad_input() { - let waving: &'static CStr = cstr!("waving not drowning o/"); - let drowning: &'static CStr = cstr!("\0 drowning not waving"); - - assert!(waving.to_str().unwrap() == "waving not drowning o/"); - assert!(drowning.to_str().unwrap() == "") - } -} diff --git a/src/test/fuzz/fuzz_address.c b/src/test/fuzz/fuzz_address.c new file mode 100644 index 0000000000..6dccd65e9d --- /dev/null +++ b/src/test/fuzz/fuzz_address.c @@ -0,0 +1,26 @@ +#include "lib/net/address.h" +#include "lib/malloc/malloc.h" + +#include "test/fuzz/fuzzing.h" + +int +fuzz_init(void) +{ + return 0; +} + +int +fuzz_cleanup(void) +{ + return 0; +} + +int +fuzz_main(const uint8_t *data, size_t sz) +{ + tor_addr_t addr; + char *fuzzing_data = tor_memdup_nulterm(data, sz); + tor_addr_parse(&addr, fuzzing_data); + tor_free(fuzzing_data); + return 0; +} diff --git a/src/test/fuzz/fuzz_addressPTR.c b/src/test/fuzz/fuzz_addressPTR.c new file mode 100644 index 0000000000..b503d53666 --- /dev/null +++ b/src/test/fuzz/fuzz_addressPTR.c @@ -0,0 +1,32 @@ +#include "lib/net/address.h" +#include "lib/net/socket.h" +#include "lib/cc/ctassert.h" +#include "lib/container/smartlist.h" +#include "lib/ctime/di_ops.h" +#include "lib/log/log.h" +#include "lib/log/escape.h" +#include "lib/malloc/malloc.h" +#include "lib/net/address.h" +#include "test/fuzz/fuzzing.h" + +int +fuzz_init(void) +{ + return 0; +} + +int +fuzz_cleanup(void) +{ + return 0; +} + +int +fuzz_main(const uint8_t *data, size_t sz) +{ + tor_addr_t addr_result; + char *fuzzing_data = tor_memdup_nulterm(data, sz); + tor_addr_parse_PTR_name(&addr_result, fuzzing_data, AF_UNSPEC, 1); + tor_free(fuzzing_data); + return 0; +} diff --git a/src/test/fuzz/fuzz_hsdescv3_inner.c b/src/test/fuzz/fuzz_hsdescv3_inner.c new file mode 100644 index 0000000000..5aa719f5c3 --- /dev/null +++ b/src/test/fuzz/fuzz_hsdescv3_inner.c @@ -0,0 +1,119 @@ +/* Copyright (c) 2017-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#define HS_DESCRIPTOR_PRIVATE + +#include "core/or/or.h" +#include "trunnel/ed25519_cert.h" /* Trunnel interface. */ +#include "lib/crypt_ops/crypto_ed25519.h" +#include "feature/hs/hs_descriptor.h" +#include "feature/dirparse/unparseable.h" + +#include "test/fuzz/fuzzing.h" + +static void +mock_dump_desc__nodump(const char *desc, const char *type) +{ + (void)desc; + (void)type; +} + +static int +mock_rsa_ed25519_crosscert_check(const uint8_t *crosscert, + const size_t crosscert_len, + const crypto_pk_t *rsa_id_key, + const ed25519_public_key_t *master_key, + const time_t reject_if_expired_before) +{ + (void) crosscert; + (void) crosscert_len; + (void) rsa_id_key; + (void) master_key; + (void) reject_if_expired_before; + return 0; +} + +static size_t +mock_decrypt_desc_layer(const hs_descriptor_t *desc, + const uint8_t *descriptor_cookie, + bool is_superencrypted_layer, + char **decrypted_out) +{ + (void)is_superencrypted_layer; + (void)desc; + (void)descriptor_cookie; + const size_t overhead = HS_DESC_ENCRYPTED_SALT_LEN + DIGEST256_LEN; + const uint8_t *encrypted_blob = (is_superencrypted_layer) + ? desc->plaintext_data.superencrypted_blob + : desc->superencrypted_data.encrypted_blob; + size_t encrypted_blob_size = (is_superencrypted_layer) + ? desc->plaintext_data.superencrypted_blob_size + : desc->superencrypted_data.encrypted_blob_size; + + if (encrypted_blob_size < overhead) + return 0; + *decrypted_out = tor_memdup_nulterm( + encrypted_blob + HS_DESC_ENCRYPTED_SALT_LEN, + encrypted_blob_size - overhead); + size_t result = strlen(*decrypted_out); + if (result) { + return result; + } else { + tor_free(*decrypted_out); + return 0; + } +} + +static const uint8_t *decrypted_data = NULL; +static size_t decrypted_len = 0; +static size_t +mock_desc_decrypt_encrypted(const hs_descriptor_t *desc, + const curve25519_secret_key_t *client_auth_sk, + char **decrypted_out) +{ + (void)desc; + (void)client_auth_sk; + *decrypted_out = (char*)tor_memdup_nulterm(decrypted_data, decrypted_len); + return decrypted_len; +} + +int +fuzz_init(void) +{ + disable_signature_checking(); + MOCK(dump_desc, mock_dump_desc__nodump); + MOCK(rsa_ed25519_crosscert_check, mock_rsa_ed25519_crosscert_check); + MOCK(decrypt_desc_layer, mock_decrypt_desc_layer); + MOCK(desc_decrypt_encrypted, mock_desc_decrypt_encrypted); + ed25519_init(); + return 0; +} + +int +fuzz_cleanup(void) +{ + return 0; +} + +int +fuzz_main(const uint8_t *data, size_t sz) +{ + decrypted_data = data; + decrypted_len = sz; + + hs_descriptor_t *desc = tor_malloc_zero(sizeof(hs_descriptor_t)); + hs_desc_encrypted_data_t *output = tor_malloc_zero(sizeof(*output)); + curve25519_secret_key_t *client_auth_sk = NULL; + hs_desc_decode_status_t status; + + status = desc_decode_encrypted_v3(desc, client_auth_sk, output); + if (status == HS_DESC_DECODE_OK) { + log_debug(LD_GENERAL, "Decoding okay"); + } else { + log_debug(LD_GENERAL, "Decoding failed"); + } + + hs_descriptor_free(desc); + hs_desc_encrypted_data_free(output); + return 0; +} diff --git a/src/test/fuzz/fuzz_hsdescv3_middle.c b/src/test/fuzz/fuzz_hsdescv3_middle.c new file mode 100644 index 0000000000..66a9d52cf3 --- /dev/null +++ b/src/test/fuzz/fuzz_hsdescv3_middle.c @@ -0,0 +1,116 @@ +/* Copyright (c) 2017-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#define HS_DESCRIPTOR_PRIVATE + +#include "core/or/or.h" +#include "trunnel/ed25519_cert.h" /* Trunnel interface. */ +#include "lib/crypt_ops/crypto_ed25519.h" +#include "feature/hs/hs_descriptor.h" +#include "feature/dirparse/unparseable.h" + +#include "test/fuzz/fuzzing.h" + +static void +mock_dump_desc__nodump(const char *desc, const char *type) +{ + (void)desc; + (void)type; +} + +static int +mock_rsa_ed25519_crosscert_check(const uint8_t *crosscert, + const size_t crosscert_len, + const crypto_pk_t *rsa_id_key, + const ed25519_public_key_t *master_key, + const time_t reject_if_expired_before) +{ + (void) crosscert; + (void) crosscert_len; + (void) rsa_id_key; + (void) master_key; + (void) reject_if_expired_before; + return 0; +} + +static size_t +mock_decrypt_desc_layer(const hs_descriptor_t *desc, + const uint8_t *descriptor_cookie, + bool is_superencrypted_layer, + char **decrypted_out) +{ + (void)is_superencrypted_layer; + (void)desc; + (void)descriptor_cookie; + const size_t overhead = HS_DESC_ENCRYPTED_SALT_LEN + DIGEST256_LEN; + const uint8_t *encrypted_blob = (is_superencrypted_layer) + ? desc->plaintext_data.superencrypted_blob + : desc->superencrypted_data.encrypted_blob; + size_t encrypted_blob_size = (is_superencrypted_layer) + ? desc->plaintext_data.superencrypted_blob_size + : desc->superencrypted_data.encrypted_blob_size; + + if (encrypted_blob_size < overhead) + return 0; + *decrypted_out = tor_memdup_nulterm( + encrypted_blob + HS_DESC_ENCRYPTED_SALT_LEN, + encrypted_blob_size - overhead); + size_t result = strlen(*decrypted_out); + if (result) { + return result; + } else { + tor_free(*decrypted_out); + return 0; + } +} + +static const uint8_t *decrypted_data = NULL; +static size_t decrypted_len = 0; +static size_t +mock_desc_decrypt_superencrypted(const hs_descriptor_t *desc, + char **decrypted_out) +{ + (void)desc; + *decrypted_out = (char*)tor_memdup_nulterm(decrypted_data, decrypted_len); + return decrypted_len; +} + +int +fuzz_init(void) +{ + disable_signature_checking(); + MOCK(dump_desc, mock_dump_desc__nodump); + MOCK(rsa_ed25519_crosscert_check, mock_rsa_ed25519_crosscert_check); + MOCK(decrypt_desc_layer, mock_decrypt_desc_layer); + MOCK(desc_decrypt_superencrypted, mock_desc_decrypt_superencrypted); + ed25519_init(); + return 0; +} + +int +fuzz_cleanup(void) +{ + return 0; +} + +int +fuzz_main(const uint8_t *data, size_t sz) +{ + decrypted_data = data; + decrypted_len = sz; + + hs_descriptor_t *desc = tor_malloc_zero(sizeof(hs_descriptor_t)); + hs_desc_superencrypted_data_t *output = tor_malloc_zero(sizeof(*output)); + hs_desc_decode_status_t status; + + status = desc_decode_superencrypted_v3(desc, output); + if (status == HS_DESC_DECODE_OK) { + log_debug(LD_GENERAL, "Decoding okay"); + } else { + log_debug(LD_GENERAL, "Decoding failed"); + } + + hs_descriptor_free(desc); + hs_desc_superencrypted_data_free(output); + return 0; +} diff --git a/src/test/fuzz/include.am b/src/test/fuzz/include.am index 9bdced9e6f..9fece7d004 100644 --- a/src/test/fuzz/include.am +++ b/src/test/fuzz/include.am @@ -8,7 +8,6 @@ FUZZING_LDFLAG = \ @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) @TOR_LDFLAGS_libevent@ FUZZING_LIBS = \ src/test/libtor-testing.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \ @TOR_LIBEVENT_LIBS@ $(TOR_LIBS_CRYPTLIB) \ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ @CURVE25519_LIBS@ \ @@ -23,17 +22,36 @@ oss-fuzz-prereqs: \ noinst_HEADERS += \ src/test/fuzz/fuzzing.h -LIBFUZZER = -lFuzzer LIBFUZZER_CPPFLAGS = $(FUZZING_CPPFLAGS) -DLLVM_FUZZ LIBFUZZER_CFLAGS = $(FUZZING_CFLAGS) -LIBFUZZER_LDFLAG = $(FUZZING_LDFLAG) -LIBFUZZER_LIBS = $(FUZZING_LIBS) $(LIBFUZZER) -lstdc++ +LIBFUZZER_LDFLAG = $(FUZZING_LDFLAG) -fsanitize=fuzzer +LIBFUZZER_LIBS = $(FUZZING_LIBS) -lstdc++ LIBOSS_FUZZ_CPPFLAGS = $(FUZZING_CPPFLAGS) -DLLVM_FUZZ LIBOSS_FUZZ_CFLAGS = $(FUZZING_CFLAGS) # ===== AFL fuzzers if UNITTESTS_ENABLED +src_test_fuzz_fuzz_address_SOURCES = \ + src/test/fuzz/fuzzing_common.c \ + src/test/fuzz/fuzz_address.c +src_test_fuzz_fuzz_address_CPPFLAGS = $(FUZZING_CPPFLAGS) +src_test_fuzz_fuzz_address_CFLAGS = $(FUZZING_CFLAGS) +src_test_fuzz_fuzz_address_LDFLAGS = $(FUZZING_LDFLAG) +src_test_fuzz_fuzz_address_LDADD = $(FUZZING_LIBS) +endif + +if UNITTESTS_ENABLED +src_test_fuzz_fuzz_addressPTR_SOURCES = \ + src/test/fuzz/fuzzing_common.c \ + src/test/fuzz/fuzz_addressPTR.c +src_test_fuzz_fuzz_addressPTR_CPPFLAGS = $(FUZZING_CPPFLAGS) +src_test_fuzz_fuzz_addressPTR_CFLAGS = $(FUZZING_CFLAGS) +src_test_fuzz_fuzz_addressPTR_LDFLAGS = $(FUZZING_LDFLAG) +src_test_fuzz_fuzz_addressPTR_LDADD = $(FUZZING_LIBS) +endif + +if UNITTESTS_ENABLED src_test_fuzz_fuzz_consensus_SOURCES = \ src/test/fuzz/fuzzing_common.c \ src/test/fuzz/fuzz_consensus.c @@ -94,6 +112,28 @@ src_test_fuzz_fuzz_hsdescv3_LDADD = $(FUZZING_LIBS) endif if UNITTESTS_ENABLED +src_test_fuzz_fuzz_hsdescv3_inner_SOURCES = \ + src/test/fuzz/fuzzing_common.c \ + src/test/fuzz/fuzz_hsdescv3_inner.c +src_test_fuzz_fuzz_hsdescv3_inner_CPPFLAGS = $(FUZZING_CPPFLAGS) +src_test_fuzz_fuzz_hsdescv3_inner_CFLAGS = $(FUZZING_CFLAGS) +src_test_fuzz_fuzz_hsdescv3_inner_LDFLAGS = $(FUZZING_LDFLAG) +src_test_fuzz_fuzz_hsdescv3_inner_LDADD = $(FUZZING_LIBS) +endif + + +if UNITTESTS_ENABLED +src_test_fuzz_fuzz_hsdescv3_middle_SOURCES = \ + src/test/fuzz/fuzzing_common.c \ + src/test/fuzz/fuzz_hsdescv3_middle.c +src_test_fuzz_fuzz_hsdescv3_middle_CPPFLAGS = $(FUZZING_CPPFLAGS) +src_test_fuzz_fuzz_hsdescv3_middle_CFLAGS = $(FUZZING_CFLAGS) +src_test_fuzz_fuzz_hsdescv3_middle_LDFLAGS = $(FUZZING_LDFLAG) +src_test_fuzz_fuzz_hsdescv3_middle_LDADD = $(FUZZING_LIBS) +endif + + +if UNITTESTS_ENABLED src_test_fuzz_fuzz_http_SOURCES = \ src/test/fuzz/fuzzing_common.c \ src/test/fuzz/fuzz_http.c @@ -155,12 +195,16 @@ endif if UNITTESTS_ENABLED FUZZERS = \ + src/test/fuzz/fuzz-address \ + src/test/fuzz/fuzz-addressPTR \ src/test/fuzz/fuzz-consensus \ src/test/fuzz/fuzz-descriptor \ src/test/fuzz/fuzz-diff \ src/test/fuzz/fuzz-diff-apply \ src/test/fuzz/fuzz-extrainfo \ src/test/fuzz/fuzz-hsdescv3 \ + src/test/fuzz/fuzz-hsdescv3-inner \ + src/test/fuzz/fuzz-hsdescv3-middle \ src/test/fuzz/fuzz-http \ src/test/fuzz/fuzz-http-connect \ src/test/fuzz/fuzz-microdesc \ @@ -173,6 +217,24 @@ endif if LIBFUZZER_ENABLED if UNITTESTS_ENABLED +src_test_fuzz_lf_fuzz_address_SOURCES = \ + $(src_test_fuzz_fuzz_address_SOURCES) +src_test_fuzz_lf_fuzz_address_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) +src_test_fuzz_lf_fuzz_address_CFLAGS = $(LIBFUZZER_CFLAGS) +src_test_fuzz_lf_fuzz_address_LDFLAGS = $(LIBFUZZER_LDFLAG) +src_test_fuzz_lf_fuzz_address_LDADD = $(LIBFUZZER_LIBS) +endif + +if UNITTESTS_ENABLED +src_test_fuzz_lf_fuzz_addressPTR_SOURCES = \ + $(src_test_fuzz_fuzz_addressPTR_SOURCES) +src_test_fuzz_lf_fuzz_addressPTR_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) +src_test_fuzz_lf_fuzz_addressPTR_CFLAGS = $(LIBFUZZER_CFLAGS) +src_test_fuzz_lf_fuzz_addressPTR_LDFLAGS = $(LIBFUZZER_LDFLAG) +src_test_fuzz_lf_fuzz_addressPTR_LDADD = $(LIBFUZZER_LIBS) +endif + +if UNITTESTS_ENABLED src_test_fuzz_lf_fuzz_consensus_SOURCES = \ $(src_test_fuzz_fuzz_consensus_SOURCES) src_test_fuzz_lf_fuzz_consensus_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) @@ -227,6 +289,25 @@ src_test_fuzz_lf_fuzz_hsdescv3_LDADD = $(LIBFUZZER_LIBS) endif if UNITTESTS_ENABLED +src_test_fuzz_lf_fuzz_hsdescv3_inner_SOURCES = \ + $(src_test_fuzz_fuzz_hsdescv3_inner_SOURCES) +src_test_fuzz_lf_fuzz_hsdescv3_inner_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) +src_test_fuzz_lf_fuzz_hsdescv3_inner_CFLAGS = $(LIBFUZZER_CFLAGS) +src_test_fuzz_lf_fuzz_hsdescv3_inner_LDFLAGS = $(LIBFUZZER_LDFLAG) +src_test_fuzz_lf_fuzz_hsdescv3_inner_LDADD = $(LIBFUZZER_LIBS) +endif + +if UNITTESTS_ENABLED +src_test_fuzz_lf_fuzz_hsdescv3_middle_SOURCES = \ + $(src_test_fuzz_fuzz_hsdescv3_middle_SOURCES) +src_test_fuzz_lf_fuzz_hsdescv3_middle_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) +src_test_fuzz_lf_fuzz_hsdescv3_middle_CFLAGS = $(LIBFUZZER_CFLAGS) +src_test_fuzz_lf_fuzz_hsdescv3_middle_LDFLAGS = $(LIBFUZZER_LDFLAG) +src_test_fuzz_lf_fuzz_hsdescv3_middle_LDADD = $(LIBFUZZER_LIBS) +endif + + +if UNITTESTS_ENABLED src_test_fuzz_lf_fuzz_http_SOURCES = \ $(src_test_fuzz_fuzz_http_SOURCES) src_test_fuzz_lf_fuzz_http_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) @@ -281,12 +362,16 @@ src_test_fuzz_lf_fuzz_vrs_LDADD = $(LIBFUZZER_LIBS) endif LIBFUZZER_FUZZERS = \ + src/test/fuzz/lf-fuzz-address \ + src/test/fuzz/lf-fuzz-addressPTR \ src/test/fuzz/lf-fuzz-consensus \ src/test/fuzz/lf-fuzz-descriptor \ src/test/fuzz/lf-fuzz-diff \ src/test/fuzz/lf-fuzz-diff-apply \ src/test/fuzz/lf-fuzz-extrainfo \ src/test/fuzz/lf-fuzz-hsdescv3 \ + src/test/fuzz/lf-fuzz-hsdescv3-inner \ + src/test/fuzz/lf-fuzz-hsdescv3-middle \ src/test/fuzz/lf-fuzz-http \ src/test/fuzz/lf-fuzz-http-connect \ src/test/fuzz/lf-fuzz-microdesc \ @@ -302,6 +387,20 @@ endif if OSS_FUZZ_ENABLED if UNITTESTS_ENABLED +src_test_fuzz_liboss_fuzz_address_a_SOURCES = \ + $(src_test_fuzz_fuzz_address_SOURCES) +src_test_fuzz_liboss_fuzz_address_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) +src_test_fuzz_liboss_fuzz_address_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) +endif + +if UNITTESTS_ENABLED +src_test_fuzz_liboss_fuzz_addressPTR_a_SOURCES = \ + $(src_test_fuzz_fuzz_addressPTR_SOURCES) +src_test_fuzz_liboss_fuzz_addressPTR_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) +src_test_fuzz_liboss_fuzz_addressPTR_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) +endif + +if UNITTESTS_ENABLED src_test_fuzz_liboss_fuzz_consensus_a_SOURCES = \ $(src_test_fuzz_fuzz_consensus_SOURCES) src_test_fuzz_liboss_fuzz_consensus_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) @@ -344,6 +443,20 @@ src_test_fuzz_liboss_fuzz_hsdescv3_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) endif if UNITTESTS_ENABLED +src_test_fuzz_liboss_fuzz_hsdescv3_inner_a_SOURCES = \ + $(src_test_fuzz_fuzz_hsdescv3_inner_SOURCES) +src_test_fuzz_liboss_fuzz_hsdescv3_inner_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) +src_test_fuzz_liboss_fuzz_hsdescv3_inner_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) +endif + +if UNITTESTS_ENABLED +src_test_fuzz_liboss_fuzz_hsdescv3_middle_a_SOURCES = \ + $(src_test_fuzz_fuzz_hsdescv3_middle_SOURCES) +src_test_fuzz_liboss_fuzz_hsdescv3_middle_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) +src_test_fuzz_liboss_fuzz_hsdescv3_middle_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) +endif + +if UNITTESTS_ENABLED src_test_fuzz_liboss_fuzz_http_a_SOURCES = \ $(src_test_fuzz_fuzz_http_SOURCES) src_test_fuzz_liboss_fuzz_http_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) @@ -386,12 +499,16 @@ src_test_fuzz_liboss_fuzz_vrs_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) endif OSS_FUZZ_FUZZERS = \ + src/test/fuzz/liboss-fuzz-address.a \ + src/test/fuzz/liboss-fuzz-addressPTR.a \ src/test/fuzz/liboss-fuzz-consensus.a \ src/test/fuzz/liboss-fuzz-descriptor.a \ src/test/fuzz/liboss-fuzz-diff.a \ src/test/fuzz/liboss-fuzz-diff-apply.a \ src/test/fuzz/liboss-fuzz-extrainfo.a \ src/test/fuzz/liboss-fuzz-hsdescv3.a \ + src/test/fuzz/liboss-fuzz-hsdescv3-inner.a \ + src/test/fuzz/liboss-fuzz-hsdescv3-middle.a \ src/test/fuzz/liboss-fuzz-http.a \ src/test/fuzz/liboss-fuzz-http-connect.a \ src/test/fuzz/liboss-fuzz-microdesc.a \ diff --git a/src/test/hs_test_helpers.c b/src/test/hs_test_helpers.c index 2af4f71d72..20b225ba4a 100644 --- a/src/test/hs_test_helpers.c +++ b/src/test/hs_test_helpers.c @@ -4,6 +4,7 @@ #define HS_CLIENT_PRIVATE #include "core/or/or.h" +#include "core/or/versions.h" #include "lib/crypt_ops/crypto_ed25519.h" #include "test/test.h" #include "feature/nodelist/torcert.h" @@ -186,6 +187,7 @@ hs_helper_build_hs_desc_impl(unsigned int no_ip, desc->encrypted_data.create2_ntor = 1; desc->encrypted_data.intro_auth_types = smartlist_new(); desc->encrypted_data.single_onion_service = 1; + desc->encrypted_data.flow_control_pv = tor_strdup("FlowCtrl=1-2"); smartlist_add(desc->encrypted_data.intro_auth_types, tor_strdup("ed25519")); desc->encrypted_data.intro_points = smartlist_new(); if (!no_ip) { @@ -332,6 +334,10 @@ hs_helper_desc_equal(const hs_descriptor_t *desc1, /* Encrypted data section. */ tt_uint_op(desc1->encrypted_data.create2_ntor, OP_EQ, desc2->encrypted_data.create2_ntor); + tt_uint_op(desc1->encrypted_data.single_onion_service, OP_EQ, + desc2->encrypted_data.single_onion_service); + tt_str_op(desc1->encrypted_data.flow_control_pv, OP_EQ, + desc2->encrypted_data.flow_control_pv); /* Authentication type. */ tt_int_op(!!desc1->encrypted_data.intro_auth_types, OP_EQ, diff --git a/src/test/include.am b/src/test/include.am index d5dcebfaea..2765cf27d0 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -8,11 +8,7 @@ TESTS_ENVIRONMENT = \ export abs_top_builddir="$(abs_top_builddir)"; \ export builddir="$(builddir)"; \ export TESTING_TOR_BINARY="$(TESTING_TOR_BINARY)"; \ - export CARGO="$(CARGO)"; \ - export EXTRA_CARGO_OPTIONS="$(EXTRA_CARGO_OPTIONS)"; \ - export CARGO_ONLINE="$(CARGO_ONLINE)"; \ - export CCLD="$(CCLD)"; \ - export RUSTFLAGS="-C linker=`echo '$(CC)' | cut -d' ' -f 1` $(RUST_LINKER_OPTIONS)"; + export CCLD="$(CCLD)"; TESTSCRIPTS = \ src/test/fuzz_static_testcases.sh \ @@ -35,11 +31,6 @@ TESTSCRIPTS = \ src/test/unittest_part7.sh \ src/test/unittest_part8.sh -if USE_RUST -TESTSCRIPTS += \ - src/test/test_rust.sh -endif - if USEPYTHON TESTSCRIPTS += \ src/test/test_ntor.sh \ @@ -170,6 +161,7 @@ src_test_test_SOURCES += \ src/test/test_crypto_rng.c \ src/test/test_data.c \ src/test/test_dir.c \ + src/test/test_dirauth_ports.c \ src/test/test_dirvote.c \ src/test/test_dir_common.c \ src/test/test_dir_handle_get.c \ @@ -203,6 +195,7 @@ src_test_test_SOURCES += \ src/test/test_namemap.c \ src/test/test_netinfo.c \ src/test/test_nodelist.c \ + src/test/test_ntor_v3.c \ src/test/test_oom.c \ src/test/test_oos.c \ src/test/test_options.c \ @@ -229,6 +222,7 @@ src_test_test_SOURCES += \ src/test/test_routerkeys.c \ src/test/test_routerlist.c \ src/test/test_routerset.c \ + src/test/test_sandbox.c \ src/test/test_scheduler.c \ src/test/test_sendme.c \ src/test/test_shared_random.c \ @@ -303,7 +297,6 @@ src_test_test_switch_id_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS) src_test_test_switch_id_LDFLAGS = @TOR_LDFLAGS_zlib@ src_test_test_switch_id_LDADD = \ $(TOR_UTIL_TESTING_LIBS) \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_USERENV@ \ @TOR_LZMA_LIBS@ @TOR_ZSTD_LIBS@ @TOR_TRACE_LIBS@ @@ -311,7 +304,6 @@ src_test_test_LDFLAGS = @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) \ @TOR_LDFLAGS_libevent@ src_test_test_LDADD = \ src/test/libtor-testing.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \ $(TOR_LIBS_CRYPTLIB) @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @CURVE25519_LIBS@ \ @@ -340,7 +332,6 @@ src_test_bench_LDFLAGS = @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) \ @TOR_LDFLAGS_libevent@ src_test_bench_LDADD = \ libtor.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \ $(TOR_LIBS_CRYPTLIB) @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @CURVE25519_LIBS@ \ @@ -350,7 +341,6 @@ src_test_test_workqueue_LDFLAGS = @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) \ @TOR_LDFLAGS_libevent@ src_test_test_workqueue_LDADD = \ src/test/libtor-testing.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \ $(TOR_LIBS_CRYPTLIB) @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @CURVE25519_LIBS@ \ @@ -362,7 +352,6 @@ src_test_test_timers_LDADD = \ src/lib/libtor-evloop-testing.a \ $(TOR_CRYPTO_TESTING_LIBS) \ $(TOR_UTIL_TESTING_LIBS) \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \ $(TOR_LIBS_CRYPTLIB) @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @CURVE25519_LIBS@ \ @@ -398,7 +387,6 @@ src_test_test_ntor_cl_SOURCES = src/test/test_ntor_cl.c src_test_test_ntor_cl_LDFLAGS = @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) src_test_test_ntor_cl_LDADD = \ libtor.a \ - $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \ $(TOR_LIBS_CRYPTLIB) @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @CURVE25519_LIBS@ @TOR_LZMA_LIBS@ @TOR_TRACE_LIBS@ @@ -421,7 +409,6 @@ noinst_PROGRAMS += src/test/test-bt-cl src_test_test_bt_cl_SOURCES = src/test/test_bt_cl.c src_test_test_bt_cl_LDADD = \ $(TOR_UTIL_TESTING_LIBS) \ - $(rust_ldadd) \ @TOR_LIB_MATH@ \ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ @TOR_TRACE_LIBS@ @@ -443,13 +430,11 @@ EXTRA_DIST += \ src/test/test_include.py \ src/test/zero_length_keys.sh \ scripts/maint/run_check_subsystem_order.sh \ - src/test/rust_supp.txt \ src/test/test_keygen.sh \ src/test/test_key_expiration.sh \ src/test/test_zero_length_keys.sh \ src/test/test_ntor.sh src/test/test_hs_ntor.sh src/test/test_bt.sh \ src/test/test-network.sh \ - src/test/test_rust.sh \ src/test/test_switch_id.sh \ src/test/test_workqueue_cancel.sh \ src/test/test_workqueue_efd.sh \ @@ -467,6 +452,3 @@ EXTRA_DIST += \ src/test/unittest_part6.sh \ src/test/unittest_part7.sh \ src/test/unittest_part8.sh - -test-rust: - $(TESTS_ENVIRONMENT) "$(abs_top_srcdir)/src/test/test_rust.sh" diff --git a/src/test/ntor_v3_ref.py b/src/test/ntor_v3_ref.py new file mode 100755 index 0000000000..28bc077105 --- /dev/null +++ b/src/test/ntor_v3_ref.py @@ -0,0 +1,308 @@ +#!/usr/bin/python + +import binascii +import hashlib +import os +import struct + +import donna25519 +from Crypto.Cipher import AES +from Crypto.Util import Counter + +# Define basic wrappers. + +DIGEST_LEN = 32 +ENC_KEY_LEN = 32 +PUB_KEY_LEN = 32 +SEC_KEY_LEN = 32 +IDENTITY_LEN = 32 + +def sha3_256(s): + d = hashlib.sha3_256(s).digest() + assert len(d) == DIGEST_LEN + return d + +def shake_256(s): + # Note: In reality, you wouldn't want to generate more bytes than needed. + MAX_KEY_BYTES = 1024 + return hashlib.shake_256(s).digest(MAX_KEY_BYTES) + +def curve25519(pk, sk): + assert len(pk) == PUB_KEY_LEN + assert len(sk) == SEC_KEY_LEN + private = donna25519.PrivateKey.load(sk) + public = donna25519.PublicKey(pk) + return private.do_exchange(public) + +def keygen(): + private = donna25519.PrivateKey() + public = private.get_public() + return (private.private, public.public) + +def aes256_ctr(k, s): + assert len(k) == ENC_KEY_LEN + cipher = AES.new(k, AES.MODE_CTR, counter=Counter.new(128, initial_value=0)) + return cipher.encrypt(s) + +# Byte-oriented helper. We use this for decoding keystreams and messages. + +class ByteSeq: + def __init__(self, data): + self.data = data + + def take(self, n): + assert n <= len(self.data) + result = self.data[:n] + self.data = self.data[n:] + return result + + def exhausted(self): + return len(self.data) == 0 + + def remaining(self): + return len(self.data) + +# Low-level functions + +MAC_KEY_LEN = 32 +MAC_LEN = DIGEST_LEN + +hash_func = sha3_256 + +def encapsulate(s): + """encapsulate `s` with a length prefix. + + We use this whenever we need to avoid message ambiguities in + cryptographic inputs. + """ + assert len(s) <= 0xffffffff + header = b"\0\0\0\0" + struct.pack("!L", len(s)) + assert len(header) == 8 + return header + s + +def h(s, tweak): + return hash_func(encapsulate(tweak) + s) + +def mac(s, key, tweak): + return hash_func(encapsulate(tweak) + encapsulate(key) + s) + +def kdf(s, tweak): + data = shake_256(encapsulate(tweak) + s) + return ByteSeq(data) + +def enc(s, k): + return aes256_ctr(k, s) + +# Tweaked wrappers + +PROTOID = b"ntor3-curve25519-sha3_256-1" +T_KDF_PHASE1 = PROTOID + b":kdf_phase1" +T_MAC_PHASE1 = PROTOID + b":msg_mac" +T_KDF_FINAL = PROTOID + b":kdf_final" +T_KEY_SEED = PROTOID + b":key_seed" +T_VERIFY = PROTOID + b":verify" +T_AUTH = PROTOID + b":auth_final" + +def kdf_phase1(s): + return kdf(s, T_KDF_PHASE1) + +def kdf_final(s): + return kdf(s, T_KDF_FINAL) + +def mac_phase1(s, key): + return mac(s, key, T_MAC_PHASE1) + +def h_key_seed(s): + return h(s, T_KEY_SEED) + +def h_verify(s): + return h(s, T_VERIFY) + +def h_auth(s): + return h(s, T_AUTH) + +# Handshake. + +def client_phase1(msg, verification, B, ID): + assert len(B) == PUB_KEY_LEN + assert len(ID) == IDENTITY_LEN + + (x,X) = keygen() + p(["x", "X"], locals()) + p(["msg", "verification"], locals()) + Bx = curve25519(B, x) + secret_input_phase1 = Bx + ID + X + B + PROTOID + encapsulate(verification) + + phase1_keys = kdf_phase1(secret_input_phase1) + enc_key = phase1_keys.take(ENC_KEY_LEN) + mac_key = phase1_keys.take(MAC_KEY_LEN) + p(["enc_key", "mac_key"], locals()) + + msg_0 = ID + B + X + enc(msg, enc_key) + mac = mac_phase1(msg_0, mac_key) + p(["mac"], locals()) + + client_handshake = msg_0 + mac + state = dict(x=x, X=X, B=B, ID=ID, Bx=Bx, mac=mac, verification=verification) + + p(["client_handshake"], locals()) + + return (client_handshake, state) + +# server. + +class Reject(Exception): + pass + +def server_part1(cmsg, verification, b, B, ID): + assert len(B) == PUB_KEY_LEN + assert len(ID) == IDENTITY_LEN + assert len(b) == SEC_KEY_LEN + + if len(cmsg) < (IDENTITY_LEN + PUB_KEY_LEN * 2 + MAC_LEN): + raise Reject() + + mac_covered_portion = cmsg[0:-MAC_LEN] + cmsg = ByteSeq(cmsg) + cmsg_id = cmsg.take(IDENTITY_LEN) + cmsg_B = cmsg.take(PUB_KEY_LEN) + cmsg_X = cmsg.take(PUB_KEY_LEN) + cmsg_msg = cmsg.take(cmsg.remaining() - MAC_LEN) + cmsg_mac = cmsg.take(MAC_LEN) + + assert cmsg.exhausted() + + # XXXX for real purposes, you would use constant-time checks here + if cmsg_id != ID or cmsg_B != B: + raise Reject() + + Xb = curve25519(cmsg_X, b) + secret_input_phase1 = Xb + ID + cmsg_X + B + PROTOID + encapsulate(verification) + + phase1_keys = kdf_phase1(secret_input_phase1) + enc_key = phase1_keys.take(ENC_KEY_LEN) + mac_key = phase1_keys.take(MAC_KEY_LEN) + + mac_received = mac_phase1(mac_covered_portion, mac_key) + if mac_received != cmsg_mac: + raise Reject() + + client_msg = enc(cmsg_msg, enc_key) + state = dict( + b=b, + B=B, + X=cmsg_X, + mac_received=mac_received, + Xb=Xb, + ID=ID, + verification=verification) + + return (client_msg, state) + +def server_part2(state, server_msg): + X = state['X'] + Xb = state['Xb'] + B = state['B'] + b = state['b'] + ID = state['ID'] + mac_received = state['mac_received'] + verification = state['verification'] + + p(["server_msg"], locals()) + + (y,Y) = keygen() + p(["y", "Y"], locals()) + Xy = curve25519(X, y) + + secret_input = Xy + Xb + ID + B + X + Y + PROTOID + encapsulate(verification) + key_seed = h_key_seed(secret_input) + verify = h_verify(secret_input) + p(["key_seed", "verify"], locals()) + + keys = kdf_final(key_seed) + server_enc_key = keys.take(ENC_KEY_LEN) + p(["server_enc_key"], locals()) + + smsg_msg = enc(server_msg, server_enc_key) + + auth_input = verify + ID + B + Y + X + mac_received + encapsulate(smsg_msg) + PROTOID + b"Server" + + auth = h_auth(auth_input) + server_handshake = Y + auth + smsg_msg + p(["auth", "server_handshake"], locals()) + + return (server_handshake, keys) + +def client_phase2(state, smsg): + x = state['x'] + X = state['X'] + B = state['B'] + ID = state['ID'] + Bx = state['Bx'] + mac_sent = state['mac'] + verification = state['verification'] + + if len(smsg) < PUB_KEY_LEN + DIGEST_LEN: + raise Reject() + + smsg = ByteSeq(smsg) + Y = smsg.take(PUB_KEY_LEN) + auth_received = smsg.take(DIGEST_LEN) + server_msg = smsg.take(smsg.remaining()) + + Yx = curve25519(Y,x) + + secret_input = Yx + Bx + ID + B + X + Y + PROTOID + encapsulate(verification) + key_seed = h_key_seed(secret_input) + verify = h_verify(secret_input) + + auth_input = verify + ID + B + Y + X + mac_sent + encapsulate(server_msg) + PROTOID + b"Server" + + auth = h_auth(auth_input) + if auth != auth_received: + raise Reject() + + keys = kdf_final(key_seed) + enc_key = keys.take(ENC_KEY_LEN) + + server_msg_decrypted = enc(server_msg, enc_key) + + return (keys, server_msg_decrypted) + +def p(varnames, localvars): + for v in varnames: + label = v + val = localvars[label] + print('{} = "{}"'.format(label, binascii.b2a_hex(val).decode("ascii"))) + +def test(): + (b,B) = keygen() + ID = os.urandom(IDENTITY_LEN) + + p(["b", "B", "ID"], locals()) + + print("# ============") + (c_handshake, c_state) = client_phase1(b"hello world", b"xyzzy", B, ID) + + print("# ============") + + (c_msg_got, s_state) = server_part1(c_handshake, b"xyzzy", b, B, ID) + + #print(repr(c_msg_got)) + + (s_handshake, s_keys) = server_part2(s_state, b"Hola Mundo") + + print("# ============") + + (c_keys, s_msg_got) = client_phase2(c_state, s_handshake) + + #print(repr(s_msg_got)) + + c_keys_256 = c_keys.take(256) + p(["c_keys_256"], locals()) + + assert (c_keys_256 == s_keys.take(256)) + + +if __name__ == '__main__': + test() diff --git a/src/test/test.c b/src/test/test.c index 40c053a660..6b7e0b6442 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1,5 +1,4 @@ /* Copyright (c) 2001-2004, Roger Dingledine. -->a * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. * Copyright (c) 2007-2021, The Tor Project, Inc. */ /* See LICENSE for licensing information */ @@ -53,6 +52,7 @@ #include "core/crypto/onion_fast.h" #include "core/crypto/onion_tap.h" #include "core/or/policies.h" +#include "lib/sandbox/sandbox.h" #include "app/config/statefile.h" #include "lib/crypt_ops/crypto_curve25519.h" #include "feature/nodelist/networkstatus.h" @@ -350,6 +350,127 @@ test_onion_queues(void *arg) tor_free(onionskin); } +/** + * Test onion queue priority, separation, and resulting + * ordering. + * + * create and add a mix of TAP, NTOR2, and NTORv3. Ensure + * they all end up in the right queue. In particular, ntorv2 + * and ntorv3 should share a queue, but TAP should be separate, + * and lower prioritt. + * + * We test this by way of adding TAP first, and then an interleaving + * order of ntor2 and ntor3, and check that the ntor2 and ntor3 are + * still interleaved, but TAP comes last. */ +static void +test_onion_queue_order(void *arg) +{ + uint8_t buf_tap[TAP_ONIONSKIN_CHALLENGE_LEN] = {0}; + uint8_t buf_ntor[NTOR_ONIONSKIN_LEN] = {0}; + uint8_t buf_ntor3[CELL_PAYLOAD_SIZE] = {0}; + + or_circuit_t *circ_tap = or_circuit_new(0, NULL); + or_circuit_t *circ_ntor = or_circuit_new(0, NULL); + or_circuit_t *circ_ntor3 = or_circuit_new(0, NULL); + + create_cell_t *onionskin = NULL; + create_cell_t *create_tap1 = tor_malloc_zero(sizeof(create_cell_t)); + create_cell_t *create_ntor1 = tor_malloc_zero(sizeof(create_cell_t)); + create_cell_t *create_ntor2 = tor_malloc_zero(sizeof(create_cell_t)); + create_cell_t *create_v3ntor1 = tor_malloc_zero(sizeof(create_cell_t)); + create_cell_t *create_v3ntor2 = tor_malloc_zero(sizeof(create_cell_t)); + (void)arg; + + create_cell_init(create_tap1, CELL_CREATE, ONION_HANDSHAKE_TYPE_TAP, + TAP_ONIONSKIN_CHALLENGE_LEN, buf_tap); + create_cell_init(create_ntor1, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR, + NTOR_ONIONSKIN_LEN, buf_ntor); + create_cell_init(create_ntor2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR, + NTOR_ONIONSKIN_LEN, buf_ntor); + create_cell_init(create_v3ntor1, CELL_CREATE2, ONION_HANDSHAKE_TYPE_NTOR_V3, + NTOR_ONIONSKIN_LEN, buf_ntor3); + create_cell_init(create_v3ntor2, CELL_CREATE2, ONION_HANDSHAKE_TYPE_NTOR_V3, + NTOR_ONIONSKIN_LEN, buf_ntor3); + + /* sanity check queue init */ + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + + /* Add tap first so we can ensure it comes out last */ + tt_int_op(0,OP_EQ, onion_pending_add(circ_tap, create_tap1)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + + /* Now add interleaving ntor2 and ntor3, to ensure they share + * the same queue and come out in this order */ + tt_int_op(0,OP_EQ, onion_pending_add(circ_ntor, create_ntor1)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + + tt_int_op(0,OP_EQ, onion_pending_add(circ_ntor3, create_v3ntor1)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(2,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(2,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + + tt_int_op(0,OP_EQ, onion_pending_add(circ_ntor, create_ntor2)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(3,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(3,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + + tt_int_op(0,OP_EQ, onion_pending_add(circ_ntor3, create_v3ntor2)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(4,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(4,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + + /* Now remove 5 tasks, ensuring order and queue sizes */ + tt_ptr_op(circ_ntor, OP_EQ, onion_next_task(&onionskin)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(3,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(3,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + tt_ptr_op(onionskin, OP_EQ, create_ntor1); + + tt_ptr_op(circ_ntor3, OP_EQ, onion_next_task(&onionskin)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(2,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(2,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + tt_ptr_op(onionskin, OP_EQ, create_v3ntor1); + + tt_ptr_op(circ_ntor, OP_EQ, onion_next_task(&onionskin)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + tt_ptr_op(onionskin, OP_EQ, create_ntor2); + + tt_ptr_op(circ_ntor3, OP_EQ, onion_next_task(&onionskin)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + tt_ptr_op(onionskin, OP_EQ, create_v3ntor2); + + tt_ptr_op(circ_tap, OP_EQ, onion_next_task(&onionskin)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR_V3)); + tt_ptr_op(onionskin, OP_EQ, create_tap1); + + clear_pending_onions(); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + + done: + circuit_free_(TO_CIRCUIT(circ_tap)); + circuit_free_(TO_CIRCUIT(circ_ntor)); + circuit_free_(TO_CIRCUIT(circ_ntor3)); + tor_free(create_tap1); + tor_free(create_ntor1); + tor_free(create_ntor2); + tor_free(create_v3ntor1); + tor_free(create_v3ntor2); +} + static int32_t cbtnummodes = 10; static int32_t @@ -622,6 +743,7 @@ static struct testcase_t test_array[] = { ENT(onion_handshake), { "bad_onion_handshake", test_bad_onion_handshake, 0, NULL, NULL }, ENT(onion_queues), + ENT(onion_queue_order), { "ntor_handshake", test_ntor_handshake, 0, NULL, NULL }, { "fast_handshake", test_fast_handshake, 0, NULL, NULL }, FORK(circuit_timeout), @@ -673,6 +795,7 @@ struct testgroup_t testgroups[] = { { "crypto/pem/", pem_tests }, { "crypto/rng/", crypto_rng_tests }, { "dir/", dir_tests }, + { "dir/auth/ports/", dirauth_port_tests }, { "dir/auth/process_descs/", process_descs_tests }, { "dir/md/", microdesc_tests }, { "dirauth/dirvote/", dirvote_tests}, @@ -707,6 +830,7 @@ struct testgroup_t testgroups[] = { { "netinfo/", netinfo_tests }, { "nodelist/", nodelist_tests }, { "oom/", oom_tests }, + { "onion-handshake/ntor-v3/", ntor_v3_tests }, { "oos/", oos_tests }, { "options/", options_tests }, { "options/act/", options_act_tests }, @@ -731,6 +855,9 @@ struct testgroup_t testgroups[] = { { "routerkeys/", routerkeys_tests }, { "routerlist/", routerlist_tests }, { "routerset/" , routerset_tests }, +#ifdef USE_LIBSECCOMP + { "sandbox/" , sandbox_tests }, +#endif { "scheduler/", scheduler_tests }, { "sendme/", sendme_tests }, { "shared-random/", sr_tests }, diff --git a/src/test/test.h b/src/test/test.h index f88bc98498..e17bce427c 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -120,6 +120,7 @@ extern struct testcase_t crypto_ope_tests[]; extern struct testcase_t crypto_openssl_tests[]; extern struct testcase_t crypto_rng_tests[]; extern struct testcase_t crypto_tests[]; +extern struct testcase_t dirauth_port_tests[]; extern struct testcase_t dir_handle_get_tests[]; extern struct testcase_t dir_tests[]; extern struct testcase_t dirvote_tests[]; @@ -154,6 +155,7 @@ extern struct testcase_t microdesc_tests[]; extern struct testcase_t namemap_tests[]; extern struct testcase_t netinfo_tests[]; extern struct testcase_t nodelist_tests[]; +extern struct testcase_t ntor_v3_tests[]; extern struct testcase_t oom_tests[]; extern struct testcase_t oos_tests[]; extern struct testcase_t options_tests[]; @@ -182,6 +184,7 @@ extern struct testcase_t router_tests[]; extern struct testcase_t routerkeys_tests[]; extern struct testcase_t routerlist_tests[]; extern struct testcase_t routerset_tests[]; +extern struct testcase_t sandbox_tests[]; extern struct testcase_t scheduler_tests[]; extern struct testcase_t sendme_tests[]; extern struct testcase_t socks_tests[]; diff --git a/src/test/test_address.c b/src/test/test_address.c index 9c1415419c..015ca0807c 100644 --- a/src/test/test_address.c +++ b/src/test/test_address.c @@ -1326,6 +1326,42 @@ test_address_dirserv_router_addr_private(void *opt_dir_allow_private) UNMOCK(get_options); } +static void +test_address_parse_port_range(void *arg) +{ + int ret; + uint16_t min_out = 0; + uint16_t max_out = 0; + + (void) arg; + + /* Invalid. */ + ret = parse_port_range("0x00", &min_out, &max_out); + tt_int_op(ret, OP_EQ, -1); + ret = parse_port_range("0x01", &min_out, &max_out); + tt_int_op(ret, OP_EQ, -1); + ret = parse_port_range("1817161", &min_out, &max_out); + tt_int_op(ret, OP_EQ, -1); + ret = parse_port_range("65536", &min_out, &max_out); + tt_int_op(ret, OP_EQ, -1); + ret = parse_port_range("1-65536", &min_out, &max_out); + tt_int_op(ret, OP_EQ, -1); + + /* Valid. */ + ret = parse_port_range("65535", &min_out, &max_out); + tt_int_op(ret, OP_EQ, 0); + tt_int_op(min_out, OP_EQ, 65535); + tt_int_op(max_out, OP_EQ, 65535); + + ret = parse_port_range("1-65535", &min_out, &max_out); + tt_int_op(ret, OP_EQ, 0); + tt_int_op(min_out, OP_EQ, 1); + tt_int_op(max_out, OP_EQ, 65535); + + done: + ; +} + #define ADDRESS_TEST(name, flags) \ { #name, test_address_ ## name, flags, NULL, NULL } #define ADDRESS_TEST_STR_ARG(name, flags, str_arg) \ @@ -1364,5 +1400,6 @@ struct testcase_t address_tests[] = { ADDRESS_TEST(tor_node_in_same_network_family, 0), ADDRESS_TEST(dirserv_router_addr_private, 0), ADDRESS_TEST_STR_ARG(dirserv_router_addr_private, 0, "allow_private"), + ADDRESS_TEST(parse_port_range, 0), END_OF_TESTCASES }; diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c index 5219c86097..ca7fee2c53 100644 --- a/src/test/test_channeltls.c +++ b/src/test/test_channeltls.c @@ -20,6 +20,7 @@ #include "lib/tls/tortls.h" #include "core/or/or_connection_st.h" +#include "core/or/congestion_control_common.h" /* Test suite stuff */ #include "test/test.h" @@ -155,7 +156,7 @@ test_channeltls_num_bytes_queued(void *arg) * - 2 cells. */ n = ch->num_cells_writeable(ch); - tt_int_op(n, OP_EQ, CEIL_DIV(OR_CONN_HIGHWATER, 512) - 2); + tt_int_op(n, OP_EQ, CEIL_DIV(or_conn_highwatermark(), 512) - 2); UNMOCK(buf_datalen); tlschan_buf_datalen_mock_target = NULL; tlschan_buf_datalen_mock_size = 0; diff --git a/src/test/test_circuitbuild.c b/src/test/test_circuitbuild.c index 873391a84f..0a5c3530bd 100644 --- a/src/test/test_circuitbuild.c +++ b/src/test/test_circuitbuild.c @@ -113,7 +113,7 @@ test_new_route_len_safe_exit(void *arg) /* hidden service connecting to introduction point */ r = new_route_len(CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, &dummy_ei, &dummy_nodes); - tt_int_op(DEFAULT_ROUTE_LEN, OP_EQ, r); + tt_int_op(DEFAULT_ROUTE_LEN+1, OP_EQ, r); /* router testing its own reachability */ r = new_route_len(CIRCUIT_PURPOSE_TESTING, &dummy_ei, &dummy_nodes); diff --git a/src/test/test_circuitpadding.c b/src/test/test_circuitpadding.c index 86baf54f40..63b7136a11 100644 --- a/src/test/test_circuitpadding.c +++ b/src/test/test_circuitpadding.c @@ -1367,7 +1367,7 @@ test_circuitpadding_wronghop(void *arg) tt_ptr_op(client_side->padding_info[0], OP_NE, NULL); tt_ptr_op(relay_side->padding_machine[0], OP_NE, NULL); tt_ptr_op(relay_side->padding_info[0], OP_NE, NULL); - tt_int_op(n_relay_cells, OP_EQ, 3); + tt_int_op(n_relay_cells, OP_EQ, 2); tt_int_op(n_client_cells, OP_EQ, 2); /* 6. Sending negotiated command to relay does nothing */ @@ -1396,11 +1396,9 @@ test_circuitpadding_wronghop(void *arg) /* verify no padding was negotiated */ tt_ptr_op(relay_side->padding_machine[0], OP_EQ, NULL); tt_ptr_op(client_side->padding_machine[0], OP_EQ, NULL); - tt_int_op(n_relay_cells, OP_EQ, 3); - tt_int_op(n_client_cells, OP_EQ, 2); /* verify no echo was sent */ - tt_int_op(n_relay_cells, OP_EQ, 3); + tt_int_op(n_relay_cells, OP_EQ, 2); tt_int_op(n_client_cells, OP_EQ, 2); /* Finish circuit */ @@ -1611,7 +1609,7 @@ simulate_single_hop_extend(circuit_t *client, circuit_t *mid_relay, hop->extend_info = extend_info_new( padding ? "padding" : "non-padding", digest, NULL, NULL, NULL, - &addr, padding); + &addr, padding, NULL, false); cpath_init_circuit_crypto(hop, whatevs_key, sizeof(whatevs_key), 0, 0); diff --git a/src/test/test_connection.c b/src/test/test_connection.c index 9c726c07f8..fbf9d6a5ab 100644 --- a/src/test/test_connection.c +++ b/src/test/test_connection.c @@ -826,6 +826,7 @@ test_failed_orconn_tracker(void *arg) /* Prepare the OR connection that will be used in this test */ or_connection_t or_conn; + memset(&or_conn, 0, sizeof(or_conn)); tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&or_conn.canonical_orport.addr, "18.0.0.1")); tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&or_conn.base_.addr, "18.0.0.1")); @@ -992,12 +993,12 @@ test_conn_describe(void *arg) #define STR(x) #x /* where arg is an expression (constant, variable, compound expression) */ -#define CONNECTION_TESTCASE_ARG(name, fork, setup, arg) \ - { #name "_" STR(x), \ +#define CONNECTION_TESTCASE_ARG(name, extra, fork, setup, arg) \ + { STR(name)"/"extra, \ test_conn_##name, \ - fork, \ - &setup, \ - (void *)arg } + (fork), \ + &(setup), \ + (void *)(arg) } #endif /* !defined(COCCI) */ static const unsigned int PROXY_CONNECT_ARG = PROXY_CONNECT; @@ -1007,14 +1008,14 @@ struct testcase_t connection_tests[] = { CONNECTION_TESTCASE(get_basic, TT_FORK, test_conn_get_basic_st), CONNECTION_TESTCASE(get_rsrc, TT_FORK, test_conn_get_rsrc_st), - CONNECTION_TESTCASE_ARG(download_status, TT_FORK, + CONNECTION_TESTCASE_ARG(download_status, "microdesc", TT_FORK, test_conn_download_status_st, "microdesc"), - CONNECTION_TESTCASE_ARG(download_status, TT_FORK, + CONNECTION_TESTCASE_ARG(download_status, "ns", TT_FORK, test_conn_download_status_st, "ns"), - CONNECTION_TESTCASE_ARG(https_proxy_connect, TT_FORK, + CONNECTION_TESTCASE_ARG(https_proxy_connect, "https", TT_FORK, test_conn_proxy_connect_st, &PROXY_CONNECT_ARG), - CONNECTION_TESTCASE_ARG(haproxy_proxy_connect, TT_FORK, + CONNECTION_TESTCASE_ARG(haproxy_proxy_connect, "haproxy", TT_FORK, test_conn_proxy_connect_st, &PROXY_HAPROXY_ARG), //CONNECTION_TESTCASE(func_suffix, TT_FORK, setup_func_pair), diff --git a/src/test/test_dir.c b/src/test/test_dir.c index 0d2d6800ba..186e09f236 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -6652,13 +6652,7 @@ test_dir_find_dl_min_delay(void* data) dls.schedule = DL_SCHED_BRIDGE; /* client */ - mock_options->ClientOnly = 1; - mock_options->UseBridges = 1; - if (num_bridges_usable(0) > 0) { - tt_int_op(find_dl_min_delay(&dls, mock_options), OP_EQ, bridge); - } else { - tt_int_op(find_dl_min_delay(&dls, mock_options), OP_EQ, bridge_bootstrap); - } + tt_int_op(find_dl_min_delay(&dls, mock_options), OP_EQ, bridge_bootstrap); done: UNMOCK(networkstatus_consensus_is_bootstrapping); diff --git a/src/test/test_dirauth_ports.c b/src/test/test_dirauth_ports.c new file mode 100644 index 0000000000..5dc0b0b631 --- /dev/null +++ b/src/test/test_dirauth_ports.c @@ -0,0 +1,152 @@ +/* Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "orconfig.h" +#define CONFIG_PRIVATE + +#include "core/or/or.h" +#include "feature/dirclient/dir_server_st.h" +#include "feature/nodelist/dirlist.h" +#include "app/config/config.h" +#include "test/test.h" +#include "test/log_test_helpers.h" + +static void +test_dirauth_port_parsing(void *arg) +{ + (void)arg; + + // This one is okay. + int rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "upload=http://128.31.0.39:9131/ " + "download=http://128.31.0.39:9131 " + "vote=http://128.31.0.39:9131/ " + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 1); + tt_int_op(rv,OP_EQ,0); + + // These have bad syntax. + setup_capture_of_logs(LOG_WARN); + rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "uploadx=http://128.31.0.39:9131/ " + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 1); + tt_int_op(rv,OP_EQ,0); + expect_log_msg_containing("Unrecognized flag"); + mock_clean_saved_logs(); + + rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "upload=https://128.31.0.39:9131/ " // https is not recognized + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 1); + tt_int_op(rv,OP_EQ,-1); + expect_log_msg_containing("Unsupported URL scheme"); + mock_clean_saved_logs(); + + rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "upload=http://128.31.0.39:9131/tor " // suffix is not supported + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 1); + tt_int_op(rv,OP_EQ,-1); + expect_log_msg_containing("Unsupported URL prefix"); + mock_clean_saved_logs(); + + rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "upload=http://128.31.0.256:9131/ " // "256" is not ipv4. + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 1); + tt_int_op(rv,OP_EQ,-1); + expect_log_msg_containing("Unable to parse address"); + + rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "upload=http://xyz.example.com/ " // hostnames not supported. + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 1); + tt_int_op(rv,OP_EQ,-1); + expect_log_msg_containing("Unable to parse address"); + + done: + teardown_capture_of_logs(); +} + +static void +test_dirauth_port_lookup(void *arg) +{ + (void)arg; + + clear_dir_servers(); + + int rv = parse_dir_authority_line( + "moria1 orport=9101 " + "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " + "upload=http://128.31.0.40:9132/ " + "download=http://128.31.0.41:9133 " + "vote=http://128.31.0.42:9134/ " + "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 0); + tt_int_op(rv,OP_EQ,0); + + rv = parse_dir_authority_line( + "morgoth orport=9101 " + "v3ident=D586D18309DED4CDFFFFFFFFDB97EFA96D330566 " + "upload=http://128.31.0.43:9140/ " + "128.31.0.44:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", + NO_DIRINFO, 0); + tt_int_op(rv,OP_EQ,0); + + const smartlist_t *servers = router_get_trusted_dir_servers(); + tt_assert(servers); + tt_int_op(smartlist_len(servers), OP_EQ, 2); + const dir_server_t *moria = smartlist_get(servers, 0); + const dir_server_t *morgoth = smartlist_get(servers, 1); + tt_str_op(moria->nickname, OP_EQ, "moria1"); + tt_str_op(morgoth->nickname, OP_EQ, "morgoth"); + + const tor_addr_port_t *dirport; + + dirport = trusted_dir_server_get_dirport(moria, + AUTH_USAGE_UPLOAD, AF_INET); + tt_int_op(dirport->port, OP_EQ, 9132); + dirport = trusted_dir_server_get_dirport(moria, + AUTH_USAGE_DOWNLOAD, AF_INET); + tt_int_op(dirport->port, OP_EQ, 9133); + dirport = trusted_dir_server_get_dirport(moria, + AUTH_USAGE_VOTING, AF_INET); + tt_int_op(dirport->port, OP_EQ, 9134); + + dirport = trusted_dir_server_get_dirport(morgoth, + AUTH_USAGE_UPLOAD, AF_INET); + tt_int_op(dirport->port, OP_EQ, 9140); + dirport = trusted_dir_server_get_dirport(morgoth, + AUTH_USAGE_DOWNLOAD, AF_INET); + tt_int_op(dirport->port, OP_EQ, 9131); // fallback + dirport = trusted_dir_server_get_dirport(morgoth, + AUTH_USAGE_VOTING, AF_INET); + tt_int_op(dirport->port, OP_EQ, 9131); // fallback + + done: + ; +} + +#define T(name) \ + { #name, test_dirauth_port_ ## name, TT_FORK, NULL, NULL } + +struct testcase_t dirauth_port_tests[] = { + T(parsing), + T(lookup), + END_OF_TESTCASES +}; diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c index c94b5d6a23..118b66dfa7 100644 --- a/src/test/test_entrynodes.c +++ b/src/test/test_entrynodes.c @@ -92,6 +92,12 @@ bfn_mock_node_get_by_id(const char *id) return NULL; } +static int +mock_router_have_minimum_dir_info(void) +{ + return 1; +} + /* Helper function to free a test node. */ static void test_node_free(node_t *n) @@ -3087,6 +3093,38 @@ test_entry_guard_vanguard_path_selection(void *arg) circuit_free_(circ); } +static void +test_entry_guard_layer2_guards(void *arg) +{ + (void) arg; + MOCK(router_have_minimum_dir_info, mock_router_have_minimum_dir_info); + + /* First check the enable/disable switch */ + get_options_mutable()->VanguardsLiteEnabled = 0; + tt_int_op(vanguards_lite_is_enabled(), OP_EQ, 0); + + get_options_mutable()->VanguardsLiteEnabled = 1; + tt_int_op(vanguards_lite_is_enabled(), OP_EQ, 1); + + get_options_mutable()->VanguardsLiteEnabled = -1; + tt_int_op(vanguards_lite_is_enabled(), OP_EQ, 1); + + /* OK now let's move to actual testing */ + + /* Remove restrictions to route around Big Fake Network restrictions */ + get_options_mutable()->EnforceDistinctSubnets = 0; + + /* Create the L2 guardset */ + maintain_layer2_guards(); + + const routerset_t *l2_guards = get_layer2_guards(); + tt_assert(l2_guards); + tt_int_op(routerset_len(l2_guards), OP_EQ, 4); + + done: + UNMOCK(router_have_minimum_dir_info); +} + static const struct testcase_setup_t big_fake_network = { big_fake_network_setup, big_fake_network_cleanup }; @@ -3152,6 +3190,8 @@ struct testcase_t entrynodes_tests[] = { BFN_TEST(manage_primary), BFN_TEST(correct_cascading_order), + BFN_TEST(layer2_guards), + EN_TEST_FORK(guard_preferred), BFN_TEST(select_for_circuit_no_confirmed), diff --git a/src/test/test_hs_cell.c b/src/test/test_hs_cell.c index 818f7bfef7..cf7af8a38a 100644 --- a/src/test/test_hs_cell.c +++ b/src/test/test_hs_cell.c @@ -20,7 +20,7 @@ #include "feature/hs/hs_service.h" /* Trunnel. */ -#include "trunnel/hs/cell_common.h" +#include "trunnel/extension.h" #include "trunnel/hs/cell_establish_intro.h" /** We simulate the creation of an outgoing ESTABLISH_INTRO cell, and then we @@ -132,7 +132,7 @@ test_gen_establish_intro_dos_ext(void *arg) ssize_t ret; hs_service_config_t config; hs_service_intro_point_t *ip = NULL; - trn_cell_extension_t *extensions = NULL; + trn_extension_t *extensions = NULL; trn_cell_extension_dos_t *dos = NULL; (void) arg; @@ -144,8 +144,8 @@ test_gen_establish_intro_dos_ext(void *arg) /* Case 1: No DoS parameters so no extension to be built. */ extensions = build_establish_intro_extensions(&config, ip); - tt_int_op(trn_cell_extension_get_num(extensions), OP_EQ, 0); - trn_cell_extension_free(extensions); + tt_int_op(trn_extension_get_num(extensions), OP_EQ, 0); + trn_extension_free(extensions); extensions = NULL; /* Case 2: Enable the DoS extension. Parameter set to 0 should indicate to @@ -153,15 +153,15 @@ test_gen_establish_intro_dos_ext(void *arg) * nonetheless in the cell. */ config.has_dos_defense_enabled = 1; extensions = build_establish_intro_extensions(&config, ip); - tt_int_op(trn_cell_extension_get_num(extensions), OP_EQ, 1); + tt_int_op(trn_extension_get_num(extensions), OP_EQ, 1); /* Validate the extension. */ - const trn_cell_extension_field_t *field = - trn_cell_extension_getconst_fields(extensions, 0); - tt_int_op(trn_cell_extension_field_get_field_type(field), OP_EQ, + const trn_extension_field_t *field = + trn_extension_getconst_fields(extensions, 0); + tt_int_op(trn_extension_field_get_field_type(field), OP_EQ, TRUNNEL_CELL_EXTENSION_TYPE_DOS); ret = trn_cell_extension_dos_parse(&dos, - trn_cell_extension_field_getconstarray_field(field), - trn_cell_extension_field_getlen_field(field)); + trn_extension_field_getconstarray_field(field), + trn_extension_field_getlen_field(field)); tt_int_op(ret, OP_EQ, 19); /* Rate per sec param. */ const trn_cell_extension_dos_param_t *param = @@ -175,21 +175,21 @@ test_gen_establish_intro_dos_ext(void *arg) TRUNNEL_DOS_PARAM_TYPE_INTRO2_BURST_PER_SEC); tt_u64_op(trn_cell_extension_dos_param_get_value(param), OP_EQ, 0); trn_cell_extension_dos_free(dos); dos = NULL; - trn_cell_extension_free(extensions); extensions = NULL; + trn_extension_free(extensions); extensions = NULL; /* Case 3: Enable the DoS extension. Parameter set to some normal values. */ config.has_dos_defense_enabled = 1; config.intro_dos_rate_per_sec = 42; config.intro_dos_burst_per_sec = 250; extensions = build_establish_intro_extensions(&config, ip); - tt_int_op(trn_cell_extension_get_num(extensions), OP_EQ, 1); + tt_int_op(trn_extension_get_num(extensions), OP_EQ, 1); /* Validate the extension. */ - field = trn_cell_extension_getconst_fields(extensions, 0); - tt_int_op(trn_cell_extension_field_get_field_type(field), OP_EQ, + field = trn_extension_getconst_fields(extensions, 0); + tt_int_op(trn_extension_field_get_field_type(field), OP_EQ, TRUNNEL_CELL_EXTENSION_TYPE_DOS); ret = trn_cell_extension_dos_parse(&dos, - trn_cell_extension_field_getconstarray_field(field), - trn_cell_extension_field_getlen_field(field)); + trn_extension_field_getconstarray_field(field), + trn_extension_field_getlen_field(field)); tt_int_op(ret, OP_EQ, 19); /* Rate per sec param. */ param = trn_cell_extension_dos_getconst_params(dos, 0); @@ -202,12 +202,12 @@ test_gen_establish_intro_dos_ext(void *arg) TRUNNEL_DOS_PARAM_TYPE_INTRO2_BURST_PER_SEC); tt_u64_op(trn_cell_extension_dos_param_get_value(param), OP_EQ, 250); trn_cell_extension_dos_free(dos); dos = NULL; - trn_cell_extension_free(extensions); extensions = NULL; + trn_extension_free(extensions); extensions = NULL; done: service_intro_point_free(ip); trn_cell_extension_dos_free(dos); - trn_cell_extension_free(extensions); + trn_extension_free(extensions); } struct testcase_t hs_cell_tests[] = { diff --git a/src/test/test_hs_client.c b/src/test/test_hs_client.c index 15573d945c..11a5589d21 100644 --- a/src/test/test_hs_client.c +++ b/src/test/test_hs_client.c @@ -54,6 +54,9 @@ #include "core/or/origin_circuit_st.h" #include "core/or/socks_request_st.h" +#define TOR_CONGESTION_CONTROL_PRIVATE +#include "core/or/congestion_control_common.h" + static int mock_connection_ap_handshake_send_begin(entry_connection_t *ap_conn) { @@ -771,6 +774,7 @@ test_desc_has_arrived_cleanup(void *arg) (void) arg; hs_init(); + congestion_control_set_cc_enabled(); MOCK(networkstatus_get_reasonably_live_consensus, mock_networkstatus_get_reasonably_live_consensus); @@ -1186,7 +1190,7 @@ test_socks_hs_errors(void *arg) /* Code path will log this exit so build it. */ ocirc->build_state->chosen_exit = extend_info_new("TestNickname", digest, NULL, NULL, NULL, &addr, - 4242); + 4242, NULL, false); /* Attach socks connection to this rendezvous circuit. */ ocirc->p_streams = ENTRY_TO_EDGE_CONN(socks_conn); /* Trigger the rendezvous failure. Timeout the circuit and free. */ @@ -1281,7 +1285,7 @@ test_close_intro_circuit_failure(void *arg) /* Code path will log this exit so build it. */ ocirc->build_state->chosen_exit = extend_info_new("TestNickname", digest, NULL, NULL, NULL, &addr, - 4242); + 4242, NULL, false); ed25519_pubkey_copy(ô->hs_ident->intro_auth_pk, &intro_kp.pubkey); /* We'll make for close the circuit for a timeout failure. It should _NOT_ @@ -1308,7 +1312,7 @@ test_close_intro_circuit_failure(void *arg) /* Code path will log this exit so build it. */ ocirc->build_state->chosen_exit = extend_info_new("TestNickname", digest, NULL, NULL, NULL, &addr, - 4242); + 4242, NULL, false); ed25519_pubkey_copy(ô->hs_ident->intro_auth_pk, &intro_kp.pubkey); /* On free, we should get an unreachable failure. */ @@ -1331,7 +1335,7 @@ test_close_intro_circuit_failure(void *arg) /* Code path will log this exit so build it. */ ocirc->build_state->chosen_exit = extend_info_new("TestNickname", digest, NULL, NULL, NULL, &addr, - 4242); + 4242, NULL, false); ed25519_pubkey_copy(ô->hs_ident->intro_auth_pk, &intro_kp.pubkey); circuit_mark_for_close(circ, END_CIRC_REASON_TIMEOUT); diff --git a/src/test/test_hs_common.c b/src/test/test_hs_common.c index 7cb6a36f8e..347a5b7174 100644 --- a/src/test/test_hs_common.c +++ b/src/test/test_hs_common.c @@ -808,13 +808,11 @@ test_parse_extended_hostname(void *arg) tt_assert(parse_extended_hostname(address4, &type)); tt_int_op(type, OP_EQ, NORMAL_HOSTNAME); - tt_assert(parse_extended_hostname(address5, &type)); - tt_int_op(type, OP_EQ, ONION_V2_HOSTNAME); - tt_str_op(address5, OP_EQ, "abcdefghijklmnop"); + tt_assert(!parse_extended_hostname(address5, &type)); + tt_int_op(type, OP_EQ, BAD_HOSTNAME); - tt_assert(parse_extended_hostname(address6, &type)); - tt_int_op(type, OP_EQ, ONION_V2_HOSTNAME); - tt_str_op(address6, OP_EQ, "abcdefghijklmnop"); + tt_assert(!parse_extended_hostname(address6, &type)); + tt_int_op(type, OP_EQ, BAD_HOSTNAME); tt_assert(!parse_extended_hostname(address7, &type)); tt_int_op(type, OP_EQ, BAD_HOSTNAME); diff --git a/src/test/test_hs_control.c b/src/test/test_hs_control.c index b036c5eada..c32803b380 100644 --- a/src/test/test_hs_control.c +++ b/src/test/test_hs_control.c @@ -798,7 +798,7 @@ test_hs_control_add_onion_helper_add_service(void *arg) hs_service_ht *global_map; hs_port_config_t *portcfg; smartlist_t *portcfgs; - char *address_out_good, *address_out_bad; + char *address_out_good = NULL, *address_out_bad = NULL; hs_service_t *service_good = NULL; hs_service_t *service_bad = NULL; diff --git a/src/test/test_hs_descriptor.c b/src/test/test_hs_descriptor.c index ec6c8ba6b4..469e3c39f9 100644 --- a/src/test/test_hs_descriptor.c +++ b/src/test/test_hs_descriptor.c @@ -24,6 +24,9 @@ #include "test/log_test_helpers.h" #include "test/rng_test_helpers.h" +#define TOR_CONGESTION_CONTROL_PRIVATE +#include "core/or/congestion_control_common.h" + #ifdef HAVE_CFLAG_WOVERLENGTH_STRINGS DISABLE_GCC_WARNING("-Woverlength-strings") /* We allow huge string constants in the unit tests, but not in the code @@ -247,6 +250,8 @@ test_decode_descriptor(void *arg) (void) arg; + congestion_control_set_cc_enabled(); + ret = ed25519_keypair_generate(&signing_kp, 0); tt_int_op(ret, OP_EQ, 0); desc = hs_helper_build_hs_desc_with_ip(&signing_kp); @@ -835,6 +840,44 @@ test_build_authorized_client(void *arg) testing_disable_prefilled_rng(); } +static void +test_validate_sendme(void *arg) +{ + (void)arg; + + /* Test basic operation: factors of 2X in either direction are OK */ + cc_sendme_inc = 31; + tt_assert(congestion_control_validate_sendme_increment(15)); + tt_assert(congestion_control_validate_sendme_increment(62)); + + /* Test basic operation: Exceeding 2X fails */ + cc_sendme_inc = 31; + tt_assert(!congestion_control_validate_sendme_increment(14)); + tt_assert(!congestion_control_validate_sendme_increment(63)); + + /* Test potential overflow conditions */ + cc_sendme_inc = 129; + tt_assert(congestion_control_validate_sendme_increment(255)); + tt_assert(congestion_control_validate_sendme_increment(64)); + tt_assert(!congestion_control_validate_sendme_increment(63)); + + cc_sendme_inc = 127; + tt_assert(!congestion_control_validate_sendme_increment(255)); + tt_assert(congestion_control_validate_sendme_increment(254)); + + cc_sendme_inc = 255; + tt_assert(congestion_control_validate_sendme_increment(255)); + tt_assert(congestion_control_validate_sendme_increment(127)); + tt_assert(!congestion_control_validate_sendme_increment(126)); + + /* Test 0 case */ + cc_sendme_inc = 1; + tt_assert(!congestion_control_validate_sendme_increment(0)); + +done: + ; +} + struct testcase_t hs_descriptor[] = { /* Encoding tests. */ { "cert_encoding", test_cert_encoding, TT_FORK, @@ -855,6 +898,8 @@ struct testcase_t hs_descriptor[] = { NULL, NULL }, { "decode_bad_signature", test_decode_bad_signature, TT_FORK, NULL, NULL }, + { "validate_sendme", test_validate_sendme, TT_FORK, + NULL, NULL }, /* Misc. */ { "version", test_supported_version, TT_FORK, diff --git a/src/test/test_hs_intropoint.c b/src/test/test_hs_intropoint.c index a1ed281b4d..cbcdeade92 100644 --- a/src/test/test_hs_intropoint.c +++ b/src/test/test_hs_intropoint.c @@ -33,9 +33,9 @@ #include "core/or/or_circuit_st.h" /* Trunnel. */ +#include "trunnel/extension.h" #include "trunnel/hs/cell_establish_intro.h" #include "trunnel/hs/cell_introduce1.h" -#include "trunnel/hs/cell_common.h" static size_t new_establish_intro_cell(const char *circ_nonce, @@ -159,8 +159,8 @@ helper_create_introduce1_cell(void) /* Set the cell extensions to none. */ { - trn_cell_extension_t *ext = trn_cell_extension_new(); - trn_cell_extension_set_num(ext, 0); + trn_extension_t *ext = trn_extension_new(); + trn_extension_set_num(ext, 0); trn_cell_introduce1_set_extensions(cell, ext); } diff --git a/src/test/test_hs_ob.c b/src/test/test_hs_ob.c index 3485655c2e..2f69bf31e0 100644 --- a/src/test/test_hs_ob.c +++ b/src/test/test_hs_ob.c @@ -174,6 +174,7 @@ test_get_subcredentials(void *arg) hs_subcredential_t *subcreds = NULL; (void) arg; + memset(&config, 0, sizeof(config)); MOCK(networkstatus_get_live_consensus, mock_networkstatus_get_live_consensus); diff --git a/src/test/test_hs_service.c b/src/test/test_hs_service.c index 33a3f279c6..482ee1a014 100644 --- a/src/test/test_hs_service.c +++ b/src/test/test_hs_service.c @@ -2330,6 +2330,7 @@ test_intro2_handling(void *arg) intro_circ->cpath->prev = intro_circ->cpath; intro_circ->hs_ident = tor_malloc_zero(sizeof(*intro_circ->hs_ident)); origin_circuit_t rend_circ; + TO_CIRCUIT(&rend_circ)->ccontrol = NULL; rend_circ.hs_ident = tor_malloc_zero(sizeof(*rend_circ.hs_ident)); curve25519_keypair_generate(&rend_circ.hs_ident->rendezvous_client_kp, 0); memset(rend_circ.hs_ident->rendezvous_cookie, 'r', HS_REND_COOKIE_LEN); diff --git a/src/test/test_ntor_v3.c b/src/test/test_ntor_v3.c new file mode 100644 index 0000000000..1d06403076 --- /dev/null +++ b/src/test/test_ntor_v3.c @@ -0,0 +1,311 @@ +/* Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "orconfig.h" +#define ONION_NTOR_V3_PRIVATE +#include "core/or/or.h" +#include "test/test.h" +#include "lib/crypt_ops/crypto_curve25519.h" +#include "lib/crypt_ops/crypto_ed25519.h" +#include "core/crypto/onion_ntor_v3.h" +#include "core/crypto/onion_crypto.h" +#include "core/or/extend_info_st.h" +#include "core/or/crypt_path_st.h" +#define TOR_CONGESTION_CONTROL_PRIVATE +#include "core/or/congestion_control_common.h" +#include "app/config/config.h" + +#define unhex(arry, s) \ + { tt_int_op(sizeof(arry), OP_EQ, \ + base16_decode((char*)arry, sizeof(arry), s, strlen(s))); \ + } + +static void +test_ntor3_testvecs(void *arg) +{ + (void)arg; + char *mem_op_hex_tmp = NULL; // temp val to make test_memeq_hex work. + + ntor3_server_handshake_state_t *relay_state = NULL; + uint8_t *onion_skin = NULL; + size_t onion_skin_len; + ntor3_handshake_state_t *client_state = NULL; + uint8_t *cm = NULL, *sm = NULL; + size_t cm_len, sm_len; + di_digest256_map_t *private_keys = NULL; + uint8_t *server_handshake = NULL; + size_t server_handshake_len; + + // Test vectors from python implementation, confirmed with rust + // implementation. + curve25519_keypair_t relay_keypair_b; + curve25519_keypair_t client_keypair_x; + curve25519_keypair_t relay_keypair_y; + ed25519_public_key_t relay_id; + + unhex(relay_keypair_b.seckey.secret_key, + "4051daa5921cfa2a1c27b08451324919538e79e788a81b38cbed097a5dff454a"); + unhex(relay_keypair_b.pubkey.public_key, + "f8307a2bc1870b00b828bb74dbb8fd88e632a6375ab3bcd1ae706aaa8b6cdd1d"); + unhex(relay_id.pubkey, + "9fad2af287ef942632833d21f946c6260c33fae6172b60006e86e4a6911753a2"); + unhex(client_keypair_x.seckey.secret_key, + "b825a3719147bcbe5fb1d0b0fcb9c09e51948048e2e3283d2ab7b45b5ef38b49"); + unhex(client_keypair_x.pubkey.public_key, + "252fe9ae91264c91d4ecb8501f79d0387e34ad8ca0f7c995184f7d11d5da4f46"); + unhex(relay_keypair_y.seckey.secret_key, + "4865a5b7689dafd978f529291c7171bc159be076b92186405d13220b80e2a053"); + unhex(relay_keypair_y.pubkey.public_key, + "4bf4814326fdab45ad5184f5518bd7fae25dc59374062698201a50a22954246d"); + + uint8_t client_message[11]; + uint8_t verification[5]; + unhex(client_message, "68656c6c6f20776f726c64"); + unhex(verification, "78797a7a79"); + + // ========= Client handshake 1. + + onion_skin_ntor3_create_nokeygen( + &client_keypair_x, + &relay_id, + &relay_keypair_b.pubkey, + verification, + sizeof(verification), + client_message, + sizeof(client_message), + &client_state, + &onion_skin, + &onion_skin_len); + + const char expect_client_handshake[] = "9fad2af287ef942632833d21f946c6260c" + "33fae6172b60006e86e4a6911753a2f8307a2bc1870b00b828bb74dbb8fd88e632a6375" + "ab3bcd1ae706aaa8b6cdd1d252fe9ae91264c91d4ecb8501f79d0387e34ad8ca0f7c995" + "184f7d11d5da4f463bebd9151fd3b47c180abc9e044d53565f04d82bbb3bebed3d06cea" + "65db8be9c72b68cd461942088502f67"; + + tt_int_op(onion_skin_len, OP_EQ, strlen(expect_client_handshake)/2); + test_memeq_hex(onion_skin, expect_client_handshake); + + // ========= Relay handshake. + + dimap_add_entry(&private_keys, + relay_keypair_b.pubkey.public_key, + &relay_keypair_b); + + int r = onion_skin_ntor3_server_handshake_part1( + private_keys, + &client_keypair_x, + &relay_id, + onion_skin, + onion_skin_len, + verification, + sizeof(verification), + &cm, + &cm_len, + &relay_state); + tt_int_op(r, OP_EQ, 0); + tt_int_op(cm_len, OP_EQ, sizeof(client_message)); + tt_mem_op(cm, OP_EQ, client_message, cm_len); + + uint8_t server_message[10]; + unhex(server_message, "486f6c61204d756e646f"); + + uint8_t server_keys[256]; + onion_skin_ntor3_server_handshake_part2_nokeygen( + &relay_keypair_y, + relay_state, + verification, + sizeof(verification), + server_message, + sizeof(server_message), + &server_handshake, + &server_handshake_len, + server_keys, + sizeof(server_keys)); + + const char expect_server_handshake[] = "4bf4814326fdab45ad5184f5518bd7fae25" + "dc59374062698201a50a22954246d2fc5f8773ca824542bc6cf6f57c7c29bbf4e5476461" + "ab130c5b18ab0a91276651202c3e1e87c0d32054c"; + tt_int_op(server_handshake_len, OP_EQ, strlen(expect_server_handshake)/2); + test_memeq_hex(server_handshake, expect_server_handshake); + + uint8_t expect_keys[256]; + unhex(expect_keys, "9c19b631fd94ed86a817e01f6c80b0743a43f5faebd39cfaa8b00f" + "a8bcc65c3bfeaa403d91acbd68a821bf6ee8504602b094a254392a07737d5662768" + "c7a9fb1b2814bb34780eaee6e867c773e28c212ead563e98a1cd5d5b4576f5ee61c" + "59bde025ff2851bb19b721421694f263818e3531e43a9e4e3e2c661e2ad547d8984" + "caa28ebecd3e4525452299be26b9185a20a90ce1eac20a91f2832d731b54502b097" + "49b5a2a2949292f8cfcbeffb790c7790ed935a9d251e7e336148ea83b063a5618fc" + "ff674a44581585fd22077ca0e52c59a24347a38d1a1ceebddbf238541f226b8f88d" + "0fb9c07a1bcd2ea764bbbb5dacdaf5312a14c0b9e4f06309b0333b4a"); + tt_mem_op(server_keys, OP_EQ, expect_keys, 256); + + // ===== Client handshake 2 + + uint8_t client_keys[256]; + r = onion_ntor3_client_handshake( + client_state, + server_handshake, + server_handshake_len, + verification, + sizeof(verification), + client_keys, + sizeof(client_keys), + &sm, + &sm_len); + + tt_int_op(r, OP_EQ, 0); + tt_int_op(sm_len, OP_EQ, sizeof(server_message)); + tt_mem_op(sm, OP_EQ, server_message, sizeof(server_message)); + tt_mem_op(client_keys, OP_EQ, server_keys, 256); + + done: + tor_free(onion_skin); + tor_free(server_handshake); + tor_free(mem_op_hex_tmp); + ntor3_handshake_state_free(client_state); + ntor3_server_handshake_state_free(relay_state); + tor_free(cm); + tor_free(sm); + dimap_free(private_keys, NULL); +} + +static void +run_full_handshake(circuit_params_t *serv_params_in, + circuit_params_t *client_params_out, + circuit_params_t *serv_params_out) +{ + extend_info_t info = {0}; + uint8_t onionskin[CELL_PAYLOAD_SIZE]; + int onionskin_len = 0; + int reply_len = 0; + onion_handshake_state_t handshake_state = {0}; + server_onion_keys_t server_keys = {0}; + curve25519_keypair_t relay_onion_key; + uint8_t serv_reply[CELL_PAYLOAD_SIZE]; + uint8_t serv_keys[100]; + uint8_t rend_nonce[DIGEST_LEN]; + uint8_t client_keys[CELL_PAYLOAD_SIZE]; + uint8_t rend_auth[DIGEST_LEN]; + + info.exit_supports_congestion_control = 1; + + unhex(relay_onion_key.seckey.secret_key, + "4051daa5921cfa2a1c27b08451324919538e79e788a81b38cbed097a5dff454a"); + unhex(relay_onion_key.pubkey.public_key, + "f8307a2bc1870b00b828bb74dbb8fd88e632a6375ab3bcd1ae706aaa8b6cdd1d"); + + memcpy(&info.curve25519_onion_key, + &relay_onion_key.pubkey, sizeof(info.curve25519_onion_key)); + unhex(info.ed_identity.pubkey, + "9fad2af287ef942632833d21f946c6260c33fae6172b60006e86e4a6911753a2"); + + memcpy(&server_keys.my_ed_identity, &info.ed_identity, + sizeof(server_keys.my_ed_identity)); + + dimap_add_entry(&server_keys.curve25519_key_map, + relay_onion_key.pubkey.public_key, + &relay_onion_key); + + onionskin_len = onion_skin_create(ONION_HANDSHAKE_TYPE_NTOR_V3, &info, + &handshake_state, onionskin, + sizeof(onionskin)); + tt_int_op(onionskin_len, OP_NE, -1); + + server_keys.junk_keypair = &handshake_state.u.ntor3->client_keypair; + + reply_len = onion_skin_server_handshake(ONION_HANDSHAKE_TYPE_NTOR_V3, + onionskin, onionskin_len, + &server_keys, serv_params_in, + serv_reply, sizeof(serv_reply), + serv_keys, sizeof(serv_keys), + rend_nonce, serv_params_out); + tt_int_op(reply_len, OP_NE, -1); + + tt_int_op(onion_skin_client_handshake(ONION_HANDSHAKE_TYPE_NTOR_V3, + &handshake_state, + serv_reply, reply_len, + client_keys, sizeof(client_keys), + rend_auth, client_params_out, + NULL), OP_EQ, 0); + + done: + dimap_free(server_keys.curve25519_key_map, NULL); + ntor3_handshake_state_free(handshake_state.u.ntor3); + + return; +} + +/** + * Test congestion control negotiation logic. + * + * This tests that congestion control is only enabled when both + * client and server agree, via consensus param or torrc. + * + * It also tests that when they agree, they agree on the server's + * version of sendme_inc. + */ +static void +test_ntor3_handshake(void *arg) +{ + (void)arg; + circuit_params_t client_params, serv_params, serv_ns_params; + + serv_ns_params.sendme_inc_cells = congestion_control_sendme_inc(); + + /* client off, serv off -> off */ + serv_ns_params.cc_enabled = 0; + run_full_handshake(&serv_ns_params, &client_params, &serv_params); + tt_int_op(client_params.cc_enabled, OP_EQ, 0); + tt_int_op(serv_params.cc_enabled, OP_EQ, 0); + + /* client off, serv on -> off */ + serv_ns_params.cc_enabled = 1; + run_full_handshake(&serv_ns_params, &client_params, &serv_params); + tt_int_op(client_params.cc_enabled, OP_EQ, 0); + tt_int_op(serv_params.cc_enabled, OP_EQ, 0); + + /* client off + param, serv on -> on */ + serv_ns_params.cc_enabled = 1; + get_options_mutable()->AlwaysCongestionControl = 1; + run_full_handshake(&serv_ns_params, &client_params, &serv_params); + tt_int_op(client_params.cc_enabled, OP_EQ, 1); + tt_int_op(serv_params.cc_enabled, OP_EQ, 1); + + /* client on, serv off -> off */ + serv_ns_params.cc_enabled = 0; + congestion_control_set_cc_enabled(); + run_full_handshake(&serv_ns_params, &client_params, &serv_params); + tt_int_op(client_params.cc_enabled, OP_EQ, 0); + tt_int_op(serv_params.cc_enabled, OP_EQ, 0); + + /* client on, serv on -> on */ + serv_ns_params.cc_enabled = 1; + run_full_handshake(&serv_ns_params, &client_params, &serv_params); + tt_int_op(client_params.cc_enabled, OP_EQ, 1); + tt_int_op(serv_params.cc_enabled, OP_EQ, 1); + + /* client on, serv on, sendme_inc diff -> serv sendme_inc */ + serv_ns_params.cc_enabled = 1; + serv_ns_params.sendme_inc_cells += 1; + run_full_handshake(&serv_ns_params, &client_params, &serv_params); + tt_int_op(client_params.cc_enabled, OP_EQ, 1); + tt_int_op(serv_params.cc_enabled, OP_EQ, 1); + tt_int_op(serv_params.sendme_inc_cells, OP_EQ, + client_params.sendme_inc_cells); + tt_int_op(client_params.sendme_inc_cells, OP_EQ, + serv_ns_params.sendme_inc_cells); + tt_int_op(client_params.sendme_inc_cells, OP_NE, + congestion_control_sendme_inc()); + + done: + return; +} + +struct testcase_t ntor_v3_tests[] = { + { "testvecs", test_ntor3_testvecs, 0, NULL, NULL, }, + { "handshake_negtotiation", test_ntor3_handshake, 0, NULL, NULL, }, + END_OF_TESTCASES, +}; diff --git a/src/test/test_process_descs.c b/src/test/test_process_descs.c index fa2657f6c2..1471bec18e 100644 --- a/src/test/test_process_descs.c +++ b/src/test/test_process_descs.c @@ -21,9 +21,9 @@ test_process_descs_versions(void *arg) // a non-tor program: don't reject. { "Wombat 0.1.2.3-alpha", false }, // some unsupported versions: reject. + { "Tor 0.2.9.100", true }, { "Tor 0.2.9.4-alpha", true }, { "Tor 0.2.9.5-alpha", true }, - { "Tor 0.2.9.100", true }, { "Tor 0.3.0.0-alpha-dev", true }, { "Tor 0.3.0.2-alpha", true }, { "Tor 0.3.0.5", true }, @@ -34,17 +34,26 @@ test_process_descs_versions(void *arg) { "Tor 0.3.4.100", true }, { "Tor 0.3.5.1-alpha", true }, { "Tor 0.3.5.6-rc", true}, + { "Tor 0.3.5.7", true }, + { "Tor 0.3.5.8", true }, { "Tor 0.4.0.1-alpha", true }, { "Tor 0.4.0.5", true }, { "Tor 0.4.1.1-alpha", true }, { "Tor 0.4.1.4-rc", true }, { "Tor 0.4.1.5", true }, + { "Tor 0.4.2.1-alpha", true }, + { "Tor 0.4.2.4-rc", true }, + { "Tor 0.4.2.5", true }, + { "Tor 0.4.3.0-alpha-dev", true }, + { "Tor 0.4.3.8", true }, + { "Tor 0.4.4.9", true }, + { "Tor 0.4.5.5-rc", true }, // new enough to be supported - { "Tor 0.3.5.7", false }, - { "Tor 0.3.5.8", false }, - { "Tor 0.4.2.1-alpha", false }, - { "Tor 0.4.2.4-rc", false }, - { "Tor 0.4.3.0-alpha-dev", false }, + { "Tor 0.4.5.6", false }, + { "Tor 0.4.6.0-alpha-dev", false }, + { "Tor 0.4.6.5", false }, + { "Tor 0.4.7.0-alpha-dev", false }, + { "Tor 0.4.7.3-alpha", false }, // Very far in the future { "Tor 100.100.1.5", false }, }; diff --git a/src/test/test_protover.c b/src/test/test_protover.c index e45f0d58d2..9d14fd678a 100644 --- a/src/test/test_protover.c +++ b/src/test/test_protover.c @@ -23,13 +23,6 @@ static void test_protover_parse(void *arg) { (void) arg; -#ifdef HAVE_RUST - /** This test is disabled on rust builds, because it only exists to test - * internal C functions. */ - tt_skip(); - done: - ; -#else /* !defined(HAVE_RUST) */ char *re_encoded = NULL; const char *orig = "Foo=1,3 Bar=3 Baz= Quux=9-12,14,15-16"; @@ -64,18 +57,12 @@ test_protover_parse(void *arg) SMARTLIST_FOREACH(elts, proto_entry_t *, ent, proto_entry_free(ent)); smartlist_free(elts); tor_free(re_encoded); -#endif /* defined(HAVE_RUST) */ } static void test_protover_parse_fail(void *arg) { (void)arg; -#ifdef HAVE_RUST - /** This test is disabled on rust builds, because it only exists to test - * internal C functions. */ - tt_skip(); -#else smartlist_t *elts; /* random junk */ @@ -108,7 +95,6 @@ test_protover_parse_fail(void *arg) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); tt_ptr_op(elts, OP_EQ, NULL); -#endif /* defined(HAVE_RUST) */ done: ; } @@ -265,7 +251,7 @@ test_protover_all_supported(void *arg) #endif /* !defined(ALL_BUGS_ARE_FATAL) */ /* Protocol name too long */ -#if !defined(HAVE_RUST) && !defined(ALL_BUGS_ARE_FATAL) +#if !defined(ALL_BUGS_ARE_FATAL) tor_capture_bugs_(1); tt_assert(protover_all_supported( "DoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" @@ -273,7 +259,7 @@ test_protover_all_supported(void *arg) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaa=1-65536", &msg)); tor_end_capture_bugs_(); -#endif /* !defined(HAVE_RUST) && !defined(ALL_BUGS_ARE_FATAL) */ +#endif /* !defined(ALL_BUGS_ARE_FATAL) */ done: tor_end_capture_bugs_(); @@ -370,6 +356,8 @@ test_protover_supports_version(void *arg) #define PROTOVER_FLOWCTRL_V1 1 +#define PROTOVER_RELAY_NTOR_V3 4 + /* Make sure we haven't forgotten any supported protocols */ static void test_protover_supported_protocols(void *arg) @@ -658,7 +646,8 @@ test_protover_vote_roundtrip_ours(void *args) "supports_establish_intro_dos_extension: %d,\n" \ "supports_v3_hsdir: %d,\n" \ "supports_v3_rendezvous_point: %d,\n" \ - "supports_hs_setup_padding: %d.", \ + "supports_hs_setup_padding: %d,\n" \ + "supports_congestion_control: %d.", \ (flags).protocols_known, \ (flags).supports_extend2_cells, \ (flags).supports_accepting_ipv6_extends, \ @@ -670,7 +659,8 @@ test_protover_vote_roundtrip_ours(void *args) (flags).supports_establish_intro_dos_extension, \ (flags).supports_v3_hsdir, \ (flags).supports_v3_rendezvous_point, \ - (flags).supports_hs_setup_padding); \ + (flags).supports_hs_setup_padding, \ + (flags).supports_congestion_control); \ STMT_END /* Test that the proto_string version version_macro sets summary_flag. */ diff --git a/src/test/test_pt.c b/src/test/test_pt.c index 27e74d5ebf..07c5032933 100644 --- a/src/test/test_pt.c +++ b/src/test/test_pt.c @@ -233,6 +233,10 @@ test_pt_protocol(void *arg) handle_proxy_line(line, mp); tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS); + strlcpy(line,"CMETHOD-ERROR fakename not supported",sizeof(line)); + handle_proxy_line(line, mp); + tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS); + strlcpy(line,"CMETHODS DONE",sizeof(line)); handle_proxy_line(line, mp); tt_assert(mp->conf_state == PT_PROTO_CONFIGURED); diff --git a/src/test/test_rust.sh b/src/test/test_rust.sh deleted file mode 100755 index 804d2ada36..0000000000 --- a/src/test/test_rust.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# Test all Rust crates - -set -e - -export LSAN_OPTIONS=suppressions=${abs_top_srcdir:-../../..}/src/test/rust_supp.txt - -# When testing Cargo we pass a number of very specific linker flags down -# through Cargo. We do not, however, want these flags to affect things like -# build scripts, only the tests that we're compiling. To ensure this happens -# we unconditionally pass `--target` into Cargo, ensuring that `RUSTFLAGS` in -# the environment won't make their way into build scripts. -rustc_host=$(rustc -vV | grep host | sed 's/host: //') - -for cargo_toml_dir in "${abs_top_srcdir:-../../..}"/src/rust/*; do - if [ -e "${cargo_toml_dir}/Cargo.toml" ]; then - # shellcheck disable=SC2086 - cd "${abs_top_builddir:-../../..}/src/rust" && \ - CARGO_TARGET_DIR="${abs_top_builddir:-../../..}/src/rust/target" \ - "${CARGO:-cargo}" test "${CARGO_ONLINE-'--frozen'}" \ - --features "test_linking_hack" \ - --target "$rustc_host" \ - ${EXTRA_CARGO_OPTIONS} \ - --manifest-path "${cargo_toml_dir}/Cargo.toml" || exitcode=1 - fi -done - -exit $exitcode diff --git a/src/test/test_sandbox.c b/src/test/test_sandbox.c new file mode 100644 index 0000000000..7ec08a3546 --- /dev/null +++ b/src/test/test_sandbox.c @@ -0,0 +1,349 @@ +/* Copyright (c) 2021, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef _LARGEFILE64_SOURCE +/** + * Temporarily required for O_LARGEFILE flag. Needs to be removed + * with the libevent fix. + */ +#define _LARGEFILE64_SOURCE +#endif /* !defined(_LARGEFILE64_SOURCE) */ + +#include "orconfig.h" + +#include "lib/sandbox/sandbox.h" + +#ifdef USE_LIBSECCOMP + +#include <dirent.h> +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include "core/or/or.h" + +#include "test/test.h" +#include "test/log_test_helpers.h" + +typedef struct { + sandbox_cfg_t *cfg; + + char *file_ops_allowed; + char *file_ops_blocked; + + char *file_rename_target_allowed; + + char *dir_ops_allowed; + char *dir_ops_blocked; +} sandbox_data_t; + +/* All tests are skipped when coverage support is enabled (see further below) + * as the sandbox interferes with the use of gcov. Prevent a compiler warning + * by omitting these definitions in that case. */ +#ifndef ENABLE_COVERAGE +static void * +setup_sandbox(const struct testcase_t *testcase) +{ + sandbox_data_t *data = tor_malloc_zero(sizeof(*data)); + + (void)testcase; + + /* Establish common file and directory names within the test suite's + * temporary directory. */ + data->file_ops_allowed = tor_strdup(get_fname("file_ops_allowed")); + data->file_ops_blocked = tor_strdup(get_fname("file_ops_blocked")); + + data->file_rename_target_allowed = + tor_strdup(get_fname("file_rename_target_allowed")); + + data->dir_ops_allowed = tor_strdup(get_fname("dir_ops_allowed")); + data->dir_ops_blocked = tor_strdup(get_fname("dir_ops_blocked")); + + /* Create the corresponding filesystem objects. */ + creat(data->file_ops_allowed, S_IRWXU); + creat(data->file_ops_blocked, S_IRWXU); + mkdir(data->dir_ops_allowed, S_IRWXU); + mkdir(data->dir_ops_blocked, S_IRWXU); + + /* Create the sandbox configuration. */ + data->cfg = sandbox_cfg_new(); + + sandbox_cfg_allow_open_filename(&data->cfg, + tor_strdup(data->file_ops_allowed)); + sandbox_cfg_allow_open_filename(&data->cfg, + tor_strdup(data->dir_ops_allowed)); + + sandbox_cfg_allow_chmod_filename(&data->cfg, + tor_strdup(data->file_ops_allowed)); + sandbox_cfg_allow_chmod_filename(&data->cfg, + tor_strdup(data->dir_ops_allowed)); + sandbox_cfg_allow_chown_filename(&data->cfg, + tor_strdup(data->file_ops_allowed)); + sandbox_cfg_allow_chown_filename(&data->cfg, + tor_strdup(data->dir_ops_allowed)); + + sandbox_cfg_allow_rename(&data->cfg, tor_strdup(data->file_ops_allowed), + tor_strdup(data->file_rename_target_allowed)); + + sandbox_cfg_allow_openat_filename(&data->cfg, + tor_strdup(data->dir_ops_allowed)); + + sandbox_cfg_allow_opendir_dirname(&data->cfg, + tor_strdup(data->dir_ops_allowed)); + + sandbox_cfg_allow_stat_filename(&data->cfg, + tor_strdup(data->file_ops_allowed)); + sandbox_cfg_allow_stat_filename(&data->cfg, + tor_strdup(data->dir_ops_allowed)); + + /* Activate the sandbox, which will remain in effect until the process + * terminates. */ + sandbox_init(data->cfg); + + return data; +} + +static int +cleanup_sandbox(const struct testcase_t *testcase, void *data_) +{ + sandbox_data_t *data = data_; + + (void)testcase; + + tor_free(data->dir_ops_blocked); + tor_free(data->dir_ops_allowed); + tor_free(data->file_rename_target_allowed); + tor_free(data->file_ops_blocked); + tor_free(data->file_ops_allowed); + + tor_free(data); + + return 1; +} + +static const struct testcase_setup_t sandboxed_testcase_setup = { + .setup_fn = setup_sandbox, + .cleanup_fn = cleanup_sandbox +}; +#endif /* !defined(ENABLE_COVERAGE) */ + +static void +test_sandbox_is_active(void *ignored) +{ + (void)ignored; + + tt_assert(!sandbox_is_active()); + + sandbox_init(sandbox_cfg_new()); + tt_assert(sandbox_is_active()); + + done: + (void)0; +} + +static void +test_sandbox_open_filename(void *arg) +{ + sandbox_data_t *data = arg; + int fd, errsv; + + fd = open(sandbox_intern_string(data->file_ops_allowed), O_RDONLY); + if (fd == -1) + tt_abort_perror("open"); + close(fd); + + /* It might be nice to use sandbox_intern_string() in the line below as well + * (and likewise in the test cases that follow) but this would require + * capturing the warning message it logs, and the mechanism for doing so + * relies on system calls that are normally blocked by the sandbox and may + * vary across architectures. */ + fd = open(data->file_ops_blocked, O_RDONLY); + errsv = errno; + tt_int_op(fd, OP_EQ, -1); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + if (fd >= 0) + close(fd); +} + +static void +test_sandbox_chmod_filename(void *arg) +{ + sandbox_data_t *data = arg; + int rc, errsv; + + if (chmod(sandbox_intern_string(data->file_ops_allowed), + S_IRUSR | S_IWUSR) != 0) + tt_abort_perror("chmod"); + + rc = chmod(data->file_ops_blocked, S_IRUSR | S_IWUSR); + errsv = errno; + tt_int_op(rc, OP_EQ, -1); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + (void)0; +} + +static void +test_sandbox_chown_filename(void *arg) +{ + sandbox_data_t *data = arg; + int rc, errsv; + + if (chown(sandbox_intern_string(data->file_ops_allowed), -1, -1) != 0) + tt_abort_perror("chown"); + + rc = chown(data->file_ops_blocked, -1, -1); + errsv = errno; + tt_int_op(rc, OP_EQ, -1); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + (void)0; +} + +static void +test_sandbox_rename_filename(void *arg) +{ + sandbox_data_t *data = arg; + const char *fname_old = sandbox_intern_string(data->file_ops_allowed), + *fname_new = sandbox_intern_string(data->file_rename_target_allowed); + int rc, errsv; + + if (rename(fname_old, fname_new) != 0) + tt_abort_perror("rename"); + + rc = rename(fname_new, fname_old); + errsv = errno; + tt_int_op(rc, OP_EQ, -1); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + (void)0; +} + +static void +test_sandbox_openat_filename(void *arg) +{ + sandbox_data_t *data = arg; + int flags = O_RDONLY | O_NONBLOCK | O_LARGEFILE | O_DIRECTORY | O_CLOEXEC; + int fd, errsv; + + fd = openat(AT_FDCWD, sandbox_intern_string(data->dir_ops_allowed), flags); + if (fd < 0) + tt_abort_perror("openat"); + close(fd); + + fd = openat(AT_FDCWD, data->dir_ops_blocked, flags); + errsv = errno; + tt_int_op(fd, OP_EQ, -1); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + if (fd >= 0) + close(fd); +} + +static void +test_sandbox_opendir_dirname(void *arg) +{ + sandbox_data_t *data = arg; + DIR *dir; + int errsv; + + dir = opendir(sandbox_intern_string(data->dir_ops_allowed)); + if (dir == NULL) + tt_abort_perror("opendir"); + closedir(dir); + + dir = opendir(data->dir_ops_blocked); + errsv = errno; + tt_ptr_op(dir, OP_EQ, NULL); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + if (dir) + closedir(dir); +} + +static void +test_sandbox_stat_filename(void *arg) +{ + sandbox_data_t *data = arg; + struct stat st; + + if (stat(sandbox_intern_string(data->file_ops_allowed), &st) != 0) + tt_abort_perror("stat"); + + int rc = stat(data->file_ops_blocked, &st); + int errsv = errno; + tt_int_op(rc, OP_EQ, -1); + tt_int_op(errsv, OP_EQ, EPERM); + + done: + (void)0; +} + +#define SANDBOX_TEST_SKIPPED(name) \ + { #name, test_sandbox_ ## name, TT_SKIP, NULL, NULL } + +/* Skip all tests when coverage support is enabled, as the sandbox interferes + * with gcov and prevents it from producing any results. */ +#ifdef ENABLE_COVERAGE +#define SANDBOX_TEST(name, flags) SANDBOX_TEST_SKIPPED(name) +#define SANDBOX_TEST_IN_SANDBOX(name) SANDBOX_TEST_SKIPPED(name) +#else +#define SANDBOX_TEST(name, flags) \ + { #name, test_sandbox_ ## name, flags, NULL, NULL } +#define SANDBOX_TEST_IN_SANDBOX(name) \ + { #name, test_sandbox_ ## name, TT_FORK, &sandboxed_testcase_setup, NULL } +#endif /* defined(ENABLE_COVERAGE) */ + +struct testcase_t sandbox_tests[] = { + SANDBOX_TEST(is_active, TT_FORK), + +/* When Tor is built with fragile compiler-hardening the sandbox is unable to + * filter requests to open files or directories (on systems where glibc uses + * the "open" system call to provide this functionality), as doing so would + * interfere with the address sanitizer as it retrieves information about the + * running process via the filesystem. Skip these tests in that case as the + * corresponding functions are likely to have no effect and this will cause the + * tests to fail. */ +#ifdef ENABLE_FRAGILE_HARDENING + SANDBOX_TEST_SKIPPED(open_filename), + SANDBOX_TEST_SKIPPED(opendir_dirname), +#else + SANDBOX_TEST_IN_SANDBOX(open_filename), + SANDBOX_TEST_IN_SANDBOX(opendir_dirname), +#endif /* defined(ENABLE_FRAGILE_HARDENING) */ + + SANDBOX_TEST_IN_SANDBOX(openat_filename), + SANDBOX_TEST_IN_SANDBOX(chmod_filename), + SANDBOX_TEST_IN_SANDBOX(chown_filename), + SANDBOX_TEST_IN_SANDBOX(rename_filename), + +/* Currently the sandbox is unable to filter stat() calls on systems where + * glibc implements this function using either of the legacy "stat" or "stat64" + * system calls, or (in glibc version 2.33 and later) either of the newer + * "newfstatat" or "statx" syscalls. + * + * Skip testing sandbox_cfg_allow_stat_filename() if it seems the likely the + * function will have no effect and the test will therefore not succeed. */ +#if !defined(__NR_stat) && !defined(__NR_stat64) && !defined(__NR_newfstatat) \ + && !(defined(__i386__) && defined(__NR_statx)) + SANDBOX_TEST_IN_SANDBOX(stat_filename), +#else + SANDBOX_TEST_SKIPPED(stat_filename), +#endif + END_OF_TESTCASES +}; + +#endif /* defined(USE_SECCOMP) */ diff --git a/src/test/test_sendme.c b/src/test/test_sendme.c index eef65a394e..ea7ccd0b3c 100644 --- a/src/test/test_sendme.c +++ b/src/test/test_sendme.c @@ -348,6 +348,50 @@ test_package_payload_len(void *arg) tor_free(c); } +/* Check that circuit_sendme_is_next works with a window of 1000, + * and a sendme_inc of 100 (old school tor compat) */ +static void +test_sendme_is_next1000(void *arg) +{ + (void)arg; + tt_int_op(circuit_sendme_cell_is_next(1000, 100), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(999, 100), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(901, 100), OP_EQ, 1); + + tt_int_op(circuit_sendme_cell_is_next(900, 100), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(899, 100), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(801, 100), OP_EQ, 1); + + tt_int_op(circuit_sendme_cell_is_next(101, 100), OP_EQ, 1); + tt_int_op(circuit_sendme_cell_is_next(100, 100), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(99, 100), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(1, 100), OP_EQ, 1); + tt_int_op(circuit_sendme_cell_is_next(0, 100), OP_EQ, 0); + +done: + ; +} + +/* Check that circuit_sendme_is_next works with a window of 31 */ +static void +test_sendme_is_next(void *arg) +{ + (void)arg; + tt_int_op(circuit_sendme_cell_is_next(1000, 31), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(970, 31), OP_EQ, 1); + tt_int_op(circuit_sendme_cell_is_next(969, 31), OP_EQ, 0); + + /* deliver_window should never get this low, but test anyway */ + tt_int_op(circuit_sendme_cell_is_next(9, 31), OP_EQ, 1); + tt_int_op(circuit_sendme_cell_is_next(8, 31), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(7, 31), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(1, 31), OP_EQ, 0); + tt_int_op(circuit_sendme_cell_is_next(0, 31), OP_EQ, 0); + + done: + ; +} + struct testcase_t sendme_tests[] = { { "v1_record_digest", test_v1_record_digest, TT_FORK, NULL, NULL }, @@ -360,6 +404,8 @@ struct testcase_t sendme_tests[] = { { "cell_version_validation", test_cell_version_validation, TT_FORK, NULL, NULL }, { "package_payload_len", test_package_payload_len, 0, NULL, NULL }, + { "sendme_is_next1000", test_sendme_is_next1000, 0, NULL, NULL }, + { "sendme_is_next", test_sendme_is_next, 0, NULL, NULL }, END_OF_TESTCASES }; diff --git a/src/test/test_stats.c b/src/test/test_stats.c index af035ae54c..22d65b1e54 100644 --- a/src/test/test_stats.c +++ b/src/test/test_stats.c @@ -51,7 +51,7 @@ #include "feature/stats/bw_array_st.h" #include "feature/relay/router.h" -#include "event2/dns.h" +#include <event2/dns.h> /** Run unit tests for some stats code. */ static void @@ -721,7 +721,7 @@ test_overload_stats(void *arg) stats_str = rep_hist_get_overload_stats_lines(); tt_assert(!stats_str); - /* Note a overload */ + /* Note an overload */ rep_hist_note_overload(OVERLOAD_GENERAL); /* Move the time forward one hour */ @@ -742,7 +742,7 @@ test_overload_stats(void *arg) /* Now the time should be 2002-01-07 00:00:00 */ - /* Note a overload */ + /* Note an overload */ rep_hist_note_overload(OVERLOAD_GENERAL); stats_str = rep_hist_get_overload_general_line(); @@ -867,6 +867,65 @@ test_overload_stats(void *arg) tor_free(stats_str); } +/** Test the overload stats logic. */ +static void +test_overload_onionskin_ntor(void *arg) +{ + char *stats_str = NULL; + (void) arg; + uint16_t type = ONION_HANDSHAKE_TYPE_NTOR_V3; + + /* Lets simulate a series of timeouts but below our default 1% threshold. */ + + for (int i = 0; i < 1000; i++) { + rep_hist_note_circuit_handshake_requested(type); + /* This should trigger 9 drop which is just below 1% (10) */ + if (i > 0 && !(i % 100)) { + rep_hist_note_circuit_handshake_dropped(type); + } + } + + /* No overload yet. */ + stats_str = rep_hist_get_overload_general_line(); + tt_assert(!stats_str); + + /* Move it 6 hours in the future and see if we get a general overload. */ + update_approx_time(approx_time() + 21600); + + /* This request should NOT trigger the general overload because we are below + * our default of 1%. */ + rep_hist_note_circuit_handshake_requested(type); + stats_str = rep_hist_get_overload_general_line(); + tt_assert(!stats_str); + + /* We'll now go above our 1% threshold. */ + for (int i = 0; i < 1000; i++) { + rep_hist_note_circuit_handshake_requested(type); + /* This should trigger 10 timeouts which is our threshold of 1% (10) */ + if (!(i % 10)) { + rep_hist_note_circuit_handshake_dropped(type); + } + } + + /* Move it 6 hours in the future and see if we get a general overload. */ + update_approx_time(approx_time() + 21600); + + /* This request should trigger the general overload because above 1%. */ + rep_hist_note_circuit_handshake_requested(type); + stats_str = rep_hist_get_overload_general_line(); + tt_assert(stats_str); + tor_free(stats_str); + + /* Move 72h in the future, we should NOT get an overload anymore. */ + update_approx_time(approx_time() + (72 * 3600)); + + stats_str = rep_hist_get_overload_general_line(); + tt_assert(!stats_str); + + done: + tor_free(stats_str); +} + #define ENT(name) \ { #name, test_ ## name , 0, NULL, NULL } #define FORK(name) \ @@ -883,6 +942,7 @@ struct testcase_t stats_tests[] = { FORK(rephist_v3_onions), FORK(load_stats_file), FORK(overload_stats), + FORK(overload_onionskin_ntor), END_OF_TESTCASES }; diff --git a/src/test/test_voting_flags.c b/src/test/test_voting_flags.c index 4c5f3a3270..457b0fa796 100644 --- a/src/test/test_voting_flags.c +++ b/src/test/test_voting_flags.c @@ -62,7 +62,8 @@ check_result(flag_vote_test_cfg_t *c) bool result = false; routerstatus_t rs; memset(&rs, 0, sizeof(rs)); - dirauth_set_routerstatus_from_routerinfo(&rs, &c->node, &c->ri, c->now, 0); + dirauth_set_routerstatus_from_routerinfo(&rs, &c->node, &c->ri, c->now, + 0, 0); tt_i64_op(rs.published_on, OP_EQ, c->expected.published_on); tt_str_op(rs.nickname, OP_EQ, c->expected.nickname); diff --git a/src/tools/include.am b/src/tools/include.am index 6daa27f6de..86cd0acbfd 100644 --- a/src/tools/include.am +++ b/src/tools/include.am @@ -10,7 +10,6 @@ src_tools_tor_resolve_LDADD = \ src/trunnel/libor-trunnel.a \ $(TOR_UTIL_LIBS) \ $(TOR_CRYPTO_LIBS) $(TOR_LIBS_CRYPTLIB)\ - $(rust_ldadd) \ @TOR_LIB_MATH@ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_USERENV@ if COVERAGE_ENABLED @@ -34,7 +33,6 @@ src_tools_tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ $(TOR_LDFLAGS_CRYPTLIB) src_tools_tor_gencert_LDADD = \ $(TOR_CRYPTO_LIBS) \ $(TOR_UTIL_LIBS) \ - $(rust_ldadd) \ @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ $(TOR_LIBS_CRYPTLIB) \ @TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_SHLWAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ @CURVE25519_LIBS@ endif diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c index 09ff8df4ab..ad52fdaa22 100644 --- a/src/tools/tor-resolve.c +++ b/src/tools/tor-resolve.c @@ -253,7 +253,7 @@ build_socks_resolve_request(uint8_t **out, } static void -onion_warning(const char *hostname) +onion_hs_warning(const char *hostname) { log_warn(LD_NET, "%s is a hidden service; those don't have IP addresses. " @@ -264,6 +264,15 @@ onion_warning(const char *hostname) hostname); } +static void +onion_exit_warning(const char *hostname) +{ + log_warn(LD_NET, + "%s is a link pointing to an exit node; however, .exit domains" + "have been long defunct and are not valid anymore.", + hostname); +} + /** Given a <b>len</b>-byte SOCKS4a response in <b>response</b>, set * *<b>addr_out</b> to the address it contains (in host order). * Return 0 on success, -1 on error. @@ -306,9 +315,15 @@ parse_socks4a_resolve_response(const char *hostname, if (status != 90) { log_warn(LD_NET,"Got status response '%d': socks request failed.", status); if (!strcasecmpend(hostname, ".onion")) { - onion_warning(hostname); + onion_hs_warning(hostname); result = -1; goto cleanup; } + + if (!strcasecmpend(hostname, ".exit")) { + onion_exit_warning(hostname); + result = -1; goto cleanup; + } + result = -1; goto cleanup; } @@ -493,7 +508,11 @@ do_resolve(const char *hostname, (unsigned)reply_field, socks5_reason_to_string(reply_field)); if (reply_field == 4 && !strcasecmpend(hostname, ".onion")) { - onion_warning(hostname); + onion_hs_warning(hostname); + } + + if (reply_field == 4 && !strcasecmpend(hostname, ".exit")) { + onion_exit_warning(hostname); } socks5_server_reply_free(reply); diff --git a/src/trunnel/congestion_control.c b/src/trunnel/congestion_control.c new file mode 100644 index 0000000000..371612bfe0 --- /dev/null +++ b/src/trunnel/congestion_control.c @@ -0,0 +1,183 @@ +/* congestion_control.c -- generated by Trunnel v1.5.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#include <stdlib.h> +#include "trunnel-impl.h" + +#include "congestion_control.h" + +#define TRUNNEL_SET_ERROR_CODE(obj) \ + do { \ + (obj)->trunnel_error_code_ = 1; \ + } while (0) + +#if defined(__COVERITY__) || defined(__clang_analyzer__) +/* If we're running a static analysis tool, we don't want it to complain + * that some of our remaining-bytes checks are dead-code. */ +int congestioncontrol_deadcode_dummy__ = 0; +#define OR_DEADCODE_DUMMY || congestioncontrol_deadcode_dummy__ +#else +#define OR_DEADCODE_DUMMY +#endif + +#define CHECK_REMAINING(nbytes, label) \ + do { \ + if (remaining < (nbytes) OR_DEADCODE_DUMMY) { \ + goto label; \ + } \ + } while (0) + +trn_extension_field_cc_t * +trn_extension_field_cc_new(void) +{ + trn_extension_field_cc_t *val = trunnel_calloc(1, sizeof(trn_extension_field_cc_t)); + if (NULL == val) + return NULL; + return val; +} + +/** Release all storage held inside 'obj', but do not free 'obj'. + */ +static void +trn_extension_field_cc_clear(trn_extension_field_cc_t *obj) +{ + (void) obj; +} + +void +trn_extension_field_cc_free(trn_extension_field_cc_t *obj) +{ + if (obj == NULL) + return; + trn_extension_field_cc_clear(obj); + trunnel_memwipe(obj, sizeof(trn_extension_field_cc_t)); + trunnel_free_(obj); +} + +uint8_t +trn_extension_field_cc_get_sendme_inc(const trn_extension_field_cc_t *inp) +{ + return inp->sendme_inc; +} +int +trn_extension_field_cc_set_sendme_inc(trn_extension_field_cc_t *inp, uint8_t val) +{ + inp->sendme_inc = val; + return 0; +} +const char * +trn_extension_field_cc_check(const trn_extension_field_cc_t *obj) +{ + if (obj == NULL) + return "Object was NULL"; + if (obj->trunnel_error_code_) + return "A set function failed on this object"; + return NULL; +} + +ssize_t +trn_extension_field_cc_encoded_len(const trn_extension_field_cc_t *obj) +{ + ssize_t result = 0; + + if (NULL != trn_extension_field_cc_check(obj)) + return -1; + + + /* Length of u8 sendme_inc */ + result += 1; + return result; +} +int +trn_extension_field_cc_clear_errors(trn_extension_field_cc_t *obj) +{ + int r = obj->trunnel_error_code_; + obj->trunnel_error_code_ = 0; + return r; +} +ssize_t +trn_extension_field_cc_encode(uint8_t *output, const size_t avail, const trn_extension_field_cc_t *obj) +{ + ssize_t result = 0; + size_t written = 0; + uint8_t *ptr = output; + const char *msg; +#ifdef TRUNNEL_CHECK_ENCODED_LEN + const ssize_t encoded_len = trn_extension_field_cc_encoded_len(obj); +#endif + + if (NULL != (msg = trn_extension_field_cc_check(obj))) + goto check_failed; + +#ifdef TRUNNEL_CHECK_ENCODED_LEN + trunnel_assert(encoded_len >= 0); +#endif + + /* Encode u8 sendme_inc */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->sendme_inc)); + written += 1; ptr += 1; + + + trunnel_assert(ptr == output + written); +#ifdef TRUNNEL_CHECK_ENCODED_LEN + { + trunnel_assert(encoded_len >= 0); + trunnel_assert((size_t)encoded_len == written); + } + +#endif + + return written; + + truncated: + result = -2; + goto fail; + check_failed: + (void)msg; + result = -1; + goto fail; + fail: + trunnel_assert(result < 0); + return result; +} + +/** As trn_extension_field_cc_parse(), but do not allocate the output + * object. + */ +static ssize_t +trn_extension_field_cc_parse_into(trn_extension_field_cc_t *obj, const uint8_t *input, const size_t len_in) +{ + const uint8_t *ptr = input; + size_t remaining = len_in; + ssize_t result = 0; + (void)result; + + /* Parse u8 sendme_inc */ + CHECK_REMAINING(1, truncated); + obj->sendme_inc = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + trunnel_assert(ptr + remaining == input + len_in); + return len_in - remaining; + + truncated: + return -2; +} + +ssize_t +trn_extension_field_cc_parse(trn_extension_field_cc_t **output, const uint8_t *input, const size_t len_in) +{ + ssize_t result; + *output = trn_extension_field_cc_new(); + if (NULL == *output) + return -1; + result = trn_extension_field_cc_parse_into(*output, input, len_in); + if (result < 0) { + trn_extension_field_cc_free(*output); + *output = NULL; + } + return result; +} diff --git a/src/trunnel/congestion_control.h b/src/trunnel/congestion_control.h new file mode 100644 index 0000000000..0cc21a1db5 --- /dev/null +++ b/src/trunnel/congestion_control.h @@ -0,0 +1,67 @@ +/* congestion_control.h -- generated by Trunnel v1.5.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#ifndef TRUNNEL_CONGESTION_CONTROL_H +#define TRUNNEL_CONGESTION_CONTROL_H + +#include <stdint.h> +#include "trunnel.h" + +#define TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST 1 +#define TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE 2 +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_EXTENSION_FIELD_CC) +struct trn_extension_field_cc_st { + uint8_t sendme_inc; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct trn_extension_field_cc_st trn_extension_field_cc_t; +/** Return a newly allocated trn_extension_field_cc with all elements + * set to zero. + */ +trn_extension_field_cc_t *trn_extension_field_cc_new(void); +/** Release all storage held by the trn_extension_field_cc in + * 'victim'. (Do nothing if 'victim' is NULL.) + */ +void trn_extension_field_cc_free(trn_extension_field_cc_t *victim); +/** Try to parse a trn_extension_field_cc from the buffer in 'input', + * using up to 'len_in' bytes from the input buffer. On success, + * return the number of bytes consumed and set *output to the newly + * allocated trn_extension_field_cc_t. On failure, return -2 if the + * input appears truncated, and -1 if the input is otherwise invalid. + */ +ssize_t trn_extension_field_cc_parse(trn_extension_field_cc_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * trn_extension_field_cc in 'obj'. On failure, return a negative + * value. Note that this value may be an overestimate, and can even be + * an underestimate for certain unencodeable objects. + */ +ssize_t trn_extension_field_cc_encoded_len(const trn_extension_field_cc_t *obj); +/** Try to encode the trn_extension_field_cc from 'input' into the + * buffer at 'output', using up to 'avail' bytes of the output buffer. + * On success, return the number of bytes used. On failure, return -2 + * if the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t trn_extension_field_cc_encode(uint8_t *output, size_t avail, const trn_extension_field_cc_t *input); +/** Check whether the internal state of the trn_extension_field_cc in + * 'obj' is consistent. Return NULL if it is, and a short message if + * it is not. + */ +const char *trn_extension_field_cc_check(const trn_extension_field_cc_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int trn_extension_field_cc_clear_errors(trn_extension_field_cc_t *obj); +/** Return the value of the sendme_inc field of the + * trn_extension_field_cc_t in 'inp' + */ +uint8_t trn_extension_field_cc_get_sendme_inc(const trn_extension_field_cc_t *inp); +/** Set the value of the sendme_inc field of the + * trn_extension_field_cc_t in 'inp' to 'val'. Return 0 on success; + * return -1 and set the error code on 'inp' on failure. + */ +int trn_extension_field_cc_set_sendme_inc(trn_extension_field_cc_t *inp, uint8_t val); + + +#endif diff --git a/src/trunnel/congestion_control.trunnel b/src/trunnel/congestion_control.trunnel new file mode 100644 index 0000000000..50697a0cd2 --- /dev/null +++ b/src/trunnel/congestion_control.trunnel @@ -0,0 +1,22 @@ +/* This file contains the definition for the encrypted payload of a circuit + * parameter negotiation request/response portion of the trn_ntorv3 onionskin + * handshake. Currently only supports congestion control params. */ + +/* The following is encoded in the extension format. */ + +/* Field types. */ +const TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST = 0x01; +const TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE = 0x02; + +/* + * "Request" is an empty payload signalling that CC is enabled. + */ + +/* + * "Response" consists of 1 single byte: + * SENDME_INC -- Min: 0, Max: 255 + */ + +struct trn_extension_field_cc { + u8 sendme_inc; +}; diff --git a/src/trunnel/hs/cell_common.c b/src/trunnel/extension.c index 1f50961d69..538ac62928 100644 --- a/src/trunnel/hs/cell_common.c +++ b/src/trunnel/extension.c @@ -1,11 +1,11 @@ -/* cell_common.c -- generated by Trunnel v1.5.3. +/* extension.c -- generated by Trunnel v1.5.3. * https://gitweb.torproject.org/trunnel.git * You probably shouldn't edit this file. */ #include <stdlib.h> #include "trunnel-impl.h" -#include "cell_common.h" +#include "extension.h" #define TRUNNEL_SET_ERROR_CODE(obj) \ do { \ @@ -15,8 +15,8 @@ #if defined(__COVERITY__) || defined(__clang_analyzer__) /* If we're running a static analysis tool, we don't want it to complain * that some of our remaining-bytes checks are dead-code. */ -int cellcommon_deadcode_dummy__ = 0; -#define OR_DEADCODE_DUMMY || cellcommon_deadcode_dummy__ +int extension_deadcode_dummy__ = 0; +#define OR_DEADCODE_DUMMY || extension_deadcode_dummy__ #else #define OR_DEADCODE_DUMMY #endif @@ -28,10 +28,10 @@ int cellcommon_deadcode_dummy__ = 0; } \ } while (0) -trn_cell_extension_field_t * -trn_cell_extension_field_new(void) +trn_extension_field_t * +trn_extension_field_new(void) { - trn_cell_extension_field_t *val = trunnel_calloc(1, sizeof(trn_cell_extension_field_t)); + trn_extension_field_t *val = trunnel_calloc(1, sizeof(trn_extension_field_t)); if (NULL == val) return NULL; return val; @@ -40,7 +40,7 @@ trn_cell_extension_field_new(void) /** Release all storage held inside 'obj', but do not free 'obj'. */ static void -trn_cell_extension_field_clear(trn_cell_extension_field_t *obj) +trn_extension_field_clear(trn_extension_field_t *obj) { (void) obj; TRUNNEL_DYNARRAY_WIPE(&obj->field); @@ -48,62 +48,62 @@ trn_cell_extension_field_clear(trn_cell_extension_field_t *obj) } void -trn_cell_extension_field_free(trn_cell_extension_field_t *obj) +trn_extension_field_free(trn_extension_field_t *obj) { if (obj == NULL) return; - trn_cell_extension_field_clear(obj); - trunnel_memwipe(obj, sizeof(trn_cell_extension_field_t)); + trn_extension_field_clear(obj); + trunnel_memwipe(obj, sizeof(trn_extension_field_t)); trunnel_free_(obj); } uint8_t -trn_cell_extension_field_get_field_type(const trn_cell_extension_field_t *inp) +trn_extension_field_get_field_type(const trn_extension_field_t *inp) { return inp->field_type; } int -trn_cell_extension_field_set_field_type(trn_cell_extension_field_t *inp, uint8_t val) +trn_extension_field_set_field_type(trn_extension_field_t *inp, uint8_t val) { inp->field_type = val; return 0; } uint8_t -trn_cell_extension_field_get_field_len(const trn_cell_extension_field_t *inp) +trn_extension_field_get_field_len(const trn_extension_field_t *inp) { return inp->field_len; } int -trn_cell_extension_field_set_field_len(trn_cell_extension_field_t *inp, uint8_t val) +trn_extension_field_set_field_len(trn_extension_field_t *inp, uint8_t val) { inp->field_len = val; return 0; } size_t -trn_cell_extension_field_getlen_field(const trn_cell_extension_field_t *inp) +trn_extension_field_getlen_field(const trn_extension_field_t *inp) { return TRUNNEL_DYNARRAY_LEN(&inp->field); } uint8_t -trn_cell_extension_field_get_field(trn_cell_extension_field_t *inp, size_t idx) +trn_extension_field_get_field(trn_extension_field_t *inp, size_t idx) { return TRUNNEL_DYNARRAY_GET(&inp->field, idx); } uint8_t -trn_cell_extension_field_getconst_field(const trn_cell_extension_field_t *inp, size_t idx) +trn_extension_field_getconst_field(const trn_extension_field_t *inp, size_t idx) { - return trn_cell_extension_field_get_field((trn_cell_extension_field_t*)inp, idx); + return trn_extension_field_get_field((trn_extension_field_t*)inp, idx); } int -trn_cell_extension_field_set_field(trn_cell_extension_field_t *inp, size_t idx, uint8_t elt) +trn_extension_field_set_field(trn_extension_field_t *inp, size_t idx, uint8_t elt) { TRUNNEL_DYNARRAY_SET(&inp->field, idx, elt); return 0; } int -trn_cell_extension_field_add_field(trn_cell_extension_field_t *inp, uint8_t elt) +trn_extension_field_add_field(trn_extension_field_t *inp, uint8_t elt) { #if SIZE_MAX >= UINT8_MAX if (inp->field.n_ == UINT8_MAX) @@ -117,17 +117,17 @@ trn_cell_extension_field_add_field(trn_cell_extension_field_t *inp, uint8_t elt) } uint8_t * -trn_cell_extension_field_getarray_field(trn_cell_extension_field_t *inp) +trn_extension_field_getarray_field(trn_extension_field_t *inp) { return inp->field.elts_; } const uint8_t * -trn_cell_extension_field_getconstarray_field(const trn_cell_extension_field_t *inp) +trn_extension_field_getconstarray_field(const trn_extension_field_t *inp) { - return (const uint8_t *)trn_cell_extension_field_getarray_field((trn_cell_extension_field_t*)inp); + return (const uint8_t *)trn_extension_field_getarray_field((trn_extension_field_t*)inp); } int -trn_cell_extension_field_setlen_field(trn_cell_extension_field_t *inp, size_t newlen) +trn_extension_field_setlen_field(trn_extension_field_t *inp, size_t newlen) { uint8_t *newptr; #if UINT8_MAX < SIZE_MAX @@ -147,7 +147,7 @@ trn_cell_extension_field_setlen_field(trn_cell_extension_field_t *inp, size_t ne return -1; } const char * -trn_cell_extension_field_check(const trn_cell_extension_field_t *obj) +trn_extension_field_check(const trn_extension_field_t *obj) { if (obj == NULL) return "Object was NULL"; @@ -159,11 +159,11 @@ trn_cell_extension_field_check(const trn_cell_extension_field_t *obj) } ssize_t -trn_cell_extension_field_encoded_len(const trn_cell_extension_field_t *obj) +trn_extension_field_encoded_len(const trn_extension_field_t *obj) { ssize_t result = 0; - if (NULL != trn_cell_extension_field_check(obj)) + if (NULL != trn_extension_field_check(obj)) return -1; @@ -178,24 +178,24 @@ trn_cell_extension_field_encoded_len(const trn_cell_extension_field_t *obj) return result; } int -trn_cell_extension_field_clear_errors(trn_cell_extension_field_t *obj) +trn_extension_field_clear_errors(trn_extension_field_t *obj) { int r = obj->trunnel_error_code_; obj->trunnel_error_code_ = 0; return r; } ssize_t -trn_cell_extension_field_encode(uint8_t *output, const size_t avail, const trn_cell_extension_field_t *obj) +trn_extension_field_encode(uint8_t *output, const size_t avail, const trn_extension_field_t *obj) { ssize_t result = 0; size_t written = 0; uint8_t *ptr = output; const char *msg; #ifdef TRUNNEL_CHECK_ENCODED_LEN - const ssize_t encoded_len = trn_cell_extension_field_encoded_len(obj); + const ssize_t encoded_len = trn_extension_field_encoded_len(obj); #endif - if (NULL != (msg = trn_cell_extension_field_check(obj))) + if (NULL != (msg = trn_extension_field_check(obj))) goto check_failed; #ifdef TRUNNEL_CHECK_ENCODED_LEN @@ -252,11 +252,11 @@ trn_cell_extension_field_encode(uint8_t *output, const size_t avail, const trn_c return result; } -/** As trn_cell_extension_field_parse(), but do not allocate the - * output object. +/** As trn_extension_field_parse(), but do not allocate the output + * object. */ static ssize_t -trn_cell_extension_field_parse_into(trn_cell_extension_field_t *obj, const uint8_t *input, const size_t len_in) +trn_extension_field_parse_into(trn_extension_field_t *obj, const uint8_t *input, const size_t len_in) { const uint8_t *ptr = input; size_t remaining = len_in; @@ -290,23 +290,23 @@ trn_cell_extension_field_parse_into(trn_cell_extension_field_t *obj, const uint8 } ssize_t -trn_cell_extension_field_parse(trn_cell_extension_field_t **output, const uint8_t *input, const size_t len_in) +trn_extension_field_parse(trn_extension_field_t **output, const uint8_t *input, const size_t len_in) { ssize_t result; - *output = trn_cell_extension_field_new(); + *output = trn_extension_field_new(); if (NULL == *output) return -1; - result = trn_cell_extension_field_parse_into(*output, input, len_in); + result = trn_extension_field_parse_into(*output, input, len_in); if (result < 0) { - trn_cell_extension_field_free(*output); + trn_extension_field_free(*output); *output = NULL; } return result; } -trn_cell_extension_t * -trn_cell_extension_new(void) +trn_extension_t * +trn_extension_new(void) { - trn_cell_extension_t *val = trunnel_calloc(1, sizeof(trn_cell_extension_t)); + trn_extension_t *val = trunnel_calloc(1, sizeof(trn_extension_t)); if (NULL == val) return NULL; return val; @@ -315,14 +315,14 @@ trn_cell_extension_new(void) /** Release all storage held inside 'obj', but do not free 'obj'. */ static void -trn_cell_extension_clear(trn_cell_extension_t *obj) +trn_extension_clear(trn_extension_t *obj) { (void) obj; { unsigned idx; for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->fields); ++idx) { - trn_cell_extension_field_free(TRUNNEL_DYNARRAY_GET(&obj->fields, idx)); + trn_extension_field_free(TRUNNEL_DYNARRAY_GET(&obj->fields, idx)); } } TRUNNEL_DYNARRAY_WIPE(&obj->fields); @@ -330,92 +330,92 @@ trn_cell_extension_clear(trn_cell_extension_t *obj) } void -trn_cell_extension_free(trn_cell_extension_t *obj) +trn_extension_free(trn_extension_t *obj) { if (obj == NULL) return; - trn_cell_extension_clear(obj); - trunnel_memwipe(obj, sizeof(trn_cell_extension_t)); + trn_extension_clear(obj); + trunnel_memwipe(obj, sizeof(trn_extension_t)); trunnel_free_(obj); } uint8_t -trn_cell_extension_get_num(const trn_cell_extension_t *inp) +trn_extension_get_num(const trn_extension_t *inp) { return inp->num; } int -trn_cell_extension_set_num(trn_cell_extension_t *inp, uint8_t val) +trn_extension_set_num(trn_extension_t *inp, uint8_t val) { inp->num = val; return 0; } size_t -trn_cell_extension_getlen_fields(const trn_cell_extension_t *inp) +trn_extension_getlen_fields(const trn_extension_t *inp) { return TRUNNEL_DYNARRAY_LEN(&inp->fields); } -struct trn_cell_extension_field_st * -trn_cell_extension_get_fields(trn_cell_extension_t *inp, size_t idx) +struct trn_extension_field_st * +trn_extension_get_fields(trn_extension_t *inp, size_t idx) { return TRUNNEL_DYNARRAY_GET(&inp->fields, idx); } - const struct trn_cell_extension_field_st * -trn_cell_extension_getconst_fields(const trn_cell_extension_t *inp, size_t idx) + const struct trn_extension_field_st * +trn_extension_getconst_fields(const trn_extension_t *inp, size_t idx) { - return trn_cell_extension_get_fields((trn_cell_extension_t*)inp, idx); + return trn_extension_get_fields((trn_extension_t*)inp, idx); } int -trn_cell_extension_set_fields(trn_cell_extension_t *inp, size_t idx, struct trn_cell_extension_field_st * elt) +trn_extension_set_fields(trn_extension_t *inp, size_t idx, struct trn_extension_field_st * elt) { - trn_cell_extension_field_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->fields, idx); + trn_extension_field_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->fields, idx); if (oldval && oldval != elt) - trn_cell_extension_field_free(oldval); - return trn_cell_extension_set0_fields(inp, idx, elt); + trn_extension_field_free(oldval); + return trn_extension_set0_fields(inp, idx, elt); } int -trn_cell_extension_set0_fields(trn_cell_extension_t *inp, size_t idx, struct trn_cell_extension_field_st * elt) +trn_extension_set0_fields(trn_extension_t *inp, size_t idx, struct trn_extension_field_st * elt) { TRUNNEL_DYNARRAY_SET(&inp->fields, idx, elt); return 0; } int -trn_cell_extension_add_fields(trn_cell_extension_t *inp, struct trn_cell_extension_field_st * elt) +trn_extension_add_fields(trn_extension_t *inp, struct trn_extension_field_st * elt) { #if SIZE_MAX >= UINT8_MAX if (inp->fields.n_ == UINT8_MAX) goto trunnel_alloc_failed; #endif - TRUNNEL_DYNARRAY_ADD(struct trn_cell_extension_field_st *, &inp->fields, elt, {}); + TRUNNEL_DYNARRAY_ADD(struct trn_extension_field_st *, &inp->fields, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; } -struct trn_cell_extension_field_st * * -trn_cell_extension_getarray_fields(trn_cell_extension_t *inp) +struct trn_extension_field_st * * +trn_extension_getarray_fields(trn_extension_t *inp) { return inp->fields.elts_; } -const struct trn_cell_extension_field_st * const * -trn_cell_extension_getconstarray_fields(const trn_cell_extension_t *inp) +const struct trn_extension_field_st * const * +trn_extension_getconstarray_fields(const trn_extension_t *inp) { - return (const struct trn_cell_extension_field_st * const *)trn_cell_extension_getarray_fields((trn_cell_extension_t*)inp); + return (const struct trn_extension_field_st * const *)trn_extension_getarray_fields((trn_extension_t*)inp); } int -trn_cell_extension_setlen_fields(trn_cell_extension_t *inp, size_t newlen) +trn_extension_setlen_fields(trn_extension_t *inp, size_t newlen) { - struct trn_cell_extension_field_st * *newptr; + struct trn_extension_field_st * *newptr; #if UINT8_MAX < SIZE_MAX if (newlen > UINT8_MAX) goto trunnel_alloc_failed; #endif newptr = trunnel_dynarray_setlen(&inp->fields.allocated_, &inp->fields.n_, inp->fields.elts_, newlen, - sizeof(inp->fields.elts_[0]), (trunnel_free_fn_t) trn_cell_extension_field_free, + sizeof(inp->fields.elts_[0]), (trunnel_free_fn_t) trn_extension_field_free, &inp->trunnel_error_code_); if (newlen != 0 && newptr == NULL) goto trunnel_alloc_failed; @@ -426,7 +426,7 @@ trn_cell_extension_setlen_fields(trn_cell_extension_t *inp, size_t newlen) return -1; } const char * -trn_cell_extension_check(const trn_cell_extension_t *obj) +trn_extension_check(const trn_extension_t *obj) { if (obj == NULL) return "Object was NULL"; @@ -437,7 +437,7 @@ trn_cell_extension_check(const trn_cell_extension_t *obj) unsigned idx; for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->fields); ++idx) { - if (NULL != (msg = trn_cell_extension_field_check(TRUNNEL_DYNARRAY_GET(&obj->fields, idx)))) + if (NULL != (msg = trn_extension_field_check(TRUNNEL_DYNARRAY_GET(&obj->fields, idx)))) return msg; } } @@ -447,46 +447,46 @@ trn_cell_extension_check(const trn_cell_extension_t *obj) } ssize_t -trn_cell_extension_encoded_len(const trn_cell_extension_t *obj) +trn_extension_encoded_len(const trn_extension_t *obj) { ssize_t result = 0; - if (NULL != trn_cell_extension_check(obj)) + if (NULL != trn_extension_check(obj)) return -1; /* Length of u8 num */ result += 1; - /* Length of struct trn_cell_extension_field fields[num] */ + /* Length of struct trn_extension_field fields[num] */ { unsigned idx; for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->fields); ++idx) { - result += trn_cell_extension_field_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->fields, idx)); + result += trn_extension_field_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->fields, idx)); } } return result; } int -trn_cell_extension_clear_errors(trn_cell_extension_t *obj) +trn_extension_clear_errors(trn_extension_t *obj) { int r = obj->trunnel_error_code_; obj->trunnel_error_code_ = 0; return r; } ssize_t -trn_cell_extension_encode(uint8_t *output, const size_t avail, const trn_cell_extension_t *obj) +trn_extension_encode(uint8_t *output, const size_t avail, const trn_extension_t *obj) { ssize_t result = 0; size_t written = 0; uint8_t *ptr = output; const char *msg; #ifdef TRUNNEL_CHECK_ENCODED_LEN - const ssize_t encoded_len = trn_cell_extension_encoded_len(obj); + const ssize_t encoded_len = trn_extension_encoded_len(obj); #endif - if (NULL != (msg = trn_cell_extension_check(obj))) + if (NULL != (msg = trn_extension_check(obj))) goto check_failed; #ifdef TRUNNEL_CHECK_ENCODED_LEN @@ -500,13 +500,13 @@ trn_cell_extension_encode(uint8_t *output, const size_t avail, const trn_cell_ex trunnel_set_uint8(ptr, (obj->num)); written += 1; ptr += 1; - /* Encode struct trn_cell_extension_field fields[num] */ + /* Encode struct trn_extension_field fields[num] */ { unsigned idx; for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->fields); ++idx) { trunnel_assert(written <= avail); - result = trn_cell_extension_field_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->fields, idx)); + result = trn_extension_field_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->fields, idx)); if (result < 0) goto fail; /* XXXXXXX !*/ written += result; ptr += result; @@ -537,11 +537,10 @@ trn_cell_extension_encode(uint8_t *output, const size_t avail, const trn_cell_ex return result; } -/** As trn_cell_extension_parse(), but do not allocate the output - * object. +/** As trn_extension_parse(), but do not allocate the output object. */ static ssize_t -trn_cell_extension_parse_into(trn_cell_extension_t *obj, const uint8_t *input, const size_t len_in) +trn_extension_parse_into(trn_extension_t *obj, const uint8_t *input, const size_t len_in) { const uint8_t *ptr = input; size_t remaining = len_in; @@ -553,18 +552,18 @@ trn_cell_extension_parse_into(trn_cell_extension_t *obj, const uint8_t *input, c obj->num = (trunnel_get_uint8(ptr)); remaining -= 1; ptr += 1; - /* Parse struct trn_cell_extension_field fields[num] */ - TRUNNEL_DYNARRAY_EXPAND(trn_cell_extension_field_t *, &obj->fields, obj->num, {}); + /* Parse struct trn_extension_field fields[num] */ + TRUNNEL_DYNARRAY_EXPAND(trn_extension_field_t *, &obj->fields, obj->num, {}); { - trn_cell_extension_field_t * elt; + trn_extension_field_t * elt; unsigned idx; for (idx = 0; idx < obj->num; ++idx) { - result = trn_cell_extension_field_parse(&elt, ptr, remaining); + result = trn_extension_field_parse(&elt, ptr, remaining); if (result < 0) goto relay_fail; trunnel_assert((size_t)result <= remaining); remaining -= result; ptr += result; - TRUNNEL_DYNARRAY_ADD(trn_cell_extension_field_t *, &obj->fields, elt, {trn_cell_extension_field_free(elt);}); + TRUNNEL_DYNARRAY_ADD(trn_extension_field_t *, &obj->fields, elt, {trn_extension_field_free(elt);}); } } trunnel_assert(ptr + remaining == input + len_in); @@ -580,15 +579,15 @@ trn_cell_extension_parse_into(trn_cell_extension_t *obj, const uint8_t *input, c } ssize_t -trn_cell_extension_parse(trn_cell_extension_t **output, const uint8_t *input, const size_t len_in) +trn_extension_parse(trn_extension_t **output, const uint8_t *input, const size_t len_in) { ssize_t result; - *output = trn_cell_extension_new(); + *output = trn_extension_new(); if (NULL == *output) return -1; - result = trn_cell_extension_parse_into(*output, input, len_in); + result = trn_extension_parse_into(*output, input, len_in); if (result < 0) { - trn_cell_extension_free(*output); + trn_extension_free(*output); *output = NULL; } return result; diff --git a/src/trunnel/extension.h b/src/trunnel/extension.h new file mode 100644 index 0000000000..eed89d140e --- /dev/null +++ b/src/trunnel/extension.h @@ -0,0 +1,197 @@ +/* extension.h -- generated by Trunnel v1.5.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#ifndef TRUNNEL_EXTENSION_H +#define TRUNNEL_EXTENSION_H + +#include <stdint.h> +#include "trunnel.h" + +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_EXTENSION_FIELD) +struct trn_extension_field_st { + uint8_t field_type; + uint8_t field_len; + TRUNNEL_DYNARRAY_HEAD(, uint8_t) field; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct trn_extension_field_st trn_extension_field_t; +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_EXTENSION) +struct trn_extension_st { + uint8_t num; + TRUNNEL_DYNARRAY_HEAD(, struct trn_extension_field_st *) fields; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct trn_extension_st trn_extension_t; +/** Return a newly allocated trn_extension_field with all elements set + * to zero. + */ +trn_extension_field_t *trn_extension_field_new(void); +/** Release all storage held by the trn_extension_field in 'victim'. + * (Do nothing if 'victim' is NULL.) + */ +void trn_extension_field_free(trn_extension_field_t *victim); +/** Try to parse a trn_extension_field from the buffer in 'input', + * using up to 'len_in' bytes from the input buffer. On success, + * return the number of bytes consumed and set *output to the newly + * allocated trn_extension_field_t. On failure, return -2 if the input + * appears truncated, and -1 if the input is otherwise invalid. + */ +ssize_t trn_extension_field_parse(trn_extension_field_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * trn_extension_field in 'obj'. On failure, return a negative value. + * Note that this value may be an overestimate, and can even be an + * underestimate for certain unencodeable objects. + */ +ssize_t trn_extension_field_encoded_len(const trn_extension_field_t *obj); +/** Try to encode the trn_extension_field from 'input' into the buffer + * at 'output', using up to 'avail' bytes of the output buffer. On + * success, return the number of bytes used. On failure, return -2 if + * the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t trn_extension_field_encode(uint8_t *output, size_t avail, const trn_extension_field_t *input); +/** Check whether the internal state of the trn_extension_field in + * 'obj' is consistent. Return NULL if it is, and a short message if + * it is not. + */ +const char *trn_extension_field_check(const trn_extension_field_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int trn_extension_field_clear_errors(trn_extension_field_t *obj); +/** Return the value of the field_type field of the + * trn_extension_field_t in 'inp' + */ +uint8_t trn_extension_field_get_field_type(const trn_extension_field_t *inp); +/** Set the value of the field_type field of the trn_extension_field_t + * in 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int trn_extension_field_set_field_type(trn_extension_field_t *inp, uint8_t val); +/** Return the value of the field_len field of the + * trn_extension_field_t in 'inp' + */ +uint8_t trn_extension_field_get_field_len(const trn_extension_field_t *inp); +/** Set the value of the field_len field of the trn_extension_field_t + * in 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int trn_extension_field_set_field_len(trn_extension_field_t *inp, uint8_t val); +/** Return the length of the dynamic array holding the field field of + * the trn_extension_field_t in 'inp'. + */ +size_t trn_extension_field_getlen_field(const trn_extension_field_t *inp); +/** Return the element at position 'idx' of the dynamic array field + * field of the trn_extension_field_t in 'inp'. + */ +uint8_t trn_extension_field_get_field(trn_extension_field_t *inp, size_t idx); +/** As trn_extension_field_get_field, but take and return a const + * pointer + */ +uint8_t trn_extension_field_getconst_field(const trn_extension_field_t *inp, size_t idx); +/** Change the element at position 'idx' of the dynamic array field + * field of the trn_extension_field_t in 'inp', so that it will hold + * the value 'elt'. + */ +int trn_extension_field_set_field(trn_extension_field_t *inp, size_t idx, uint8_t elt); +/** Append a new element 'elt' to the dynamic array field field of the + * trn_extension_field_t in 'inp'. + */ +int trn_extension_field_add_field(trn_extension_field_t *inp, uint8_t elt); +/** Return a pointer to the variable-length array field field of + * 'inp'. + */ +uint8_t * trn_extension_field_getarray_field(trn_extension_field_t *inp); +/** As trn_extension_field_get_field, but take and return a const + * pointer + */ +const uint8_t * trn_extension_field_getconstarray_field(const trn_extension_field_t *inp); +/** Change the length of the variable-length array field field of + * 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success; + * return -1 and set the error code on 'inp' on failure. + */ +int trn_extension_field_setlen_field(trn_extension_field_t *inp, size_t newlen); +/** Return a newly allocated trn_extension with all elements set to + * zero. + */ +trn_extension_t *trn_extension_new(void); +/** Release all storage held by the trn_extension in 'victim'. (Do + * nothing if 'victim' is NULL.) + */ +void trn_extension_free(trn_extension_t *victim); +/** Try to parse a trn_extension from the buffer in 'input', using up + * to 'len_in' bytes from the input buffer. On success, return the + * number of bytes consumed and set *output to the newly allocated + * trn_extension_t. On failure, return -2 if the input appears + * truncated, and -1 if the input is otherwise invalid. + */ +ssize_t trn_extension_parse(trn_extension_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * trn_extension in 'obj'. On failure, return a negative value. Note + * that this value may be an overestimate, and can even be an + * underestimate for certain unencodeable objects. + */ +ssize_t trn_extension_encoded_len(const trn_extension_t *obj); +/** Try to encode the trn_extension from 'input' into the buffer at + * 'output', using up to 'avail' bytes of the output buffer. On + * success, return the number of bytes used. On failure, return -2 if + * the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t trn_extension_encode(uint8_t *output, size_t avail, const trn_extension_t *input); +/** Check whether the internal state of the trn_extension in 'obj' is + * consistent. Return NULL if it is, and a short message if it is not. + */ +const char *trn_extension_check(const trn_extension_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int trn_extension_clear_errors(trn_extension_t *obj); +/** Return the value of the num field of the trn_extension_t in 'inp' + */ +uint8_t trn_extension_get_num(const trn_extension_t *inp); +/** Set the value of the num field of the trn_extension_t in 'inp' to + * 'val'. Return 0 on success; return -1 and set the error code on + * 'inp' on failure. + */ +int trn_extension_set_num(trn_extension_t *inp, uint8_t val); +/** Return the length of the dynamic array holding the fields field of + * the trn_extension_t in 'inp'. + */ +size_t trn_extension_getlen_fields(const trn_extension_t *inp); +/** Return the element at position 'idx' of the dynamic array field + * fields of the trn_extension_t in 'inp'. + */ +struct trn_extension_field_st * trn_extension_get_fields(trn_extension_t *inp, size_t idx); +/** As trn_extension_get_fields, but take and return a const pointer + */ + const struct trn_extension_field_st * trn_extension_getconst_fields(const trn_extension_t *inp, size_t idx); +/** Change the element at position 'idx' of the dynamic array field + * fields of the trn_extension_t in 'inp', so that it will hold the + * value 'elt'. Free the previous value, if any. + */ +int trn_extension_set_fields(trn_extension_t *inp, size_t idx, struct trn_extension_field_st * elt); +/** As trn_extension_set_fields, but does not free the previous value. + */ +int trn_extension_set0_fields(trn_extension_t *inp, size_t idx, struct trn_extension_field_st * elt); +/** Append a new element 'elt' to the dynamic array field fields of + * the trn_extension_t in 'inp'. + */ +int trn_extension_add_fields(trn_extension_t *inp, struct trn_extension_field_st * elt); +/** Return a pointer to the variable-length array field fields of + * 'inp'. + */ +struct trn_extension_field_st * * trn_extension_getarray_fields(trn_extension_t *inp); +/** As trn_extension_get_fields, but take and return a const pointer + */ +const struct trn_extension_field_st * const * trn_extension_getconstarray_fields(const trn_extension_t *inp); +/** Change the length of the variable-length array field fields of + * 'inp' to 'newlen'.Fill extra elements with NULL; free removed + * elements. Return 0 on success; return -1 and set the error code on + * 'inp' on failure. + */ +int trn_extension_setlen_fields(trn_extension_t *inp, size_t newlen); + + +#endif diff --git a/src/trunnel/extension.trunnel b/src/trunnel/extension.trunnel new file mode 100644 index 0000000000..177eba0596 --- /dev/null +++ b/src/trunnel/extension.trunnel @@ -0,0 +1,14 @@ + +/* The cell extension ABI that is also used within other type of structures + * such as the ntorv3 data payload. */ + +struct trn_extension_field { + u8 field_type; + u8 field_len; + u8 field[field_len]; +}; + +struct trn_extension { + u8 num; + struct trn_extension_field fields[num]; +}; diff --git a/src/trunnel/flow_control_cells.c b/src/trunnel/flow_control_cells.c new file mode 100644 index 0000000000..df44756d6b --- /dev/null +++ b/src/trunnel/flow_control_cells.c @@ -0,0 +1,382 @@ +/* flow_control_cells.c -- generated by Trunnel v1.5.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#include <stdlib.h> +#include "trunnel-impl.h" + +#include "flow_control_cells.h" + +#define TRUNNEL_SET_ERROR_CODE(obj) \ + do { \ + (obj)->trunnel_error_code_ = 1; \ + } while (0) + +#if defined(__COVERITY__) || defined(__clang_analyzer__) +/* If we're running a static analysis tool, we don't want it to complain + * that some of our remaining-bytes checks are dead-code. */ +int flowcontrolcells_deadcode_dummy__ = 0; +#define OR_DEADCODE_DUMMY || flowcontrolcells_deadcode_dummy__ +#else +#define OR_DEADCODE_DUMMY +#endif + +#define CHECK_REMAINING(nbytes, label) \ + do { \ + if (remaining < (nbytes) OR_DEADCODE_DUMMY) { \ + goto label; \ + } \ + } while (0) + +xoff_cell_t * +xoff_cell_new(void) +{ + xoff_cell_t *val = trunnel_calloc(1, sizeof(xoff_cell_t)); + if (NULL == val) + return NULL; + return val; +} + +/** Release all storage held inside 'obj', but do not free 'obj'. + */ +static void +xoff_cell_clear(xoff_cell_t *obj) +{ + (void) obj; +} + +void +xoff_cell_free(xoff_cell_t *obj) +{ + if (obj == NULL) + return; + xoff_cell_clear(obj); + trunnel_memwipe(obj, sizeof(xoff_cell_t)); + trunnel_free_(obj); +} + +uint8_t +xoff_cell_get_version(const xoff_cell_t *inp) +{ + return inp->version; +} +int +xoff_cell_set_version(xoff_cell_t *inp, uint8_t val) +{ + if (! ((val == 0))) { + TRUNNEL_SET_ERROR_CODE(inp); + return -1; + } + inp->version = val; + return 0; +} +const char * +xoff_cell_check(const xoff_cell_t *obj) +{ + if (obj == NULL) + return "Object was NULL"; + if (obj->trunnel_error_code_) + return "A set function failed on this object"; + if (! (obj->version == 0)) + return "Integer out of bounds"; + return NULL; +} + +ssize_t +xoff_cell_encoded_len(const xoff_cell_t *obj) +{ + ssize_t result = 0; + + if (NULL != xoff_cell_check(obj)) + return -1; + + + /* Length of u8 version IN [0] */ + result += 1; + return result; +} +int +xoff_cell_clear_errors(xoff_cell_t *obj) +{ + int r = obj->trunnel_error_code_; + obj->trunnel_error_code_ = 0; + return r; +} +ssize_t +xoff_cell_encode(uint8_t *output, const size_t avail, const xoff_cell_t *obj) +{ + ssize_t result = 0; + size_t written = 0; + uint8_t *ptr = output; + const char *msg; +#ifdef TRUNNEL_CHECK_ENCODED_LEN + const ssize_t encoded_len = xoff_cell_encoded_len(obj); +#endif + + if (NULL != (msg = xoff_cell_check(obj))) + goto check_failed; + +#ifdef TRUNNEL_CHECK_ENCODED_LEN + trunnel_assert(encoded_len >= 0); +#endif + + /* Encode u8 version IN [0] */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->version)); + written += 1; ptr += 1; + + + trunnel_assert(ptr == output + written); +#ifdef TRUNNEL_CHECK_ENCODED_LEN + { + trunnel_assert(encoded_len >= 0); + trunnel_assert((size_t)encoded_len == written); + } + +#endif + + return written; + + truncated: + result = -2; + goto fail; + check_failed: + (void)msg; + result = -1; + goto fail; + fail: + trunnel_assert(result < 0); + return result; +} + +/** As xoff_cell_parse(), but do not allocate the output object. + */ +static ssize_t +xoff_cell_parse_into(xoff_cell_t *obj, const uint8_t *input, const size_t len_in) +{ + const uint8_t *ptr = input; + size_t remaining = len_in; + ssize_t result = 0; + (void)result; + + /* Parse u8 version IN [0] */ + CHECK_REMAINING(1, truncated); + obj->version = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + if (! (obj->version == 0)) + goto fail; + trunnel_assert(ptr + remaining == input + len_in); + return len_in - remaining; + + truncated: + return -2; + fail: + result = -1; + return result; +} + +ssize_t +xoff_cell_parse(xoff_cell_t **output, const uint8_t *input, const size_t len_in) +{ + ssize_t result; + *output = xoff_cell_new(); + if (NULL == *output) + return -1; + result = xoff_cell_parse_into(*output, input, len_in); + if (result < 0) { + xoff_cell_free(*output); + *output = NULL; + } + return result; +} +xon_cell_t * +xon_cell_new(void) +{ + xon_cell_t *val = trunnel_calloc(1, sizeof(xon_cell_t)); + if (NULL == val) + return NULL; + return val; +} + +/** Release all storage held inside 'obj', but do not free 'obj'. + */ +static void +xon_cell_clear(xon_cell_t *obj) +{ + (void) obj; +} + +void +xon_cell_free(xon_cell_t *obj) +{ + if (obj == NULL) + return; + xon_cell_clear(obj); + trunnel_memwipe(obj, sizeof(xon_cell_t)); + trunnel_free_(obj); +} + +uint8_t +xon_cell_get_version(const xon_cell_t *inp) +{ + return inp->version; +} +int +xon_cell_set_version(xon_cell_t *inp, uint8_t val) +{ + if (! ((val == 0))) { + TRUNNEL_SET_ERROR_CODE(inp); + return -1; + } + inp->version = val; + return 0; +} +uint32_t +xon_cell_get_kbps_ewma(const xon_cell_t *inp) +{ + return inp->kbps_ewma; +} +int +xon_cell_set_kbps_ewma(xon_cell_t *inp, uint32_t val) +{ + inp->kbps_ewma = val; + return 0; +} +const char * +xon_cell_check(const xon_cell_t *obj) +{ + if (obj == NULL) + return "Object was NULL"; + if (obj->trunnel_error_code_) + return "A set function failed on this object"; + if (! (obj->version == 0)) + return "Integer out of bounds"; + return NULL; +} + +ssize_t +xon_cell_encoded_len(const xon_cell_t *obj) +{ + ssize_t result = 0; + + if (NULL != xon_cell_check(obj)) + return -1; + + + /* Length of u8 version IN [0] */ + result += 1; + + /* Length of u32 kbps_ewma */ + result += 4; + return result; +} +int +xon_cell_clear_errors(xon_cell_t *obj) +{ + int r = obj->trunnel_error_code_; + obj->trunnel_error_code_ = 0; + return r; +} +ssize_t +xon_cell_encode(uint8_t *output, const size_t avail, const xon_cell_t *obj) +{ + ssize_t result = 0; + size_t written = 0; + uint8_t *ptr = output; + const char *msg; +#ifdef TRUNNEL_CHECK_ENCODED_LEN + const ssize_t encoded_len = xon_cell_encoded_len(obj); +#endif + + if (NULL != (msg = xon_cell_check(obj))) + goto check_failed; + +#ifdef TRUNNEL_CHECK_ENCODED_LEN + trunnel_assert(encoded_len >= 0); +#endif + + /* Encode u8 version IN [0] */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->version)); + written += 1; ptr += 1; + + /* Encode u32 kbps_ewma */ + trunnel_assert(written <= avail); + if (avail - written < 4) + goto truncated; + trunnel_set_uint32(ptr, trunnel_htonl(obj->kbps_ewma)); + written += 4; ptr += 4; + + + trunnel_assert(ptr == output + written); +#ifdef TRUNNEL_CHECK_ENCODED_LEN + { + trunnel_assert(encoded_len >= 0); + trunnel_assert((size_t)encoded_len == written); + } + +#endif + + return written; + + truncated: + result = -2; + goto fail; + check_failed: + (void)msg; + result = -1; + goto fail; + fail: + trunnel_assert(result < 0); + return result; +} + +/** As xon_cell_parse(), but do not allocate the output object. + */ +static ssize_t +xon_cell_parse_into(xon_cell_t *obj, const uint8_t *input, const size_t len_in) +{ + const uint8_t *ptr = input; + size_t remaining = len_in; + ssize_t result = 0; + (void)result; + + /* Parse u8 version IN [0] */ + CHECK_REMAINING(1, truncated); + obj->version = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + if (! (obj->version == 0)) + goto fail; + + /* Parse u32 kbps_ewma */ + CHECK_REMAINING(4, truncated); + obj->kbps_ewma = trunnel_ntohl(trunnel_get_uint32(ptr)); + remaining -= 4; ptr += 4; + trunnel_assert(ptr + remaining == input + len_in); + return len_in - remaining; + + truncated: + return -2; + fail: + result = -1; + return result; +} + +ssize_t +xon_cell_parse(xon_cell_t **output, const uint8_t *input, const size_t len_in) +{ + ssize_t result; + *output = xon_cell_new(); + if (NULL == *output) + return -1; + result = xon_cell_parse_into(*output, input, len_in); + if (result < 0) { + xon_cell_free(*output); + *output = NULL; + } + return result; +} diff --git a/src/trunnel/flow_control_cells.h b/src/trunnel/flow_control_cells.h new file mode 100644 index 0000000000..b8108b9a24 --- /dev/null +++ b/src/trunnel/flow_control_cells.h @@ -0,0 +1,120 @@ +/* flow_control_cells.h -- generated by Trunnel v1.5.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#ifndef TRUNNEL_FLOW_CONTROL_CELLS_H +#define TRUNNEL_FLOW_CONTROL_CELLS_H + +#include <stdint.h> +#include "trunnel.h" + +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_XOFF_CELL) +struct xoff_cell_st { + uint8_t version; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct xoff_cell_st xoff_cell_t; +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_XON_CELL) +struct xon_cell_st { + uint8_t version; + uint32_t kbps_ewma; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct xon_cell_st xon_cell_t; +/** Return a newly allocated xoff_cell with all elements set to zero. + */ +xoff_cell_t *xoff_cell_new(void); +/** Release all storage held by the xoff_cell in 'victim'. (Do nothing + * if 'victim' is NULL.) + */ +void xoff_cell_free(xoff_cell_t *victim); +/** Try to parse a xoff_cell from the buffer in 'input', using up to + * 'len_in' bytes from the input buffer. On success, return the number + * of bytes consumed and set *output to the newly allocated + * xoff_cell_t. On failure, return -2 if the input appears truncated, + * and -1 if the input is otherwise invalid. + */ +ssize_t xoff_cell_parse(xoff_cell_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * xoff_cell in 'obj'. On failure, return a negative value. Note that + * this value may be an overestimate, and can even be an underestimate + * for certain unencodeable objects. + */ +ssize_t xoff_cell_encoded_len(const xoff_cell_t *obj); +/** Try to encode the xoff_cell from 'input' into the buffer at + * 'output', using up to 'avail' bytes of the output buffer. On + * success, return the number of bytes used. On failure, return -2 if + * the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t xoff_cell_encode(uint8_t *output, size_t avail, const xoff_cell_t *input); +/** Check whether the internal state of the xoff_cell in 'obj' is + * consistent. Return NULL if it is, and a short message if it is not. + */ +const char *xoff_cell_check(const xoff_cell_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int xoff_cell_clear_errors(xoff_cell_t *obj); +/** Return the value of the version field of the xoff_cell_t in 'inp' + */ +uint8_t xoff_cell_get_version(const xoff_cell_t *inp); +/** Set the value of the version field of the xoff_cell_t in 'inp' to + * 'val'. Return 0 on success; return -1 and set the error code on + * 'inp' on failure. + */ +int xoff_cell_set_version(xoff_cell_t *inp, uint8_t val); +/** Return a newly allocated xon_cell with all elements set to zero. + */ +xon_cell_t *xon_cell_new(void); +/** Release all storage held by the xon_cell in 'victim'. (Do nothing + * if 'victim' is NULL.) + */ +void xon_cell_free(xon_cell_t *victim); +/** Try to parse a xon_cell from the buffer in 'input', using up to + * 'len_in' bytes from the input buffer. On success, return the number + * of bytes consumed and set *output to the newly allocated + * xon_cell_t. On failure, return -2 if the input appears truncated, + * and -1 if the input is otherwise invalid. + */ +ssize_t xon_cell_parse(xon_cell_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * xon_cell in 'obj'. On failure, return a negative value. Note that + * this value may be an overestimate, and can even be an underestimate + * for certain unencodeable objects. + */ +ssize_t xon_cell_encoded_len(const xon_cell_t *obj); +/** Try to encode the xon_cell from 'input' into the buffer at + * 'output', using up to 'avail' bytes of the output buffer. On + * success, return the number of bytes used. On failure, return -2 if + * the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t xon_cell_encode(uint8_t *output, size_t avail, const xon_cell_t *input); +/** Check whether the internal state of the xon_cell in 'obj' is + * consistent. Return NULL if it is, and a short message if it is not. + */ +const char *xon_cell_check(const xon_cell_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int xon_cell_clear_errors(xon_cell_t *obj); +/** Return the value of the version field of the xon_cell_t in 'inp' + */ +uint8_t xon_cell_get_version(const xon_cell_t *inp); +/** Set the value of the version field of the xon_cell_t in 'inp' to + * 'val'. Return 0 on success; return -1 and set the error code on + * 'inp' on failure. + */ +int xon_cell_set_version(xon_cell_t *inp, uint8_t val); +/** Return the value of the kbps_ewma field of the xon_cell_t in 'inp' + */ +uint32_t xon_cell_get_kbps_ewma(const xon_cell_t *inp); +/** Set the value of the kbps_ewma field of the xon_cell_t in 'inp' to + * 'val'. Return 0 on success; return -1 and set the error code on + * 'inp' on failure. + */ +int xon_cell_set_kbps_ewma(xon_cell_t *inp, uint32_t val); + + +#endif diff --git a/src/trunnel/flow_control_cells.trunnel b/src/trunnel/flow_control_cells.trunnel new file mode 100644 index 0000000000..9d07b568a9 --- /dev/null +++ b/src/trunnel/flow_control_cells.trunnel @@ -0,0 +1,20 @@ +/* This file contains the xon and xoff cell definitions, for flow control. */ + +/* xoff cell definition. Tells the other endpoint to stop sending, because + * we have too much data queued for this stream. */ +struct xoff_cell { + /* Version field. */ + u8 version IN [0x00]; +} + +/* xon cell declaration. Tells the other endpoint to resume sending and/or + * update its sending rate on this stream based on advisory information. */ +struct xon_cell { + /* Version field. */ + u8 version IN [0x00]; + + /* Advisory field: The ewma rate of socket drain we have seen so far + * on this stream, in kilobytes/sec (1000 bytes/sec). May be zero, + * which means no rate advice. */ + u32 kbps_ewma; +} diff --git a/src/trunnel/hs/cell_common.h b/src/trunnel/hs/cell_common.h deleted file mode 100644 index beb65e015f..0000000000 --- a/src/trunnel/hs/cell_common.h +++ /dev/null @@ -1,203 +0,0 @@ -/* cell_common.h -- generated by Trunnel v1.5.3. - * https://gitweb.torproject.org/trunnel.git - * You probably shouldn't edit this file. - */ -#ifndef TRUNNEL_CELL_COMMON_H -#define TRUNNEL_CELL_COMMON_H - -#include <stdint.h> -#include "trunnel.h" - -#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_EXTENSION_FIELD) -struct trn_cell_extension_field_st { - uint8_t field_type; - uint8_t field_len; - TRUNNEL_DYNARRAY_HEAD(, uint8_t) field; - uint8_t trunnel_error_code_; -}; -#endif -typedef struct trn_cell_extension_field_st trn_cell_extension_field_t; -#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_EXTENSION) -struct trn_cell_extension_st { - uint8_t num; - TRUNNEL_DYNARRAY_HEAD(, struct trn_cell_extension_field_st *) fields; - uint8_t trunnel_error_code_; -}; -#endif -typedef struct trn_cell_extension_st trn_cell_extension_t; -/** Return a newly allocated trn_cell_extension_field with all - * elements set to zero. - */ -trn_cell_extension_field_t *trn_cell_extension_field_new(void); -/** Release all storage held by the trn_cell_extension_field in - * 'victim'. (Do nothing if 'victim' is NULL.) - */ -void trn_cell_extension_field_free(trn_cell_extension_field_t *victim); -/** Try to parse a trn_cell_extension_field from the buffer in - * 'input', using up to 'len_in' bytes from the input buffer. On - * success, return the number of bytes consumed and set *output to the - * newly allocated trn_cell_extension_field_t. On failure, return -2 - * if the input appears truncated, and -1 if the input is otherwise - * invalid. - */ -ssize_t trn_cell_extension_field_parse(trn_cell_extension_field_t **output, const uint8_t *input, const size_t len_in); -/** Return the number of bytes we expect to need to encode the - * trn_cell_extension_field in 'obj'. On failure, return a negative - * value. Note that this value may be an overestimate, and can even be - * an underestimate for certain unencodeable objects. - */ -ssize_t trn_cell_extension_field_encoded_len(const trn_cell_extension_field_t *obj); -/** Try to encode the trn_cell_extension_field from 'input' into the - * buffer at 'output', using up to 'avail' bytes of the output buffer. - * On success, return the number of bytes used. On failure, return -2 - * if the buffer was not long enough, and -1 if the input was invalid. - */ -ssize_t trn_cell_extension_field_encode(uint8_t *output, size_t avail, const trn_cell_extension_field_t *input); -/** Check whether the internal state of the trn_cell_extension_field - * in 'obj' is consistent. Return NULL if it is, and a short message - * if it is not. - */ -const char *trn_cell_extension_field_check(const trn_cell_extension_field_t *obj); -/** Clear any errors that were set on the object 'obj' by its setter - * functions. Return true iff errors were cleared. - */ -int trn_cell_extension_field_clear_errors(trn_cell_extension_field_t *obj); -/** Return the value of the field_type field of the - * trn_cell_extension_field_t in 'inp' - */ -uint8_t trn_cell_extension_field_get_field_type(const trn_cell_extension_field_t *inp); -/** Set the value of the field_type field of the - * trn_cell_extension_field_t in 'inp' to 'val'. Return 0 on success; - * return -1 and set the error code on 'inp' on failure. - */ -int trn_cell_extension_field_set_field_type(trn_cell_extension_field_t *inp, uint8_t val); -/** Return the value of the field_len field of the - * trn_cell_extension_field_t in 'inp' - */ -uint8_t trn_cell_extension_field_get_field_len(const trn_cell_extension_field_t *inp); -/** Set the value of the field_len field of the - * trn_cell_extension_field_t in 'inp' to 'val'. Return 0 on success; - * return -1 and set the error code on 'inp' on failure. - */ -int trn_cell_extension_field_set_field_len(trn_cell_extension_field_t *inp, uint8_t val); -/** Return the length of the dynamic array holding the field field of - * the trn_cell_extension_field_t in 'inp'. - */ -size_t trn_cell_extension_field_getlen_field(const trn_cell_extension_field_t *inp); -/** Return the element at position 'idx' of the dynamic array field - * field of the trn_cell_extension_field_t in 'inp'. - */ -uint8_t trn_cell_extension_field_get_field(trn_cell_extension_field_t *inp, size_t idx); -/** As trn_cell_extension_field_get_field, but take and return a const - * pointer - */ -uint8_t trn_cell_extension_field_getconst_field(const trn_cell_extension_field_t *inp, size_t idx); -/** Change the element at position 'idx' of the dynamic array field - * field of the trn_cell_extension_field_t in 'inp', so that it will - * hold the value 'elt'. - */ -int trn_cell_extension_field_set_field(trn_cell_extension_field_t *inp, size_t idx, uint8_t elt); -/** Append a new element 'elt' to the dynamic array field field of the - * trn_cell_extension_field_t in 'inp'. - */ -int trn_cell_extension_field_add_field(trn_cell_extension_field_t *inp, uint8_t elt); -/** Return a pointer to the variable-length array field field of - * 'inp'. - */ -uint8_t * trn_cell_extension_field_getarray_field(trn_cell_extension_field_t *inp); -/** As trn_cell_extension_field_get_field, but take and return a const - * pointer - */ -const uint8_t * trn_cell_extension_field_getconstarray_field(const trn_cell_extension_field_t *inp); -/** Change the length of the variable-length array field field of - * 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success; - * return -1 and set the error code on 'inp' on failure. - */ -int trn_cell_extension_field_setlen_field(trn_cell_extension_field_t *inp, size_t newlen); -/** Return a newly allocated trn_cell_extension with all elements set - * to zero. - */ -trn_cell_extension_t *trn_cell_extension_new(void); -/** Release all storage held by the trn_cell_extension in 'victim'. - * (Do nothing if 'victim' is NULL.) - */ -void trn_cell_extension_free(trn_cell_extension_t *victim); -/** Try to parse a trn_cell_extension from the buffer in 'input', - * using up to 'len_in' bytes from the input buffer. On success, - * return the number of bytes consumed and set *output to the newly - * allocated trn_cell_extension_t. On failure, return -2 if the input - * appears truncated, and -1 if the input is otherwise invalid. - */ -ssize_t trn_cell_extension_parse(trn_cell_extension_t **output, const uint8_t *input, const size_t len_in); -/** Return the number of bytes we expect to need to encode the - * trn_cell_extension in 'obj'. On failure, return a negative value. - * Note that this value may be an overestimate, and can even be an - * underestimate for certain unencodeable objects. - */ -ssize_t trn_cell_extension_encoded_len(const trn_cell_extension_t *obj); -/** Try to encode the trn_cell_extension from 'input' into the buffer - * at 'output', using up to 'avail' bytes of the output buffer. On - * success, return the number of bytes used. On failure, return -2 if - * the buffer was not long enough, and -1 if the input was invalid. - */ -ssize_t trn_cell_extension_encode(uint8_t *output, size_t avail, const trn_cell_extension_t *input); -/** Check whether the internal state of the trn_cell_extension in - * 'obj' is consistent. Return NULL if it is, and a short message if - * it is not. - */ -const char *trn_cell_extension_check(const trn_cell_extension_t *obj); -/** Clear any errors that were set on the object 'obj' by its setter - * functions. Return true iff errors were cleared. - */ -int trn_cell_extension_clear_errors(trn_cell_extension_t *obj); -/** Return the value of the num field of the trn_cell_extension_t in - * 'inp' - */ -uint8_t trn_cell_extension_get_num(const trn_cell_extension_t *inp); -/** Set the value of the num field of the trn_cell_extension_t in - * 'inp' to 'val'. Return 0 on success; return -1 and set the error - * code on 'inp' on failure. - */ -int trn_cell_extension_set_num(trn_cell_extension_t *inp, uint8_t val); -/** Return the length of the dynamic array holding the fields field of - * the trn_cell_extension_t in 'inp'. - */ -size_t trn_cell_extension_getlen_fields(const trn_cell_extension_t *inp); -/** Return the element at position 'idx' of the dynamic array field - * fields of the trn_cell_extension_t in 'inp'. - */ -struct trn_cell_extension_field_st * trn_cell_extension_get_fields(trn_cell_extension_t *inp, size_t idx); -/** As trn_cell_extension_get_fields, but take and return a const - * pointer - */ - const struct trn_cell_extension_field_st * trn_cell_extension_getconst_fields(const trn_cell_extension_t *inp, size_t idx); -/** Change the element at position 'idx' of the dynamic array field - * fields of the trn_cell_extension_t in 'inp', so that it will hold - * the value 'elt'. Free the previous value, if any. - */ -int trn_cell_extension_set_fields(trn_cell_extension_t *inp, size_t idx, struct trn_cell_extension_field_st * elt); -/** As trn_cell_extension_set_fields, but does not free the previous - * value. - */ -int trn_cell_extension_set0_fields(trn_cell_extension_t *inp, size_t idx, struct trn_cell_extension_field_st * elt); -/** Append a new element 'elt' to the dynamic array field fields of - * the trn_cell_extension_t in 'inp'. - */ -int trn_cell_extension_add_fields(trn_cell_extension_t *inp, struct trn_cell_extension_field_st * elt); -/** Return a pointer to the variable-length array field fields of - * 'inp'. - */ -struct trn_cell_extension_field_st * * trn_cell_extension_getarray_fields(trn_cell_extension_t *inp); -/** As trn_cell_extension_get_fields, but take and return a const - * pointer - */ -const struct trn_cell_extension_field_st * const * trn_cell_extension_getconstarray_fields(const trn_cell_extension_t *inp); -/** Change the length of the variable-length array field fields of - * 'inp' to 'newlen'.Fill extra elements with NULL; free removed - * elements. Return 0 on success; return -1 and set the error code on - * 'inp' on failure. - */ -int trn_cell_extension_setlen_fields(trn_cell_extension_t *inp, size_t newlen); - - -#endif diff --git a/src/trunnel/hs/cell_common.trunnel b/src/trunnel/hs/cell_common.trunnel deleted file mode 100644 index 7e99cbfa66..0000000000 --- a/src/trunnel/hs/cell_common.trunnel +++ /dev/null @@ -1,12 +0,0 @@ -/* This file contains common data structure that cells use. */ - -struct trn_cell_extension_field { - u8 field_type; - u8 field_len; - u8 field[field_len]; -}; - -struct trn_cell_extension { - u8 num; - struct trn_cell_extension_field fields[num]; -}; diff --git a/src/trunnel/hs/cell_establish_intro.c b/src/trunnel/hs/cell_establish_intro.c index f31404c55f..0f561b121b 100644 --- a/src/trunnel/hs/cell_establish_intro.c +++ b/src/trunnel/hs/cell_establish_intro.c @@ -28,14 +28,14 @@ int cellestablishintro_deadcode_dummy__ = 0; } \ } while (0) -typedef struct trn_cell_extension_st trn_cell_extension_t; -trn_cell_extension_t *trn_cell_extension_new(void); -void trn_cell_extension_free(trn_cell_extension_t *victim); -ssize_t trn_cell_extension_parse(trn_cell_extension_t **output, const uint8_t *input, const size_t len_in); -ssize_t trn_cell_extension_encoded_len(const trn_cell_extension_t *obj); -ssize_t trn_cell_extension_encode(uint8_t *output, size_t avail, const trn_cell_extension_t *input); -const char *trn_cell_extension_check(const trn_cell_extension_t *obj); -int trn_cell_extension_clear_errors(trn_cell_extension_t *obj); +typedef struct trn_extension_st trn_extension_t; +trn_extension_t *trn_extension_new(void); +void trn_extension_free(trn_extension_t *victim); +ssize_t trn_extension_parse(trn_extension_t **output, const uint8_t *input, const size_t len_in); +ssize_t trn_extension_encoded_len(const trn_extension_t *obj); +ssize_t trn_extension_encode(uint8_t *output, size_t avail, const trn_extension_t *input); +const char *trn_extension_check(const trn_extension_t *obj); +int trn_extension_clear_errors(trn_extension_t *obj); trn_cell_extension_dos_param_t * trn_cell_extension_dos_param_new(void) { @@ -232,7 +232,7 @@ trn_cell_establish_intro_clear(trn_cell_establish_intro_t *obj) (void) obj; TRUNNEL_DYNARRAY_WIPE(&obj->auth_key); TRUNNEL_DYNARRAY_CLEAR(&obj->auth_key); - trn_cell_extension_free(obj->extensions); + trn_extension_free(obj->extensions); obj->extensions = NULL; TRUNNEL_DYNARRAY_WIPE(&obj->sig); TRUNNEL_DYNARRAY_CLEAR(&obj->sig); @@ -346,25 +346,25 @@ trn_cell_establish_intro_setlen_auth_key(trn_cell_establish_intro_t *inp, size_t TRUNNEL_SET_ERROR_CODE(inp); return -1; } -struct trn_cell_extension_st * +struct trn_extension_st * trn_cell_establish_intro_get_extensions(trn_cell_establish_intro_t *inp) { return inp->extensions; } -const struct trn_cell_extension_st * +const struct trn_extension_st * trn_cell_establish_intro_getconst_extensions(const trn_cell_establish_intro_t *inp) { return trn_cell_establish_intro_get_extensions((trn_cell_establish_intro_t*) inp); } int -trn_cell_establish_intro_set_extensions(trn_cell_establish_intro_t *inp, struct trn_cell_extension_st *val) +trn_cell_establish_intro_set_extensions(trn_cell_establish_intro_t *inp, struct trn_extension_st *val) { if (inp->extensions && inp->extensions != val) - trn_cell_extension_free(inp->extensions); + trn_extension_free(inp->extensions); return trn_cell_establish_intro_set0_extensions(inp, val); } int -trn_cell_establish_intro_set0_extensions(trn_cell_establish_intro_t *inp, struct trn_cell_extension_st *val) +trn_cell_establish_intro_set0_extensions(trn_cell_establish_intro_t *inp, struct trn_extension_st *val) { inp->extensions = val; return 0; @@ -506,7 +506,7 @@ trn_cell_establish_intro_check(const trn_cell_establish_intro_t *obj) return "Length mismatch for auth_key"; { const char *msg; - if (NULL != (msg = trn_cell_extension_check(obj->extensions))) + if (NULL != (msg = trn_extension_check(obj->extensions))) return msg; } if (TRUNNEL_DYNARRAY_LEN(&obj->sig) != obj->sig_len) @@ -532,8 +532,8 @@ trn_cell_establish_intro_encoded_len(const trn_cell_establish_intro_t *obj) /* Length of u8 auth_key[auth_key_len] */ result += TRUNNEL_DYNARRAY_LEN(&obj->auth_key); - /* Length of struct trn_cell_extension extensions */ - result += trn_cell_extension_encoded_len(obj->extensions); + /* Length of struct trn_extension extensions */ + result += trn_extension_encoded_len(obj->extensions); /* Length of u8 handshake_mac[TRUNNEL_SHA3_256_LEN] */ result += TRUNNEL_SHA3_256_LEN; @@ -596,9 +596,9 @@ trn_cell_establish_intro_encode(uint8_t *output, const size_t avail, const trn_c written += elt_len; ptr += elt_len; } - /* Encode struct trn_cell_extension extensions */ + /* Encode struct trn_extension extensions */ trunnel_assert(written <= avail); - result = trn_cell_extension_encode(ptr, avail - written, obj->extensions); + result = trn_extension_encode(ptr, avail - written, obj->extensions); if (result < 0) goto fail; /* XXXXXXX !*/ written += result; ptr += result; @@ -685,8 +685,8 @@ trn_cell_establish_intro_parse_into(trn_cell_establish_intro_t *obj, const uint8 memcpy(obj->auth_key.elts_, ptr, obj->auth_key_len); ptr += obj->auth_key_len; remaining -= obj->auth_key_len; - /* Parse struct trn_cell_extension extensions */ - result = trn_cell_extension_parse(&obj->extensions, ptr, remaining); + /* Parse struct trn_extension extensions */ + result = trn_extension_parse(&obj->extensions, ptr, remaining); if (result < 0) goto relay_fail; trunnel_assert((size_t)result <= remaining); @@ -1045,7 +1045,7 @@ static void trn_cell_intro_established_clear(trn_cell_intro_established_t *obj) { (void) obj; - trn_cell_extension_free(obj->extensions); + trn_extension_free(obj->extensions); obj->extensions = NULL; } @@ -1059,25 +1059,25 @@ trn_cell_intro_established_free(trn_cell_intro_established_t *obj) trunnel_free_(obj); } -struct trn_cell_extension_st * +struct trn_extension_st * trn_cell_intro_established_get_extensions(trn_cell_intro_established_t *inp) { return inp->extensions; } -const struct trn_cell_extension_st * +const struct trn_extension_st * trn_cell_intro_established_getconst_extensions(const trn_cell_intro_established_t *inp) { return trn_cell_intro_established_get_extensions((trn_cell_intro_established_t*) inp); } int -trn_cell_intro_established_set_extensions(trn_cell_intro_established_t *inp, struct trn_cell_extension_st *val) +trn_cell_intro_established_set_extensions(trn_cell_intro_established_t *inp, struct trn_extension_st *val) { if (inp->extensions && inp->extensions != val) - trn_cell_extension_free(inp->extensions); + trn_extension_free(inp->extensions); return trn_cell_intro_established_set0_extensions(inp, val); } int -trn_cell_intro_established_set0_extensions(trn_cell_intro_established_t *inp, struct trn_cell_extension_st *val) +trn_cell_intro_established_set0_extensions(trn_cell_intro_established_t *inp, struct trn_extension_st *val) { inp->extensions = val; return 0; @@ -1091,7 +1091,7 @@ trn_cell_intro_established_check(const trn_cell_intro_established_t *obj) return "A set function failed on this object"; { const char *msg; - if (NULL != (msg = trn_cell_extension_check(obj->extensions))) + if (NULL != (msg = trn_extension_check(obj->extensions))) return msg; } return NULL; @@ -1106,8 +1106,8 @@ trn_cell_intro_established_encoded_len(const trn_cell_intro_established_t *obj) return -1; - /* Length of struct trn_cell_extension extensions */ - result += trn_cell_extension_encoded_len(obj->extensions); + /* Length of struct trn_extension extensions */ + result += trn_extension_encoded_len(obj->extensions); return result; } int @@ -1135,9 +1135,9 @@ trn_cell_intro_established_encode(uint8_t *output, const size_t avail, const trn trunnel_assert(encoded_len >= 0); #endif - /* Encode struct trn_cell_extension extensions */ + /* Encode struct trn_extension extensions */ trunnel_assert(written <= avail); - result = trn_cell_extension_encode(ptr, avail - written, obj->extensions); + result = trn_extension_encode(ptr, avail - written, obj->extensions); if (result < 0) goto fail; /* XXXXXXX !*/ written += result; ptr += result; @@ -1174,8 +1174,8 @@ trn_cell_intro_established_parse_into(trn_cell_intro_established_t *obj, const u ssize_t result = 0; (void)result; - /* Parse struct trn_cell_extension extensions */ - result = trn_cell_extension_parse(&obj->extensions, ptr, remaining); + /* Parse struct trn_extension extensions */ + result = trn_extension_parse(&obj->extensions, ptr, remaining); if (result < 0) goto relay_fail; trunnel_assert((size_t)result <= remaining); diff --git a/src/trunnel/hs/cell_establish_intro.h b/src/trunnel/hs/cell_establish_intro.h index 1924d9cab6..8be1531ed1 100644 --- a/src/trunnel/hs/cell_establish_intro.h +++ b/src/trunnel/hs/cell_establish_intro.h @@ -8,7 +8,7 @@ #include <stdint.h> #include "trunnel.h" -struct trn_cell_extension_st; +struct trn_extension_st; #define TRUNNEL_SHA3_256_LEN 32 #define TRUNNEL_CELL_EXTENSION_TYPE_DOS 1 #define TRUNNEL_DOS_PARAM_TYPE_INTRO2_RATE_PER_SEC 1 @@ -27,7 +27,7 @@ struct trn_cell_establish_intro_st { uint8_t auth_key_type; uint16_t auth_key_len; TRUNNEL_DYNARRAY_HEAD(, uint8_t) auth_key; - struct trn_cell_extension_st *extensions; + struct trn_extension_st *extensions; const uint8_t *end_mac_fields; uint8_t handshake_mac[TRUNNEL_SHA3_256_LEN]; const uint8_t *end_sig_fields; @@ -47,7 +47,7 @@ struct trn_cell_extension_dos_st { typedef struct trn_cell_extension_dos_st trn_cell_extension_dos_t; #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_INTRO_ESTABLISHED) struct trn_cell_intro_established_st { - struct trn_cell_extension_st *extensions; + struct trn_extension_st *extensions; uint8_t trunnel_error_code_; }; #endif @@ -203,21 +203,21 @@ int trn_cell_establish_intro_setlen_auth_key(trn_cell_establish_intro_t *inp, si /** Return the value of the extensions field of the * trn_cell_establish_intro_t in 'inp' */ -struct trn_cell_extension_st * trn_cell_establish_intro_get_extensions(trn_cell_establish_intro_t *inp); +struct trn_extension_st * trn_cell_establish_intro_get_extensions(trn_cell_establish_intro_t *inp); /** As trn_cell_establish_intro_get_extensions, but take and return a * const pointer */ -const struct trn_cell_extension_st * trn_cell_establish_intro_getconst_extensions(const trn_cell_establish_intro_t *inp); +const struct trn_extension_st * trn_cell_establish_intro_getconst_extensions(const trn_cell_establish_intro_t *inp); /** Set the value of the extensions field of the * trn_cell_establish_intro_t in 'inp' to 'val'. Free the old value if * any. Steals the referenceto 'val'.Return 0 on success; return -1 * and set the error code on 'inp' on failure. */ -int trn_cell_establish_intro_set_extensions(trn_cell_establish_intro_t *inp, struct trn_cell_extension_st *val); +int trn_cell_establish_intro_set_extensions(trn_cell_establish_intro_t *inp, struct trn_extension_st *val); /** As trn_cell_establish_intro_set_extensions, but does not free the * previous value. */ -int trn_cell_establish_intro_set0_extensions(trn_cell_establish_intro_t *inp, struct trn_cell_extension_st *val); +int trn_cell_establish_intro_set0_extensions(trn_cell_establish_intro_t *inp, struct trn_extension_st *val); /** Return the position for end_mac_fields when we parsed this object */ const uint8_t * trn_cell_establish_intro_get_end_mac_fields(const trn_cell_establish_intro_t *inp); @@ -415,21 +415,21 @@ int trn_cell_intro_established_clear_errors(trn_cell_intro_established_t *obj); /** Return the value of the extensions field of the * trn_cell_intro_established_t in 'inp' */ -struct trn_cell_extension_st * trn_cell_intro_established_get_extensions(trn_cell_intro_established_t *inp); +struct trn_extension_st * trn_cell_intro_established_get_extensions(trn_cell_intro_established_t *inp); /** As trn_cell_intro_established_get_extensions, but take and return * a const pointer */ -const struct trn_cell_extension_st * trn_cell_intro_established_getconst_extensions(const trn_cell_intro_established_t *inp); +const struct trn_extension_st * trn_cell_intro_established_getconst_extensions(const trn_cell_intro_established_t *inp); /** Set the value of the extensions field of the * trn_cell_intro_established_t in 'inp' to 'val'. Free the old value * if any. Steals the referenceto 'val'.Return 0 on success; return -1 * and set the error code on 'inp' on failure. */ -int trn_cell_intro_established_set_extensions(trn_cell_intro_established_t *inp, struct trn_cell_extension_st *val); +int trn_cell_intro_established_set_extensions(trn_cell_intro_established_t *inp, struct trn_extension_st *val); /** As trn_cell_intro_established_set_extensions, but does not free * the previous value. */ -int trn_cell_intro_established_set0_extensions(trn_cell_intro_established_t *inp, struct trn_cell_extension_st *val); +int trn_cell_intro_established_set0_extensions(trn_cell_intro_established_t *inp, struct trn_extension_st *val); #endif diff --git a/src/trunnel/hs/cell_establish_intro.trunnel b/src/trunnel/hs/cell_establish_intro.trunnel index e30938f6c2..b33f8c1c93 100644 --- a/src/trunnel/hs/cell_establish_intro.trunnel +++ b/src/trunnel/hs/cell_establish_intro.trunnel @@ -4,7 +4,7 @@ * specified in proposal 224 section 3.1. */ -extern struct trn_cell_extension; +extern struct trn_extension; const TRUNNEL_SHA3_256_LEN = 32; @@ -19,7 +19,7 @@ struct trn_cell_establish_intro { u8 auth_key[auth_key_len]; /* Extension(s). Reserved fields. */ - struct trn_cell_extension extensions; + struct trn_extension extensions; @ptr end_mac_fields; /* Handshake MAC. */ @@ -37,7 +37,7 @@ struct trn_cell_establish_intro { * to version >= 3. */ struct trn_cell_intro_established { /* Extension(s). Reserved fields. */ - struct trn_cell_extension extensions; + struct trn_extension extensions; }; /* diff --git a/src/trunnel/hs/cell_introduce1.c b/src/trunnel/hs/cell_introduce1.c index 016c9fa8d6..a6873b4199 100644 --- a/src/trunnel/hs/cell_introduce1.c +++ b/src/trunnel/hs/cell_introduce1.c @@ -28,14 +28,14 @@ int cellintroduce_deadcode_dummy__ = 0; } \ } while (0) -typedef struct trn_cell_extension_st trn_cell_extension_t; -trn_cell_extension_t *trn_cell_extension_new(void); -void trn_cell_extension_free(trn_cell_extension_t *victim); -ssize_t trn_cell_extension_parse(trn_cell_extension_t **output, const uint8_t *input, const size_t len_in); -ssize_t trn_cell_extension_encoded_len(const trn_cell_extension_t *obj); -ssize_t trn_cell_extension_encode(uint8_t *output, size_t avail, const trn_cell_extension_t *input); -const char *trn_cell_extension_check(const trn_cell_extension_t *obj); -int trn_cell_extension_clear_errors(trn_cell_extension_t *obj); +typedef struct trn_extension_st trn_extension_t; +trn_extension_t *trn_extension_new(void); +void trn_extension_free(trn_extension_t *victim); +ssize_t trn_extension_parse(trn_extension_t **output, const uint8_t *input, const size_t len_in); +ssize_t trn_extension_encoded_len(const trn_extension_t *obj); +ssize_t trn_extension_encode(uint8_t *output, size_t avail, const trn_extension_t *input); +const char *trn_extension_check(const trn_extension_t *obj); +int trn_extension_clear_errors(trn_extension_t *obj); typedef struct link_specifier_st link_specifier_t; link_specifier_t *link_specifier_new(void); void link_specifier_free(link_specifier_t *victim); @@ -62,7 +62,7 @@ trn_cell_introduce1_clear(trn_cell_introduce1_t *obj) (void) obj; TRUNNEL_DYNARRAY_WIPE(&obj->auth_key); TRUNNEL_DYNARRAY_CLEAR(&obj->auth_key); - trn_cell_extension_free(obj->extensions); + trn_extension_free(obj->extensions); obj->extensions = NULL; TRUNNEL_DYNARRAY_WIPE(&obj->encrypted); TRUNNEL_DYNARRAY_CLEAR(&obj->encrypted); @@ -207,25 +207,25 @@ trn_cell_introduce1_setlen_auth_key(trn_cell_introduce1_t *inp, size_t newlen) TRUNNEL_SET_ERROR_CODE(inp); return -1; } -struct trn_cell_extension_st * +struct trn_extension_st * trn_cell_introduce1_get_extensions(trn_cell_introduce1_t *inp) { return inp->extensions; } -const struct trn_cell_extension_st * +const struct trn_extension_st * trn_cell_introduce1_getconst_extensions(const trn_cell_introduce1_t *inp) { return trn_cell_introduce1_get_extensions((trn_cell_introduce1_t*) inp); } int -trn_cell_introduce1_set_extensions(trn_cell_introduce1_t *inp, struct trn_cell_extension_st *val) +trn_cell_introduce1_set_extensions(trn_cell_introduce1_t *inp, struct trn_extension_st *val) { if (inp->extensions && inp->extensions != val) - trn_cell_extension_free(inp->extensions); + trn_extension_free(inp->extensions); return trn_cell_introduce1_set0_extensions(inp, val); } int -trn_cell_introduce1_set0_extensions(trn_cell_introduce1_t *inp, struct trn_cell_extension_st *val) +trn_cell_introduce1_set0_extensions(trn_cell_introduce1_t *inp, struct trn_extension_st *val) { inp->extensions = val; return 0; @@ -302,7 +302,7 @@ trn_cell_introduce1_check(const trn_cell_introduce1_t *obj) return "Length mismatch for auth_key"; { const char *msg; - if (NULL != (msg = trn_cell_extension_check(obj->extensions))) + if (NULL != (msg = trn_extension_check(obj->extensions))) return msg; } return NULL; @@ -329,8 +329,8 @@ trn_cell_introduce1_encoded_len(const trn_cell_introduce1_t *obj) /* Length of u8 auth_key[auth_key_len] */ result += TRUNNEL_DYNARRAY_LEN(&obj->auth_key); - /* Length of struct trn_cell_extension extensions */ - result += trn_cell_extension_encoded_len(obj->extensions); + /* Length of struct trn_extension extensions */ + result += trn_extension_encoded_len(obj->extensions); /* Length of u8 encrypted[] */ result += TRUNNEL_DYNARRAY_LEN(&obj->encrypted); @@ -394,9 +394,9 @@ trn_cell_introduce1_encode(uint8_t *output, const size_t avail, const trn_cell_i written += elt_len; ptr += elt_len; } - /* Encode struct trn_cell_extension extensions */ + /* Encode struct trn_extension extensions */ trunnel_assert(written <= avail); - result = trn_cell_extension_encode(ptr, avail - written, obj->extensions); + result = trn_extension_encode(ptr, avail - written, obj->extensions); if (result < 0) goto fail; /* XXXXXXX !*/ written += result; ptr += result; @@ -472,8 +472,8 @@ trn_cell_introduce1_parse_into(trn_cell_introduce1_t *obj, const uint8_t *input, memcpy(obj->auth_key.elts_, ptr, obj->auth_key_len); ptr += obj->auth_key_len; remaining -= obj->auth_key_len; - /* Parse struct trn_cell_extension extensions */ - result = trn_cell_extension_parse(&obj->extensions, ptr, remaining); + /* Parse struct trn_extension extensions */ + result = trn_extension_parse(&obj->extensions, ptr, remaining); if (result < 0) goto relay_fail; trunnel_assert((size_t)result <= remaining); @@ -529,7 +529,7 @@ static void trn_cell_introduce_ack_clear(trn_cell_introduce_ack_t *obj) { (void) obj; - trn_cell_extension_free(obj->extensions); + trn_extension_free(obj->extensions); obj->extensions = NULL; } @@ -554,25 +554,25 @@ trn_cell_introduce_ack_set_status(trn_cell_introduce_ack_t *inp, uint16_t val) inp->status = val; return 0; } -struct trn_cell_extension_st * +struct trn_extension_st * trn_cell_introduce_ack_get_extensions(trn_cell_introduce_ack_t *inp) { return inp->extensions; } -const struct trn_cell_extension_st * +const struct trn_extension_st * trn_cell_introduce_ack_getconst_extensions(const trn_cell_introduce_ack_t *inp) { return trn_cell_introduce_ack_get_extensions((trn_cell_introduce_ack_t*) inp); } int -trn_cell_introduce_ack_set_extensions(trn_cell_introduce_ack_t *inp, struct trn_cell_extension_st *val) +trn_cell_introduce_ack_set_extensions(trn_cell_introduce_ack_t *inp, struct trn_extension_st *val) { if (inp->extensions && inp->extensions != val) - trn_cell_extension_free(inp->extensions); + trn_extension_free(inp->extensions); return trn_cell_introduce_ack_set0_extensions(inp, val); } int -trn_cell_introduce_ack_set0_extensions(trn_cell_introduce_ack_t *inp, struct trn_cell_extension_st *val) +trn_cell_introduce_ack_set0_extensions(trn_cell_introduce_ack_t *inp, struct trn_extension_st *val) { inp->extensions = val; return 0; @@ -586,7 +586,7 @@ trn_cell_introduce_ack_check(const trn_cell_introduce_ack_t *obj) return "A set function failed on this object"; { const char *msg; - if (NULL != (msg = trn_cell_extension_check(obj->extensions))) + if (NULL != (msg = trn_extension_check(obj->extensions))) return msg; } return NULL; @@ -604,8 +604,8 @@ trn_cell_introduce_ack_encoded_len(const trn_cell_introduce_ack_t *obj) /* Length of u16 status */ result += 2; - /* Length of struct trn_cell_extension extensions */ - result += trn_cell_extension_encoded_len(obj->extensions); + /* Length of struct trn_extension extensions */ + result += trn_extension_encoded_len(obj->extensions); return result; } int @@ -640,9 +640,9 @@ trn_cell_introduce_ack_encode(uint8_t *output, const size_t avail, const trn_cel trunnel_set_uint16(ptr, trunnel_htons(obj->status)); written += 2; ptr += 2; - /* Encode struct trn_cell_extension extensions */ + /* Encode struct trn_extension extensions */ trunnel_assert(written <= avail); - result = trn_cell_extension_encode(ptr, avail - written, obj->extensions); + result = trn_extension_encode(ptr, avail - written, obj->extensions); if (result < 0) goto fail; /* XXXXXXX !*/ written += result; ptr += result; @@ -687,8 +687,8 @@ trn_cell_introduce_ack_parse_into(trn_cell_introduce_ack_t *obj, const uint8_t * obj->status = trunnel_ntohs(trunnel_get_uint16(ptr)); remaining -= 2; ptr += 2; - /* Parse struct trn_cell_extension extensions */ - result = trn_cell_extension_parse(&obj->extensions, ptr, remaining); + /* Parse struct trn_extension extensions */ + result = trn_extension_parse(&obj->extensions, ptr, remaining); if (result < 0) goto relay_fail; trunnel_assert((size_t)result <= remaining); @@ -733,7 +733,7 @@ static void trn_cell_introduce_encrypted_clear(trn_cell_introduce_encrypted_t *obj) { (void) obj; - trn_cell_extension_free(obj->extensions); + trn_extension_free(obj->extensions); obj->extensions = NULL; TRUNNEL_DYNARRAY_WIPE(&obj->onion_key); TRUNNEL_DYNARRAY_CLEAR(&obj->onion_key); @@ -796,25 +796,25 @@ trn_cell_introduce_encrypted_getconstarray_rend_cookie(const trn_cell_introduce_ { return (const uint8_t *)trn_cell_introduce_encrypted_getarray_rend_cookie((trn_cell_introduce_encrypted_t*)inp); } -struct trn_cell_extension_st * +struct trn_extension_st * trn_cell_introduce_encrypted_get_extensions(trn_cell_introduce_encrypted_t *inp) { return inp->extensions; } -const struct trn_cell_extension_st * +const struct trn_extension_st * trn_cell_introduce_encrypted_getconst_extensions(const trn_cell_introduce_encrypted_t *inp) { return trn_cell_introduce_encrypted_get_extensions((trn_cell_introduce_encrypted_t*) inp); } int -trn_cell_introduce_encrypted_set_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_cell_extension_st *val) +trn_cell_introduce_encrypted_set_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_extension_st *val) { if (inp->extensions && inp->extensions != val) - trn_cell_extension_free(inp->extensions); + trn_extension_free(inp->extensions); return trn_cell_introduce_encrypted_set0_extensions(inp, val); } int -trn_cell_introduce_encrypted_set0_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_cell_extension_st *val) +trn_cell_introduce_encrypted_set0_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_extension_st *val) { inp->extensions = val; return 0; @@ -1066,7 +1066,7 @@ trn_cell_introduce_encrypted_check(const trn_cell_introduce_encrypted_t *obj) return "A set function failed on this object"; { const char *msg; - if (NULL != (msg = trn_cell_extension_check(obj->extensions))) + if (NULL != (msg = trn_extension_check(obj->extensions))) return msg; } if (! (obj->onion_key_type == TRUNNEL_HS_INTRO_ONION_KEY_TYPE_NTOR)) @@ -1099,8 +1099,8 @@ trn_cell_introduce_encrypted_encoded_len(const trn_cell_introduce_encrypted_t *o /* Length of u8 rend_cookie[TRUNNEL_REND_COOKIE_LEN] */ result += TRUNNEL_REND_COOKIE_LEN; - /* Length of struct trn_cell_extension extensions */ - result += trn_cell_extension_encoded_len(obj->extensions); + /* Length of struct trn_extension extensions */ + result += trn_extension_encoded_len(obj->extensions); /* Length of u8 onion_key_type IN [TRUNNEL_HS_INTRO_ONION_KEY_TYPE_NTOR] */ result += 1; @@ -1159,9 +1159,9 @@ trn_cell_introduce_encrypted_encode(uint8_t *output, const size_t avail, const t memcpy(ptr, obj->rend_cookie, TRUNNEL_REND_COOKIE_LEN); written += TRUNNEL_REND_COOKIE_LEN; ptr += TRUNNEL_REND_COOKIE_LEN; - /* Encode struct trn_cell_extension extensions */ + /* Encode struct trn_extension extensions */ trunnel_assert(written <= avail); - result = trn_cell_extension_encode(ptr, avail - written, obj->extensions); + result = trn_extension_encode(ptr, avail - written, obj->extensions); if (result < 0) goto fail; /* XXXXXXX !*/ written += result; ptr += result; @@ -1263,8 +1263,8 @@ trn_cell_introduce_encrypted_parse_into(trn_cell_introduce_encrypted_t *obj, con memcpy(obj->rend_cookie, ptr, TRUNNEL_REND_COOKIE_LEN); remaining -= TRUNNEL_REND_COOKIE_LEN; ptr += TRUNNEL_REND_COOKIE_LEN; - /* Parse struct trn_cell_extension extensions */ - result = trn_cell_extension_parse(&obj->extensions, ptr, remaining); + /* Parse struct trn_extension extensions */ + result = trn_extension_parse(&obj->extensions, ptr, remaining); if (result < 0) goto relay_fail; trunnel_assert((size_t)result <= remaining); diff --git a/src/trunnel/hs/cell_introduce1.h b/src/trunnel/hs/cell_introduce1.h index 8dabff3cb5..ea37502d8e 100644 --- a/src/trunnel/hs/cell_introduce1.h +++ b/src/trunnel/hs/cell_introduce1.h @@ -8,7 +8,7 @@ #include <stdint.h> #include "trunnel.h" -struct trn_cell_extension_st; +struct trn_extension_st; struct link_specifier_st; #define TRUNNEL_SHA1_LEN 20 #define TRUNNEL_REND_COOKIE_LEN 20 @@ -25,7 +25,7 @@ struct trn_cell_introduce1_st { uint8_t auth_key_type; uint16_t auth_key_len; TRUNNEL_DYNARRAY_HEAD(, uint8_t) auth_key; - struct trn_cell_extension_st *extensions; + struct trn_extension_st *extensions; TRUNNEL_DYNARRAY_HEAD(, uint8_t) encrypted; uint8_t trunnel_error_code_; }; @@ -34,7 +34,7 @@ typedef struct trn_cell_introduce1_st trn_cell_introduce1_t; #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_INTRODUCE_ACK) struct trn_cell_introduce_ack_st { uint16_t status; - struct trn_cell_extension_st *extensions; + struct trn_extension_st *extensions; uint8_t trunnel_error_code_; }; #endif @@ -42,7 +42,7 @@ typedef struct trn_cell_introduce_ack_st trn_cell_introduce_ack_t; #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_INTRODUCE_ENCRYPTED) struct trn_cell_introduce_encrypted_st { uint8_t rend_cookie[TRUNNEL_REND_COOKIE_LEN]; - struct trn_cell_extension_st *extensions; + struct trn_extension_st *extensions; uint8_t onion_key_type; uint16_t onion_key_len; TRUNNEL_DYNARRAY_HEAD(, uint8_t) onion_key; @@ -169,21 +169,21 @@ int trn_cell_introduce1_setlen_auth_key(trn_cell_introduce1_t *inp, size_t newle /** Return the value of the extensions field of the * trn_cell_introduce1_t in 'inp' */ -struct trn_cell_extension_st * trn_cell_introduce1_get_extensions(trn_cell_introduce1_t *inp); +struct trn_extension_st * trn_cell_introduce1_get_extensions(trn_cell_introduce1_t *inp); /** As trn_cell_introduce1_get_extensions, but take and return a const * pointer */ -const struct trn_cell_extension_st * trn_cell_introduce1_getconst_extensions(const trn_cell_introduce1_t *inp); +const struct trn_extension_st * trn_cell_introduce1_getconst_extensions(const trn_cell_introduce1_t *inp); /** Set the value of the extensions field of the trn_cell_introduce1_t * in 'inp' to 'val'. Free the old value if any. Steals the * referenceto 'val'.Return 0 on success; return -1 and set the error * code on 'inp' on failure. */ -int trn_cell_introduce1_set_extensions(trn_cell_introduce1_t *inp, struct trn_cell_extension_st *val); +int trn_cell_introduce1_set_extensions(trn_cell_introduce1_t *inp, struct trn_extension_st *val); /** As trn_cell_introduce1_set_extensions, but does not free the * previous value. */ -int trn_cell_introduce1_set0_extensions(trn_cell_introduce1_t *inp, struct trn_cell_extension_st *val); +int trn_cell_introduce1_set0_extensions(trn_cell_introduce1_t *inp, struct trn_extension_st *val); /** Return the length of the dynamic array holding the encrypted field * of the trn_cell_introduce1_t in 'inp'. */ @@ -266,21 +266,21 @@ int trn_cell_introduce_ack_set_status(trn_cell_introduce_ack_t *inp, uint16_t va /** Return the value of the extensions field of the * trn_cell_introduce_ack_t in 'inp' */ -struct trn_cell_extension_st * trn_cell_introduce_ack_get_extensions(trn_cell_introduce_ack_t *inp); +struct trn_extension_st * trn_cell_introduce_ack_get_extensions(trn_cell_introduce_ack_t *inp); /** As trn_cell_introduce_ack_get_extensions, but take and return a * const pointer */ -const struct trn_cell_extension_st * trn_cell_introduce_ack_getconst_extensions(const trn_cell_introduce_ack_t *inp); +const struct trn_extension_st * trn_cell_introduce_ack_getconst_extensions(const trn_cell_introduce_ack_t *inp); /** Set the value of the extensions field of the * trn_cell_introduce_ack_t in 'inp' to 'val'. Free the old value if * any. Steals the referenceto 'val'.Return 0 on success; return -1 * and set the error code on 'inp' on failure. */ -int trn_cell_introduce_ack_set_extensions(trn_cell_introduce_ack_t *inp, struct trn_cell_extension_st *val); +int trn_cell_introduce_ack_set_extensions(trn_cell_introduce_ack_t *inp, struct trn_extension_st *val); /** As trn_cell_introduce_ack_set_extensions, but does not free the * previous value. */ -int trn_cell_introduce_ack_set0_extensions(trn_cell_introduce_ack_t *inp, struct trn_cell_extension_st *val); +int trn_cell_introduce_ack_set0_extensions(trn_cell_introduce_ack_t *inp, struct trn_extension_st *val); /** Return a newly allocated trn_cell_introduce_encrypted with all * elements set to zero. */ @@ -347,21 +347,21 @@ const uint8_t * trn_cell_introduce_encrypted_getconstarray_rend_cookie(const tr /** Return the value of the extensions field of the * trn_cell_introduce_encrypted_t in 'inp' */ -struct trn_cell_extension_st * trn_cell_introduce_encrypted_get_extensions(trn_cell_introduce_encrypted_t *inp); +struct trn_extension_st * trn_cell_introduce_encrypted_get_extensions(trn_cell_introduce_encrypted_t *inp); /** As trn_cell_introduce_encrypted_get_extensions, but take and * return a const pointer */ -const struct trn_cell_extension_st * trn_cell_introduce_encrypted_getconst_extensions(const trn_cell_introduce_encrypted_t *inp); +const struct trn_extension_st * trn_cell_introduce_encrypted_getconst_extensions(const trn_cell_introduce_encrypted_t *inp); /** Set the value of the extensions field of the * trn_cell_introduce_encrypted_t in 'inp' to 'val'. Free the old * value if any. Steals the referenceto 'val'.Return 0 on success; * return -1 and set the error code on 'inp' on failure. */ -int trn_cell_introduce_encrypted_set_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_cell_extension_st *val); +int trn_cell_introduce_encrypted_set_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_extension_st *val); /** As trn_cell_introduce_encrypted_set_extensions, but does not free * the previous value. */ -int trn_cell_introduce_encrypted_set0_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_cell_extension_st *val); +int trn_cell_introduce_encrypted_set0_extensions(trn_cell_introduce_encrypted_t *inp, struct trn_extension_st *val); /** Return the value of the onion_key_type field of the * trn_cell_introduce_encrypted_t in 'inp' */ diff --git a/src/trunnel/hs/cell_introduce1.trunnel b/src/trunnel/hs/cell_introduce1.trunnel index 5911c695a2..6682227b44 100644 --- a/src/trunnel/hs/cell_introduce1.trunnel +++ b/src/trunnel/hs/cell_introduce1.trunnel @@ -5,7 +5,7 @@ */ /* From cell_common.trunnel. */ -extern struct trn_cell_extension; +extern struct trn_extension; /* From ed25519_cert.trunnel. */ extern struct link_specifier; @@ -38,7 +38,7 @@ struct trn_cell_introduce1 { u8 auth_key[auth_key_len]; /* Extension(s). Reserved fields. */ - struct trn_cell_extension extensions; + struct trn_extension extensions; /* Variable length, up to the end of cell. */ u8 encrypted[]; @@ -50,7 +50,7 @@ struct trn_cell_introduce_ack { u16 status; /* Extension(s). Reserved fields. */ - struct trn_cell_extension extensions; + struct trn_extension extensions; }; /* Encrypted section of the INTRODUCE1/INTRODUCE2 cell. */ @@ -59,7 +59,7 @@ struct trn_cell_introduce_encrypted { u8 rend_cookie[TRUNNEL_REND_COOKIE_LEN]; /* Extension(s). Reserved fields. */ - struct trn_cell_extension extensions; + struct trn_extension extensions; /* Onion key material. */ u8 onion_key_type IN [TRUNNEL_HS_INTRO_ONION_KEY_TYPE_NTOR]; diff --git a/src/trunnel/include.am b/src/trunnel/include.am index 6c3a5ff06b..b2aee81da9 100644 --- a/src/trunnel/include.am +++ b/src/trunnel/include.am @@ -8,24 +8,29 @@ endif TRUNNELINPUTS = \ src/trunnel/ed25519_cert.trunnel \ + src/trunnel/extension.trunnel \ src/trunnel/link_handshake.trunnel \ src/trunnel/pwbox.trunnel \ src/trunnel/channelpadding_negotiation.trunnel \ src/trunnel/sendme_cell.trunnel \ + src/trunnel/flow_control_cells.trunnel \ + src/trunnel/congestion_control.trunnel \ src/trunnel/socks5.trunnel \ src/trunnel/circpad_negotiation.trunnel TRUNNELSOURCES = \ src/ext/trunnel/trunnel.c \ src/trunnel/ed25519_cert.c \ + src/trunnel/extension.c \ src/trunnel/link_handshake.c \ src/trunnel/pwbox.c \ - src/trunnel/hs/cell_common.c \ src/trunnel/hs/cell_establish_intro.c \ src/trunnel/hs/cell_introduce1.c \ src/trunnel/hs/cell_rendezvous.c \ src/trunnel/channelpadding_negotiation.c \ src/trunnel/sendme_cell.c \ + src/trunnel/flow_control_cells.c \ + src/trunnel/congestion_control.c \ src/trunnel/socks5.c \ src/trunnel/netinfo.c \ src/trunnel/circpad_negotiation.c @@ -35,14 +40,16 @@ TRUNNELHEADERS = \ src/ext/trunnel/trunnel-impl.h \ src/trunnel/trunnel-local.h \ src/trunnel/ed25519_cert.h \ + src/trunnel/extension.h \ src/trunnel/link_handshake.h \ src/trunnel/pwbox.h \ - src/trunnel/hs/cell_common.h \ src/trunnel/hs/cell_establish_intro.h \ src/trunnel/hs/cell_introduce1.h \ src/trunnel/hs/cell_rendezvous.h \ src/trunnel/channelpadding_negotiation.h \ src/trunnel/sendme_cell.h \ + src/trunnel/flow_control_cells.h \ + src/trunnel/congestion_control.h \ src/trunnel/socks5.h \ src/trunnel/netinfo.h \ src/trunnel/circpad_negotiation.h diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h index 6c8997e5fb..ee03f6340e 100644 --- a/src/win32/orconfig.h +++ b/src/win32/orconfig.h @@ -217,7 +217,7 @@ #define USING_TWOS_COMPLEMENT /* Version number of package */ -#define VERSION "0.4.6.10-dev" +#define VERSION "0.4.7.5-alpha-dev" #define HAVE_STRUCT_SOCKADDR_IN6 #define HAVE_STRUCT_IN6_ADDR |